SAP Build Process AutomationでJava Scriptが使用できるようになりました。

Estimated read time 1 min read

SAP Build Process Automationの2024/10のアップデートにより新たに「スクリプトタスク」が使用できるようになりました。これまでは自動化(RPA)の中でJava Scriptを使用する事が出来ましたが、今回追加されたのはプロセス(=ワークフロー)上でJava Scriptを実行できる機能です。なかなか便利な機能ですのでこれの紹介と使用に関するポイントを解説したいと思います。

スクリプトタスクはプロセス上で使用可能なタスクです。

 

 

 

 

 

 

 

 

この様にフォームなどと同様に追加することが出来ます。

 

スクリプトの編集用のエディタです。サンプルというか例のようなコードがコメントアウトされた形で入っています。(これは削除したほうが良いでしょうね。)

ここに実行したいJavaScriptのコードを書いていく形になります。
どのようなコードを書くのか?ですが、基本的には「カスタム変数に値を代入するコード」となります。
現在、書ける(実行できる)コードには制限があります。重要なものを挙げますと

フォームなどで設定しているフィールドの値は「読み取り専用の変数」としてアクセス可能です。上書きは出来ません。カスタム変数に対しては読み取り・代入(上書き)が可能です。言語仕様としてはECMA 5.1のJava Scriptに従い、サーバーサイドJava Scriptとして実行されます。importやRequire等で外部のライブラリを読み込むということは出来ません。

フォーム等のフィールドの値はコンテキストログとしても保管されるユーザーさんが入力した情報です。これは監査等のためにログを使用する場合を考えると、上書き出来ないというのは納得できるかなと思います。
私はこのスクリプトの中で外部のサービスにアクセスしてそこから情報を取ってということが出来ないかなと試してみたのですが、これは厳しそうです。ImportやRequireが使えないのと、FetchではPromiseの問題でエラーとなります。外部へのアクセスを行いたいなら素直にActionを使用するべきでしょう。

スクリプトの中でフォームやカスタム変数にアクセスするには

$.context.<Formname>.<Fieldname>
のような形でアクセスします。注意事項としてトリガー(フォーム)の値は
$.context.startEvent.<Fieldname>
 です。しかしながら直接タイピングするのではなくスクリプトエディタ右側の

 

 

 

 

 

 

プロセス一覧で表示されているフィールド名、変数名をクリックするとコードにその名称が代入されますのでこれを利用するべきでしょう。

カスタム変数にスクリプトから代入できるということで、以前私が書いたデータ型の変換 等はより簡単になります。ステップが減らせそうですね。

スクリプトのテスト実行もこのボタンから行うことも出来ます。
しかし、このコードの場合$.context.custom.customvariable1や$.context.form_form1_1.num1は本来ワークフロープロセスインスタンスで取得する値なのでうまく実行することが出来ません。そのため

Test Variableタブの方でそれらの変数の宣言と初期値の代入を行う必要があります。
テスト実行してみましょう。

実行できました。カスタム変数には数値型フィールドの値を文字列型に変換した値と指定した文字列が連結されて代入されています。

テスト実行の際には少々注意が必要です。もしコードエディタ中でコードが選択状態になっている場合、その部分だけがテスト実行されます。これは便利といえば便利ですが何故うまく実行されないんだ?と悩むポイントになるかもしれません。意図的にコードの一部分を実行させたいならともかく、そうでないならテスト実行前に何処か別の場所をクリックしてコードを選択状態から外し実行するという癖をつけたほうが良いかもしれません。また、私が試した感じだとこのデバッグ実行はブラウザのJavaScriptで実行される感があります。(toLocalString()等の挙動から)。本来はサーバーサイドJavaScriptで実行されるはずですので挙動の違いが有りました。書式のチェック程度に留めてテスト環境へのデプロイで再度テストは必要でしょう。

なお、スクリプトタスクのスクリプトではreturn等のコードは必要ありません。このスクリプトタスクで例えば何か計算を行ってその結果をプロセスの次のフェーズで使いたいという場合は、カスタム変数にその結果を代入して使用するという形を取る必要があります。そのため、大半の場合コードの終わりはカスタム変数への値の代入という形になります。

