はじめに
対象読者
この記事は、下記の知識・スキルを持っている人を対象としています。
- ThingWorx 開発の基礎値基礎
- JavaScript の基礎知識
関連記事
対象バージョン
この記事は、ThingWorx 8.x で有効です。また、2019年10月に執筆していますので、情報の鮮度にはご注意ください。
カスタムウィジェットでJSONデータを受け取るとき
たとえば、STRING 型のデータをウィジェットに渡すには、ウィジェットの .runtime.js で updatePropety() 関数を次のように書きます。
this.updateProperty = function (updatePropertyInfo) {
// 文字列データを受け取る場合
var stringData;
if (updatePropertyInfo.TargetProperty === 'String Data') {
stringData = updatePropertyInfo.SinglePropertyValue;
}
}
STRING、NUMBER、DATE 型といった、ThingWorx にとってのプリミティブなデータ型を引数としてウィジェットに渡すにはこれでいいのですが、実際には JSON 形式のデータを渡したいことがあります。
残念なことに、updatePropertyInfo.SinglePropertyValue
経由では、JSON データは渡せません。JSON データをウィジェットで受け取りたいときには、次のように書きます。
this.updateProperty = function (updatePropertyInfo) {
// JSON データを受け取る場合
var rawData;
var json;
if (updatePropertyInfo.TargetProperty === 'JSON Data') {
rawData = {}
if (updatePropertyInfo.RawDataFromInvoke != undefined) {
rawData = updatePropertyInfo.RawDataFromInvoke;
json = rawData.rows[0].json;
TW.log.debug(json.stringify());
}
}
}
上記のように updatePropertyInfo.RawDataFromInvoke
変数経由で JSON データを受け取ります。注意する点は、ウィジェットに渡した JSON データは INFOTABLE に格納され、ウィジェットには INFOTABLE ごと渡されると言う点です。このため、
json = rawData.rows[0].json;
と、配列の最初の要素に含まれる json
変数にアクセスします。
上記の処理の後は、変数 json には渡したい JSON がはいってますので、あとは煮るなり焼くなりなんなりと。