カスタムプロパティとデータシェイプの追加
カスタムプロパティとデータシェイプの追加
Operator Advisor データモデルを拡張すれば、既成で提供されていないモデルにビジネス固有のデータを追加できます。これは次の方法で実現されます。
Operator Advisor エンティティに関連付けられている _AP データシェイプを更新して、既存の Operator Advisor エンティティにカスタムプロパティを追加します。
カスタムデータシェイプとそれらを管理するサービスを作成して、Operator Advisor に新しいエンティティを追加します。
_AP データシェイプへのカスタムプロパティの追加
Operator Advisor データモデルのほとんどのエンティティには、カスタムプロパティを追加するための関連する _AP データシェイプがあります。たとえば、ジョブオーダーデータシェイプ (PTC.SCA.SCO.JobOrder) には、関連付けられている PTC.SCA.SCO.JobOrder_AP データシェイプがあります。
Operator Advisor エンティティにカスタムプロパティを追加するには、以下の手順に従います。この例では、新しい Location プロパティを PTC.SCA.SCO.JobOrder_AP データシェイプに追加します。
1. ThingWorx Composer で、エンティティの _AP データシェイプに移動します。この例では、PTC.SCA.SCO.JobOrder_AP に移動します。
2. 「フィールド定義」「追加」をクリックします。
3. 「新規フィールド定義」枠で、以下を指定します。
「名前」 - プロパティの名前。この例では、Location と入力します。
「ベースタイプ」 - プロパティのデータ型。この例では、STRING を選択します。
4. をクリックして、新規フィールド定義を追加します。
5. 「保存」をクリックして、更新をデータシェイプに保存します。
6. お使いのシステムに設定されているデータベース Thing (たとえば、PTC.SCA.SCO.PostgresDatabase など) に移動します。
7. 「サービス」で、次の入力を使用して「AddColumn」サービスを実行します。
「dataShapeName」の場合は、新しいフィールド定義を追加した _AP データシェイプをサーチして選択します。この例では、PTC.SCA.SCO.JobOrder_AP をサーチして選択します。
「fieldName」に対して、新しいフィールド定義の名前を入力します。この例では、Location と入力します。
「dbInfo」の場合、新しい列に関する次のデータベース情報を入力します。
name - 新しいプロパティに関してデータベースに追加される列の名前。必須
length - データベースに対するデフォルトの列の長さと異なる場合、新しい列に対する列の長さ。
unique - 列に一意の値が必要かどうかを指定します。
notNull - 列が Null であってはならないかどうかを指定します。
この例では、次のように入力します。
{"name":"Location","length":4000}
次のコードは、属性をプログラムで設定するために、どのようにしたらカスタムプロパティをサービスに追加できるかを示す例です。このコードは、「CreateInfoTable」サービスを使用して、PTC.SCA.SCO.JobOrderPTC.SCA.SCO.JobOrder_AP のデータシェイプを 1 つのインフォテーブルにマージし、新しい Location 属性を Montreal の値で設定します。
var jobOrderDataShapeName = "PTC.SCA.SCO.JobOrder";
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var jobOrders = Things[productionManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.Location = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[productionManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});
マッシュアップへのカスタムプロパティの追加
以下の手順で、マッシュアップにプロパティを含める方法を使用した場合の最良事例を説明します。
1. 前のセクションで説明したように、_AP データシェイプにカスタムプロパティを追加し、「AddColumn」サービスを実行します。この例では、前のセクションで PTC.SCA.SCO.JobOrder_AP データシェイプに追加したカスタム Location プロパティを続けて使用します。
2. メインのエンティティデータシェイプと _AP データシェイプの両方からのフィールド定義を用いて、新規データシェイプを作成します。
この例では、MyJobOrder という名前の新規データシェイプを作成します。ID (PTC.SCA.SCO.JobOrder データシェイプから) および Location (PTC.SCA.SCO.JobOrder_AP データシェイプから) のフィールド定義を追加します。
3. PTC.SCA.SCO.ProductionOrderUtils Thing に移動します。
4. 「サービス」で、新規サービスを追加して、手順 2 で作成したデータシェイプのインスタンスを作成します。入力と出力の両方のパラメータにも、新規データシェイプのインフォテーブルを使用します。
この例では、入力と出力の両方のパラメータに対して、MyJobOrder データシェイプのインフォテーブルを用いて、「CreateMyJobOrder」という名前の新規サービスを追加します。サービスエディタで、次のようなコードを入力します。
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var newJobOrders = Things[productionManagerThingName].CreateJobOrders({
JobOrders: myJobOrders
});
//Put new job orders in a new info table of MyJobOrder in order to filter the return attribute, this is not required.
var params = {
infoTableName : "InfoTable",
dataShapeName : "MyJobOrder"
};
var result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var tableLength = newJobOrders.rows.length;
for (var x=0; x < tableLength; x++) {
var row = newJobOrders.rows[x];
result.AddRow(row);
}
5. マッシュアップで新規サービスを使用すると、カスタムプロパティが存在する、エンティティの新しいインスタンスが作成されます。この例では、マッシュアップで「CreateMyJobOrder」サービスを使用すると、PTC.SCA.SCO.JobOrder データベーステーブルに設定された ID プロパティ、および PTC.SCA.SCO.JobOrder_AP データベーステーブルに設定されたカスタム Location プロパティを用いて、新しいジョブオーダーが作成されます。
カスタムデータシェイプの追加
Operator Advisor に新しいエンティティを追加するには、データシェイプのインスタンスを管理するために必要なサービスで、そのエンティティに対する新しいデータシェイプを作成します。
1. ThingWorx Composer で新しいデータシェイプを作成します。この例では、データシェイプに MyObject という名前を付けます。
2. 「フィールド定義」で、「追加」をクリックし、データシェイプに含める各プロパティに対して新しいフィールド定義を指定します。
3. 「保存」をクリックして新しいデータシェイプを保存します。
4. お使いのシステムに設定されているデータベース Thing (たとえば、PTC.SCA.SCO.PostgresDatabase など) に移動します。
5. 「サービス」で、次の入力を使用して「CreateTable」サービスを実行します。
「dataShapeName」の場合、手順 1 で作成した新しいデータシェイプをサーチして選択します。
「dbInfo」の場合、データシェイプに関するデータベース情報を含む JSON 配列を入力します。
dataShapeName - 新しいデータベーステーブルを追加するデータシェイプの名前。
indexedFields - インデックシングされる列。インデックシングは、サーチと並べ替えの高速化に役立ちます。配列には複数のインデックス付きフィールドを定義できます。配列内の各要素には、次のプロパティが含まれている可能性があります。
name - 列の名前。必須。
unique - 列に一意の値が必要かどうかを指定します。
fields - 仕様がさらに必要な任意の列。配列には複数のフィールドを定義できます。配列内の各要素には、次のプロパティが含まれている可能性があります。
name - 列の名前。必須。
length - 列が String であり、データベースのデフォルトの長さ以外の長さが必要な場合の列の長さ。
unique - 列に一意の値が必要かどうかを指定します。
notNull - 列が Null であってはならないかどうかを指定します。
foreignKeys - 新しいデータベーステーブルに対する外部キー列の定義。配列には複数の外部キーを定義できます。配列内の各要素には、次のプロパティを含む必要があります。
name - 外部キーとなる現在のデータシェイプでの列の名前。
referenceDataShapeName - 参照されるデータベーステーブルのデータシェイプ。
referenceFieldName - 参照されている値を含むフィールドの名前。
詳細については、 外部キーの追加または除去を参照してください。
たとえば、新しい MyObject データシェイプに、インデックス付きフィールドを指定せず、外部キーを指定し、Location フィールドの長さを 4000 文字に設定するには、次のように入力します。
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
6. デフォルトの生産オーダーマネージャ (PTC.SCA.SCO.DefaultProductionOrderManager) に移動します。
7. 「サービス」で、「追加」をクリックし、新しいデータシェイプのエンティティを管理するために必要なサービスを作成します。Operator Advisor エンティティには、既存の CRUD サービスをモデルとして使用します。
作成サービス。この例では、サービス名として CreateMyObjects を入力します。サービスエディタで、次のコードを入力します。
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
削除サービス。この例では、サービス名として DeleteMyObject を入力します。サービスエディタで、次のコードを入力します。
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
更新サービス。この例では、サービス名として UpdateMyObjects を入力します。サービスエディタで、次のコードを入力します。
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
このデータシェイプの個々のインスタンスを読み込むサービス。この例では、サービス名として GetMyObject を入力します。サービスエディタで、次のコードを入力します。
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
オプションで、filter、offset、limit 入力パラメータを含む、このデータシェイプの複数のインスタンスを読み込むサービス。入力パラメータが指定されていない場合は、MyObject のすべてのインスタンスが返されます。この例では、サービス名として GetMyObjects を入力します。サービスエディタで、次のコードを入力します。
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
8. デフォルトの生産オーダーマネージャ (PTC.SCA.SCO.DefaultProductionOrderManager) で新しいサービスを保存するには、「保存」をクリックします。