コードエディタではインテリセンスのような自動補完機能が効きますので私は少々遊んでみました。
どうもSAP Workflow Managementのプロパティが使えるようです。
https://help.sap.com/docs/workflow-capability/workflow-cloud-foundry/cheat-sheet-for-workflow-expressions
その中で現在のSAP Build Process Automationでは簡単には取得できないなあという物がありましたので紹介します。プロセス中で”その前の承認や申請が完了した時刻”というのは実は参照が難しいという問題があります。これは行うとしたらアクションを用いてSAP Build Process AutomationのAPIにアクセスしてログから取得という形になると考えられますが、これが実は簡単に取得できます。

$.usertasks.<Formname>.last.completedAt

という変数を参照するとそのフォーム(承認含む)の完了日時を参照することが出来ます。
(<Formname>の部分はそのフォームの変数にアクセスする際の$.context.<Formname>.<Fieldname>のFormname>と同じですのでそれを使用して下さい。)

私がテストしたところなのですが、テスト実行ではtoLocaleString()でのロケール指定の書式・時刻変換が効くのですが、デプロイ後はtoLocaleString(‘ja-JP’)のようにロケールを指定してもJSTや日本の日付書式に変換ができませんでした。そのため上記の様に手動で+9時間を行ったり、日付書式を日本で使用される形式に変換しています。

トリガーの日時は取得できませんので必要な場合はトリガー後にカスタム変数に現在の日時を設定するスクリプトタスクを記述して下さい。

過去、私はSAP Build Process Automationのちょっとしたテクニック ー 変数定義 という記事を公開しました。その中でDecisionを利用した変数設定方法を解説しました。実は現在の日時(処理を行った日時)の取得と代入(設定)というのはDecisionを使用した方法では行うことが出来ません。スクリプトタスクを使用すると日時を変数で持つことが出来るのでそれを利用して処理や表示を変えるという事もできます。

パワーユーザーの方、ぜひスクリプトタスクを使いこなして下さい。

 

