Anleitung zum iCody-Callback-Scripting

Mit Version 1.7 wurde in iCody die icody:-Callback-Scripting-Schnittstelle eingeführt, die es erlaubt, iCody als universellen Barcode-Reader für eine Vielzahl anderer Apps und sogar Websites auf dem iPhone und iPod touch einzusetzen, sofern sie das icody:-Protokoll unterstützen.

Live-Demo-Website für das Callback-Scripting

Das icody:-Protokoll basiert auf einem URL-Aufruf, der folgendem Muster folgt:

icody://<Befehl>?callback=<Callback-Funktionsaufruf>

Erläuterungen:

<Befehl>
scan

 

Der Funktionsaufruf muss als gültige URL aufgebaut und “URL-encoded”, also ein gültiger GET-Parameter, sein. Er wird nach dem erfolgreichen Scan von iCody mittels der openURL-Methode aufgerufen.

<Callback-Funktionsaufruf>

Innerhalb des Funktionsaufrufes sind folgende Platzhalter zulässig und werden von iCody automatisch vor dem Aufruf ersetzt:

###barcode###

 

Der Wert des gescannten Barcodes

###type###

 

Der Barcode-Typ als String-Wert

###typeID###

 

Die eindeutige Barcode-Typ-ID

###location###

 

Die Scan-Koordinaten, falls aktiviert

###date###

 

Datum und Uhrzeit des Scans

Beispiel: Filemaker GO

Um mit Filemaker Go iCody nutzen zu können, werden in Filemaker zwei neue Skripte angelegt, wobei das erste Skript für den Aufruf von iCody verantwortlich ist und typischerweise einem Button zugeordnet wird, und das zweite Skript den Callback-Aufruf von iCody verarbeitet und mit einem Feld verknüpft ist, das durch dieses Skript gefüllt wird.

Zu beachten ist, dass es zwei Möglichkeiten gibt, die Daten von iCody entgegen zu nehmen und im Script zu verwenden. Im Folgenden wird der einfache Weg gezeigt, der “nur” den Barcode-Wert, nicht jedoch die zusätzlichen Informationen wie Typ, Ort und Scandatum verarbeitet. Den “komplizierteren” Ansatz finden Sie in der Demo-Datei, die Sie hier herunter laden können.

Demo-FM7-Datei für das Callback-Scripting mit iCody (kostenloser Download)

1. Skript: Befehl “URL öffnen”

skript1a

skript1b

Der URL-Wert in diesem Beispiel zeigt folgenden Wert (mit und ohne Escapes – es muss aber der Wert mit Escapes verwendet werden):

icody://scan?callback=fmp7script%3A//%24/" & Hole ( DateiName ) & "%3Fscript%3Dscan%26param%3D%23%23%23barcode%23%23%23
icody://scan?callback=fmp7script://$/" & Hole ( DateiName ) & "?script=scan&param=###barcode###

Dieser Aufruf verwendet die fmp7script:-URI, die auch für Filemaker GO verwendbar ist. Der Übergabeparameter “script=scan” bezeichnet das Callback-Skript, das im Folgenden beschrieben wird. Diesem Skript wird mit “&param=###barcode###” der Wert des gescannten Barcodes als Parameter übergeben.

Wichtig 1: Seit Filemaker 12 heißt das URL-Schema anders: Bitte verwenden Sie in diesen Versionen fmp:// anstelle fmp7script://.

Wichtig 2: Der Befehl “& Hole( DateiName ) &” fügt den Dateinamen der fm7-Datei ein, ohne den der Callback nicht funktionieren würde. Natürlich kann der Wert auch fest eingegeben werden. Dieser Befehl gehört nicht zur Callback-URL, sondern ist ein Filemaker-Befehl. Aber Achtung: Der Dateiname darf, wenn “Hole()” verwendet wird, keine Leer- oder Sonderzeichen enthalten, andernfalls muss er “URL-encoded” werden, denn sonst schlägt der Callback fehl. Im Ergebnis muss alles nach dem callback= URL encoded sein.

Wichtig 3: Der Scriptname (nach scan=) darf keine Leerzeichen, auch nicht “URL-encoded”, enthalten.

Sie können dieses Skript einem Button zuweisen:

skript1c

2. Skript:

Das zweite Skript nimmt den gescannten Barcode aus dem Callback entgegen und weist ihn einem  beliebigen Feld zu:

skript2

Mit der Funktion “Hole ( ScriptParameter )” wird der über den Callback zurück gegebene Wert des gescannten Barcodes geholt und dem Feld “Inventar::Laufende_Nummer” zugewiesen.

Beispiel: Website

Das folgende Code-Beispiel verdeutlich die Implementierung eines Callbacks mit einem php-Skript, das hier als Live-Demo getestet werden kann:

<?php
$barcode = $_REQUEST['barcode'];
$type = $_REQUEST['type'];
$date = $_REQUEST['date'];
$location = $_REQUEST['location'];
echo '<' . '?xml version="1.0" encoding="UTF-8" ?' . '>';
?>
<base href="mobile/">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.6">
<meta name="apple-mobile-web-app-capable" content="YES">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>iCody Scripting</title>
</head>
<body>
	<h1>iCody Scripting Sample</h1>
	<table width="100%%" border="0" cellspacing="0" cellpadding="3">
		  <caption>
		    <h3 align="left">Values</h3>
		  </caption>
		  <tr>
		    <th scope="row"><div align="left">Barcode:</div></th>
		    <td><input id="textField" type="text" name="" value="<?php echo $barcode;?>"></td>
		  </tr>
		  <tr>
		    <th scope="row"><div align="left">Type:</div></th>
		    <td><input id="textField2" type="text" name="" value="<?php echo $type;?>"></td>
		  </tr>
		  <tr>
		    <th scope="row"><div align="left">Date:</div></th>
		    <td><input id="textField3" type="text" name="" value="<?php echo $date;?>"></td>
		  </tr>
		  <tr>
		    <th scope="row"><div align="left">Location:</div></th>
		    <td><input id="textField4" type="text" name="" value="<?php echo $location;?>"></td>
		  </tr>
		  <tr>
		    <th scope="row"><p>&nbsp;</p></th>
		    <input id="scan" name="" value="Scan Barcode" onclick="window.location='icody://scan?callback=http%3A//www.appthology.net/icodyscripting%3Fbarcode%3D%23%23%23barcode%23%23%23%26type%3D%23%23%23type%23%23%23%26date%3D%23%23%23date%23%23%23%26location%3D%23%23%23location%23%23%23';" type="button">
		</tr>
	</table>
</body>
</html>