外部連携
最終更新日: 2022年1月30日
R8 | R9
現在のやりとりが、REST API 経由の場合は
urlに示した(外部)サイトへアクセスし、ページ情報を取得します。
url部に JSONを返す REST API サーバを指定することで、外部の値を取得することに活用できます。後述するJSONPATH関数との組み合わせを想定しています。
接続タイムアウト、読み込みタイムアウト、リトライ回数を指定できます。ISREST
ISREST()
true
を返します。そうでない場合(画面からの操作またはアップロード更新、ダウンロードなど)はfalse
を返します。
HTTPSEND
HTTPSEND(urlを示す文字列)
HTTPSEND(urlを示す文字列, "ユーザID:パスワード")
HTTPSEND(urlを示す文字列, 接続タイムアウト(ms), 読み込みタイムアウト(ms), リトライ回数)
HTTPSEND(urlを示す文字列, 接続タイムアウト(ms), 読み込みタイムアウト(ms), リトライ回数, "ユーザID:パスワード")
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")
接続タイムアウトと読み込みイムアウトの省略時は 30秒 = 30,000ミリ秒(ms) となります。
リトライ回数の省略時は 3(回) となります。
BASIC認証のユーザ名とパスワードを指定できます。"ユーザID:パスワード" と記述します。
WEBAPI9.2.0
WEBAPI(接続先URL)
WEBAPI(接続先URL, リクエストに付与するヘッダ文字列)
WEBAPI(接続先URL, リトライ回数, リクエストに付与するヘッダ文字列)
WEBAPI(接続先URL, 接続タイムアウト(ms), 読み込みタイムアウト(ms), リトライ回数, リクエストに付与するヘッダ文字列)
外部の Web API を呼び出すことができます。HTTPSEND関数との違いは、リクエストに付与するヘッダ文字列を指定できることです。
接続タイムアウト、読み込みタイムアウト、リトライ回数を指定できます。
接続タイムアウトと読み込みイムアウトの省略時は 30秒 = 30,000ミリ秒(ms) となります。
リトライ回数の省略時は 3(回) となります。
リクエストに付与するヘッダ文字列は、利用する Web API の認証キーを格納するといった用途で利用できます。
次のように呼び出すことができます。戻り値は多くの Web API で、JSON 形式の文字列を返す仕様のため、後述する JSONPATH 関数を使うとよいです。
WEBAPI("https://api-anorm.mapfan.com/v1/"+URLENCODE("沖縄県宜野湾市宇地泊902-1")+".json", "\"x-api-key\":\"(YOUR API KEY)\"")
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の動作を試すことができます。
例 ジオテクノロジーズ社の住所確認API v1 を呼び出す
ジオテクノロジーズ社が提供している「住所確認API」を使って、HTTP通信を行う例を説明します。
住所確認APIを使うために無料トライアルアカウントを作成し、APIキーを入手します。
APIキーが必要です
APIキーが未入力または誤っている場合、住所確認APIの動作を確認することはできません。
このAPIはJSON形式で結果を返します。戻り値のJSON文字列がどういう構造になっているか、はそれぞれのWebAPIが規定しています。"JSON Path" という書式によって、任意の値を取得できます。
今回利用した、住所確認APIのJSON文字列は、次の書式で取得できます。
正規化された文字列 | features[0].properties.place_name |
---|---|
都道府県 | features[0].properties.pref |
都道府県カナ | features[0].properties.pref_kana |
市区町村 | features[0].properties.city |
市区町村カナ | features[0].properties.city_kana |
町域 | features[0].properties.area |
町域カナ | features[0].properties.area_kana |
小字丁目 | features[0].properties.koaza_chome |
小字丁目カナ | features[0].properties.koaza_chome_kana |
番地号 | features[0].properties.banchi_go |
ビル名 | features[0].properties.building |
階数 | features[0].properties.building_number |
郵便番号 | features[0].properties.zipcode |
マッチレベル | features[0].properties.geocoding_level |
マッチレベル説明 | features[0].properties.geocoding_level_desc |
ログ | features[0].properties.log |
正規化できなかった文字列 | features[0].properties.not_normalized |
スクリプト
customer モデルの address 項目に住所がセットされているものとします。上の JSON 形式データの features[0].properties.place_name を取得することで、正規化された文字列を取得することができます。
また、WEBAPI関数の実体は ExcelFunction.webapiで、第一引数に p を指定する必要があります。
var ExcelFunction = Java.type("jp.jasminesoft.util.ExcelFunction");
var data = ExcelFunction.webapi(p,
"https://api-anorm.mapfan.com/v1/"
+ ExcelFunction.URLENCODE(customer.address) + ".json",
"\"x-api-key\":\"(YOUR API KEY)\"");
var normalizedAddress = ExcelFunction.JSONPATH(data, "features[0].properties.place_name");
print(normalizedAddress); // データの確認
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
XML2JSON(XML形式の文字列)
XML形式の文字列を、JSON形式の文字列に変換します。Wagbyのストアモデルやプレゼンテーションモデルは toString メソッドを呼び出すことでXML形式の文字列になります。これを引数に渡すことで、JSON形式の文字列へ変換することができます。
なお、次の動作は仕様となります。
- チェックボックスや繰り返し項目など、同一の項目名は JSON の配列となります。このときXML形式の表示順序は保証されません。(JSONの仕様では、順序は不定となっているため。)
- 繰り返しコンテナを含むモデルでは、コンテナのデータ件数によって JSON の構造が変わります。
- コンテナの件数が0件の場合、JSON にコンテナIDのキーも存在しない。
- コンテナの件数が1件の場合、JSON にコンテナIDのキーが追加され、値はコンテナデータの連想配列となる。
- コンテナの件数が2件以上の場合、JSON にコンテナIDのキーが追加され、値はコンテナデータの連想配列の配列となる。
URLENCODE9.2.0
URLENCODE(エンコードしたい文字列)
引数の文字列をURLの表記規則にあわせて変換した文字列を返します。
入力文字列 |
---|
沖縄県宜野湾市宇地泊902-1 |
URLエンコードされた文字列 |
%e6%b2%96%e7%b8%84%e7%9c%8c%e5%ae%9c%e9%87%8e%e6%b9%be%e5%b8%82%e5%ae%87%e5%9c%b0%e6%b3%8a902%2d1 |