6.5.1 アクションの内容を記述するスクリプトの作成

ScriptのYAML内のラベル”file:”で指定するスクリプトを予め作成する必要があります。スクリプトはJavaScriptで記述してください。以下に各コンポーネントでアクションが実行されるタイミングおよび呼び出される関数名の一覧を示します。お客様はスクリプト内に該当する関数名を定義し、アクションの内容を記述してください。

(表)各コンポーネントでの実行タイミングおよび関数名一覧

コンポーネント アクションが実行される
タイミング
スクリプト内で
呼び出される関数名
関数の引数
データ形式 設定する値
Grid 画面の表示時 handleLoad - -
Button ボタンのクリック時 handleClick - -
Form 値の変更時 handleChange Object 変更後の値
選択肢の変更時 handleChange Object 変更後の値
チェックボックスのチェック変更時 handleChange boolean 変更後の値
フォーカスを外した時 handleBlur - -
Table セル値の変更時 handleCellValueChange string 変更後の値
選択行の変更時 handleSelectionModelChange Array<string> 選択行のID

以下に、アクションの内容を記述する際に使用可能である関数名の一覧を示します。

(表)アクションの内容を記述する際に使用可能である関数名一覧

クラス名 関数名 関数の引数 アクションの内容
データ形式 変数名 設定する値
OIWindow open string - type ”move”,”new_window”,”new_tab”のいずれかを指定する。
”move”:アクティブタブに指定したページを表示する。
”new_window”:新しいウィンドウで指定したページを表示する。
”new_tab”:新しいタブで指定したページを表示する。
ページ、またはUIを開く。
Object options -
string url typeが”move”,”new_window”,”new_tab”の場合、urlに表示するページのURLを指定する。
例){url:'/sys_task'}
OIWindow showMessage string - type メッセージをスナックバーで表示する場合は”snackbar”、ダイアログで表示する場合は”modal”を指定する。 スナックバー、またはメッセージダイアログを表示する。Typeに”modal”を指定した場合、第1ボタンがクリックされたときは”ok”、第2ボタンがクリックされたときは”cancel”を戻り値にPromise<string>型で設定する。
Object options -
string typeMess typeが”snackbar”の場合、”error”、”warning”、”info”、”success”のいずれかを指定する。typeが”modal”の場合は、ボタンを2つ表示し、どちらが押されたかを戻り値で受け取ることができる。
string content 表示するメッセージを指定する。
string title typeが”modal”の場合、タイトルを指定する。
Object btnOk typeが”modal”の場合、第1ボタンのラベルに表示する内容を設定する。
string btnCancel typeが”modal”の場合、第2ボタンのラベルに表示する内容を設定する。
btnOk,btnCancelをどちらも省略した場合は「OK」ボタンが表示される。
OIWindow refresh string - type リフレッシュするデータを”form”、”table”のいずれかで指定する。 フォーム、テーブルの表示データをリフレッシュする。
OIData.insertCurrentRecordで登録したデータやOIData.deleteCurrentRecordによるデータの削除をフォームやテーブルに反映する場合に使用する。
string - name リフレッシュする対象のコンポーネント名を指定する。
OIData insertCurrentRecord Object currentRecord - GraphQLを使用して、データベースの任意のテーブルにレコードを挿入する。戻り値にResponse BodyをPromise<Object>型で設定する。
string table レコードを挿入するテーブル名を指定する。
Object 挿入レコードのフィールド名 挿入レコードのフィールドに設定する値を指定する。任意の数を指定できるが、挿入先テーブルのフィールド名と対応している必要がある。フィールドが文字列型の場合はstring、数値型の場合はnumberなど、設定する値はフィールドの型に合わせる。
string - ctxId 挿入するレコードと関連付けるコンテキストIDを指定する。
OIData getRecords string - tableName 取得するレコードのテーブル名を指定する。 Ops I REST API graphQLを使用して、データベースの任意のテーブルのレコードを取得し、戻り値にResponse BodyをPromise<Object>型で設定する。
string - obj レコード取得条件のGraphQLクエリを指定する。
例1)取得するフィールドを指定する場合: '{field1 field2}'
例2)指定したレコードIDと同じレコードのfield1, field2を取得する場合: '( where: { id: {_eq: ”レコードID” } }){field1 field2}}'
OIData updateCurrentRecord Object currentRecord - Ops I REST API graphQLを使用してデータベースのテーブルの任意のレコードを更新し、戻り値にResponse BodyをPromise<Object>型で設定する。
string table 必須。更新するレコードのテーブル名を指定する。
string id 必須。更新するレコードのIDを指定する。
Object 更新レコードのフィールド名 更新するレコードのフィールドに設定する値を指定する。任意の数を指定できるが、更新先テーブルのフィールド名と対応している必要がある。フィールドが文字列型の場合はstring、数値型の場合はnumberなど、設定する値をフィールドの型に合わせる。
OIData deleteCurrentRecord string - tableName 削除するレコードのテーブル名を指定する。 Ops I REST API graphQLを使用して、データベースのテーブルの任意のレコードを削除し、戻り値にResponse BodyをPromise<Object>型で設定する。
string - currentId 削除するレコードのIDを指定する。
OIData query Object query Ops I REST API graphQLを使用して任意のGraphQLクエリを実行し、戻り値にResponse BodyをPromise<Object>型で設定する。
string query 実行するGraphQLクエリを文字列で指定する。
Object variables GraphQLクエリに埋め込まれる変数を指定する。
OIApi call string - url 実行するRestAPIのURLを指定する。 RestAPIを実行し、戻り値にResponse BodyをPromise<Object>型で設定する。
Object - option パラメータを指定する。省略時は{}が設定される。
例){method: 'GET', headers: {'Content-Type': 'application/json'}
boolean - showError RestAPIでエラーが発生した場合、エラー内容を画面に表示するか否かを指定する。省略した場合、trueが設定される。
OIForm setStatus string - field ステータスを設定する対象のフィールド名を指定する。 フォームにあるフィールドのステータスを設定する。バリデーションエラーを出す機能があるフィールドタイプのみ対応。
string - status ステータスを設定する。”error”を設定するとエラー状態となり、それ以外はエラー状態が解除される。
OIForm setHelperText string - field ヘルパーテキストを設定する対象のフィールド名を指定する。 フォームのフィールドのヘルパーテキストを設定する。バリデーションエラーメッセージを出す機能があるフィールドタイプのみ対応。
string - helperText ヘルパーテキストを設定する。
OIForm removeHelperText string - field ヘルパーテキストを削除するフィールドの名前を指定する。 フォームのフィールドのヘルパーテキストを削除する。バリデーションエラーメッセージを出す機能があるフィールドタイプのみ対応。
OICommon※ show - - - - コンポーネントを表示する。
OICommon※ hide - - - - コンポーネントを隠す。
OICommon※ enable - - - - コンポーネントを使用可能にする。
OICommon※ disable - - - - コンポーネントを使用不可にする。
OICommon※ getComponent Object options - 指定したコンポーネントの情報を取得し、戻り値にPromise<Object>型で設定する。
・コンポーネントが”form”の場合はワークフローの情報を設定し、”table”の場合は選択行のUUIDを設定する。
戻り値の詳細は「(表)getComponentの戻り値」を参照。
boolean allForm trueを指定した場合、OICommon(コンポーネント名)で指定したコンポーネントに加えて全フォームを取得する。
OICommon※ setComponent Object - value 更新する値を指定する。 指定したコンポーネントの情報を更新する。コンポーネントが"form"の場合のみ使用できる。valueにはgetComponentで取得できる戻り値のobjectを更新した値を指定。
また更新できる値はobject.current.tableに設定されるレコードのデータの値のみ。それ以外の値は更新しない。
OICommon getUserProfile - - - - ログインユーザーのプロファイルを取得し、戻り値にPromise<Object>型で設定する。static関数。
OICommon getDateWithUserTimezone - - - - 現在日時(YYYY-MM-DDTHH:mm:ssZ)をログインユーザーのタイムゾーンで取得し、戻り値にstring型で設定する。static関数。
例)2022-09-21T15:36:20+09:00
OICommon showLoadingScreen - - - - ローディング画面を表示する。static関数。
表示されているローディング画面を解除する場合、showLoadingScreenの呼び出し回数と同数のhideLoadingScreenの呼び出しが必要。
ボタンなどのユーザーによる操作の処理でOIData.insertCurrentRecord、OIWorkflow.respond、OIWorkflow.startなどデータ変更や実行を行う場合は、showLoadingScreenを実行して多重実行を防ぐ必要がある。
OICommon hideLoadingScreen - - - - ローディング画面の表示を解除する。static関数。
表示されているローディング画面を解除する場合、showLoadingScreenの呼び出し回数と同数のhideLoadingScreenの呼び出しが必要。
try-finally節など使用して、エラー時でもhideLoadingScreenが必ず呼ばれるようにしてください。呼ばれない場合、ローディング画面のままとなり画面操作ができなくなります。
このメソッドを呼び出した際に、ローディング画面が表示されていない場合、このメソッドは画面に一切の影響を及ぼさず、正常に終了する。
OICommon getLocation - - - - 現在の文書の現在位置についての情報をWindow.location(ブラウザ組み込みのWeb API)で取得し、戻り値にPromise<Object>型で設定する。
戻り値には以下の情報を設定する。戻り値の詳細はWindow.locationの仕様を確認する。
- hash
- host
- hostname
- href
- origin
- pathname
- port
- protocol
- search
static関数。
OIWorkflow run Object - body API”practice-contexts?startWorkflow=true”のRequest Bodyに設定される。実行対象の特定に使用するため、workflowIDまたはworkflowNameのフィールドが必要。 ワークフローを実行し、実行結果※1を戻り値にPromise<Object>型で設定する。
※1 parentContextID(親のpractice-contextID)を指定した場合は
API”practice-contexts/{親のpractice-contextID}?child_context_ids=${practice-contextID}”のResponse Body、
parentContextID(親のpractice-contextID)を指定していない場合は
API”practice-contexts?startWorkflow=true”のResponse Bodyを設定する。
string - parentContextID 親のpractice-contextID。指定した場合、開始されたワークフローが子コンテキストとしてリンクされる。
OIWorkflow respond string - contextID practice-contextID ワークフローに応答し、API”practice-contexts/{contextID}/{activityName}”のResponse BodyをPromise<Object>型で戻り値に設定する。
string - activityName 返答するactivityName
Object - params API”practice-contexts/{contextID}/{activityName}”のRequest Bodyに設定する内容。
OIWorkflow start string - contextID 実行するワークフローのpractice-contextID 指定されたpractice-contextIDに関連するワークフローを実行し、実行結果をPromise<Object>型で戻り値に設定する。
Object - body API”practice-contexts/{contextID}/workflow/execute”のRequest Bodyに設定する内容。

