プロセスビルダーで読み取りアプリを作る

SalesforceのプロセスビルダーとRayBarcodeを使うと、ノーコード、つまりApexでプログラミングせずにバーコードの読み取りアプリを開発できます。この方法では「RayKit」アプリからの読み取り結果がSalesforceに格納され、プロセスビルダーで任意のアクションを実行できます。この機能はv3の新機能です。

重要:以下の手順にはSalesforce組織の設定変更が含まれます。本番環境に適用する前に、まずはDeveloper EditionやSandboxで試してください。

前提

次の知識が必要です。

  • Salesforceのプロセスビルダーの使い方
  • カスタムメタデータ型へのレコードの追加
  • カスタムオブジェクトに格納されたレコードの取り出し

参考:

プロセスビルダーのための読み取り画面はLightning Componentとして提供されているため、利用する環境ではSalesforceの「私のドメイン」をリリースする必要があります。

「私のドメイン」が有効になっていない場合、次の手順に沿って有効化してください。

「私のドメイン」を有効化できない場合、将来のVisualforceベースの読み取り画面の提供をお待ちください。

なお、「私のドメイン」を有効化する前にRayBarcodeをSalesforceにインストールしていると、後述の「GCBarcode Scanner」が表示されません。この場合は、次の手順を実行します。

Salesforce Classicの場合:

  1. 「設定 > 管理 > ユーザの管理 > プロファイル」を開く。
  2. 使用しているユーザのプロファイル名をクリックし、「プロファイルの概要」を開く。
  3. 「アプリケーション」セクションにある「オブジェクト設定」をクリックする。
  4. 「すべてのオブジェクト設定」の一覧で「GCBarcode Scanner」をクリックする。
  5. 「タブの設定」が「タブを隠す」または「デフォルトで非表示」になっている場合、「編集」をクリックして「デフォルトで表示」に変更し保存する。

Lightning Experienceの場合:

  1. 歯車アイコンをクリックした後、「設定 > 管理 > ユーザ > プロファイル」を開く。
  2. 使用しているユーザのプロファイル名をクリックし、「プロファイルの概要」を開く。
  3. 「アプリケーション」セクションにある「オブジェクト設定」をクリックする。
  4. 「すべてのオブジェクト設定」の一覧で「GCBarcode Scanner」をクリックする。
  5. 「タブの設定」が「タブを隠す」または「デフォルトで非表示」になっている場合、「編集」をクリックして「デフォルトで表示」に変更し保存する。

または、RayBarcodeをアンインストールした後、再度インストールします。

プロセスビルダーを使った読み取り操作の流れ

ユーザによるスマートフォンを使った読み取り操作と、システム管理者による読み取り処理のカスタマイズは次の流れで使用できます。

  1. ユーザがスマートフォンのホーム画面から「RayKit」アプリを起動する。
  2. 「RayKit」アプリにSalesforceのログイン画面が表示される。
  3. Salesforce1のメニューから「GcBarcode Scanner」をタップする。
  4. バーコード読み取り用のカメラ画面が表示される。
  5. カメラ画面を通してバーコードを読み取る。
  6. システム管理者が事前にカスタムメタデータ型「BarcodeScanProcessRule」のルールで処理を定義できる。カスタムメタデータ型のルールに一致しないとき、レコードIDとして処理される。
  7. カスタムオブジェクト「BarcodeScanResult」に読み取り結果のレコードが追加される。
  8. システム管理者が事前にプロセスビルダーで「BarcodeScanResult」に追加されたレコードの処理方法を定義できる。
  9. 「GcBarcode Scanner」アプリが「BarcodeScanResult」の「JumpToRecordId」カスタム項目に格納されたIDのレコードを表示する。
