なぜワークフローからプロセスビルダーに乗り換える
プロセスビルダー > ワークフローだから
一例
・ プロセスビルダーは、どのような関連レコードでも更新できる
・ プロセスビルダーでは、条件の順序を制御できる
・ プロセスビルダーは、すべての関連レコードの項目にアクセス
・ ワークフローは拡張されない
ということで、すべてのワークフローをプロセスビルダーに移行した。
ワークフローで出来ることは、すべてプロセスビルダーでできる!
プロセスビルダーだからできた機能例
Slackへ通知する機能
こんな感じで記載する。
参考URL:https://blog.intracker.net/archives/2018
・ 設定 -> リモートサイトの設定より以下を作成しておく
設定名 | 内容 |
---|---|
リモートサイト名 | SlackAPI |
リモートサイトのURL | https://hooks.slack.com |
・ Apexクラスを以下の通り作成する
/**
* [SFDC] Slackからメール送信する。スキーマビルダーで使用。
*/
public with sharing class PublishToSlack{
public class slackRequest {
@InvocableVariable(label='Slack Message' required=true)
public String slackMessage;
@InvocableVariable(label='Slack URL' required=true)
public String slackURL;
}
@InvocableMethod(label='Slack Message')
public static void publishToSlack(List<slackRequest> requests) {
for(slackRequest r:requests){
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('text', r.slackMessage);
gen.writeStringField('username', 'Salesforce Bot');
gen.writeEndObject();
String body = gen.getAsString();
System.enqueueJob(new qCallOut(r.slackURL, 'POST', body));
}
}
public class qCallOut implements System.Queueable, Database.AllowsCallouts {
private final String url;
private final String method;
private final String body;
public qCallOut(String url, String method, String body) {
this.url = url;
this.method = method;
this.body = body;
}
public void execute(System.QueueableContext ctx) {
HttpRequest req = new HttpRequest();
req.setEndpoint(url);
req.setMethod(method);
req.setBody(body);
Http http = new Http();
HttpResponse res = http.send(req);
}
}
}
・ Apexテストクラスを以下の通り作成する
/**
* [SFDC] SlackのPostクラス
*/
@isTest(seeAllData=true)
public class TestPublishToSlack{
static testmethod void testPublishToSlack(){
Test.setMock(HttpCalloutMock.class,new mockCallout());
List<publishToSlack.slackRequest> requests=new List<publishToSlack.slackRequest>();
publishToSlack.slackRequest r=new publishToSlack.slackRequest();
r.slackMessage='THIS IS A TEST MESSAGE';
r.slackURL='https://hooks.slack.com/services/XXXXXXX';
requests.add(r);
publishToSlack.publishToSlack(requests);
}
public class mockCallout implements HttpCalloutMock{
public HttpResponse respond(HttpRequest request){
HttpResponse res=new HttpResponse();
res.setBody('{"text":"value"}');
res.setStatusCode(200);
return res;
}
}
}
・ プロセスビルダーからアクション種別をApexに設定して先程のApexクラスを設定して完了
項目 | 内容 |
---|---|
Slack URL | Slackで設定したWebhookのURL |
Slack Message | Slackで通知する内容 |
チェックボックス入れたらTodoを作成する
アクションを選択して定義からレコードを作成するからレコードタイプをTodoにして作成することができる
商談やTODOや行動の名前に日付を入れて保存する
数式に TEXT(NOW()+0.375) で記載する
リードの取引先済みにしたときに取引先にリードのカスタムオブジェクトの参照関係をコピーする
リードを取引開始にすると、取引先にカスタムオブジェクトを移動できないため、プロセスビルダーで解決する
注意事項:リードの設定 -> 取引開始済みのリードに入力規則が必須にチェックを入れること
プロセスビルダーに条件で取引開始済みにする
プロセスビルダーからレコードを更新選択
Leadに関するレコードを選択するから、参照関係にあたる項目を選択する
更新するカスタムオブジェクト先の項目にAccountをセットする
Accountに取引開始済みのAccountIDをセットして完了