日本語がJAVAに変換！？RPAのAI「ワンダーロボ」関数呼び出し、画面初期処理、保存前後処理の設定方法

###ステップ1.関数呼び出し
###ステップ2.画面初期処理
###ステップ3.保存前処理
###ステップ4.保存後処理

---
###ステップ1.関数呼び出し
最初に、関数を呼び出す方法を説明します。例として、「部品管理画面」の「個数」の処理関数を説明します。
関数を呼び出す方法は図1赤枠内の設定の通りです。
※図1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/fc0d87ff-4002-0413-c68e-0e5ec870957b.png)
「個数」をクリックすると、図2赤枠内の関数を呼び出せます。
※図2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/6dc00d8c-fac8-6c5a-3e07-c2fc04c3f6f2.png)

関数呼び出しは、SaaSForceの開発環境から確認します。「ツール」の「ユーザー定義関数」から、関数IDと関数名で検索することが出来ます。
SaaSForceシステム===>「ツール」===> 「ユーザー定義関数」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/a65beb45-0236-f9b8-a40d-57fa006c6752.png)


そして、「編集」ボタンを押し、「関数編集」から関数を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/7fceb64c-df52-a5be-8d3b-d582d69c9a7a.png)

---
###ステップ2.画面初期処理
次に、画面初期処理の説明をします。まずは、画面初期処理にはサーバー側、クライアント側が含まれています。
「画面初期処理」の後ろに、「クライアント」を付けるとクライアント側処理の関数を作成できます。
※「画面初期処理」の後ろに何も付けないと、デフォルトでサーバー側処理の関数を作成します。
例として、「入金管理検索」の画面初期処理を説明します。
<img width="1128" alt="81.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/35684a72-9d6f-fbe2-46a7-9129c0e8b0ab.png">
作成した関数はSaaSForceの開発環境から確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/03313af6-8eaf-63d8-4eb3-8c1648758bbe.png)
**ユーザー利用画面表示例↓**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/cb5cdd05-47a7-65d1-3809-69430a770411.png)

---
###ステップ3.保存前処理
保存前処理はデータを保存する前にの処理です。設定方法は画面詳細設計書に記載します。

<img width="1128" alt="94.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/6011770e-3cc1-2a06-ad6f-442673bc254f.png">
SaaSForceの開発環境にログインして、設計書ファイルをインポートします。以下はワンダーロボが作成した保存前処理の関数です。

```
var SHIHARAIWARIAIGOUKEI = getObj("SHIHARAIWARIAIGOUKEI").value;
var SHIHARAIHIDZUKE;
var SHIHARAIWARIAI;
var FURIDASHIZUMIHIDZUKE;
var FURIDASHIZUMIKINGAKU;
var FURIDASHIZUMIWARIAI;
var NYUUKINZUMIHIDZUKE;
var NYUUKINZUMIKINGAKU;
var NYUUKINZUMIWARIAI;
var RESHIITOMEISAINO;
var RESHIITONO1;
var MSG = getObj("MSG").value;
var gridrow = getObj("RowGrid61").value;
var gridflg = "";
if(gridrow!=0){

	for(var i=1;i<=gridrow;i++){
		gridflg = $("#Grid61flg"+i).val();
		if(gridflg != null && gridflg!=""){
			break;
		}
	}
}
SF.setServerExecute(true);
/*1.「支払割合合計」を取得。*/
/*2．変数<支払割合合計>に"0"を設定する。*/
SHIHARAIWARIAIGOUKEI = "0";

/*Grid「B8」ループ開始。*/
var intRow = getObj("RowGrid61").value;

for (var i = 1;i <= intRow; i++) {
/* grid loop start */
	SHIHARAIHIDZUKE = $('#SHIHARAIHIDZUKE_'+i).val();
	SHIHARAIWARIAI = $('#SHIHARAIWARIAI_'+i).val();
	FURIDASHIZUMIHIDZUKE = $('#FURIDASHIZUMIHIDZUKE_'+i).val();
	FURIDASHIZUMIKINGAKU = $('#FURIDASHIZUMIKINGAKU_'+i).val();
	FURIDASHIZUMIWARIAI = $('#FURIDASHIZUMIWARIAI_'+i).val();
	NYUUKINZUMIHIDZUKE = $('#NYUUKINZUMIHIDZUKE_'+i).val();
	NYUUKINZUMIKINGAKU = $('#NYUUKINZUMIKINGAKU_'+i).val();
	NYUUKINZUMIWARIAI = $('#NYUUKINZUMIWARIAI_'+i).val();
	RESHIITOMEISAINO = $('#RESHIITOMEISAINO_'+i).val();
	RESHIITONO1 = $('#RESHIITONO1_'+i).val();
	/*1.「msg」を取得。*/
	/*2．変数<msg>に"0"を設定する。*/
	MSG = "0";

	/*3.Grid「B8」に修正がある場合,以下の処理を行う。*/
	if ((gridflg != null && gridflg != '')) {
		/*1．「支払割合」が数字でないの場合,以下の処理を行う。*/
		if (parseFloat(Number(SHIHARAIWARIAI)).toString() == "NaN" ) {
			/*1．変数<msg>に"1"を設定する。*/
			MSG = "1";

			/*処理終了。*/
		}
		/*処理終了。*/
	}
	/*1．「支払割合」が数字の場合,以下の処理を行う。*/
	if (!(parseInt(Number(SHIHARAIWARIAI)).toString() == "NaN") ) {
		/*4．変数計算(double,小数点以下第2位を四捨五入):<支払割合合計>=<支払割合合計>+<支払割合>。*/
		SHIHARAIWARIAIGOUKEI=Number(SHIHARAIWARIAIGOUKEI)+Number(isNaN(Number(SHIHARAIWARIAI)) ? SHIHARAIWARIAI.replaceAll(",","") : SHIHARAIWARIAI);

		/*変数計算(double,小数点以下第2位を四捨五入)*/
if (SHIHARAIWARIAIGOUKEI != null && parseInt(SHIHARAIWARIAIGOUKEI) != SHIHARAIWARIAIGOUKEI) {
	SHIHARAIWARIAIGOUKEI =  parseFloat(SHIHARAIWARIAIGOUKEI).toFixed(2);
}
if (!SHIHARAIWARIAIGOUKEI || isNaN(SHIHARAIWARIAIGOUKEI)) {
	SHIHARAIWARIAIGOUKEI = '';
}


		/*処理終了。*/
	}
	/*グリッドループ終了。*/
}
/*3．<msg>が"1"の場合,以下の処理を行う。*/
if (MSG == "1") {
	/*1.「数字で入力してください。」メッセージを表示する。*/
	alert('数字で入力してください。');
	/*2."false"を返す。*/
	return false;

	/*処理終了。*/
}
/*4．<msg>が"1"でない,且つ<支払割合合計>が"100.00"ではない場合,以下の処理を行う。*/
if (MSG != "1" && SHIHARAIWARIAIGOUKEI != "100.00") {
	/*1.「支払割合合計が100%になっていません。」メッセージを表示する。*/
	alert('支払割合合計が100%になっていません。');
	/*2."false"を返す。*/
	return false;

	/*処理終了。*/
}
/*5."true"を返す。*/
return true;

/*処理終了。*/
```

