Biz/Browser と Wagby を REST API で連携する
最終更新日: 2020年6月9日
Biz/Browserとは業務アプリケーション専用画面のためのプラットフォームです。Biz/Browserを使って業務画面を設計し、Wagby と連携させることができます。
ここではWagbyが自動生成する画面に代わって Biz/Browser で開発した UI を使う方法を説明します。
Biz/Browser と Wagby の連携イメージを示します。図1 は Biz/Browser で開発したログオン画面です。
図2 は Biz/Browser で開発した業務画面です。Wagby の標準画面とは異なるレイアウト、色調となっていることがわかります。
Biz/Browser と Wagby の連携では、Biz/Browser で開発した画面から、REST API を使って Wagby を呼び出すようにします。
今回のサンプルアプリケーションで用意したファイルは次のとおりです。拡張子 crs は、Biz/Browser が読み込んで実行するスクリプトとなっています。
ポイントとなるのは、REST API による通信処理です。G_HTTP_WAGBY.crs のコードを抜粋して紹介します。最初にログオン処理のコードを示します。
同様に、ログオフのコードを示します。
ログオンユーザの情報を取得するコードを示します。
モデルIDを引数に渡すと、そのモデルの一覧表示データを取得するコードを紹介します。
モデルIDを引数に渡すと、そのモデルの新規登録処理を行うコードを紹介します。
モデルIDを引数に渡すと、そのモデルの更新処理を行うコードを紹介します。
ここで紹介したサンプルアプリケーションおよびコード一式は、株式会社ソフトウェア・パートナー様がご用意したものです。
Biz/Browserとは
実行例
コード
REST API による通信処理 - ログオン
import "G_SETTING.crs";
import "G_MSG.crs";
import "G_UTIL.crs";
Record G_HTTP_WAGBY {
Function getSession(){
return findHTTPSession( G_SETTING.APP_HOST_WAGBY.Value );
}
/**
* ログオン
* @param user
* @param pass
* @return なし
* @throws
* @version 1.0
*/
Function logon( user, pass ){
/* httpSessionオブジェクトを検索 */
var session = getSession();
/* 新しいリクエストを作成 */
var req = session.createRequest("/wagby/rest/session", HttpSession.UTF8_ENCODE);
req.SetHeader( "Content-Type", "application/x-www-form-urlencoded" );
req.addParam( "user", user );
req.addParam( "pass", pass );
/* レスポンス格納変数 */
var res;
var cookie;
var jsondoc = new JSONDocument();
var res_arr = new Array();
try {
/* リクエスト送信・レスポンス取得処理 */
res = session.Put(req);
/* HTTP ステータスエラー判別処理 */
/* 401=ログオン失敗 */
if( res.status == $HTTP_UNAUTHORIZED ){
jsondoc.Parse( TextConverter.Convert( res.body, "UTF-8", "Shift_JIS" ) );
res_arr["code"] = jsondoc.Value["errors"]["jfcerror"][0]["code"];
res_arr["content"] = jsondoc.Value["errors"]["jfcerror"][0]["content"];
res_arr["name"] = jsondoc.Value["errors"]["jfcerror"][0]["name"];
res_arr["result"] = $False;
return res_arr;
} else if (res.status != $HTTP_OK) {
throw new Exception("HTTP_ERROR", 1, res.status);
}
print( TextConverter.Convert( res, "UTF-8", "Shift_JIS" ) );
jsondoc.Parse( TextConverter.Convert( res.body, "UTF-8", "Shift_JIS" ) );
G_SETTING.r_user.userId.Value = jsondoc.Value["username"];
res_arr["result"] = $True;
/* JSESSIONIDを取得する */
cookie = session.GetCookie();
for (var i in cookie) {
print("id=", cookie[i].cookieId, "\n");
print("value=", cookie[i].cookieValue, "\n");
if( cookie[i].cookieId == "JSESSIONID" ){
G_SETTING.JSESSIONID.Value = cookie[i].cookieValue;
break;
}
}
} catch( ex ) {
//.MessageBox( ex.message );
}
/* G_UTIL.showArray(jsondoc.Value); */
/* G_UTIL.showArray(res_arr); */
return res_arr;
}
...
REST API による通信処理 - ログオフ
/**
* ログオフ
* @return なし
* @throws
* @version 1.0
*/
Function logoff(){
/* httpSessionオブジェクトを検索 */
var session = getSession();
/* 新しいリクエストを作成 */
var req = session.createRequest("/wagby/rest/session", HttpSession.UTF8_ENCODE);
req.SetHeader( "Content-Type", "application/x-www-form-urlencoded" );
req.SetHeader( "JSESSIONID", G_SETTING.JSESSIONID.Value );
/* レスポンス格納変数 */
var res;
try {
/* リクエスト送信・レスポンス取得処理 */
res = session.Dele(req);
/* HTTP ステータスエラー判別処理 */
if (res.status != $HTTP_OK) {
throw new Exception("HTTP_ERROR", 1, res.status);
}
} catch( ex ) {
//.MessageBox( ex.message );
return $False;
}
print( TextConverter.Convert( res, "UTF-8", "Shift_JIS" ) );
return $True;
}
REST API による通信処理 - ログオンユーザの情報取得
/**
* ログオンユーザの情報取得
* @return なし
* @throws
* @version 1.0
*/
Function getLogonUser(){
/* httpSessionオブジェクトを検索 */
var session = getSession();
/* 新しいリクエストを作成 */
var req = session.createRequest("/wagby/rest/session", HttpSession.UTF8_ENCODE);
req.SetHeader( "Content-Type", "application/x-www-form-urlencoded" );
req.SetHeader( "JSESSIONID", G_SETTING.JSESSIONID.Value );
/* レスポンス格納変数 */
var res;
var cookie;
var jsondoc = new JSONDocument();
var res_arr = new Array();
try {
/* リクエスト送信・レスポンス取得処理 */
res = session.Get(req);
/* HTTP ステータスエラー判別処理 */
/* 401=未認証時 */
if( res.status == $HTTP_UNAUTHORIZED ){
res_arr["result"] = $False;
return res_arr;
} else if (res.status != $HTTP_OK) {
throw new Exception("HTTP_ERROR", 1, res.status);
}
print( TextConverter.Convert( res, "UTF-8", "Shift_JIS" ) );
jsondoc.Parse( TextConverter.Convert( res.body, "UTF-8", "Shift_JIS" ) );
G_SETTING.r_user.userId.Value = jsondoc.Value["username"];
/* JSESSIONIDを取得する */
cookie = session.GetCookie();
for (var i in cookie) {
print("id=", cookie[i].cookieId, "\n");
print("value=", cookie[i].cookieValue, "\n");
if( cookie[i].cookieId == "JSESSIONID" ){
G_SETTING.JSESSIONID.Value = cookie[i].cookieValue;
break;
}
}
} catch( ex ) {
//.MessageBox( ex.message );
}
/* G_UTIL.showArray(jsondoc.Value); */
/* G_UTIL.showArray(res_arr); */
return res_arr;
}
REST API による通信処理 - 一覧表示データを取得
/**
* 一覧表示データを取得
* @param modelId
* @param mode
* @return なし
* @throws
* @version 1.0
*/
Function getList( modelId, param ){
/* httpSessionオブジェクトを検索 */
var session = getSession();
/* 新しいリクエストを作成 */
var req;
if( param instanceof Array ){
req = session.createRequest("/wagby/rest/" + modelId + "/list", HttpSession.UTF8_ENCODE);
req.SetHeader( "Content-Type", "application/x-www-form-urlencoded" );
for( var i in param ){
req.AddParam( i , param[i] );
}
}else{
switch( param ){
case "first": /* 最初のページの検索結果を取得 */
case "last": /* 最後のページの検索結果を取得 */
case "next": /* 次ページの検索結果を取得 */
case "prev": /* 前ページの検索結果を取得 */
req = session.createRequest("/wagby/rest/" + modelId + "/list/" + param, HttpSession.UTF8_ENCODE);
break;
case "jump": /* ページ番号を指定した検索結果を取得 */
req = session.createRequest("/wagby/rest/" + modelId + "/list/" + param + "/last", HttpSession.UTF8_ENCODE);
break;
default:
req = session.createRequest("/wagby/rest/" + modelId + "/list", HttpSession.UTF8_ENCODE);
break;
}
}
req.SetHeader( "JSESSIONID", G_SETTING.JSESSIONID.Value );
/* レスポンス格納変数 */
var res;
var cookie;
var jsondoc = new JSONDocument();
var res_arr = new Array();
try {
/* リクエスト送信・レスポンス取得処理 */
if( param instanceof Array ){
res = session.Post(req);
}else{
res = session.Get(req);
}
/* HTTP ステータスエラー判別処理 */
if (res.status != $HTTP_OK) {
throw new Exception("HTTP_ERROR", 1, res.status);
}
print( TextConverter.Convert( res, "UTF-8", "Shift_JIS" ) );
jsondoc.Parse( TextConverter.Convert( res.body, "UTF-8", "Shift_JIS" ) );
res_arr["size"] = jsondoc.Value["result"]["size"];
res_arr["next"] = jsondoc.Value["result"]["next"];
res_arr["current"] = jsondoc.Value["result"]["current"];
res_arr["nextPage"] = jsondoc.Value["result"]["nextPage"];
res_arr["prevPage"] = jsondoc.Value["result"]["prevPage"];
res_arr["entity"] = jsondoc.Value["entity"];
res_arr["list"] = jsondoc.Value["listp"]["item_"];
} catch( ex ) {
//.MessageBox( ex.message );
}
/* G_UTIL.showArray(jsondoc.Value); */
/* G_UTIL.showArray(res_arr); */
return res_arr;
}
REST API による通信処理 - 新規登録
Function insert( modelId, param ){
var rtnarr = new Array();
/* httpSessionオブジェクトを検索 */
var session = getSession();
/* 新しいリクエストを作成 */
var req = session.createRequest("/wagby/rest/" + modelId + "/new", HttpSession.UTF8_ENCODE);
req.SetHeader( "Content-Type", "application/x-www-form-urlencoded" );
req.SetHeader( "JSESSIONID", G_SETTING.JSESSIONID.Value );
for( var i in param ){
req.AddParam( i , param[i] );
}
/* レスポンス格納変数 */
var res;
var cookie;
var jsondoc = new JSONDocument();
var res_arr = new Array();
try {
/* リクエスト送信・レスポンス取得処理 */
res = session.Post(req);
print( TextConverter.Convert( res, "UTF-8", "Shift_JIS" ) );
jsondoc.Parse( TextConverter.Convert( res.body, "UTF-8", "Shift_JIS" ) );
/* HTTP ステータスエラー判別処理 */
if (res.status != $HTTP_OK) {
rtnarr["name"] = jsondoc.Value["errors"]["jfcerror"][0]["name"];
rtnarr["content"] = jsondoc.Value["errors"]["jfcerror"][0]["content"];
rtnarr["code"] = jsondoc.Value["errors"]["jfcerror"][0]["code"];
rtnarr["result"] = $False;
}else{
rtnarr["name"] = jsondoc.Value["errors"]["jfcinfo"][0]["name"];
rtnarr["content"] = jsondoc.Value["errors"]["jfcinfo"][0]["content"];
rtnarr["code"] = jsondoc.Value["errors"]["jfcinfo"][0]["code"];
rtnarr["entity"] = jsondoc.Value["entity"];
rtnarr["result"] = $True;
}
} catch( ex ) {
//.MessageBox( ex.message );
}
return rtnarr;
}
REST API による通信処理 - 更新
Function update( modelId, param, key ){
var rtnarr = new Array();
/* httpSessionオブジェクトを検索 */
var session = getSession();
if( key == null ){
key = "";
}else if( key != "" ){
key = "/" + str( key );
}
/* 新しいリクエストを作成 */
var req = session.createRequest("/wagby/rest/" + modelId + "/edit" + key, HttpSession.UTF8_ENCODE);
req.SetHeader( "Content-Type", "application/x-www-form-urlencoded" );
req.SetHeader( "JSESSIONID", G_SETTING.JSESSIONID.Value );
for( var i in param ){
req.AddParam( i , param[i] );
}
/* レスポンス格納変数 */
var res;
var cookie;
var jsondoc = new JSONDocument();
var res_arr = new Array();
try {
/* リクエスト送信・レスポンス取得処理 */
res = session.Put(req);
print( TextConverter.Convert( res, "UTF-8", "Shift_JIS" ) );
jsondoc.Parse( TextConverter.Convert( res.body, "UTF-8", "Shift_JIS" ) );
/* HTTP ステータスエラー判別処理 */
if (res.status != $HTTP_OK) {
rtnarr["name"] = jsondoc.Value["errors"]["jfcerror"][0]["name"];
rtnarr["content"] = jsondoc.Value["errors"]["jfcerror"][0]["content"];
rtnarr["code"] = jsondoc.Value["errors"]["jfcerror"][0]["code"];
rtnarr["result"] = $False;
}else{
rtnarr["name"] = jsondoc.Value["errors"]["jfcinfo"][0]["name"];
rtnarr["content"] = jsondoc.Value["errors"]["jfcinfo"][0]["content"];
rtnarr["code"] = jsondoc.Value["errors"]["jfcinfo"][0]["code"];
rtnarr["entity"] = jsondoc.Value["entity"];
rtnarr["result"] = $True;
}
} catch( ex ) {
//.MessageBox( ex.message );
}
return rtnarr;
}
問い合わせ先