発見した驚きの勢いのまま「
複数選択リストで PICKLISTCOUNT関数を使って選ばれし値の数を算出する」を書きましたが、あらためてフローを検証してみて注意点がありましたので、追加で記事を書いています。
現時点ではフローでのPICKLISTCOUNTは「1」減算されてしまう
PICKLISTCOUNT関数、フローでも選択できるようになっていますし、使えると言えば使えるのですが、フローに組み込むのは慎重になったほうがいいです。なぜなら、フローでは計算結果が「1」減算されるからです。
↓の例で、数式項目とフローの数式からの値を並べて比べてみました。
「評価」が連動して変わるようになってます・「好きな色」の複数選択リストでは「3つの値」を選択。
・「好きな色の数」というPICKLISTCOUNT関数を使った数式項目では「3」と表示。
・「フロー確認用」という数値項目では、フローのレコードの更新でPICKLISTCOUNT関数を使った数式より「好きな色」の値の数を返すはずが、「1」減算されて表示。
この問題は Known Issues にも投稿されています。
◇ SALESFORCE >known issues >PICKLISTCOUNT Formula function returning 1 less than correct amount in Flow Builderなお、数式項目、入力規則では減算されることなく値が返されています。
ここで書かれている回避策(Workaround)を試していたのですが、このままでは前半の選択リスト値の数が0になるときの部分がうまく機能しないため(投稿者の方の意図する動作が正確にわからないので何とも言えないのですが)、検証して別の数式を作りました。
回避策として書かれていた数式
IF(PICKLISTCOUNT({!getRecords.MultiSelectPicklist__c})==0, 0, PICKLISTCOUNT({!getRecords.MultiSelectPicklist__c})+1)
作成した数式
IF (ISBLANK({!MultiSelectPicklist__c}), 0,
PICKLISTCOUNT({!MultiSelectPicklist__c})+1)
※「MultiSelectPicklist__c」が値を数えたい複数選択リスト項目のAPI参照名です。
※ISBLANKはISNULLに変えても大丈夫ですが、Salesforceさんが推奨するのはISBLANKのようです。
IF (ISBLANK({!MultiSelectPicklist__c}), 0,まずは選択されている値がない状態、例えば一度は値が選択されたものの後から未選択の状態に更新されたような場合を想定して、ISBLANKで複数選択リスト項目が空白の場合には「0」を返すようにします。「PICKLISTCOUNTの値が0より小さくなるとき」で定義しようとしても想定する結果にならなかったため、数値ではなく空白であるかの判断に変えました。
ついでに評価もブランクに戻してますPICKLISTCOUNT({!MultiSelectPicklist__c})+1)それ以外のときは「1」を加算するように設定します。
画面フローの「複数選択リスト」コンポーネントは非対応
「複数選択リスト」という名前につられて考えてしまったのですが、こちらのコンポーネントは値のデータ型がテキスト扱いとなるようで、PICKLISTCOUNT関数ではエラーとなり、使用できませんでした。
フローでPICKLISTCOUNT関数が計算できるのは、
レコード変数から参照するオブジェクトの複数選択リスト項目か、
複数選択リスト型の変数でした。
関数の修正が入るかも?フロー管理者は要注意
実は、英語で「ちゃんと計算されるように直っている」というような書き込みを見た気がするのですが、後から探しても見つけられず、幻だったかもしれません。結果がずれてしまうのは不具合と言わざるを得ないので、将来的に修正されると思いますが、今回ご紹介したように減算されることを想定した数式をそのまま使用していると、修正が入った時点で結果が変わってしまいます。ですので、フローで使用を検討されている場合は、その可能性と対応策を十分に検討してください。
ひとこと
フローでの使用について、当初の検証がざっくりしていたので問題点を理解しておらず、安易に紹介してしまい申し訳なかったと思っております。複数選択リスト値の数で細かくスコアリングを行うようなフローを作りこんでいくうちに「あれ?ずれてる?」と気づき、数式がおかしいのかと見直しても特に問題はなく、Known Issues を見て納得しました。しかしながら回避策でまたしても「あれ?」と疑問を抱くこととなり、やはりひとつずつ地道に検証していかないといけないと思いました。私の数式のセンスが絶望的ということもあるのですが、現時点での関数の仕様を考慮したフローの完成までに少し時間がかかってしまいまして、既存の情報を参考にしつつもまっさらな気持ちで向き合うことの大切さを感じました。
関連記事
複数選択リストで使用できる関数複数選択リストで PICKLISTCOUNT関数を使って選ばれし値の数を算出する
グローバルリスト値セットを使用した選択リストは、複数選択リスト型にしか変更できない選択リスト値のデフォルト設定、一番強いのは?選択リスト型項目の改修失敗談:値の追加と変更セットのリリースリスト値の管理と活用 ⑤複数選択リストを作成する(会員限定記事)