Thing サービス
Thing サービスは Thing が実行可能な機能です。1 つの Thing は 1 つ以上のサービスを持つことができます。Thing Shape、Thing Template、または Thing レベルでサービスを定義できます。サービスの簡単な例としては、データベース Thing に対するクエリー書き込みがあります。
使用するテンプレートに応じて、サービスにはいくつかの実装方法 (ハンドラ) があります。ハンドラの例としては、スクリプト、SQL クエリー、SQL コマンドがあります。Thing の個々の機能 (Edge Thing など) に応じて、追加のハンドラを使用できる場合があります。
ユーザー定義サービスの具体的な実装はサーバー側スクリプト (現在のところ SQL または JavaScript) を介して行われます。これにより、URL、REST クライアント対応アプリケーション、または ThingWorx の別のサービスによってサービスを呼び出し可能になります。
新しいサービスを作成する際に、入力プロパティと出力を定義できます。入力と出力は標準 ThingWorx データ型のいずれであっても構いません。サービス定義で各サービスに個々のランタイムアクセス許可を定義することもできます。サービスには必ずしも入力と出力を定義する必要はありませんが、通常はそのどちらかまたは両方があります。たとえば、配送スケジュールをトラックに送信する場合、トラック Thing は XML タイプの DeliverySchedule という名前の入力があるサービスを持ちます。このサービスは入力データをとり、トラックの Thing プロパティをデータテーブルに渡します。
出力をマッシュアップウィジェットに直接送信する場合、INFOTABLE ベースタイプの出力を選択する必要があります。インフォテーブルを出力する場合、データシェイプを選択する必要があります。データシェイプはアプリケーションがデータをレンダーできるように、どの列のどのデータ型が返されるかをアプリケーションに知らせます。要件に基づいて入力をいくつでも選択できます。たとえば、データベースに対する SQL クエリーが出力になり、マッシュアップにデータが返されます。サービスは自動的に ThingWorx アプリケーションサーバーの REST API の一部となります (モデル内のすべての定義と同じ)。別のアプリケーションまたはマッシュアップ内の REST 呼び出しを介してサービスを使用できます。
サービスを呼び出す際に、出力をインフォテーブルとして定義した場合、URL 呼び出しと URL 承認パラメータ (詳細については、REST API を参照) を使用して、HTML、JSON、または XML として結果セットを要求できます。このような柔軟性があり、マッシュアップ環境ではインフォテーブルを簡単に消費できるので、デフォルトの設計パターンとしてこのフォーマットを使用することをお勧めします。必要に応じて、XML スキーマ出力などの特別なニーズに対応できます。
スクリプト関数インタフェースを定義した後は、そのサービスのハンドラ列をクリックすることでサービスを実装できます。これにより、サービス実装エディタが開きます。実装エディタで、ハンドラ (SQL クエリーまたはスクリプト) を選択できます。SQL クエリーはデータベースエンティティにのみ使用できます。スクリプトの実装はサーバー側 Java スクリプトエンジンです。
SQL クエリーでは、ソースデータベースに使用する構文でクエリーを記述します。準備された文で行うように、クエリーでパラメータとしてサービス入力を使用できます。出力プロパティがインフォテーブルの場合、結果を操作する必要はありません。クエリー結果はインフォテーブルに表示され、出力として使用できます。
* 
データベース Thing に対する SQL クエリーで '--[[]]' and '[[]]' というフォーマットの文字列を使用することはお勧めしません。SQL クエリーサービスで文字列を使用する場合、そうする代わりに、その文字列を入力変数に挿入し、その値を SQL で渡します。
スクリプトハンドラは、サーバー上のすべてのデータ、Thing、サービスを使用するための強力な手段であり、アプリケーションのニーズを満たします。モデル内のほかの Thing から計算と検索、サービス呼び出し、プロパティへのアクセスを行えます。ハンドラとしてスクリプトを選択すると、多数のスクリプトヘルパーが表示されます。現在編集中の Thing のスクリプト、プロパティ、サービス、イベントの入力を表示し、ダブルクリックすることでこれらの入力をスクリプトウィンドウ内に貼り付けることができます。システム内のその他のエンティティのプロパティ、サービス、イベントをブラウズすることもできます。サービス内のすべてのモデル機能を組み合わせることができます。
* 
スクリプトが Web ページまたは URL から呼び出された場合、そのスクリプトはログインユーザーのコンテキストで実行します。そのユーザーがスクリプト内のエンティティのランタイムサービス、プロパティ、またはイベントへのアクセス権を持たない場合、そのスクリプトは失敗することがあります。
スクリプト実装エディタには、スクリプトの作成を簡単に行うための構文ヘルパーとコードスニペットも用意されています。
* 
デフォルトでは、ThingWorx Platform でのスクリプトのタイムアウトの設定は 30 秒です。スクリプトがこれよりも長く実行されると、プラットフォームが実行を強制終了します。ThingWorx 管理者は、platform-settings.json ファイルの基本設定セクションでスクリプトのタイムアウトを設定できます。
非同期サービス
非同期サービスは独自のスレッドを作成して、その中で実行されます。非同期サービスを実行した場合、スレッドが作成されてプラットフォーム上で独立して実行されるので、非同期サービスは戻り値を持つことができません。別のサービス内から呼び出された場合、呼び出し元のサービスは非同期サービスが完了するまで待ちません。これは実行時間が長いサービス、特にバックグラウンドデータ構造体を更新したりシステムメンテナンスタスクを実行したりするタイマーのサービスで特に非常に便利です。
「新規サービス」エディタで非同期を選択すると、「呼び出しをキューに登録」オプションが表示されます。このオプションは、Remote Thing が接続されていない場合にサービス実行をキューに登録するリモートバインドサービス用です。ThingWorx はサービス実行時に各試行をキューに登録し、Remote Thing が再び接続されるとこれらを順番に実行します。
* 
エッジ制御デバイスでは Remote Thing プロパティは更新されません。
サービスの統計
利用率サブシステムは、タイムアウトによって終了した JavaScript サービスの判定基準を収集します。詳細については、タイムアウトによって終了したスクリプト実行の統計 を参照してください。
Thing Template と Thing Shape からのサービスの実行
Thing Template と Thing Shape からサービスを実行できます。このような場合、サービスの実行元となる実装された Thing を指定する必要があります。「実行」タブの「Thing 実装」フィールドで、Thing を選択します。
これは役に立ちましたか?