進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

呼び出し可能な Apex を使用したワークショップ後のタスクの自動化

最後の自動化では、感謝バッジをインストラクターに付与する必要があります。この使用事例は、プロセスビルダーや Flow Builder だけでは自動化できません。心配は無用です。呼び出し可能な Apex がここにあります。

学習内容

次の作業を行います。

  1. 小さな Apex コードを記述する。
  2. その Apex コードをコールするようにプロセスを設定する。

Apex クラスの作成

感謝バッジを素晴らしいインストラクターのプロファイルに投稿する Apex クラスを作成します。作成したフローと同様に、このプロセスは情報 (バッジ名、付与者 ID、受賞者 ID、感謝メッセージ) を Apex クラスのメソッドに渡します。なぜでしょうか? こうすれば、後で感謝メッセージのテキストや付与する特定のバッジを更新することにした場合に、プロセスを更新すればよく、コードを更新する必要がありません。重要なのは、クリックで簡単に自動化を管理できるようにすることです。

  1. 開発者コンソールを開きます。
  2. [File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックします。
  3. クラスに「GiveWorkThanksAction」という名前を付けます。
  4. 次の Apex コードをクラスにコピーします。

global without sharing class GiveWorkThanksAction {

@InvocableMethod(label='Give a Thanks Badge')
global static void giveWorkBadgeActionsBatch(List<GiveWorkThanksRequest> requests) {
for(GiveWorkThanksRequest request: requests){
giveWorkBadgeAction(request);
}
}

public static void giveWorkBadgeAction(GiveWorkThanksRequest request) {
WorkThanks newWorkThanks = new WorkThanks();
newWorkThanks.GiverId = request.giverId;
newWorkThanks.Message = request.thanksMessage;
newWorkThanks.OwnerId = request.giverId;
insert newWorkThanks;
WorkBadge newWorkBadge = new WorkBadge();
// newWorkBadge.DefinitionId should be set to the ID for the Competitor Badge within this Org
WorkBadgeDefinition workBadgeDef = [SELECT Id,Name FROM WorkBadgeDefinition WHERE Name = :request.badgeName Limit 1];
newWorkBadge.DefinitionId = workBadgeDef.Id;
newWorkBadge.RecipientId = request.receiverId;
newWorkBadge.SourceId = newWorkThanks.Id ;
//newWorkBadge.GiverId = request.giverId;
insert newWorkBadge;
WorkThanksShare newWorkThanksShare = new WorkThanksShare();
newWorkThanksShare.ParentId = newWorkThanks.Id ;
newWorkThanksShare.UserOrGroupId = request.receiverId;
newWorkThanksShare.AccessLevel = 'Edit';
insert newWorkThanksShare;
FeedItem post = new FeedItem();
post.ParentId = request.receiverId;
post.CreatedById = request.giverId;
post.Body = request.thanksMessage;
post.RelatedRecordId = newWorkThanks.Id ;
post.Type = 'RypplePost';
insert post;
}

global class GiveWorkThanksRequest {

@InvocableVariable(label='Giver Id' required=true)
global Id giverId;

@InvocableVariable(label='Receiver Id' required=true)
global Id receiverId;
@InvocableVariable(label='Thanks Message' required=true)
global String thanksMessage;
@InvocableVariable(label='Badge Name' required=true)
global String badgeName;
}
}

このクラスには @InvocableVariable@InvocableMethod のアノテーションがあります。この 2 つのアノテーションで、これらのメソッドを REST API 経由でプロセスビルダー、Flow Builder、その他の認証済みクライアントに公開できます。

プロセスの作成

これで、感謝の自動化を起動してバッジをインストラクターのプロファイルに投稿するプロセスを作成することができます。それでは、Salesforce の極めて強力な機能の 1 つである、クリックからコードにシームレスに移行する機能をを確認しましょう。

以前に作成した他のプロセスは、キャンペーンが作成された時点にのみ実行されます。他方、バッジは開発クラスが終了した時点に投稿される必要があるため、この新しいプロセスは開発クラスキャンペーンが編集されて完了とマークされたときに実行されるようにします。 

  1. プロセスビルダーを起動します。
  2. [New (新規)] をクリックして、プロパティを定義します。
    • Process Name (プロセス名): Completed Class Sessions (完了したクラスセッション)
    • API Name (API 参照名): Completed_Class_Sessions
    • Description (説明): Instructor and Teaching Assistant Management for completed class sessions (完了したクラスセッションのインストラクターと指導アシスタントの管理)
    • The process starts when (プロセスを開始するタイミング): A record changes (レコードが変更されたとき)
  3. キャンペーンを作成または更新したときに開始されるようにプロセスを設定します。
    • [Campaign (キャンペーン)] オブジェクトを選択します。
    • レコードを作成または編集したときにプロセスを開始するように指定します。
  4. 条件を設定します。(いずれかのキャンペーンではなく) 開発クラスキャンペーンが完了したときにのみインストラクターに感謝します。
    • Name (名前): Dev Class Campaign Complete (開発クラスのキャンペーンの完了)
    • Condition 1 (条件 1): [Campaign.Status] | Equals (次の文字列と一致する) | Picklist (選択リスト) | Completed (完了)
    • Condition 2 (条件 2): [Campaign.Type] | Equals (次の文字列と一致する) | Picklist (選択リスト) | Dev Class (開発クラス)
      プロセス条件
  5. これで、新規作成した Apex クラスをコールするアクションを追加して、@InvocableVariable アノテーションが付加された 4 つのパラメータを受け入れることができます。メモ: バッジは、名前 (この例ではたまたま「Thanks 」(感謝)) で参照されます。このコードを後で再利用する場合、感謝に別のバッジ名を指定できます。
    • Action Type (アクション種別): Apex
    • Action Name (アクション名): Thank Instructor (インストラクターへの感謝)
    • Apex Variable (Apex 変数): Badge Name (バッジ名) | String (文字列) | Thanks (感謝)
    • Apex Variable (Apex 変数): Giver ID (付与者 ID) | Field Reference (項目参照) | [Campaign.OwnerId]
    • Apex Variable (Apex 変数): Receiver ID (受賞者 ID) | Field Reference (項目参照) | [Campaign.Instructor__c]
    • Apex Variable (Apex 変数): Thanks Message (感謝メッセージ) | String (文字列) | You are awesome! (あなたは素晴らしい!)
      アクションの設定
  6. 最後に、プロセスを有効にします。

プロセスのテスト

準備万端です! では、このプロセスをテストしましょう。支部長として、いくつかのデータを更新しましょう。

  1. [Type (種別)] が [Dev Class (開発クラス)] に設定されているキャンペーンを開きます。
  2. その [Status (状況)] を [Completed (完了)] に設定して、変更を保存します。
  3. Chatter フィードに移動します。インストラクターに感謝する新規投稿がありますか? 感謝バッジがありますか?

おめでとうございます!

プロセスビルダー、Flow Builder、呼び出し可能な Apex メソッドを組み合わせて、League of Extraordinary Coders の支部長の生産性を高めることができました。

これは称賛に値します。よくやりました!

リソース

これらのツールに関する他のハンズオン学習については、「プロセスの自動化」モジュールをお試しください。

また、次のリソースもご確認ください。