Capturing And Storing Signature to Rhom In Rhomobile Application

Introduction:- 
Rhomobile has the ability to capture signature using the Signature API. Signature can be captured in two ways,
1. Full Screen Mode
2. Inline Mode
Note : From Rhodes 3.3.3 onwards, the inline mode has been moved on to RhoElement Vs 2 which is a paid version and requires a license to use it.

Description:- 
To use the Signature API, first, we need to add the camera capability in Build.yml,
capabilities:   Camera

Next, on the controller, we need to call the take method of Signature Capture API to show the pre-defined view to capture the signature,

Rho::SignatureCapture.take(
url_for( :action => :signature_callback, :query => { :id => order_id }),
{
:imageFormat => "jpg",
:penColor => 0x000000,
:penWidth=> 5,
:border => true,
:bgColor => 0xF3F0EB
}
)

The SignatureCapture API takes below parameters,

Parameter Allowed Values Default Value Notes
imageFormat jpg, png, bmp jpg Windows – only bmpBlackberry – only png
penColor Any Hex Code 0x000000
penWidth Integer 1
bgColor Any Hex Code 0xFFFFFF
border true, false false

When the user clicks the use button, the callback method is called, and the captured signature image is passed on as parameters. This method is described as below,

def signature_callback

message = "Signature not recieved"
if @params['status'] == 'ok'

begin
order_record = Order.find(@params["id"])
raise "Exception Occured : Record for Order with id as "<a href="mailto:+@params[&quot;id">+@params["id</a>"]+" not found" unless
order_id = order_record.id
file_name = @params['signature_uri'].to_s().split("/")[2]

# Create signature record in the DB
record = {
:signature_uri => @params['signature_uri'],
:order_id => order_id,
:filename => file_name.to_s
}
signature = Signature.create(record)

# Move the file to base app path
file_path = File.join(Rho::RhoApplication::get_blob_path(@params['signature_uri']))
file_content = File.binread(file_path)
new_file_path = File.join(Rho::RhoApplication::get_base_app_path(), file_name)
f = File.new(new_file_path, "wb")
f.write(file_content)
f.close
message = "Signature recieved successfully"
rescue Exception => e
# Error handling
end

end

WebView.navigate( url_for :controller => :Order, :action => :show, :query=> { :id => @params["id"], :message => message } )

end

That’s how the Rhomobile Signature API is used to capture the user signature and store it to database.

Written By: Ashis Kumar, Software Developer, Mindfire Solutions

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s