はじめに
皆さんこんにちは、Tech Blog初参加の川口です さて、みなさん、Visual Workflowを使ったことありますか? 今回は、さらに踏み込んだVisualforceのApexプラグインについて書きたいと思います。
最初にVisual WorkFlowとは
Apexプラグインの説明に入る前に、少しだけ、Visual Workflowの説明をしたいと思います。 Visual Workflowは、Spring '12 にリリースされた機能で、ワークフローやProcess Builerで対応できない複雑すぎるプロセスや高度な機能を、エンドユーザがドラックアンドドロップで、コードを記述せず作成できるツールです。 また、エンドユーザも含めて使える標準機能で開発することによって変更を柔軟に対応でき、開発工数削減、品質向上、顧客のROI向上に繋がりそうなツールだと考えています。 ワークフローやProcess Builerと比べて、 下記の操作がある場合、使用をお勧めされています。
- 複雑な分岐ロジック (特定の条件が true の場合、さらに条件を評価する)
- 複数のレコードで並び替え、反復処理、操作を行う
- 情報収集するウィザードを作成しユーザが入力した情報を使用してSalesforce でアクションを実行する
活用する場面では下記場面を提案されています。
- リアルタイム見積り
- カスタマーセンターの電話スクリプト
- 顧客の問題識別
- アップセル・クロスセル
- ウィザード型画面
- タスク・イベントの自動化
- 社内外調査
など、 各機能比較を下の表にまとめました。
細かい説明ができず申し訳ありませんが、Visual Workflowについて理解いただけたと思います。
Apexプラグイン
Apexプラグインは、Visual WorkflowでApexで書かれた汎用機能をフローのステップとして選択できるようにするための拡張機能です。 また、個別開発レベルの高度な機能、再利用性の高い汎用機能を切り出してプラグインで提供することで、開発後の仕様変更や追加要望が発生しそうな部分柔軟に対応することが可能だと考えています。
それでは、開発方法について説明します。
プラグイン作成には下記の3つを実装する必要があります。
- Process.Pluginインターフェイス プラグインのインターフェースを実装します。
- describe() プラグインの説明を記述します。 内容は、プラグインの引数、戻り値、仕様説明です。 この情報は、VisualWorkflowに伝えられパレットに表示されます。
- invoke() 実際の処理を記述します。
次に、簡単なサンプルを紹介します
処理内容は、特定の取引先責任者を上司に持つ取引先責任者の名字を一括で変更するプログラムを作成しました。
プログラムをSalesforceに登録すると、CloudFlowDesignerで選択できるようになります。 [パレット]タブにプラグインが表示され、describeメソッドのプラグインの説明が表示されます。
そして、引数情報は、[キャンバス]に配置されたフロー要素の設定画面に表示されています。
戻り値情報も同様に確認できます。
動作テスト
テストデータは、同じ上司を持つ複数の取引先責任者のデータを準備します。 下記の図は、取引先責任者の名前が「PTest Child」が、上司「PTest Parent」に紐付いていることを確認できます。
今回は、バックグランドから実行する方法を選択します。 ProcessBuilderを使用して、取引先責任者が更新された際に名字を評価し、フロー(Visual Workflowで作成したもの)を呼出しす設定を行いました。
それでは動作テストを始めます。 上司の名字を「PuluginTest」に変更すると、 部下の名前が一括で変更され、プラグインが正常に動作していることを確認できました。
開発の所感
プラグインの開発は通常のApex開発とあまり変わりませんが、Visual Workflowでは明示的なエラーハンドリングをしなければいけないためメッセージのやり取りについてはバッチの実装に近い感じがあります。
ユニットテストケース
プラグインのユニットテストケースの書き方について記載しておきます。 特別な書き方はなく、通所のApexテストケースと同じです。
最後に
Apexプラグインの説明は以上になります。 いかがでしょうか、「おおーー!、是非使ってみたい!!」という気持ちになったでしょうか? 私は、Apexプラグインを開発したときに衝撃を受けました。 開発者は、Apexプラグインで高度なビジネスロジックを部品として提供し、エンドユーザはそのプラグインを使って簡単にビジネスロジックを作成できる。 このことにより、開発工数削減、品質向上、顧客のROI向上に繋がるのではないかと考えています。
参考資料