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クラスのコンストラクタの引数で指定します。
指定した コンポーネント |
型 | 変数名 | 設定する値 |
---|---|---|---|
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"});
})();
}