Salesforceの承認プロセスを特定の日時項目に基づいて毎時で開始する方法
はじめに
Salesforceは、ビジネスプロセスの効率化と自動化に優れたCRMプラットフォームです。
特に、Salesforceの承認プロセス機能は、特定の条件に基づいてレコードを承認する手順を自動化するのに役立ちます。
また、フローなどの標準機能では、承認プロセスを毎時で開始(起動)することができないので、本記事では、Salesforceの承認プロセスを特定の日時項目に基づいて毎時で開始する方法(Apexバッチ + Apexスケジュールを使用)について、初心者向けにわかりやすく説明します。
承認プロセスの基本概念と必要性
承認プロセスは、特定のレコードが承認されるまでの流れを定義することで、業務プロセスを自動化し、手動による承認作業を削減し、エラーの発生を防ぎます。特に、重要な日時に基づく承認プロセスは、タイムリーな意思決定をサポートします。
たとえば、契約の有効期限が近づいたときに自動的に承認プロセスを開始することで、契約の更新や延長をスムーズに行うことができます。これにより、ビジネスの流れが途切れることなく、効率的に運営できます。
承認プロセスの基本的な流れ
承認プロセスは以下のようなステップで構成されます:
- 開始: 条件に基づきプロセスが開始されます。
- ステップ: 指定されたユーザーまたはグループに承認リクエストが送信されます。
- 承認/却下: 承認または却下のアクションが行われます。
- 完了: 最終的なステータスに基づいて、後続のアクションが実行されます。
特定の日時項目に基づくトリガー条件の設定方法
毎時での承認プロセス開始は、ApexバッチクラスとApexスケジュールクラスを用いることで実現可能です。Apexは、Salesforceの高度なプログラミング言語であり、カスタムロジックを実装するために使用されます。
以下に、その具体的な設定手順を示します。
設定手順を解説
ステップ 1: Apexバッチクラスの作成
バッチクラスを作成し、特定の日時条件に基づいて承認プロセスを開始します。以下は、そのためのApexコードの例です。
global class HourlyApprovalProcessBatch implements Database.Batchable<SObject>, Schedulable {
global void execute(SchedulableContext sc) {
Database.executeBatch(this, 100);
}
global Database.QueryLocator start(Database.BatchableContext bc) {
// 過去1時間以内のレコードを選択
Datetime oneHourAgo = System.now().addHours(-1);
Datetime now = System.now();
String query = 'SELECT Id FROM CustomObject__c WHERE DatetimeField__c >= :oneHourAgo AND DatetimeField__c <= :now';
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext bc, List<SObject> scope) {
for (SObject s : scope) {
CustomObject__c record = (CustomObject__c) s;
// 承認プロセスを開始するロジック
Approval.ProcessSubmitRequest req = new Approval.ProcessSubmitRequest();
req.setComments('Automated Approval Process');
req.setObjectId(record.Id);
Approval.ProcessResult result = Approval.process(req);
}
}
global void finish(Database.BatchableContext bc) {
// 完了時の処理
}
}上記のコードでは、HourlyApprovalProcessBatchというバッチクラスを作成しています。
このクラスは、過去1時間以内に特定の日時項目を満たすレコードを検索し、それらのレコードに対して承認プロセスを開始します。
ステップ 2: スケジュールクラスの作成
次に、Apexバッチクラスを毎時実行するためのスケジュールクラスを作成します。
以下はそのコード例です。
public class ScheduleHourlyBatch {
public static void scheduleBatch() {
String sch = '0 0 * * * ?'; // 毎時0分に実行
System.schedule('HourlyApprovalProcess', sch, new HourlyApprovalProcessBatch());
}
}上記のコードでは、ScheduleHourlyBatchというクラスを作成し、scheduleBatchメソッドを定義しています。このメソッドは、毎時0分にバッチクラスを実行するようにスケジュールを設定します。
ステップ 3: スケジュール設定
開発コンソールまたはApexクラスからスケジュールバッチを実行します。以下のコードを実行することで、バッチクラスのスケジュールを設定します。
ScheduleHourlyBatch.scheduleBatch();これで、HourlyApprovalProcessBatchクラスが毎時実行され、特定の日時条件に一致するレコードをチェックして承認プロセスを開始します。
ベストプラクティスとトラブルシューティングのヒント
ベストプラクティス
- テスト環境での検証: 本番環境に適用する前にサンドボックス環境で十分にテストします。
- 明確な条件設定: 条件を明確に設定し、不要な承認プロセスが開始されないようにします。
- 通知設定: 承認者が承認リクエストを見逃さないように、適切な通知設定を行います。
トラブルシューティングのヒント
- ログの確認: バッチクラスのログを確認し、どのステップで問題が発生しているかを特定します。
- ユーザー権限の確認: 承認者に必要な権限が付与されているか確認します。
- 開始条件の検証: 設定した条件が正しく適用されているか再確認します。
設定完了後のテスト方法と確認手順
テスト手順
- テストレコードの作成: 設定した条件を満たすテストレコードを作成します。
- プロセスの実行確認: バッチクラスが実行され、指定した日時条件で承認プロセスが正しく開始されることを確認します。
- 通知の確認: 承認者に正しく承認リクエストが送信されていることを確認します。
- アクションの確認: 承認後または却下後のアクションが期待通りに実行されることを確認します。

