外部連携

最終更新日: 2020年3月14日
R8 | R9

ISREST

ISREST()

現在のやりとりが、REST API 経由の場合はtrueを返します。そうでない場合(画面からの操作またはアップロード更新、ダウンロードなど)はfalseを返します。

HTTPSEND

HTTPSEND(urlを示す文字列)

HTTPSEND(urlを示す文字列, "ユーザID:パスワード")8.0.4

HTTPSEND(urlを示す文字列, 接続タイムアウト, 読み込みタイムアウト, リトライ回数)8.0.4

HTTPSEND(urlを示す文字列, 接続タイムアウト, 読み込みタイムアウト, リトライ回数, "ユーザID:パスワード")8.0.4

urlに示した(外部)サイトへアクセスし、ページ情報を取得します。

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")

url部に JSONを返す REST API サーバを指定することで、外部の値を取得することに活用できます。後述するJSONPATH関数との組み合わせを想定しています。

接続タイムアウト、読み込みタイムアウト、リトライ回数を指定できます。省略時はそれぞれ接続タイムアウト30秒、読み込みタイムアウト30秒、リトライ回数3回となります。

BASIC認証のユーザ名とパスワードを指定できます。"ユーザID:パスワード" と記述します。

このメソッドは HTTP GET のみに対応しています。POST や PUT などの用途にはお使い頂けません。またリクエストヘッダの指定なども行うことはできません。

JSONPATH

JSONPATH(JSONオブジェクトが格納された文字列, JSON Path 文字列)

JSON形式の文字列を解析して、JSON Path で指定された値を取得します。

JSONPATH(${jsondata},"$.Items[0].Item.title")

上記の例では、jsondata項目に設定されたJSONデータを解析して、タイトルを取得するものです。

JSON Path は「Java JsonPath」というライブラリを使っています。http://jsonpath.curiousconcept.com/で、JSON Pathの動作を試すことができます。

HTTPSENDとJSONPATHを使った例

Wagby のスクリプトで外部サービスのREST APIを利用する例を示します。ここではPostcodeJP APIを使って、郵便番号から住所の変換を行います。

PostcodeJP が返すJSONのイメージ

次の URL にアクセスしたときに戻される 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
    }
]}

スクリプト

customer モデルの postcode 項目に郵便番号がセットされているものとします。上の JSON 形式データの data[0].allAddress が住所に相当しますので、この値を customer モデルの address 項目にセットしてみます。

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("名前")

この関数は、Wagby とは異なるシステムで用意された Web フォーム(例:PHP や Perl などで用意したフォーム)から Wagby へ POST するといったケースで用いられることを想定しています。

指定した名前で、Java が管理するリクエストオブジェクトから値を取得します。 Wagby 以外のページから遷移されたとき、HTTP GET/POST パラメータを直接、受け取ることができます。戻り値の型は文字列型です。

REQUEST("id")

Webフォームから送信されてくる名前が、対象項目の名前(英語)と一致している場合、REQUEST関数の引数は省略できます。

REQUEST関数の戻り値の型は文字列型です。この値を数字型や日付型項目にセットする場合は、TEXT関数などを用いて文字列から数値、日付へ変換してください。

SESSION

(型)SESSION()

(型)SESSION("名前")

この関数はJavaによるカスタマイズ開発を行う方向けに用意されました。

指定した名前で、Java が管理するセッションオブジェクトから値を取得します。戻り値の型は任意のため、必ず型を明示してください。

(String)SESSION("item1")

セッションオブジェクトのキー名が、対象項目の名前(英語)と一致している場合、SESSION関数の引数は省略できます。

SESSION関数は開発者がJavaコードをカスタマイズし、セッションオブジェクトに値を格納したものを「受け取る」ために使うことができます。値を受け取る場合、必ずセッションオブジェクトに格納したオブジェクトの型でキャストしてください。(型の指定をしないか、誤った型を指定するとコンパイル時にエラーとなります。)

型についての補足

格納するオブジェクトと「型」の関係は次のとおりです。

格納するオブジェクト 明示する「型」の記述方法
整数型(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」というオブジェクトが生成されます。処理が終わると破棄されます。つまり p.request オブジェクトの「生存期間」は一回の処理の開始から終了まで、となります。

ATTRIBUTE 関数は、この p.request に格納された値を取得するものです。戻り値の型を明示するため、ATTRIBUTE 関数の前に型を指定してください。オブジェクトと型の関係は SESSION 関数の説明と同じです。

p.requestに値をセットする

この p.request オブジェクトに「値」を格納する場合は p.request.setAttribute メソッドを用います。引数はキー名(文字列)と、格納したいオブジェクトです。この関数は提供されていません。スクリプトを使って値をセットするようにしてください。"親キー以外の項目値を用いて子モデル一覧表示を行う"にこの例を紹介しています。

XML2JSON 8.3.1

XML2JSON(XML形式の文字列)

XML形式の文字列を、JSON形式の文字列に変換します。Wagbyのストアモデルやプレゼンテーションモデルは toString メソッドを呼び出すことでXML形式の文字列になります。これを引数に渡すことで、JSON形式の文字列へ変換することができます。

なお、次の動作は仕様となります。

  • チェックボックスや繰り返し項目など、同一の項目名は JSON の配列となります。このときXML形式の表示順序は保証されません。(JSONの仕様では、順序は不定となっているため。)
  • 繰り返しコンテナを含むモデルでは、コンテナのデータ件数によって JSON の構造が変わります。
    • コンテナの件数が0件の場合、JSON にコンテナIDのキーも存在しない。
    • コンテナの件数が1件の場合、JSON にコンテナIDのキーが追加され、値はコンテナデータの連想配列となる。
    • コンテナの件数が2件以上の場合、JSON にコンテナIDのキーが追加され、値はコンテナデータの連想配列の配列となる。
    このため、JSONを利用する側では、コンテナIDのキーが存在するか、値が配列かどうかの判定を行なうようにしてください。
内部では json.org で公開されている Java 用の JSON ライブラリ (JSON-java) を用いています。