外部連携
最終更新日: 2020年3月14日
R8 | R9
現在のやりとりが、REST API 経由の場合は
urlに示した(外部)サイトへアクセスし、ページ情報を取得します。
url部に JSONを返す REST API サーバを指定することで、外部の値を取得することに活用できます。後述するJSONPATH関数との組み合わせを想定しています。
接続タイムアウト、読み込みタイムアウト、リトライ回数を指定できます。省略時はそれぞれ接続タイムアウト30秒、読み込みタイムアウト30秒、リトライ回数3回となります。
BASIC認証のユーザ名とパスワードを指定できます。"ユーザID:パスワード" と記述します。
JSON形式の文字列を解析して、JSON Path で指定された値を取得します。
上記の例では、jsondata項目に設定されたJSONデータを解析して、タイトルを取得するものです。
JSON Path は「Java JsonPath」というライブラリを使っています。http://jsonpath.curiousconcept.com/で、JSON Pathの動作を試すことができます。
Wagby のスクリプトで外部サービスのREST APIを利用する例を示します。ここではPostcodeJP APIを使って、郵便番号から住所の変換を行います。
次の URL にアクセスしたときに戻される JSON は次のとおりです。
customer モデルの postcode 項目に郵便番号がセットされているものとします。上の JSON 形式データの data[0].allAddress が住所に相当しますので、この値を customer モデルの address 項目にセットしてみます。
この関数は、Wagby とは異なるシステムで用意された Web フォーム(例:PHP や Perl などで用意したフォーム)から Wagby へ POST するといったケースで用いられることを想定しています。
指定した名前で、Java が管理するリクエストオブジェクトから値を取得します。 Wagby 以外のページから遷移されたとき、HTTP GET/POST パラメータを直接、受け取ることができます。戻り値の型は文字列型です。
Webフォームから送信されてくる名前が、対象項目の名前(英語)と一致している場合、REQUEST関数の引数は省略できます。
REQUEST関数の戻り値の型は文字列型です。この値を数字型や日付型項目にセットする場合は、TEXT関数などを用いて文字列から数値、日付へ変換してください。
この関数はJavaによるカスタマイズ開発を行う方向けに用意されました。
指定した名前で、Java が管理するセッションオブジェクトから値を取得します。戻り値の型は任意のため、必ず型を明示してください。
セッションオブジェクトのキー名が、対象項目の名前(英語)と一致している場合、SESSION関数の引数は省略できます。
SESSION関数は開発者がJavaコードをカスタマイズし、セッションオブジェクトに値を格納したものを「受け取る」ために使うことができます。値を受け取る場合、必ずセッションオブジェクトに格納したオブジェクトの型でキャストしてください。(型の指定をしないか、誤った型を指定するとコンパイル時にエラーとなります。)
格納するオブジェクトと「型」の関係は次のとおりです。
一回の処理(ユーザがボタン押下など何らかの操作を行なった結果サーバとの通信が生じ、サーバでの処理が終わった後にブラウザの画面が書き換わるまで)のたびに「p.request」というオブジェクトが生成されます。処理が終わると破棄されます。つまり p.request オブジェクトの「生存期間」は一回の処理の開始から終了まで、となります。
ATTRIBUTE 関数は、この p.request に格納された値を取得するものです。戻り値の型を明示するため、ATTRIBUTE 関数の前に型を指定してください。オブジェクトと型の関係は SESSION 関数の説明と同じです。
この p.request オブジェクトに「値」を格納する場合は p.request.setAttribute メソッドを用います。引数はキー名(文字列)と、格納したいオブジェクトです。この関数は提供されていません。スクリプトを使って値をセットするようにしてください。"親キー以外の項目値を用いて子モデル一覧表示を行う"にこの例を紹介しています。
XML形式の文字列を、JSON形式の文字列に変換します。Wagbyのストアモデルやプレゼンテーションモデルは toString メソッドを呼び出すことでXML形式の文字列になります。これを引数に渡すことで、JSON形式の文字列へ変換することができます。
なお、次の動作は仕様となります。
ISREST
ISREST()
true
を返します。そうでない場合(画面からの操作またはアップロード更新、ダウンロードなど)はfalse
を返します。
HTTPSEND
HTTPSEND(urlを示す文字列)
HTTPSEND(urlを示す文字列, "ユーザID:パスワード")8.0.4
HTTPSEND(urlを示す文字列, 接続タイムアウト, 読み込みタイムアウト, リトライ回数)8.0.4
HTTPSEND(urlを示す文字列, 接続タイムアウト, 読み込みタイムアウト, リトライ回数, "ユーザID:パスワード")8.0.4
HTTPSEND("http://wagby.com")
HTTPSEND("http://wagby.com", "scott:tiger")
HTTPSEND("http://wagby.com", 10000, 10000, 2)
HTTPSEND("http://wagby.com", 10000, 10000, 2, "scott:tiger")
JSONPATH
JSONPATH(JSONオブジェクトが格納された文字列, JSON Path 文字列)
JSONPATH(${jsondata},"$.Items[0].Item.title")
HTTPSENDとJSONPATHを使った例
PostcodeJP が返すJSONのイメージ
https://apis.postcode-jp.com/api/v2/postcodes?postcode=1000001
{"data": [
{
"allCode": "13101", "stateCode": "13", "townCode": "101",
"zip": "1000001", "state": "東京都",
...
"allAddress": "東京都千代田区千代田",
...
"general": true, "office": false
}
]}
スクリプト
var ExcelFunction = Java.type("jp.jasminesoft.util.ExcelFunction");
var data = ExcelFunction.HTTPSEND(
"https://apis.postcode-jp.com/api/v2/postcodes?postcode="
+ customer.postcode);
//print(data); // 取得したデータを表示
var allAddress = ExcelFunction.JSONPATH(data, "data[0].allAddress");
customer.address = allAddress;
//print(customer.address); // データの確認
REQUEST
REQUEST()
REQUEST("名前")
REQUEST("id")
SESSION
(型)SESSION()
(型)SESSION("名前")
(String)SESSION("item1")
型についての補足
格納するオブジェクト
明示する「型」の記述方法
整数型 (Integer) 文字列型 (String) 日付型 (java.sql.Date) 時刻型 (java.sql.Time) 日付時刻型 (java.sql.Timestamp) ファイル型(ファイル名) (String) 1バイト整数 (Byte) 2バイト整数 (Short) 4バイト整数 (Integer) 8バイト整数 (Long) 4バイト浮動小数点数 (Float) 8バイト浮動小数点数 (Double) 固定値 (作成日/更新日) (java.sql.Timestamp) その他 (URL型/メールアドレス型など) (String) ATTRIBUTE
(型)ATTRIBUTE("名前")
p.requestに値をセットする
XML2JSON 8.3.1
XML2JSON(XML形式の文字列)
このため、JSONを利用する側では、コンテナIDのキーが存在するか、値が配列かどうかの判定を行なうようにしてください。