構築ブロック > データモデルの拡張 > データモデルエンティティへのカスタムプロパティの追加
データモデルエンティティへのカスタムプロパティの追加
構築ブロックデータモデル内の多数のエンティティには、カスタムプロパティを追加するための、関連した _AP データシェイプがあります。たとえば、ジョブオーダーデータシェイプ (PTC.JobOrder.JobOrder) には、関連付けられている PTC.JobOrder.JobOrder_AP データシェイプがあります。このトピックの例では、新規 City プロパティを PTC.JobOrder.JobOrder_AP データシェイプに追加します。
カスタムプロパティをデータモデルに追加するには、次の複数の手順を実行します。
サービスを使用して新規カスタムプロパティをプログラムによって設定する方法の例については、カスタムプロパティの設定を参照してください。
データシェイプへのフィールドの追加
1. ThingWorx Composer で、エンティティの _AP データシェイプに移動します。この例では、PTC.JobOrder.JobOrder_AP に移動します。
2. 「フィールド定義」「追加」をクリックします。
3. 「新規フィールド定義」枠で、以下を指定します。
「名前」 - プロパティの名前。この例では、City と入力します。新しい名前は、元のデータシェイプ上にある任意のフィールドの名前と一致してはいけません。
「ベースタイプ」 - プロパティのデータ型。この例では、STRING を選択します。次のデータタイプがサポートされます。
STRING
NUMBER
INTEGER
BOOLEAN
LONG
TEXT
DATETIME
THINGNAME
THINGSHAPENAME
THINGTEMPLATENAME
USERNAME
SCHEDULE
IMAGELINK
* 
データベーステーブル内の列名は、データシェイプからの小文字のフィールド名になります。たとえば、MyPrimaryCity という名前のフィールドの場合は、myprimarycity という名前の列が生成されます。その結果、同じ文字であるが文字の大小が異なるフィールド名 (MyNamemyNamemyname など) は、同じデータシェイプではサポートされていません。
4. 「チェックマーク」アイコン をクリックして、新規フィールド定義を追加します。
5. 「保存」をクリックして、更新をデータシェイプに保存します。
任意のデータベース制約を使用したデータベース情報の更新
新規プロパティで任意のデータベース制約が必要な場合は、次の手順を実行します。
1. 新規プロパティを追加するエンティティのマネージャに移動します。この例では、PTC.JobOrderImpl.Manager Thing に移動します。
2. カスタマイズできるそのマネージャ Thing の複製を作成します。この例では、複製マネージャ Thing に MyCompany.MyJobOrderImpl.Manager という名前を付けます。複製マネージャ Thing の「プロジェクト」の値については、作成した構築ブロックのプロジェクトを使用します。この例では、PTC.JobOrderImpl 構築ブロックに基づく構築ブロックを使用します。この構築ブロックには、MyCompany.MyJobOrderImpl という名前のプロジェクトが含まれています。詳細については、新規構築ブロックの作成を参照してください。
3. 複製マネージャを登録します。
a. PTC.Base.Manager Thing に移動します。
b. 「コンフィギュレーション」で、DefaultGlobalManagerConfiguration コンフィギュレーションテーブルの適切なマネージャ行を編集し、managerThingName 値を手順 2 で作成した新しい複製マネージャ Thing に設定します。この例では、PTC.JobOrder.Manager の行を更新して、MyCompany.MyJobOrderImpl.ManagermanagerThingName として設定します。
c. 「保存」をクリックして、マネージャ Thing に対する変更を保存します。
4. 手順 2 で作成した複製マネージャ Thing に移動します。この例では、MyCompany.MyJobOrderImpl.Manager に移動します。
5. 「サービス」で、GetDBInfo サービスを検索してオーバーライドします。
6. スクリプトエディタで、プロパティを追加したデータシェイプのエントリまで下にスクロールします。この例では、次のエントリを検索します。
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
7. 新規プロパティのデータベース情報を使用して、データシェイプのエントリを更新します。
プロパティにインデックスを付ける場合は、次のプロパティを持つデータシェイプの indexedFields 配列に追加します。
name - 列の名前。必須。
unique - プロパティに一意の値が必要かどうかを指定します。
fieldNames - 列の名前を含む配列。1 つの列だけが指定されている場合、単一インデックスが作成されます。複数の列が指定されている場合、複合インデックスが作成されます。
* 
fieldnames に単一の値を指定する代わりに、単一の値に列の名前である name を指定することで、単一インデックスを作成できます。namefieldnames が両方とも指定されている場合、name は無視され、fieldnames の値を使用してインデックスが作成されます。
identifier - データベース内でのエンティティの名前。指定されない場合、システムは <テーブル名>_<列 1 名><列 2 名>_<列 N 名>_idx のフォーマットで値を自動的に生成します。指定された場合、値は指定した値と自動的に生成された任意の値の両方に対して一意でなければなりません。値の最大長は、データベースに許容されている識別子の最大長です。
プロパティを外部キーにする場合は、次のプロパティを持つデータシェイプの foreignKeys 配列を追加します。
name - 外部キーとなる現在のデータシェイプでのプロパティの名前。
referenceDataShapeName - 参照データベーステーブルのデータシェイプ。
referenceFieldName - 参照されている値を含むフィールドの名前。
onDelete - 参照データシェイプのインスタンスが削除されるときの、現在のデータシェイプのインスタンスの動作 (該当する場合)。
deleteReference - 現在のデータシェイプのインスタンスが削除されるときの、参照データシェイプのインスタンスの動作 (該当する場合)。
削除動作の詳細情報については、外部キーによる削除動作の設定を参照してください。
プロパティに追加のデータベース制約を指定するには、それを fields 配列内のエントリとして追加します。
name - 新規プロパティの名前。必須。
length - 新規プロパティの列の長さ (データベースのデフォルトの列の長さと異なる場合)。
notNull - プロパティが Null であってはならないかどうかを指定します。
defaultValue - このプロパティのデフォルト値。
* 
データベースの列に一意の値が必要な場合は、fields 配列ではなく、indexedFields 配列内の unique を使用してこれを指定します。
この例では、City の列の長さが 4000 文字で Null 値が存在しないように指定するには、PTC.JobOrder.JobOrder_AP データシェイプのエントリを次のように更新します。
{
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "City",
"length": 4000
"notNull": true
}]
},
8. 「保存」をクリックして、変更をサービスに保存します。
データベース情報とデータベーススキーマの同期化
データベース情報をデータベーススキーマと同期化します。詳細については、データベース情報とデータベーススキーマの同期化を参照してください。
カスタムプロパティの設定
次のコードは、プログラムでプロパティを設定するために、サービスにカスタムプロパティを含める方法を示す例です。このコードは、実装設計パターン構築ブロック内の各マネージャ Thing にある CreateInfoTable サービスを使用して、PTC.JobOrder.JobOrderPTC.JobOrder.JobOrder_AP データシェイプを 1 つのインフォテーブルにマージし、新しい City プロパティに Montreal の値を設定します。
var jobOrderDataShapeName = "PTC.JobOrder.JobOrder";
var jobOrderManagerThingName = me.GetJobOrderManager();
var jobOrders = Things[jobOrderManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.City = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[jobOrderManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});
これは役に立ちましたか?