sequenceDiagram participant ユーザ participant RayKitアプリ participant Salesforce ユーザ->>RayKitアプリ: スマートフォンでアプリを起動 Salesforce->>ユーザ: Salesforceログイン画面を表示 ユーザ->>RayKitアプリ: Salesforceにログイン Salesforce->>ユーザ: Salesforce1のホーム画面を表示 ユーザ->>RayKitアプリ: Salesforce1上の「GcBarcode Scanner」を開く RayKitアプリ->>ユーザ: カメラ画面を表示 ユーザ->>RayKitアプリ: カメラでバーコードを読み取り RayKitアプリ->>Salesforce: 読み取ったデータをSalesforceに渡す Salesforce-->RayKitアプリ: 読み取ったデータをルールで判定 Salesforce-->RayKitアプリ: 読み取ったデータをレコードに保存 Salesforce-->RayKitアプリ: プロセスビルダーでレコードを処理 Salesforce->>ユーザ: 「JumpToRecordId」のレコードを表示

アプリの構成

まず、プロセスビルダーのためのアプリをスマートフォンの「RayKitアプリ」から表示できるようにします。

次の手順でSalesforce1のナビゲーションメニューに「GCBarcode Scanner」Lightningアプリを追加します。

Salesforce Classicの場合:

  1. 「設定 > 管理 > モバイル管理 > Salesforce ナビゲーション」を開く。
  2. 「選択可能」リストから「GCBarcode Scanner」を見つける。
  3. 右向きの三角形アイコンをクリックして、「GCBarcode Scanner」を「選択済み」に移動する。
  4. 「選択済み」リストで上向きの三角形アイコンをクリックして「GCBarcode Scanner」を一番上に移動する。
  5. 「保存」をクリックする。

Lightning Experienceの場合:

  1. 歯車アイコンをクリックした後、「設定 > プラットフォームツール > アプリケーション > モバイルアプリケーション > Salesforce > Salesforce ナビゲーション」を開く。
  2. 「選択可能」リストから「GCBarcode Scanner」を見つける。
  3. 右向きの三角形アイコンをクリックして、「GCBarcode Scanner」を「選択済み」に移動する。
  4. 「選択済み」リストで上向きの三角形アイコンをクリックして「GCBarcode Scanner」を一番上に移動する。
  5. 「保存」をクリックする。

動作を確認します。

まず、サンプルページを使って「取引先」の任意のレコードのIDからQRコードを作成します。適当な取引先レコードを1件開き、ブラウザのアドレスバーからレコードIDをコピーします。

Salesforce Classicの場合:

https://[YOUR INSTANCE or CUSTOM DOMAIN].my.salesforce.com/[レコードID]

Lightning Experienceの場合:

https://[YOUR INSTANCE or CUSTOM DOMAIN].lightning.force.com/one/one.app?source=aloha#/sObject/[レコードID]/view

次にブラウザで新しいタブを開き、次のURLのバーコード生成サンプルページを開きます。

https://[YOUR INSTANCE or CUSTOM DOMAIN].lightning.force.com/gcbc/GcBarcodeDemoPage.app

「Value」欄に、先ほどコピーしたレコードIDを貼り付けます。ページの他の入力項目をクリックし、QRコードが更新されることを確認します。

注意:レコードIDは一意なのでお使いの組織では上記のサンプル画面とは異なる値になります。

次の手順で、このページに表示されているQRコードを読み取れるか確認してください。

  1. スマートフォンで「RayKit」アプリを実行する。
  2. Salesforces組織にログインする。Sandboxにログインする場合、右上のノートとペンのアイコンをタップし「接続を選択」でSandboxを選ぶ。
  3. Salesforce1のナビゲーションメニューから「GCBarcode Scanner」をタップする。
  4. 「読み取り開始」ボタンをタップする。
  5. カメラ画面でQRコードを読み取る。

読み取りが成功すると、次のようにスマーフォンのアプリで読み取ったIDを持つレコードのページが「RayKit」アプリに表示されます。

読み取ったレコードIDはgcbc名前空間プレフィックスの「BarcodeScanResult」というカスタムオブジェクトのレコードとして保存されます。

使用例1. レコードIDを読み取って値を更新する

レコードIDを含むバーコードを読み取った結果は、gcbc名前空間プレフィックスの「BarcodeScanResult」というカスタムオブジェクトのレコードとして保存されます。Salesforceのプロセスビルダーを使うと、「BarcodeScanResult」にレコードが追加されたタイミングで任意のプロセスを実行できます。

