外部連携

最終更新日: 2022年1月30日
R8 | R9

ISREST

ISREST()

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

HTTPSEND

HTTPSEND(urlを示す文字列)

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

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

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

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,000ミリ秒(ms) となります。
リトライ回数の省略時は 3(回) となります。

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

このメソッドは HTTP GET のみに対応しています。POST や PUT などの用途にはお使い頂けません。リクエストヘッダの指定を行う場合はWEBAPI関数を使ってください。

WEBAPI9.2.0

WEBAPI(接続先URL)

WEBAPI(接続先URL, リクエストに付与するヘッダ文字列)

WEBAPI(接続先URL, リトライ回数, リクエストに付与するヘッダ文字列)

WEBAPI(接続先URL, 接続タイムアウト(ms), 読み込みタイムアウト(ms), リトライ回数, リクエストに付与するヘッダ文字列)

外部の Web API を呼び出すことができます。HTTPSEND関数との違いは、リクエストに付与するヘッダ文字列を指定できることです。

接続タイムアウト、読み込みタイムアウト、リトライ回数を指定できます。
接続タイムアウトと読み込みイムアウトの省略時は 30秒 = 30,000ミリ秒(ms) となります。
リトライ回数の省略時は 3(回) となります。

リクエストに付与するヘッダ文字列は、利用する Web API の認証キーを格納するといった用途で利用できます。

このメソッドは HTTP GET のみに対応しています。POST や PUT などの用途にはお使い頂けません。BASIC認証を使う場合はHTTPSEND関数を使ってください。

次のように呼び出すことができます。戻り値は多くの Web API で、JSON 形式の文字列を返す仕様のため、後述する JSONPATH 関数を使うとよいです。

WEBAPI("https://api-anorm.mapfan.com/v1/"+URLENCODE("沖縄県宜野湾市宇地泊902-1")+".json", "\"x-api-key\":\"(YOUR 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の動作を確認することはできません。

この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); // データの確認
(YOUR API KEY) の部分に、適切な認証キーを指定してください。

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のキーが追加され、値はコンテナデータの連想配列の配列となる。
    このため、JSONを利用する側では、コンテナIDのキーが存在するか、値が配列かどうかの判定を行なうようにしてください。
内部では json.org で公開されている Java 用の JSON ライブラリ (JSON-java) を用いています。

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