ただ、helpに載っているフローは絵だけで実際の実装方法がわかりにくいという声を頂きましたので“私流”の実装方法を解説したいと思います。
注意1:実際の業務で「差し戻し処理」というのは、皆様の企業文化や事業スタイル・業務で異なる部分があるかと思います。ですので、少々調査した一般的と思われるやり方や私が日本企業に在籍していたときの処理を思い出してそれをフローに直しています。
注意2:SAP Build Process Automationは開発ツールですので、同じことを実装する方法は1つではありません。今回の記事はサンプルコード的に捉えて下さい。こうでなければならないというものではありません。(私流とはそういうことです。)
今回はヘルプのスナップショットで用いられているノートPCの購入申請をシナリオにしようと思います。
申請者がノートPCの購入を申請し、承認者はそれを受け取り承認か否認かを行うシナリオとします。
・承認者は指し戻しを行う場合、その理由を入力して申請者に差し戻します。
・上記はループすることも有りえます。(差し戻しされ、再申請して、それが再度差し戻しされることもある)
・差し戻しではなく申請を否認ということもあります。
設計するフローの全体像は以下のような形です。
Helpに記載のフローとは形や使用されるフォームの種類が違います。ステップの名前をわかりやすくしてみましたのでステップ名からなんとなくどんな処理を行っているのかはわかるかと思います。
カスタム変数としてはC_価格、C_型番、C_コメントの3つを設定します。C_はカスタム変数とわかるようにの前置詞です。
申請者が申請に使用するフォームは以下のような形とします。
単純に購入を申請するノートPCの型番とその価格を入力するのみです。
現状「トリガーフォームで入力された値は直接カスタム変数に代入できない」という制限がありますので、トリガーフォームでの入力値をカスタム変数へ代入するために以前紹介したダミーのDecisionを使用し、この出力でトリガーフォームの型番・価格の値をC_型番、C_価格に代入します。
承認フォームには申請内容と差し戻しをするかのチェックボックスと申請者に返すコメントを入力するテキストを配置しています。
差し戻しにチェックを入れ、下部の「否認・差し戻し」ボタンをクリックすると差し戻し、チェックを入れなければ否認という扱いです。現在承認フォームのアクションボタンは2つしか設置できないのでチェックボックスを利用しています。もし3つ利用できるようになったらチェックボックスは不要になるでしょう。
このフォームの入力では下記のように
先程設定したカスタム変数を利用します。実はこの部分が重要で、ここでトリガーフォームの値を利用すると差し戻し処理から戻ってきた時に表示される値がトリガーフォームの値になってしまいます。
出力は
このようにカスタム変数C_コメントにフォームの差し戻しコメントの値を代入させます。
承認フォームの差し戻しにチェックが入っていたら差し戻し処理、そうでなければ否認です。IF文を利用してこれを実装します。
申請フォームはトリガーとして使用しているのでそのまま差し戻し処理に使用することはできません。そのためほぼ同一の画面構成のフォームを作成します。
違いとして承認者からのコメントを表示できるようにしています。
また、作りながらここで申請自体を取り下げることもあるだろうと思ったので、このフォーム自体を承認フォームを利用して作り、再申請と申請破棄の2つのアクションボタンを表示しています。
このフォームの入力は
このようにカスタム変数を割り当てます。
また、出力で
このようにC_型番とC_価格をこのフォームで入力された値で上書きします。
では動作を確認してみます。まずは申請です。
購入したいノートPCの情報と価格を入力し、申請します。
上司が申請を受け取りました。30万円は高すぎたためか、コメントにその旨を入力し、差し戻しを行います。
申請者に差し戻しされました。仕方がないので申請したときより安価なものを選んで再申請します。
再申請されたものが上司に届きました。しかし、まだ高いので再度差し戻しを行います。
仕方がないので更に安価なものを選んで再度申請を行います。
上司に届きました。これで上司は申請を承認することにしました。
カスタム変数がどのように変化していくかを考えながら動作テストを行って下さい。
承認フォームで表示される値、及びカスタム変数に設定される値はどのような値か、差し戻し処理用フォームで表示される値はどのような値か?表示される値はどのような値か、更に差し戻し処理を行った場合はどうなるか?を考えながら変数を定義・設定すると理解が早くなると思います。
例えば承認フォームに表示される値は初回はトリガーフォームの値ですが、差し戻し処理後の2回目は差し戻し処理フォームで新規に設定された値でなくてはなりません。これを実現することがこれまでは非常に厄介でした。カスタム変数のお陰で非常に実装が楽になっています。
非常に便利な機能なのでぜひ使ってみて下さい。
使い込んでいくと….やはり変数に代入するだけの機能がほしいですね。私は開発にリクエストしようと思います。