さらに詳細な手順と簡単な説明
さらに詳細な手順と、簡単な説明です。
Apexバッチクラスの詳細説明
Apexバッチクラスは、Salesforceのデータ処理を大量に行うためのクラスです。
バッチクラスは、3つのメソッドを実装する必要があります:start、execute、およびfinishです。
- startメソッド: バッチ処理の開始時に実行され、処理対象のレコードを定義します。
- executeメソッド: 処理対象のレコードごとに実行されるメソッドで、ここで承認プロセスを開始するロジックを記述します。
- finishメソッド: バッチ処理が完了したときに実行されるメソッドです。
上記の例では、startメソッドで過去1時間以内に特定の日時項目を満たすレコードを選択しています。executeメソッドで、選択された各レコードに対して承認プロセスを開始します。
スケジュールクラスの詳細説明
スケジュールクラスは、Apexバッチクラスを定期的に実行するために使用されます。
Salesforceでは、System.scheduleメソッドを使用してスケジュールを設定します。スケジュールはCron式を使用して指定します。
- Cron式: Cron式は、スケジュールのタイミングを指定するための形式です。以下はCron式の例です:
0 0 * * * ?: 毎時0分に実行されるスケジュールを示します。
スケジュールの設定手順
スケジュールを設定するには、開発コンソールまたはApexクラスからスケジュールバッチを実行します。これにより、バッチクラスが指定されたスケジュールで実行されます。
テスト環境での検証
本番環境に適用する前に、必ずサンドボックス環境で設定をテストします。これにより、設定が正しく機能することを確認できます。
明確な条件設定
トリガー条件を明確に設定し、不要な承認プロセスが開始されないようにします。例えば、特定の日時項目が過去1時間以内であることを条件とする場合、次のように設定します:
Datetime oneHourAgo = System.now().addHours(-1);
Datetime now = System.now();
String query = 'SELECT Id FROM CustomObject__c WHERE DatetimeField__c >= :oneHourAgo AND DatetimeField__c <= :now';通知設定
承認者が承認リクエストを見逃さないように、適切な通知設定を行います。Salesforceでは、通知設定を行うことで承認リクエストが自動的にメールで送信されるようにできます。
トラブルシューティングのヒント
設定がうまく機能しない場合、以下の点を確認します:
- ログの確認: バッチクラスのログを確認し、どのステップで問題が発生しているかを特定します。
- ユーザー権限の確認: 承認者に必要な権限が付与されているか確認します。
- 開始条件の検証: 設定した条件が正しく適用されているか再確認します。
設定完了後のテスト方法
設定が完了したら、以下の手順でテストを行います:
- テストレコードの作成: 設定した条件を満たすテストレコードを作成します。
- プロセスの実行確認: バッチクラスが実行され、指定した日時条件で承認プロセスが正しく開始されることを確認します。
- 通知の確認: 承認者に正しく承認リクエストが送信されていることを確認します。
- アクションの確認: 承認後または却下後のアクションが期待通りに実行されることを確認します。
まとめ
Salesforceの承認プロセスを特定の日時項目に基づいて毎時自動的に開始する方法を学びました。
この手順に従うことで、ビジネスプロセスを効率的に管理し、タイムリーな意思決定をサポートすることができます。ApexバッチクラスとApexスケジュールクラスを組み合わせることで、Salesforceの初心者でも簡単に設定を行うことができます。
これにより、業務の自動化と効率化を実現しましょう。


コメント