フローで連番を振ってみる
salesforceだと、Name項目またはカスタム項目で自動採番を使用できます。
何も処理をせずに一意の連番を振ることができるので便利です。
自動採番
各レコードに一意の連番を自動的に割り当てます。自動採番項目の最大文字数は 30 文字で、そのうち 20 文字がプレフィックスまたはサフィックスのテキスト用に予約されています。外部オブジェクトでは使用できません。
今回はフローでカテゴリごとに連番を振ってみます。
やってみたこと
選択したカテゴリごとに連番を振るようにしてみます。
連番オブジェクトをサンプルに作成。「カテゴリ」項目を選択して保存すると、カテゴリごとに連番を振って更新します。
処理フロー
- カテゴリを選択して保存
- プロセスビルダーからフローを起動
- 同じカテゴリのレコードから最大値を検索
- 最大値+1の値を振る
- レコードを更新
こんなイメージで設定します。
連番オブジェクト
連番オブジェクトには下記の項目を作ります。
項目 | API参照名 | 目的 | サンプル |
---|---|---|---|
連番名 | Name | Name項目を自動採番で設定 | SN-0001 |
カテゴリ | category__c | 選択リスト。この選択した内容ごとに連番を振ります | A |
カテゴリ連番 | serialNumberByCategory__c | カテゴリごとの連番を格納します。 | A-0001,B-0001 |
管理用連番 | serialNumberForFlow__c | カテゴリごとの連番を数値で保存し、フローで利用 | 1,2,3 |
フローを作成
リソースの設定
フローで使用する変数を設定します。(API参照名は任意の名前をつけてください)
- プロセスビルダーからIdを格納
- API参照名:
varId
- データ型:
テキスト
- フロー外部での可用性:
入力で使用可能
(プロセスビルダーからの値を受け取るため)
- API参照名:
- プロセスビルダーからカテゴリを格納
- API参照名:
varCategory
- データ型:
テキスト
- フロー外部での可用性:
入力で使用可能
(プロセスビルダーからの値を受け取るため)
- API参照名:
- フロー内で同じカテゴリのレコードを検索して、その最大値を格納
- API参照名:varMax
- データ型:
数値
- 小数点の位置:
0
- デフォルト値:
0
同様にフローで使用する数式を設定します。
- varMaxで取得した最大値に1を加算します。
- API参照名:
setMax
- データ型:
数値
- 小数点の位置:
0
- 数式:
{!varMax} + 1
- API参照名:
- カテゴリ連番を数式で設定します。
- API参照名:
setCategoryNumber
- データ型:
テキスト
- 数式:
{!varCategory} & "-" & LPAD(TEXT({!setMax}), 4, "0")
- API参照名:
フローを作成
レコードを取得
プロセスビルダーから受け取ったIdとカテゴリを使って、連番オブジェクト内の同じカテゴリのレコードを検索し、その中で管理用連番の最大値を格納します。
フローの要素から「レコードを取得」をパレット上にドラッグします。
以下のような設定をします。
- 表示ラベル:(任意でつければOK)
- API参照名:(任意でつければOK)
- オブジェクト:
連番
(実際は自分の組織の対象となるオブジェクトを指定してください) - 絞り込み
- 条件の要件:
条件を満たしている
- 条件1:
項目 = Id、演算子 = 次の文字列と一致しない、値 = {!varId}
(更新対象のレコード自体が検索に含まれないようにするため) - 条件2:
項目 = category__c、演算子 = 次の文字列と一致する、値 = {!varCategory}
(同じカテゴリに限定するため)
- 条件の要件:
- 並び替え(管理用連番の最大値が一番最初になるよう並べ替えます)
- 並び替え順:
降順
- 並び替え:
serialNumberForFlow__c
- 並び替え順:
- 保存するレコード数:
最初のレコードのみ
- 手動割り当て変数(詳細):
チェックを入れる
- 項目値の保存場所:
個別の変数に保存
- 保存する変数を選択:
項目 = serialNumberForFlow__c → 変数 = {!varMax}
「レコードを取得」の全体は以下のような感じです。
レコードを更新
「レコードを検索」から取得した最大値を加算して更新をします。加算は上の数式で作成したものを使います。
- 表示ラベル:(任意でつければOK)
- API参照名:(任意でつければOK)
- 更新するレコードを検索してその値を設定する方法:
レコードを識別する条件を指定し、項目を個別に設定
- オブジェクト:
連番
(実際は自分の組織の対象となるオブジェクトを指定してください) - 絞り込み
- 条件の要件:
条件を満たしている
- 条件1:
項目 = Id、演算子 = 次の文字列と一致する、値 = {!varId}
- 条件の要件:
- 項目値を設定
- 設定1:
項目:serialNumberForFlow__c ← 値:{!setMax}
- 設定2:
項目:serialNumberByCategory__c ← 値:{!setCategoryNumber}
- 設定1:
「レコードを更新」の全体は以下のような感じです。
フローのコネクタをつなげると下図のようになりますので、フローを保存して有効化をしてください。
プロセスビルダーを設定
保存したフローを呼び出すためのプロセスビルダーを設定します。ここでは作成したときを条件にします。
プロセスビルダーの条件は下記のようにカテゴリが空白でないことを条件にします。
フローを呼び出すアクションを設定します。カテゴリとレコードのIDを指定します。
最後に有効化をします。
検証
実際にレコードを作成して、想定どおりに動くか確認します。
カテゴリごとに連番が振られるようになりました。
実際の運用では、カテゴリの入力を必須にしたりなど考慮することはありますのでご注意を。