​ SAP Build Process Automationの2024/10のアップデートにより新たに「スクリプトタスク」が使用できるようになりました。これまでは自動化(RPA)の中でJava Scriptを使用する事が出来ましたが、今回追加されたのはプロセス(=ワークフロー)上でJava Scriptを実行できる機能です。なかなか便利な機能ですのでこれの紹介と使用に関するポイントを解説したいと思います。スクリプトタスクはプロセス上で使用可能なタスクです。        この様にフォームなどと同様に追加することが出来ます。 スクリプトの編集用のエディタです。サンプルというか例のようなコードがコメントアウトされた形で入っています。(これは削除したほうが良いでしょうね。)ここに実行したいJavaScriptのコードを書いていく形になります。どのようなコードを書くのか?ですが、基本的には「カスタム変数に値を代入するコード」となります。現在、書ける(実行できる)コードには制限があります。重要なものを挙げますとフォームなどで設定しているフィールドの値は「読み取り専用の変数」としてアクセス可能です。上書きは出来ません。カスタム変数に対しては読み取り・代入(上書き)が可能です。言語仕様としてはECMA 5.1のJava Scriptに従い、サーバーサイドJava Scriptとして実行されます。importやRequire等で外部のライブラリを読み込むということは出来ません。フォーム等のフィールドの値はコンテキストログとしても保管されるユーザーさんが入力した情報です。これは監査等のためにログを使用する場合を考えると、上書き出来ないというのは納得できるかなと思います。私はこのスクリプトの中で外部のサービスにアクセスしてそこから情報を取ってということが出来ないかなと試してみたのですが、これは厳しそうです。ImportやRequireが使えないのと、FetchではPromiseの問題でエラーとなります。外部へのアクセスを行いたいなら素直にActionを使用するべきでしょう。スクリプトの中でフォームやカスタム変数にアクセスするには$.context.<Formname>.<Fieldname>のような形でアクセスします。注意事項としてトリガー(フォーム)の値は$.context.startEvent.<Fieldname> です。しかしながら直接タイピングするのではなくスクリプトエディタ右側の      プロセス一覧で表示されているフィールド名、変数名をクリックするとコードにその名称が代入されますのでこれを利用するべきでしょう。カスタム変数にスクリプトから代入できるということで、以前私が書いたデータ型の変換 等はより簡単になります。ステップが減らせそうですね。スクリプトのテスト実行もこのボタンから行うことも出来ます。しかし、このコードの場合$.context.custom.customvariable1や$.context.form_form1_1.num1は本来ワークフロープロセスインスタンスで取得する値なのでうまく実行することが出来ません。そのためTest Variableタブの方でそれらの変数の宣言と初期値の代入を行う必要があります。テスト実行してみましょう。実行できました。カスタム変数には数値型フィールドの値を文字列型に変換した値と指定した文字列が連結されて代入されています。テスト実行の際には少々注意が必要です。もしコードエディタ中でコードが選択状態になっている場合、その部分だけがテスト実行されます。これは便利といえば便利ですが何故うまく実行されないんだ?と悩むポイントになるかもしれません。意図的にコードの一部分を実行させたいならともかく、そうでないならテスト実行前に何処か別の場所をクリックしてコードを選択状態から外し実行するという癖をつけたほうが良いかもしれません。また、私が試した感じだとこのデバッグ実行はブラウザのJavaScriptで実行される感があります。(toLocalString()等の挙動から)。本来はサーバーサイドJavaScriptで実行されるはずですので挙動の違いが有りました。書式のチェック程度に留めてテスト環境へのデプロイで再度テストは必要でしょう。なお、スクリプトタスクのスクリプトではreturn等のコードは必要ありません。このスクリプトタスクで例えば何か計算を行ってその結果をプロセスの次のフェーズで使いたいという場合は、カスタム変数にその結果を代入して使用するという形を取る必要があります。そのため、大半の場合コードの終わりはカスタム変数への値の代入という形になります。コードエディタではインテリセンスのような自動補完機能が効きますので私は少々遊んでみました。どうもSAP Workflow Managementのプロパティが使えるようです。https://help.sap.com/docs/workflow-capability/workflow-cloud-foundry/cheat-sheet-for-workflow-expressionsその中で現在のSAP Build Process Automationでは簡単には取得できないなあという物がありましたので紹介します。プロセス中で”その前の承認や申請が完了した時刻”というのは実は参照が難しいという問題があります。これは行うとしたらアクションを用いてSAP Build Process AutomationのAPIにアクセスしてログから取得という形になると考えられますが、これが実は簡単に取得できます。$.usertasks.<Formname>.last.completedAtという変数を参照するとそのフォーム(承認含む)の完了日時を参照することが出来ます。(<Formname>の部分はそのフォームの変数にアクセスする際の$.context.<Formname>.<Fieldname>のFormname>と同じですのでそれを使用して下さい。)私がテストしたところなのですが、テスト実行ではtoLocaleString()でのロケール指定の書式・時刻変換が効くのですが、デプロイ後はtoLocaleString(‘ja-JP’)のようにロケールを指定してもJSTや日本の日付書式に変換ができませんでした。そのため上記の様に手動で+9時間を行ったり、日付書式を日本で使用される形式に変換しています。トリガーの日時は取得できませんので必要な場合はトリガー後にカスタム変数に現在の日時を設定するスクリプトタスクを記述して下さい。過去、私はSAP Build Process Automationのちょっとしたテクニック ー 変数定義 という記事を公開しました。その中でDecisionを利用した変数設定方法を解説しました。実は現在の日時(処理を行った日時)の取得と代入(設定)というのはDecisionを使用した方法では行うことが出来ません。スクリプトタスクを使用すると日時を変数で持つことが出来るのでそれを利用して処理や表示を変えるという事もできます。パワーユーザーの方、ぜひスクリプトタスクを使いこなして下さい。   Read More Technology Blogs by SAP articles 

#SAP

#SAPTechnologyblog

You May Also Like

More From Author