Trailheadの【Lightning Web コンポーネントファイルのプッシュとリリース】でハマったこと
Trailheadでハマった件
モジュールLightning Web コンポーネントの基本のLightning Web コンポーネントファイルのプッシュとリリースでハマったので備忘録。。。
ハマったこと
最後の「ファイルのリリース」でDev Hub組織にリリースできなかったです。。。
指示通りにスクラッチ組織を作成し、そのDevHub組織にリリースするところでエラーが出てしまいました。
Case.Product__c...
とか SiteAdmin...
とか
試したこと
次のことを試したらリリースできました。
どれが正解かよくわからない。。。
DevHub組織のコミュニティを有効化してからスクラッチ組織を作成。
スクラッチ組織を作成する前にDevHub組織になるTrailhead Play Groundのコミュニティを有効化してから、再度スクラッチ組織を作成。
ケースのカスタム項目「Product」を削除
DevHub組織のケースオブジェクトに作成済みのカスタム項目Product
を削除
E_Bikes.site-meta.xmlを修正
SiteAdminのエラーなどが出ていたので、上記ファイルを修正
場所は、e-bikes-lwc > force-app > main > default > sites
内にあるxmlファイルです。
修正した2箇所
<siteAdmin>
にあるユーザ名を、スクラッチ組織のものからDevHub組織のものに変更<subdomain>
にあるドメイン名を、スクラッチ組織のものからDevHub組織のものに変更(.my.salesforce.comの部分は不要。サブドメインですし)
これらの修正でなんとかリリースができました。
もし同じようなエラーに出くわして心が折れた方はお試しください。。
フローで連番を振ってみる
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を指定します。
最後に有効化をします。
検証
実際にレコードを作成して、想定どおりに動くか確認します。
カテゴリごとに連番が振られるようになりました。
実際の運用では、カテゴリの入力を必須にしたりなど考慮することはありますのでご注意を。
フローで積み上げ集計をやってみた(2-2)
前回の続きで参照関係のオブジェクトで積み上げ集計をフローでやってみます。
処理を作成する
前回はリソースを作成しましたので、実際のフロー処理を作成します。
レコードの取得
プロセスビルダーを起動した子オブジェクトと同じ親をもつレコードを取得します。
- 要素から
レコードを取得
をパレット上にもっていきます - 設定画面が開くので以下のような設定をします
ループ処理
取得したレコードを1件ずつ取り出すループ処理を作成します
- 要素から
ループ
をパレット上にもっていきます - 設定画面が開くので以下のような設定をします
- 表示ラベル:
子オブジェクトをループ
- API参照名:
loopChildren
- コレクション変数:
{!listChildren}
- ループ変数:
{!child}
- 表示ラベル:
listChildren
に複数の子オブジェクトが格納されるので、1件ずつ取り出してchild
に割り当てて処理をします。
設定したら、レコードを取得からループ処理へ矢印をつなげて保存してください。
割り当て
先に設定したvarTotal
に売上を足し込んでいきます
- 要素から
割り当て
をパレット上にもっていきます - 設定画面が開くので以下のような設定をします
設定が完了したら、ループから割り当てへ矢印をつなげます。
そのときにループコネクタを選択画面が表示されるので、コレクション内の項目ごと
を選択して完了を選択し、割り当てからループに矢印をもどします。
親レコードを更新
最後に親レコードにvarTotal
で計算した合計値を更新します。
- 要素から
レコードを更新
をパレット上にもっていきます - 以下の設定をします。
設定したらループから矢印をつなげます
このときは自動的にループコネクタが選択された状態になります。
有効化
これまでの設定をすべて保存したら有効化
ボタンを押してください
プロセスビルダーの設定
最後にフローを呼び出すプロセスビルダーを設定します。
子レコードが作成されたときに呼び出すようにします。
※売上が空欄の場合だったり、変更されたときなど実運用では考慮することがありますが今回は単純に作成されたときという条件で呼び出します。
- ルール適用時のアクション種別で
フロー
を選択 - フローで作成したものを選択
- フロー変数に
varParentId
を選択(これしか選べないはずです) - 種別を
項目を参照
にしてparent__c
を選択してください
最後にプロセスビルダーを有効化してください。
動作確認
実際に動作確認です。
キャッシュが残って更新がきれいにはいかなかったですが親オブジェクトの項目が子オブジェクトによって更新されたことが確認できました。
まとめ
フローを使うとプログラムがかけなくても複雑な処理を実装することができます。
ただしある程度の知識と慣れが必要だと思いますので、かんたんなものから始めてステップアップするのが良さそうです。
今回は使用しませんでしたが、決定
という要素を使うことで条件分岐も可能となりより複雑な処理ができます。
今回の内容であればプロセスビルダーだけでも実装は可能ですが、一例として。。
フローで積み上げ集計をやってみた(2-1)
salesforceに積み上げ集計という便利な機能があります。
子レコードの合計や件数などを項目ひとつで作成できるので重宝してます。
でも制限があり、主従関係がないと使えないという点で困ったことがありました。
(積み上げ集計のヘルプ)https://help.salesforce.com/articleView?id=fields_about_roll_up_summary_fields.htm
主従関係がなんとなくわからなくて。とか、必須にすべきかわからなくてやむを得ず参照関係にすることもあったりするのかと。
そこで参照関係にあるオブジェクトでの積み上げ集計をフローで試してみました。
試したこと
親オブジェクト(Parent__c)
と 子オブジェクト(Child__c)
で子レコードの数値項目売上
を親オブジェクトの項目子レコード合計
に積み上げ集計してみました。子オブジェクトに参照関係で親オブジェクトを設定しています。
大まかな処理イメージ
- 子オブジェクトのレコードを作成する(親オブジェクトに関連付ける)
- プロセスビルダーでフローを呼び出す
- 親オブジェクトが同じ子オブジェクトのレコードを検索
- 検索した子オブジェクトをループ処理して、合計値を計算
- 親レコードに4の値を渡して更新
こんな感じです。
本来であれば更新時やほかの条件を検討する必要があります。
フローを作る
新規フローの作成
なにはともあれフローを作成。
設定画面を開き、設定 > プロセスの自動化 > フロー と選択し、画面が開いたら新規フローのボタンをクリック。
フロー種別の選択は自動起動フロー
を選択します。
フローに必要な要素を作成する
新規フローを作成すると、フロービルダーが起動します。
左にツールボックスがあり、その中に要素
、マネージャ
というタブがあります。
要素
では、フローが行う処理としてレコードの検索、作成、更新、削除や、条件、ループ、割り当てなどがあります。
マネージャ
では、フローで使うリソースを作成します。リソースとは、値を格納する変数や数式、フェーズなどが利用できます。
新規では「新規リソース」のボタンしかないので画像は割愛します。
(▼リソースのヘルプページ)https://help.salesforce.com/articleView?id=flow_ref_resources_variable.htm&type=5
では、今回のフローで使うリソースを作りますが、先ほどの処理内容から以下のものを用意します。
- プロセスビルダーを呼び出した子オブジェクトの親オブジェクトIDを受け取る変数
- 親オブジェクトIDが同じ子オブジェクト(複数レコード)
- 合計
- ループ処理時に使用する子オブジェクト(単一レコード)
これらにフローで処理する際に必要な途中経過の値などを格納します。
では作ってみましょう。
プロセスビルダーを呼び出した子オブジェクトの親オブジェクトIDを受け取る変数
子オブジェクトのレコードが作成されたときに、プロセスビルダーを呼び出す想定です。
呼び出したときにフローへそのレコードの親オブジェクトID
を渡し、親オブジェクトが同じIDの子オブジェクトを取得します。
新規リソースをクリックして以下のような設定をします。
- リソース種別 =
変数
- API参照名 =
varParentId
(ここの設定は任意です。自分でわかりやすい名前にしとくといいと思います) - 説明 =
任意の内容を記載します
(必須ではないので空欄でもOK) - データ型 =
テキスト
- フロー外部での可用性 =
入力で使用可能
にチェック
あとはブランクでOK。
後でプロセスビルダーから親オブジェクトIDをフローへ渡すために、入力で使用可能にチェックを入れる必要があります。
親オブジェクトIDが同じ子オブジェクト(複数レコード)
先に受け取った親オブジェクトID
が同じ子オブジェクトを取得します。
取得した結果を格納する変数です。ここではオブジェクトを指定する必要があります。
- リソース種別 =
変数
- API参照名 =
listChildren
- 説明 =
任意の内容を記載します
(必須ではないので空欄でもOK) - データ型 =
レコード
/複数の値を許可(コレクション)
にチェック - オブジェクト =
子オブジェクト
合計
合計を求めるには子オブジェクトの値(ここでは売上とします)をループ処理で足す必要があり、それを格納するリソースを作成します。
- リソース種別 =
変数
- API参照名 =
varTotal
- 説明 =
任意の内容を記載します
(必須ではないので空欄でもOK) - データ型 =
数値
小数点の値やデフォルト値は0としておきます。
ループ処理時に使用する子オブジェクト(単一レコード)
こちらは先程のオブジェクトと同様で子オブジェクトを指定して、複数の値を許可のチェックは不要です。
API参照名はchild
としておいてください。
ここまでできたら一旦保存しておきます。 エラーが表示されますが、フローの動作を設定しないため表示されますので無視して問題ありません。
まだ続きますので、以降の処理は次で記載したいと思います。
レポートのPARENTGROUPVALとPREVGROUPVAL
レポートで集計関数を使おうと思うたびに毎回忘れて調べているので備忘録。 ヘルプページを読んで使いこなせている人を神と崇めたい。。。毎度わからなくなって調べている理解力の低さが悲しいところ。
集計関数
詳しい説明はヘルプページにお任せするとして、前月の数字を使いたければPREVGROUVAL
、全体の合計を使いたかったらPARENTGROUPVAL
みたいなざっくり理解
PARENTGROUPVAL および PREVGROUPVAL
LEXになってから集計関数の設定方法も変わったようで使い慣れない。。。
サンプルレポート
よくありそうなパターンでレポートを作成。 月ごとの営業部門別売上を作ってみました。
こんな感じで、年毎の推移や月ごと、部門ごとのマトリックスレポートに集計関数を実装してみたけど、 最初にわかりやすくするために数字だけを持ってくるようにしてみた。
拡大するとこんな感じ
基本設定
- レポートのアウトラインから列のところにある▼をクリックして、
集計項目を追加
を選択 - 画像のような設定画面が表示される
- 列の名前:
レポートに表示される名前
- 説明:
自分でわかるように記載。特に表示されるわけではない
- 数式出力種別:
数値
、パーセント
、通貨
のいずれかを選択。 - 小数点:
数式出力種別の小数点設定
- 列の名前:
今月の営業合計
今月の営業合計
を営業部門と月のエリアに表示したい。
こんなときはPARENTGROUPVAL
を選びます。
これが表示できれば、あとは部門の数字と計算することで月ごとの売上に対して部門ごとの比率が計算できます。
まず集計関数の配置する場所を指定します。 部門と月の交差する部分に配置したいので、以下のような指定をします。
PARENTGROUPVALは「サマリーと結合」、「マトリックス」形式それぞれで指定する項目の数が異なる。 マトリックスは
PARENTGROUPVAL( 集計する値, 行グループ, 列グループ )
を指定します。
こんな感じになります。
小計部分に項目名が表示されてしまうのが残念なところではある。。。
前月の数字
指標として前月比や前年比を使用することは多いと思います。
そんなときはPREVGROUPVAL
を利用します。
PREVGROUPVAL( 集計する値, 集計グループ [, どれだけ遡るかの数字] )
集計する値と、どのグループで前の値を参照するか指定します。
この場合は、前月の実績を参照するので、集計グループに計上月を指定します。
どれだけ遡るかは入力しなければ一つ前を参照し、2ヶ月前を参照したかったら2を指定します。
これで前月の数字が参照できるので、比率の計算が可能になります。