ここでは、Visualforceページを使用してバーコードを読み取る方法を説明します。バーコードの読み取りにはスマートフォンのカメラを使うため、作成したVisualforceページは専用のスマートフォンアプリから表示して使用します。このVisualforceページをPC(Mac)のブラウザーやSalesforceアプリから表示した場合は動作しません。
次の知識が必要です。
バーコード読み取り画面の開発手順は次のようになります。
実際の開発例は、このページのチュートリアルを参照してください。
まずは1回の読み取り操作で1つのバーコードを読み取り、結果をVisualforceページに表示する最小の例を紹介します。
// Tutorial1Controller.cls
public with sharing class Tutorial1Controller {
// 読み取り成結果を格納するSingleScanResultプロパティ
public string SingleScanResult {get;set;}
// 読み取り成結果を表示する要求に対して読み取り成結果を返す
public string getSingleScanOutputMessage() {
return this.SingleScanResult;
}
}
<!-- GrapeCity Barcode for Salesforce バーコード読み取り サンプルコード -->
<!-- Tutorial1.vfp -->
<apex:page controller="Tutorial1Controller">
<!-- Lightning Design Systemを有効にする -->
<apex:slds />
<!-- 見出しを表示する -->
<apex:sectionHeader title="バーコードの読み取り"/>
<!-- 読み取りボタンを表示する -->
<gcbc:GcBarcodeScannerVF
id="scanButton"
buttonText="読み取り開始"
continuousScan="false"
reRender="singleScanOutput"
scanResults="{!SingleScanResult}"
styleClass="slds-button slds-button--brand slds-m-top--medium"
style="width:200px;" />
<!-- 結果の表示領域 -->
<apex:outputPanel id="singleScanOutput" layout="block">
{!SingleScanOutputMessage}
</apex:outputPanel>
</apex:page>
動作を確認します。次の手順で、この画面に表示されている次のQRコードを読み取れるか確認してください。
次に、読み取り成った結果をSalesforce上のデータと照合し、結果を返します。ここでは、「日本株式会社」という名前の取引先のレコードが存在していると仮定し、「日本株式会社」という値を持つQRコードを読み取った場合に成功、それ以外の名前を読み取った場合にエラーとします。
下記のコードではAccountsが取引先を示します。必要に応じて、他のオブジェクトに書き換えたり、「日本株式会社」を既存の別の名前に変更したりして試してください。
// Tutorial2Controller.cls
public with sharing class Tutorial2Controller {
// 読み取り成結果を格納するSingleScanResultプロパティ
public string SingleScanResult {get;set;}
// 読み取り成結果を表示する要求に対して読み取り成結果を返す
public string getSingleScanOutputMessage() {
string result = "存在しません";
string accountName = this.SingleScanResult;
Account[] accounts = [SELECT Name, Phone FROM ACCOUNT WHERE Name=:accountName LIMIT 1];
if (accounts.size() > 0) {
result = "存在します";
}
return result;
// return EncodingUtil.urlDecode(this.SingleScanResult, 'UTF-8');
}
}
<!-- GrapeCity Barcode for Salesforce バーコード読み取り サンプルコード -->
<!-- Tutorial2.vfp -->
<apex:page controller="Tutorial1Controller">
<!-- Lightning Design Systemを有効にする -->
<apex:slds />
<!-- 見出しを表示する -->
<apex:sectionHeader title="バーコードの読み取り"/>
<!-- 読み取りボタンを表示する -->
<gcbc:GcBarcodeScannerVF
id="scanButton"
buttonText="読み取り開始"
continuousScan="false"
reRender="singleScanOutput"
scanResults="{!SingleScanResult}"
styleClass="slds-button slds-button--brand slds-m-top--medium"
style="width:200px;" />
<!-- 結果の表示領域 -->
<apex:outputPanel id="singleScanOutput" layout="block">
{!SingleScanOutputMessage}
</apex:outputPanel>
</apex:page>
動作を確認します。次の1つ目のQRコードは「日本株式会社」、2つ目のQRコードは「米国株式会社」という値を表します。
チュートリアル2では、1回の読み取り操作ごとに「読み取り開始」ボタンをタップする必要がありました。複数のQRコードを連続してスキャンしたい場合、これでは不便なのでチュートリアル3では連続スキャンを実装します。
連続読み取りを有効にするには、gcbc:GcBarcodeScannerVFコンポーネントのcontinuousScan属性をtrueに設定します。さらにcontinuousScanCallback属性により、連続でバーコードを読み取る場合の操作を制御するコールバックを指定します。
<!-- GrapeCity Barcode for Salesforce バーコード読み取り サンプルコード -->
<!-- Tutorial3.vfp -->
<apex:page controller="Tutorial1Controller">
<!-- Lightning Design Systemを有効にする -->
<apex:slds />
<!-- 見出しを表示する -->
<apex:sectionHeader title="バーコードの読み取り"/>
<!-- 読み取りボタンを表示する -->
<gcbc:GcBarcodeScannerVF
id="scanButton"
buttonText="連続読み取り開始"
continuousScan="true"
continuousScanCallback=""
reRender="singleScanOutput"
scanResults="{!SingleScanResult}"
styleClass="slds-button slds-button--brand slds-m-top--medium"
style="width:200px;" />
<!-- 結果の表示領域 -->
<apex:outputPanel id="singleScanOutput" layout="block">
{!SingleScanOutputMessage}
</apex:outputPanel>
</apex:page>
属性名 | 属性型 | 既定値 | 説明 |
---|---|---|---|
buttonText | String | Empty(空文字) | ボタンのキャプション。たとえば「読み取り開始」と指定します。 |
continuousScan | Boolean | false | 連続でバーコードを読み取る場合true、それ以外の場合false。falseの場合、アプリはバーコードが見つかった後にスキャンウィンドウからページに戻ります。 trueの場合、アプリはバーコードを検出した後にcontinuousScanCallbackを呼び出します。 continuousScanCallbackがBarcodeScanResponse::shouldContinueScanプロパティがtrueのBarcodeScanResponseを返す場合、Webページに戻る代わりに、バーコードが見つかった後にスキャンウィンドウに残り、一定の間隔の後に他のバーコードを検索し、ユーザーがキャンセルするまで スキャン、またはcontinuousScanCallbackは、BarcodeScanResponse::shouldContinueScanプロパティがfalseであるBarcodeScanResponseを返します。 |
continuousScanCallback | String | Empty(空文字) | 連続でバーコードを読み取る場合の操作を制御するコールバック。 このWebサービスのリクエスト本体は、次のようなコードでBarcodeScanDataに変換できる文字列になります。: (BarcodeScanData)JSON.deserialize(RestContext.request.requestBody.toString(), BarcodeScanData.class);応答はBarcodeResponseScanオブジェクトとする。 ジョブを実行するメソッドは、processBarcodeContinuousScanという名前にする必要があります。 processBarcodeContinuousScanの署名は次のようになります。: global static BarcodeScanResponse processBarcodeContinuousScan() |
id | String | Empty(空文字) | コンポーネントを識別するためのID。 |
onScanComplete | String | Empty(空文字) | スキャンが完了したときのアクションハンドラー。 このアクションを使用して、スキャン結果を処理します。 このサーバー側コントローラー・ハンドラーは、バーコードが記録された後に呼び出されます。 このメソッドでは、サーバー側でデータを更新したり、新しいページにジャンプしたりすることができます。 |
reRender | String | Empty(空文字) | バーコードが検知された後に更新される、このページ内のセクションを指定します。 |
scanResults | String | Empty(空文字) | バーコードが見つかったときにスキャン結果を受け入れるページコントローラーのプロパティ。 連続スキャンの場合、結果はコンマ(,)で区切られます。読み取りデータに含まれるコンマ(,)は「%2C」として返ります。 |
scannedTypes | String | Empty(空文字) | スキャンした各結果のタイプを格納します。複数のタイプはコンマで区切られます。 |
styleClass | String | Empty(空文字) | ボタンに適用するCSSのクラス名。たとえばVisualforceページにLightning Design Systemなどのスタイルシートを適用しているとき、そのスタイルシートのクラス名を指定できます。 |
style | String | Empty(空文字) | ボタンに直接適用するCSS。たとえばボタンのサイズを指定します。 |
コールバックで使用するデータフォーマットです。
属性名 | 属性型 | 説明 |
---|---|---|
displayMessage | String | スキャナー画面に表示される文字列メッセージ。 |
notifyErrorFeedback | Boolean | エラーのフィードバックの有無を指定します。trueのときデバイスでビープ音を再生します。falseのときビープ音を再生しません。実際にビープ音が再生されるかどうかは、スマートフォンの設定により異なります。たとえばマナーモードに設定されている場合、再生されない場合があります。 |
preserveScanResult | Boolean | trueは現在のスキャンが成功したことを示し、それ以外の場合はfalseを示します。 スキャンが成功すると、現在のスキャン結果が履歴データに保存されます。 |
shouldContinueScan | Boolean | trueは、別のスキャンを続行することを示し、それ以外の場合はfalseを示します。 |
Data for callback service.
属性名 | 属性型 | 説明 |
---|---|---|
preservedScannedContent | String[] | 保存されているすべてのスキャンデータの内容を示します。 |
preservedScannedType | String[] | 保存されたすべてのスキャンされたバーコードタイプリストを示します。 |
scannedResult | String | 現在のスキャン結果を示します。 |
scannedType | String | 現在のスキャンタイプを示します。 |
preservedScannedTypeまたはscannedTypeには、読み取ったバーコードや二次元コードをもとに次の値が格納されます。