特定の役職の場合に入力オブジェクトを読取専用にする¶
入力フォームを表示しているユーザーが特定の役職の場合に入力オブジェクトを読取専用にする方法を説明します。
注意
本設定は、V5.2.0以降のフォームで利用可能です。
V5.2.0より前のバージョンで作られたフォーム、Liteフォームおよび旧バージョン形式のフォーム(JSP/PDF)では利用できません。
ヒント
以降の説明では、申請・承認フォームを表示しているユーザーの情報取得や入力フォーム上のオブジェクトを読取専用にするために
JavaScript の API を利用します。
それぞれのAPIは、以下の名前空間で公開されています。JavaScript API リファレンス もあわせて参照ください。
- フォームを表示しているユーザーの情報の取得
- iftc.cwf.api.Forms
- iftc.cwf.api.WorkFlowNode
- オブジェクトの読取専用
- iftc.cwf.api.FormObject
ここでは、例として 「部長」が承認フォームを表示している場合に入力オブジェクトを読取専用にする設定 を行います。
JavaScriptファイルの登録
オブジェクトを「読取専用」にするJavaScriptを設定します。
以下のJavaScriptをテキストファイルに記述し、拡張子を"js"にして、JavaScriptファイルを作成します。
ファイル名は任意ですが、半角英数字に限ります。function setReadOnly(formObject){ //読取専用を設定 formObject.setReadOnly(true); }注意
登録するファイルはUTF-8形式で作成してください。
作成したJavaScriptファイルを外部ファイルとしてサーバーおよびフォームに登録します。
登録方法は 外部ファイルとしてJavaScriptを登録する を参照ください。
アクションの設定
「部長」が承認者の場合に読取専用とするため、承認フォームに設定します。
Formエディターのメニューバーで[オプション - アクション - ページ表示時のJavaScript登録]を選択します。
[ページ表示時のJavaScript編集]ダイアログに以下のJavaScriptを記述します。
なお、ラジオボタンなど同名オブジェクトが複数ある場合やマルチフォーム上のオブジェクトを読取専用にする場合は、記述内容が異なります。
詳細は、こちら を参照ください。//APIをインスタンス化 const forms = new iftc.cwf.api.Forms(); //現在処理中のユーザーの役職名を取得 const userAuth = forms.getCurrentWorkFlowNode().authorityName; //処理中のユーザーが「部長」の場合に読取専用を設定 if(userAuth == "部長"){ setReadOnly(new iftc.cwf.api.FormObject("読取専用にしたいオブジェクト名")); }
同名オブジェクトが複数存在する場合
ラジオボタンなど同名オブジェクトが複数存在する場合、以下のように記述します。
//APIをインスタンス化 const forms = new iftc.cwf.api.Forms(); //現在処理中のユーザーの役職名を取得 const userAuth = forms.getCurrentWorkFlowNode().authorityName; //処理中のユーザーが「部長」の場合に読取専用を設定 if(userAuth == "部長"){ //FormObjectインスタンスを取得 const formObject = forms.getFormObjectsByName("読取専用にしたいオブジェクト名"); //同名オブジェクトの数分、読取専用に変更 for(let i=0 ; i < formObject.length ; i++){ setReadOnly(formObject[i]); } }マルチフォーム上のオブジェクトの場合
マルチフォームが設定されたフォーム上のオブジェクトは、ページごとに区別する設定 の有無によって記述内容が異なります。
ページごとに区別しないオブジェクト
同名オブジェクトが複数存在する場合 と同じ方法で記述をします。
ページごとに区別するオブジェクト
すべてのページで読取専用とする場合、特定のページでのみ読取専用とする場合でそれぞれ以下のように記述します。
すべてのページで読取専用とする場合
//APIをインスタンス化 const forms = new iftc.cwf.api.Forms(); //現在処理中のユーザーの役職名を取得 const userAuth = forms.getCurrentWorkFlowNode().authorityName; //処理中のユーザーが「部長」の場合に読取専用に設定 if(userAuth == "部長"){ //FormObjectインスタンスを取得 const formObject = forms.getFormObjectsByName("読取専用にしたいオブジェクト名","フォーム識別子"); //ページ数に応じたオブジェクトの数分、読取専用を設定 for(let i=0 ; i < formObject.length ; i++){ setReadOnly(formObject[i]); } }特定のページでのみ読取専用とする場合
//APIをインスタンス化 const forms = new iftc.cwf.api.Forms(); //現在処理中のユーザーの役職名を取得 const userAuth = forms.getCurrentWorkFlowNode().authorityName; //処理中のユーザーが「部長」の場合に読取専用に設定 if(userAuth == "部長"){ setReadOnly(new iftc.cwf.api.FormObject("読取専用にしたいオブジェクト名","フォーム識別子",ページ番号)); }注釈
処理中のユーザーが代理・代行者の場合、代理・代行依頼者の役職名が取得されます。
ヒント
複数のオブジェクトを読取専用としたい場合、例のように「if文」以下に読取専用にする処理を複数記述します。
※APIのインスタンス化や、処理中ユーザーの役職名の取得の処理を複数回記載する必要はありません。
※FormObjectインスタンスを格納する変数名(formObject)は、オブジェクト毎に適宜変更してください。
例)//APIをインスタンス化 const forms = new iftc.cwf.api.Forms(); //現在処理中のユーザーの役職名を取得 const userAuth = forms.getCurrentWorkFlowNode().authorityName; //処理中のユーザーが「部長」の場合に読取専用に設定 if(userAuth == "部長"){ setReadOnly(new iftc.cwf.api.FormObject("ITEXT000")); //FormObjectインスタンスを取得 const formObject_IRADIO000 = forms.getFormObjectsByName("IRADIO000"); //同名オブジェクトの数分、読取専用に変更 for(let i=0 ; i < formObject_IRADIO000.length ; i++){ setReadOnly(formObject_IRADIO000[i]); } }役職名以外を条件とする場合、「authorityName」の部分を iftc.cwf.api.WorkFlowNodeクラス の任意のプロパティに変更します。
入力終了後、[OK]ボタンをクリックし[ページ表示時のJavaScriptの編集]ダイアログを閉じます。
フォームの保存、アップロード
Formエディターでフォームを保存し、サーバーにアップロードします。
動作確認
ワークフローシステムにログインし、申請/承認を行います。
役職が「部長」のユーザーが承認者の場合、指定した入力オブジェクトが読取専用になることを確認します。