「BarcodeScanResult」には次の情報が保存されるので、これらを手掛かりにプロセスビルダーでさらにレコードから情報を取り出して処理することができます。

項目の表示ラベル API参照名 データ型 説明
CheckBoxField gcbc__CheckBoxField__c チェックボックス BarcodeScanProcessRule(後述)によって値が保存される項目。
CurrencyField gcbc__CurrencyField__c 通貨(18、0) BarcodeScanProcessRule(後述)によって値が保存される項目。
DateField gcbc__DateField__c 日付 BarcodeScanProcessRule(後述)によって値が保存される項目。
DateTimeField gcbc__DateTimeField__c 日付/時間 BarcodeScanProcessRule(後述)によって値が保存される項目。
JumpToRecordId gcbc__JumpToRecordId__c テキスト(18) 移動先のレコードID。
LongTextField gcbc__LongTextField__c ロングテキストエリア(32768) BarcodeScanProcessRule(後述)によって値が保存される項目。
Name Name テキスト(80) レコード名(レコードID)。
NumberField gcbc__NumberField__c 数値(18、0) BarcodeScanProcessRule(後述)によって値が保存される項目。
PercentField gcbc__PercentField__c パーセント(18、0) BarcodeScanProcessRule(後述)によって値が保存される項目。
ScannedSObjectId gcbc__ScannedSObjectId__c テキスト(18) レコードが属するオブジェクトのID。
SObjectTypeName gcbc__SObjectTypeName__c テキスト(80) コードが属するオブジェクトのAPI参照名。
TextField1 gcbc__TextField1__c テキスト(255) レコードの名前。または、BarcodeScanProcessRule(後述)によって値が保存される項目。
TextField2 gcbc__TextField2__c テキスト(255) BarcodeScanProcessRule(後述)によって値が保存される項目。
Value gcbc__Value__c テキストエリア(255) 読み取ったバーコードの値。
作成者 CreatedById 参照関係(ユーザ) レコードを作成したユーザ。
所有者 OwnerId 参照関係(ユーザ,グループ) レコードを所有しているユーザまたはグループ。
最終更新者 LastModifiedById 参照関係(ユーザ) レコードを最後に更新したユーザ。

プロセスビルダーでは、次の手順で読み取ったバーコードに関連するレコードを処理できます。なお、Salesforceの表示言語に日本語を選択していても、プロセスビルダーの一部の操作画面は英語になります。

  1. プロセスビルダーの条件でSObjectTypeName項目を使ってオブジェクトごとに処理を振り分ける。
  2. 組み込みのApexクラスを使ってオブジェクトの項目の値を更新する。

ここでは、先に読み取った取引先のレコードIDから、取引先の名前を取り出してプロセスビルダーで処理する手順を紹介します。

  1. Salesforce Classicの場合、「設定 > ビルド > 作成 > ワークフローと承認申請 > プロセスビルダー」を開く。Lightning Experienceの場合、歯車アイコンをクリックした後、「設定 > プロセスの自動化 > プロセスビルダー」を開く。
  2. 次の「プロセスビルダー」画面が表示されることを確認する。
  3. 「新規」ボタンをクリックして、新しいプロセスを作成する。
    • プロセス名:任意
    • API参照名:任意
    • プロセスを開始するタイミング:レコードが変更されるとき
  4. 「Save」ボタンをクリックし、次の画面が表示されることを確認する。
  5. 「オブジェクト」をクリックし、処理対象のオブジェクトを選択する。
  6. 「オブジェクト」に「BarcodeScanResult」、「プロセスを開始」に「レコードを作成したときのみ」を選び、「保存」をクリックする。
  7. 「条件を追加」をクリックする。
  8. 「条件名」に任意の名前を記入し、「項目を検索」をクリックする。
  9. 「SObjectTypeName」をクリックし、「Choose」ボタンをクリックする。
  10. 「値」に取引先のAPI名「Account」を記入して「保存」をクリックする。

参考:以下はSalesforceの代表的な標準オブジェクトとそのAPI参照名です。プロセスに条件を複数追加し、オブジェクトごとに処理を分けることもできます。

