IM-FormaDesigner for Accel Platform プログラミングガイド 第16版 2023-10-01

14.1. IM-Workflow で、申請、承認前に任意のプログラムを実行する方法

ここでは、IM-FormaDesigner のアプリケーション種別「 IM-Workflow 」にて、申請、承認ボタンを押下したときに、任意のプログラムを実行する方法を説明します。
IM-Workflow の標準処理画面を表示する前のタイミングで任意の処理を実行し、処理がエラーの場合は、画面上にメッセージを表示します。
これにより、アクション設定とは異なるタイミングで任意の処理を実行することができます。

コラム

アクション設定は、 IM-BIS 導入環境で利用することができます。

コラム

IM-BIS で作成したBISフロー/ワークフローでも同様の手順にて任意のプログラムを実行できます。

14.1.1. 概要

任意のプログラムを下記の方法に沿って作成し、テンプレートHTMLに組み込みます。
テンプレートHTMLは、テナント上のすべてのアプリケーションで共有されますが、共有範囲を限定することも可能です。
詳細は、「 intra-mart Developer Blog - チュートリアル 」を参照してください。

14.1.2. 任意プログラムの実装方法

任意のプログラムを実行するためには、以下を実装する必要があります。
  • 配列 window.forma.optionalProcess への実行したい関数の追加

  • 戻り値の設定 下記のプロパティを持つObject型のオブジェクトを作成
    • error : エラーフラグ  処理に失敗した場合は true 、成功した場合はfalse
    • message : エラーメッセージ  設定したメッセージは実行画面に出力されます。

14.1.2.1. 実装例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if (!window.forma) {
    window.forma = {};
}
if (!window.forma.optionalProcess) {
    window.forma.optionalProcess = [];
}


var imSampleExecutor = function(request) {
    var csjsResult = {
        error: false,
        message: ''
    };

    /*
     * ここに実行する処理を記述します。
     */

    //処理がエラーの場合、実行画面にメッセージを返却します。
    csjsResult.error = false;
    csjsResult.message = '';
    return csjsResult;
}

//window.forma.optionalProcessは、申請/承認ボタン押下時に実行されます。
window.forma.optionalProcess.push(imSampleExecutor);

14.1.3. テンプレートHTMLの実装

テンプレートHTMLに実行したいプログラムを読み込みます。

IM-FormaDesigner のアプリケーションが実行される画面は、「テンプレートHTML」というベースとなるHTMLファイル上に各画面アイテムのHTMLを配置して生成する仕組みです。
scriptタグを記述することで、アプリケーションの実行画面にて任意のスクリプトファイルを読み込ませることができます。
<imart type="head">
<link rel="stylesheet" type="text/css" href="forma/css/print.css" media="print"></link>
<link rel="stylesheet" type="text/css" href="forma/css/style.css"></link>
<link rel="stylesheet" type="text/css" href="forma/css/forma-ui-icons.css"></link>
<imart type="condition" validity=imfrBindData.isSmartphone>
<link rel="stylesheet" type="text/css" href="forma/css/smartphone.css"></link>
</imart>
<link rel="stylesheet" type="text/css" href="annotation/css/annotation_style.css"></link>
<link rel="stylesheet" type="text/css" href="annotation/css/annotation-ui-icons.css"></link>

<imart type="jsspRpc" name="formaServerLogic" page="forma/common/ajax/server_logic" />
<script type="text/javascript" src="forma/csjs/im_forma_click.js"></script>
<script type="text/javascript" src="forma/csjs/im_forma.js"></script>

%HEADER%

<imart type="string" value=imfrBindData.outputScript></imart>
<imart type="imACMSearch" name="imMasterSaerchObj"/>
<script type="text/javascript" src="csjs/im_window.js"></script>
<script type="text/javascript" src="csjs/im_json.js"></script>
<script type="text/javascript" src="csjs/im_date.js"></script>
<script type="text/javascript" src="csjs/im_code_point_util.js"></script>
<script type="text/javascript" src="forma/csjs/im_forma_util.js"></script>
<script type="text/javascript" src="forma/csjs/im_forma_tabs.js"></script>
<!-- 任意のプログラムを追加。 -->
<script type="text/javascript" src="forma/csjs/test.js"></script>
<script type="text/javascript" src="forma/csjs/jquery.contextmenu.r2.packed.js"></script>

<imart type="condition" validity=imfrBindData.isFooterDisplay negative>

コラム

外部ファイルで定義したスクリプトをアプリケーションに組み込む手順については、「 intra-mart Developer Blog - チュートリアル 」を参照してください。