Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
NaotoSakai
Product and Topic Expert
Product and Topic Expert
624
SAP Build Process Automationにカスタム変数機能が追加されました。
カスタム変数はプロセス内でグローバルに参照できる変数です。このような変数が存在しないことでワークフローの設計が厄介な点がありました。
これを使用することでワークフロー設計の自由度が向上します。

今回のブログではそれを使ったサンプルをご紹介したいと思います。
これまで難しかったり、ActionやAutomationを使用して解決していたことが解決できるようになります。

 

豆知識


まずはちょっとした豆知識をご紹介します。
承認フォームの受信者のところに下記のように複数人、下記の場合は3人受信者を記入したときと


このように分岐を入れて3つの承認フォームに1人ずつ受信者を割り当てた場合の動きの違いをご存知でしょうか?


これは
前者は「3人のうち誰かが処理を行えば、それの選択内容に応じて処理が続行(他の2人への承認依頼は消える)」
後者は「3人全てが承認・否認処理を行うことで後続の処理が続行。」
前者は受信者をグループにした場合も同じ動作です。
この様な違いがあります。要件に応じて使い分ける必要があります。

多数決を行うワークフロー


ワークフローで多数決を取りたいという要件を耳にします。多数決という場合、承認された数と否認された数の比較が必要ですからカウントが必要です。
これまでのSAP Build Process Automationではどこでも使える変数というのがありませんでしたのでカウントした値をどのように保管するかという問題がありました。今回のカスタム変数機能の追加で対応が楽になります。

まずはカスタム変数を設定します。カスタム変数はプロセス詳細の画面から設定できます。この画面はプロセス編集画面でなにもないところをクリックすると表示されます。


今回は下記のように


承認者数を意味するsupporterと否認者数を意味するdenierという2つの数値型の変数を設定しました。

これらの変数は定義しただけです。まずはこれらの変数に0を代入しておきたいですね。
これは以前解説したDecisionを使った方法で代入が可能です。


Decisionで必ずイコールになる条件、上記のスナップショットでは入力のパラメータの値と入力のパラメータの値(=同じ変数)を比較させ、一致すれば数値の0を返すように設定します。これでこのDecisionでは0が出力されることになります。

Decisionの出力値をカスタム変数に代入するのはDecisionの出力設定で行うことが出来ます。複数のカスタム変数に代入することも可能です。


多数決というのは基本的には全員の投票が必要です。その為豆知識で紹介した後者の方式を使用する必要があります。
フローを今回のサンプルでは3つに分岐させます。そしてそれぞれに承認フォームを配置します。



本来はこの3つの承認フォームは別々の受信者に送るべきですが、サンプル的に実行したいなら一人でも良いでしょう。その人に3通の承認依頼が届くことになります。

さて、ここからが今回のポイントです。承認フォームからは承認と否認の出力が出ています。承認されたのであればカスタム変数Supporterを+1し、否認されたのであればカスタム変数denierを+1するというロジックを追加します。これは先程0を代入したDecisionの応用です。

入力でカスタム変数Supporterあるいはdenierを設定し、それに+1した値を出力に設定します。






承認のときはSupporterに+1、否認のときはdinierに対して+1というロジックであることがわかるかと思います。
これを3つ全ての承認フォームの承認・否認の出力に対して行います。


否認の場合の繋げ先ですが、これは承認の後続処理と同じところに繋げたいです。しかしながら


単純には接続できません。そのためここで一つトリックを使用します。
適当なDecisionを作ってください。これは実質何も使用しませんので動きさえすれば中身は何でも良いです。
その作ったDecisionを承認の次に配置し、否認からの処理を繋げます。


これで否認の場合の後続処理が承認のものと同じになります。
これを残りの承認フォームの後続に対しても行います。


全ての承認フォームの後続処理が分岐からの戻り処理となり、1つになりました。
次に行うのはSupporterとdinierの比較です。

条件を追加します。


条件式としては


このように suppoter > denier です。これが成立すれば多数決上は承認、成立しなければ否認になります。
あとは多数決結果による承認・否認の処理に入ります。


これで完成です。
*この多数決フローの場合、本来はトリガはAPIであるはずですが今回はサンプルのためトリガとしてフォームを使用しています。このフォームには何もコンテンツはありません。

カスタム変数がない場合、ある一つの変数に対して加算という処理ができないので意外とこの多数決処理は難しいのです。私は加算を行う処理と現在の値を呼び出す処理をREST APIとして別に作成してActionを使用して呼び出すことで対応していました。マニュアルのサンプルで説明しているRework、いわゆる申請の差し戻しという処理に対してもこの機能で楽に対応する事ができます。

更にフレキシブルな処理が可能になったSAP Build Process Automation、ぜひ試してみてください。