オブジェクト名 API参照名
取引先 Account
取引先責任者 Contact
リード Lead
ケース Case
商談 Opportunity
キャンペーンメンバー CampaignMember

続けて、オブジェクトのレコードに対する処理をアクションで定義します。ここでは、例として取引先の説明に「バーコードを読み取りました。」というメッセージを書き込みます。

  1. 「アクションを追加」をクリックする。
  2. 「アクション種別」に「Apex」、「アクション名」に任意の名前、「Apexクラス」に「Update SObject Field Value」を選択する。
  3. 「Apex変数を設定」の「sObjectId」の行で「種別」に「数式」を選択する。注意:「種別」に「文字列」や「項目の参照」を設定しても動作しません。
  4. 「数式を構築」をクリックし、[gcbc__BarcodeScanResult__c].gcbc__ScannedSObjectId__cを入力する。
  5. 「Use this Formula」ボタンをクリックする。
  6. 「fieldName」に「Description」、「fieldValue」に「バーコードを読み取りました。」という文字列をそれぞれ記入し、「保存」をクリックする。
  7. 「有効化」をクリックしてプロセスを有効化する。

以上でプロセスビルダーによる設定は完了です。さきほどの取引先のレコードのQRコードをもう一度読み取ると、「取引先」の「説明」が更新されます。

使用例2. 独自のIDを読み取る

レコードIDではなく、書籍コードや単純な連番をバーコード化し、これを読み取って作業を効率化したい場合があります。そのような場合は、カスタムメタデータ型に読み取り結果の一致ルールを定義し、一致ルールに基づいてBarcodeScanResultにデータを格納できます。

たとえば商品マスタをカスタムオブジェクトに定義し、商品コードと商品価格の情報がそのカスタムオブジェクトに格納されていると仮定します。商品コードをQRコードにして配布し、その後スマートフォンでQRコードを読み取り、読み取った結果をもとに「BarcodeScanResult」に価格を取り出すことができます。その後、商品コードと価格のデータをSalesforceのプロセスビルダーで加工できます。

注意:読み取ったバーコードに該当する商品コードが存在しないとき、GCBarcode Scannerは代わりにレコードIDを探します。一致するレコードIDがあるとき、処理されます。もし、商品コードとレコードIDが完全に一致する場合、商品コードとして先に処理されます。同じ商品コードが複数存在する場合、最新のレコードに一致します。

以下の手順で、カスタムメタデータ型のレコードを使って一致ルールを定義します。カスタムメタデータ型は「開発」や「カスタムコード」のセクションにありますが、ここではコーディングは必要ありません。

Salesforce Classicの場合:

  1. 「設定 > ビルド > 開発 > カスタムメタデータ型」を開く。
  2. 「gcbc」名前空間プレフィックスの「BarcodeScanProcessRule」カスタムメタデータ型で「レコードの管理」をクリックする。
  3. 「新規」ボタンをクリックする。
  4. 以下を追加し、「保存」ボタンをクリックする。
    • 表示ラベルに任意のテキスト
    • BarcodeScanProcessRule名に任意のAPI名。半角英数文字のみ使用できる。
    • BarcodeValueMappingに「オブジェクト名.項目名」で一致対象のオブジェクトと項目を指定。ピリオドは半角。それぞれAPI名で指定する。
    • CheckBoxFieldName~LongTextFieldName。BarcodeValueMappingに指定した項目の値を、「BarcodeScanResult」に複製して保存するときの「BarcodeScan」の項目名。

Lightning Experienceの場合:

  1. 歯車アイコンをクリックした後「設定 > プラットフォームツール > カスタムコード > カスタムメタデータ型」を開く。
  2. 「gcbc」名前空間プレフィックスの「BarcodeScanProcessRule」カスタムメタデータ型で「レコードの管理」をクリックする。
  3. 「新規」ボタンをクリックして以下を追加する。
    • 表示ラベルに任意のテキスト
    • BarcodeScanProcessRule名に任意のAPI名。半角英数文字のみ使用できる。
    • BarcodeValueMappingに「オブジェクト名.項目名」で一致対象のオブジェクトと項目を指定。ピリオドは半角。それぞれAPI名で指定する。
    • CheckBoxFieldName~LongTextFieldName。BarcodeValueMappingに指定した項目の値を、「BarcodeScanResult」に複製して保存するときの「BarcodeScan」の項目名。

