Salesforceのワークフローをプロセスビルダーに移行したTips


### なぜワークフローからプロセスビルダーに乗り換える

プロセスビルダー ＞　ワークフローだから

　一例
　　・　プロセスビルダーは、どのような関連レコードでも更新できる
　　・　プロセスビルダーでは、条件の順序を制御できる
　　・　プロセスビルダーは、すべての関連レコードの項目にアクセス
　　・　ワークフローは拡張されない

ということで、すべてのワークフローをプロセスビルダーに移行した。

*ワークフローで出来ることは、すべてプロセスビルダーでできる！*

↓　こんな感じ
![プロセスビルダー | Salesforce 2020-03-21 21-36-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/c491fe87-8163-e1d5-8d12-a25e81f8131a.png)

### プロセスビルダーだからできた機能例

##### Slackへ通知する機能

こんな感じで記載する。
参考URL：https://blog.intracker.net/archives/2018

・　設定 -> リモートサイトの設定より以下を作成しておく

| 設定名 | 　内容 |
|:--|:--|
| リモートサイト名 | SlackAPI |
| リモートサイトのURL | https://hooks.slack.com |

・　Apexクラスを以下の通り作成する

```Java
/**
 * [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テストクラスを以下の通り作成する

```Java
/**
* [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クラスを設定して完了

![プロセスビルダー | Salesforce 2020-03-21 21-12-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/28f33aa5-41e2-7a8e-b432-a8e1e7a80694.png)

| 項目 | 　内容 |
|:--|:--|
| Slack URL  | Slackで設定したWebhookのURL |
| Slack Message | Slackで通知する内容 |

##### チェックボックス入れたらTodoを作成する

アクションを選択して定義からレコードを作成するからレコードタイプをTodoにして作成することができる

![プロセスビルダー | Salesforce 2020-03-21 21-50-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/78097686-7552-0311-1eb5-80df67236a46.png)

##### 商談やTODOや行動の名前に日付を入れて保存する

数式に　**TEXT(NOW()+0.375)**　で記載する

![スクリーンショット 2020-03-21 21.13.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/92a6a3ed-6808-3e74-2ab5-b0cc94b856a1.png)

##### リードの取引先済みにしたときに取引先にリードのカスタムオブジェクトの参照関係をコピーする

リードを取引開始にすると、取引先にカスタムオブジェクトを移動できないため、プロセスビルダーで解決する

**注意事項：リードの設定 -> 取引開始済みのリードに入力規則が必須にチェックを入れること**

![リードの設定 | Salesforce 2020-03-21 20-58-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/0dccda5e-0f9f-310e-6506-9c45fa91864d.png)

プロセスビルダーに条件で取引開始済みにする

![スクリーンショット 2020-03-21 21.00.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/b8323381-2f21-696f-7bed-9e1fea8dd815.png)

プロセスビルダーからレコードを更新選択

![プロセスビルダー | Salesforce 2020-03-21 21-24-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/cdae25aa-19f4-3551-0d2c-f72c49a24b43.png)

Leadに関するレコードを選択するから、参照関係にあたる項目を選択する

![プロセスビルダー | Salesforce 2020-03-21 21-25-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/6f189622-0474-f88c-8d7f-91029838a34c.png)

更新するカスタムオブジェクト先の項目にAccountをセットする

![プロセスビルダー | Salesforce 2020-03-21 21-27-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/b4bb0d70-406d-365c-887b-1bf6abf6ab8c.png)

Accountに取引開始済みのAccountIDをセットして完了

![プロセスビルダー | Salesforce 2020-03-21 21-26-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/2ec438d6-dc95-0770-599f-2a4c9377f9a3.png)