※ 対象コンポーネント名を、OICommonクラスのコンストラクタの引数で指定します。

(表)getComponentの戻り値

指定した
コンポーネント
変数名 設定する値
form array activities 実行中または実行されたステップの情報(説明やステータス、定義など)のリスト。1度も実行されていないステップの情報は含まれない。
Object activitySelected activitiesのうち、ステータスがPendingのステップの情報(説明やステータス、定義など)が設定される。
Object context ワークフローの情報(ステップやアサインされたユーザーなど)が設定される。
Object current.table formに表示しているレコードのデータ。辞書形式でkeyにテーブル名、valueにフィールドとデータの辞書が設定される。
Object currentActivity 予約フィールド。常にnullが設定される。
Object schedule ワークフローのスケジュールの情報が設定される。
Object workflow manifest.yamlで定義したワークフローの情報が設定される。
table string rowSelected 選択しているテーブルの行のデータを識別するuuidが設定される。

<定義例>

function handleClick() {
  (async () => {

    const oiCommon = new OICommon('lend_vm_form');
    const formContext = await oiCommon.getComponent();

    // 1. Update current record.
    const table = formContext?.lend_vm_form?.current.table;
    const tableName = Object.keys(table)[0];
    const currentRecord = { …table[tableName]};
    currentRecord.table = 'u_' + tableName;
    const now = new Date();
    const nowString 
    = now.getFullYear()
    + (now.getMonth() + 1).toString().padStart(2,"0") 
    + now.getDate().toString().padStart(2,"0") 
    + now.getHours().toString().padStart(2,"0") 
    + now.getMinutes().toString().padStart(2,"0") 
    + now.getSeconds().toString().padStart(2,"0");
    
    var prefix = "";
    if(currentRecord.sys_name == "order_mgt_sys"){
      prefix= "XXX";
    }else if(currentRecord.sys_name == "customer_mgt_sys"){
      prefix= "YYY";
    }
    else{
      prefix="ZZZ";
    }
    currentRecord.vm_name = prefix + nowString;
    currentRecord.log_result = "VM生成時のログ結果を出力";
    await OIData.updateCurrentRecord(currentRecord);

    // 2.Respond to task.
    const currentTaskname = formContext?.lend_vm_form?.activitySelected?.name;
    const contextID = formContext?.lend_vm_form?.context?.id;

    await OIWorkflow.respond(contextID,currentTaskname,
      {
        'oi_response': 'accept',
      });

    // 3.Transition to workflow list.
    OIWindow.open('move', {'url': "/sys_task/task_workflow"});
  })();
}