フローで連番を振ってみる

salesforceだと、Name項目またはカスタム項目で自動採番を使用できます。
 何も処理をせずに一意の連番を振ることができるので便利です。  

カスタム項目のデータ型

自動採番
各レコードに一意の連番を自動的に割り当てます。自動採番項目の最大文字数は 30 文字で、そのうち 20 文字がプレフィックスまたはサフィックスのテキスト用に予約されています。外部オブジェクトでは使用できません。

今回はフローでカテゴリごとに連番を振ってみます。

やってみたこと

選択したカテゴリごとに連番を振るようにしてみます。
連番オブジェクトをサンプルに作成。「カテゴリ」項目を選択して保存すると、カテゴリごとに連番を振って更新します。

処理フロー

  1. カテゴリを選択して保存
  2. プロセスビルダーからフローを起動
  3. 同じカテゴリのレコードから最大値を検索
  4. 最大値+1の値を振る
  5. レコードを更新

こんなイメージで設定します。

連番オブジェクト

連番オブジェクトには下記の項目を作ります。

項目 API参照名 目的 サンプル
連番名 Name Name項目を自動採番で設定 SN-0001
カテゴリ category__c 選択リスト。この選択した内容ごとに連番を振ります A
カテゴリ連番 serialNumberByCategory__c カテゴリごとの連番を格納します。 A-0001,B-0001
管理用連番 serialNumberForFlow__c カテゴリごとの連番を数値で保存し、フローで利用 1,2,3

フローを作成

リソースの設定

フローで使用する変数を設定します。(API参照名は任意の名前をつけてください)

  1. プロセスビルダーからIdを格納
    • API参照名:varId
    • データ型:テキスト
    • フロー外部での可用性:入力で使用可能(プロセスビルダーからの値を受け取るため)
  2. プロセスビルダーからカテゴリを格納
    • API参照名:varCategory
    • データ型:テキスト
    • フロー外部での可用性:入力で使用可能(プロセスビルダーからの値を受け取るため)
  3. フロー内で同じカテゴリのレコードを検索して、その最大値を格納
    • API参照名:varMax
    • データ型:数値
    • 小数点の位置:0
    • デフォルト値:0

同様にフローで使用する数式を設定します。

  1. varMaxで取得した最大値に1を加算します。
    • API参照名:setMax
    • データ型:数値
    • 小数点の位置:0
    • 数式:{!varMax} + 1
  2. カテゴリ連番を数式で設定します。
    • API参照名:setCategoryNumber
    • データ型:テキスト
    • 数式:{!varCategory} & "-" & LPAD(TEXT({!setMax}), 4, "0")

フローを作成

レコードを取得

プロセスビルダーから受け取ったIdとカテゴリを使って、連番オブジェクト内の同じカテゴリのレコードを検索し、その中で管理用連番の最大値を格納します。

フローの要素から「レコードを取得」をパレット上にドラッグします。

以下のような設定をします。

  • 表示ラベル:(任意でつければOK)
  • API参照名:(任意でつければOK)
  • オブジェクト:連番(実際は自分の組織の対象となるオブジェクトを指定してください)
  • 絞り込み
    • 条件の要件:条件を満たしている
    • 条件1:項目 = Id、演算子 = 次の文字列と一致しない、値 = {!varId}(更新対象のレコード自体が検索に含まれないようにするため)
    • 条件2:項目 = category__c、演算子 = 次の文字列と一致する、値 = {!varCategory}(同じカテゴリに限定するため)
  • 並び替え(管理用連番の最大値が一番最初になるよう並べ替えます)
    • 並び替え順:降順
    • 並び替え:serialNumberForFlow__c
  • 保存するレコード数:最初のレコードのみ
  • 手動割り当て変数(詳細):チェックを入れる
  • 項目値の保存場所:個別の変数に保存
  • 保存する変数を選択:項目 = serialNumberForFlow__c → 変数 = {!varMax}

「レコードを取得」の全体は以下のような感じです。

f:id:sweaty:20191116214054g:plain
レコードを取得

レコードを更新

「レコードを検索」から取得した最大値を加算して更新をします。加算は上の数式で作成したものを使います。

  • 表示ラベル:(任意でつければOK)
  • API参照名:(任意でつければOK)
  • 更新するレコードを検索してその値を設定する方法:レコードを識別する条件を指定し、項目を個別に設定
  • オブジェクト:連番(実際は自分の組織の対象となるオブジェクトを指定してください)
  • 絞り込み
    • 条件の要件:条件を満たしている
    • 条件1:項目 = Id、演算子 = 次の文字列と一致する、値 = {!varId}
  • 項目値を設定
    • 設定1:項目:serialNumberForFlow__c ← 値:{!setMax}
    • 設定2:項目:serialNumberByCategory__c ← 値:{!setCategoryNumber}

「レコードを更新」の全体は以下のような感じです。

f:id:sweaty:20191116215346g:plain
レコードを更新

フローのコネクタをつなげると下図のようになりますので、フローを保存して有効化をしてください。

f:id:sweaty:20191116215745p:plain
フロー図

プロセスビルダーを設定

保存したフローを呼び出すためのプロセスビルダーを設定します。ここでは作成したときを条件にします。

f:id:sweaty:20191116220139p:plain
開始条件

プロセスビルダーの条件は下記のようにカテゴリが空白でないことを条件にします。

f:id:sweaty:20191116220401p:plain
条件

フローを呼び出すアクションを設定します。カテゴリとレコードのIDを指定します。

f:id:sweaty:20191116220700p:plain
フローを起動

最後に有効化をします。

検証

実際にレコードを作成して、想定どおりに動くか確認します。

f:id:sweaty:20191116222447g:plain
検証

カテゴリごとに連番が振られるようになりました。

実際の運用では、カテゴリの入力を必須にしたりなど考慮することはありますのでご注意を。