---
###ステップ4.保存後処理
保存後処理はデータを保存する後の処理です。設定方法は画面詳細設計書に記載します。
<img width="1128" alt="96.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184885/75f135b8-1250-8b60-1996-78d1d385df72.png">

SaaSForceの開発環境にログインして、設計書ファイルをインポートします。以下はワンダーロボが作成した保存後処理の関数です。

```
var param = [];
var sps = null;
var sqlStr = new StringBuilder();
var paramIndex = 0;
var ay1;
var NYUKIN_RESHIITONO = null;
var CHUUBUNSHONO1 = getObj("CHUUBUNSHONO1");
try {

	/*データ操作1:テーブル「入金」の項目「レシートNO」を取得,条件は「注文書NO」が画面項目「注文書NO」*/
	sqlStr.append("SELECT NYUKIN.RESHIITONO FROM NYUKIN").append(" WHERE 1 = 1 ");
	
	
	if (CHUUBUNSHONO1 != null && CHUUBUNSHONO1 != "") {
		sqlStr.append(" AND ").append("CHUUBUNSHONO = ?");
		param[paramIndex] = CHUUBUNSHONO1;
	
		paramIndex++;
	}

	ay1 = exequeryarrylist(sqlStr.toString(),param);
	sqlStr.setLength(0);
	paramIndex = 0;
	param = [];
	
	if (ay1 != null && ay1.size() > 0) {

		NYUKIN_RESHIITONO = ay1.get(0).get(0);
	} else {
		
		NYUKIN_RESHIITONO = null;
	}

	/*データ操作2:テーブル「注文書」の項目「注文書NO」が値「注文書No」のデータに対して,項目「レシートNO」を<レシートNO>に変更する*/
	sqlStr.append("UPDATE TYUMONSYO SET ").append("RESHIITONO=").append("?").append(" WHERE 1=1");

	param[paramIndex]=NYUKIN_RESHIITONO;
	paramIndex++;
	
	
	if (CHUUBUNSHONO1 != null && CHUUBUNSHONO1 != "") {
		sqlStr.append(" AND ").append("CHUUBUNSHONO = ?");
		param[paramIndex] = CHUUBUNSHONO1;
	
		paramIndex++;
	}

	exesql(sqlStr.toString(),param);
	
	paramIndex = 0;param = [];
	sqlStr.setLength(0);
	
	
} catch(e) {
	ActStr += "alert('" + e + "');";
}

```