ここでは、Visualforceを使ってバーコードの読み取るVisualforceページを作る方法について説明します。作成したバーコードの読み取り画面は、Salesforceモバイルアプリケーションから表示して使用します。このVisualforceページをブラウザーから表示した場合は、読み取りボタンが無効となり、ユーザーは操作できません。
次の知識が必要です。
ここではユーザーが「読み取り開始」ボタンをタップしてから1個のバーコードを読み取る方法を説明します。複数のバーコードがあるとき、ユーザーはバーコードの個数と同じ回数だけ「読み取り開始」ボタンをタップします。
1回の操作で複数のバーコードを連続して読み取るには、WebServiceを使った連続読み取り機能の開発を参照してください。
バーコード読み取り画面の開発手順は次のようになります。
ここでは1回の読み取り操作で1つのバーコードを読み取り、結果をVisualforceページに表示する最小の例を紹介します。
まずは読み取り結果を受け取るコントローラーを作成します。
// Tutorial1Controller.cls
public with sharing class Tutorial1Controller {
// 読み取り結果を格納するSingleScanResultプロパティ
public string singleScanResult {get;set;}
// 読み取り結果を表示する要求に対して読み取り結果を返す
public string getSingleScanOutputMessage() {
// 読み取り結果に値が存在する場合
if (this.singleScanResult != null) {
// UTF-8でURLエンコードした結果を返す
return EncodingUtil.urlDecode(this.singleScanResult, 'UTF-8');
}
return this.singleScanResult;
}
}
次に「読み取り開始」ボタンを置く画面となるVisualforceページ「Tutorial1.vfp」を作成します。 この画面は「読み取り開始」ボタンと「読み取り結果の表示領域」を持ちます。
後述の「Tutorial1.vfp」を貼り付ける。
<!-- RayBarcode バーコード読み取り サンプルコード -->
<!-- Tutorial1.vfp -->
<apex:page controller="Tutorial1Controller">
<!-- Lightning Design Systemを有効にする -->
<apex:slds />
<!-- 見出しを表示する -->
<apex:sectionHeader title="チュートリアル1"/>
<!-- 読み取りボタンを表示する -->
<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>
Visualforceページの「Lightning Experience、Lightning コミュニティ、およびモバイルアプリケーションで利用可能」をチェックをオンにする。
「保存」ボタンをクリックする。
Visualforceページの作成中に画面をプレビューすることができます。 ここで「プレビュー」ボタンをクリックすると、「読み取り開始」ボタンが表示されます。 ただし、ブラウザーではこのボタンをクリックすることはできません。
Salesforceモバイルアプリケーションから表示できるように、タブをナビゲーションメニューに構成する。
Salesforce Classicの場合:
Lightning Experienceの場合:
動作を確認します。
次の手順で、このページに表示されているQRコードを読み取れるか確認してください。なお、このQRコードはUTF-8でエンコードされています。
次に、読み取った結果をSalesforce上のデータと照合し、結果を返します。ここでは、「日本株式会社」という名前の取引先のレコードが存在していると仮定し、「日本株式会社」という値を持つQRコードを読み取った場合に成功、それ以外の名前を読み取った場合にエラーとします。読み取りに成功した場合は、電話番号も表示します。
下記のコードでは「Accounts」が「取引先」を示します。必要に応じて、他のオブジェクトのAPI名に書き換えたり、「日本株式会社」を既存の別の名前に変更したりして試してください。
// Tutorial2Controller.cls
public with sharing class Tutorial2Controller {
// 読み取り結果を格納するSingleScanResultプロパティ
public string singleScanResult {get;set;}
// 読み取り結果を表示する要求に対して読み取り結果を返す
public string getSingleScanOutputMessage() {
string result = '存在しません';
// 読み取り結果に値が存在する場合
if (this.singleScanResult != null) {
string accountName = EncodingUtil.urlDecode(this.singleScanResult, 'UTF-8');
// 読み取った値に一致する最初の1件の
// 取引先名と電話番号を「取引先」から取得する
if (!Schema.Account.getSObjectType().getDescribe().isAccessible()){
return result;
}
Account[] accounts = [SELECT Name, Phone FROM ACCOUNT WHERE Name=:accountName LIMIT 1];
// 0件以上の結果がある場合
if (accounts.size() > 0) {
result = '存在します。電話番号は' + accounts[0].Phone;
}
}
return result;
}
}
次に「読み取り開始」ボタンを置く画面となるVisualforceページ「Tutorial2.vfp」を作成します。この画面は「読み取り開始」ボタンと「読み取り結果の表示領域」を持ちます。
<!-- RayBarcode バーコード読み取り サンプルコード -->
<!-- Tutorial2.vfp -->
<apex:page controller="Tutorial2Controller">
<!-- Lightning Design Systemを有効にする -->
<apex:slds />
<!-- 見出しを表示する -->
<apex:sectionHeader title="チュートリアル2"/>
<!-- 読み取りボタンを表示する -->
<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>
Salesforceモバイルアプリケーションにログインし、ナビゲーションメニューから「チュートリアル2」をタップして動作を確認します。次の1つ目のQRコードは「日本株式会社」、2つ目のQRコードは「米国株式会社」という値を表します。
gcbc:GcBarcodeScannerVFコンポーネントの属性については、こちらを参照してください。
Copyright © 2024 MESCIUS inc. All rights reserved.