BarcodeScanProcessRuleカスタムメタデータ型には、次のカスタム項目があります。データ型はすべて「テキスト(255)」です。

項目の表示ラベル 説明
BarcodeValueMapping 読み取ったバーコードの値を検索するオブジェクト名と項目名を「オブジェクト名.項目名」の形式で指定します。
CheckBoxFieldName BarcodeValueMappingに指定したオブジェクトから、gcbc__CheckBoxField__c に取り出す項目名を指定します。
CurrencyFieldName BarcodeValueMappingに指定したオブジェクトから、gcbc__CurrencyField__c に取り出す項目名を指定します。
DateFieldName BarcodeValueMappingに指定したオブジェクトから、gcbc__DateField__c に取り出す項目名を指定します。
DateTimeFieldName BarcodeValueMappingに指定したオブジェクトから、gcbc__DateTimeField__c に取り出す項目名を指定します。
NumberFieldName BarcodeValueMappingに指定したオブジェクトから、gcbc__NumberField__c に取り出す項目名を指定します。
PercentFieldName BarcodeValueMappingに指定したオブジェクトから、gcbc__PercentField__c に取り出す項目名を指定します。
TextFieldName1 BarcodeValueMappingに指定したオブジェクトから、gcbc__TextField1__c に取り出す項目名を指定します。
TextFieldName2 BarcodeValueMappingに指定したオブジェクトから、gcbc__TextField2__c に取り出す項目名を指定します。
TimeFieldName この項目は将来の時刻型のサポートのための予約されています。

BarcodeScanResultカスタムオブジェクトの各項目に取り出された値は、「使用例1. レコードIDを読み取って値を更新する」の手順によってプロセスビルダーで処理できます。

プロセスビルダーを使う場合の制限

次の操作はプロセスビルダーを使った読み取りアプリでは対応していません。代わりにVisualforceページの開発Lightningアプリケーションの開発を検討してください。

  • 連続読み取りの操作。プロセスビルダーを使った読み取りでは、常に1回ごとの読み取りになります。
  • スマートフォンのフロントカメラ(インカメラ)の使用。プロセスビルダーを使った読み取りでは、常にバックカメラを使用します。
  • 読み取り対象バーコードの指定。プロセスビルダーを使った読み取りでは、RayBarcodeが対応するすべてのバーコードが検出されます。
  • 読み取り開始ボタンのカスタマイズ。読み取り開始ボタンの大きさ、色、キャプションは変更できません。
  • プロセスビルダーでオブジェクトごとに有効なルールおよび有効なプロセスの合計数は、Salesforce Spring’18リリースの時点で50個です。このほかに、組織全体でフローおよびプロセスの合計数の上限があるので注意してください。参考:Salesforce開発者ドキュメント - プロセスの制限
  • レコードIDを読み取り後にレコードのページが表示される動作は変更できません。
  • 読み取ったバーコードの値をスマートフォンの画面上に表示できません。

読み取り結果を消去する方法

バーコードの読み取り結果は「BarcodeScanResult」カスタムオブジェクトに蓄積されます。次の操作を行うと、昨日より古い読み取り結果を削除できます。

Salesforce Classicの場合:

  1. 「設定 > ビルド > 開発 > Apexクラス」を開く。
  2. 「Apex をスケジュール」をクリックし、「BarcodeScanResultCleaner」Apexをスケジュールで実行する。

Lightning Experienceの場合:

  1. 歯車アイコンをクリックした後「設定 > プラットフォームツール > カスタムコード > Apexクラス」を開く。
  2. 「Apex をスケジュール」をクリックし、「BarcodeScanResultCleaner」Apexをスケジュールで実行する。
Copyright © 2019 GrapeCity inc. All rights reserved.