インデックス付きフィールドの追加または除去
インデックス付きフィールドは、データベースのサーチを最適化するために使用されます。これらは、データベーステーブル内の関連した列の制約として定義されます。単一と複合のインデックスが両方ともサポートされています。
インデックス付きフィールドの追加
既存のデータベーステーブルにインデックス付きフィールドを追加するには、次の操作を行います。
1. 新しい構築ブロックを作成します。このブロックはデータベーステーブルに関連するエンティティのマネージャを含んでいる PTC 構築ブロックから拡張されます。これらのマネージャは、PTC.Base.Manager の「コンフィギュレーション」ページにある DefaultGlobalManagerConfiguration テーブルで指定されています。たとえば、ジョブオーダーにインデックス付きキーを追加するには、PTC.JobOrderImpl.Manager Thing に移動します。
2. 新しい構築ブロック用のマネージャ Thing に移動します。
3. 「サービス」で、インデックス付きフィールドを追加するエンティティの GetDBInfo サービスを検索してオーバーライドします。たとえば、ジョブオーダーのデータベーステーブルにインデックス付きフィールドを追加するには、GetJobOrderDBInfo サービスを検索してオーバーライドします。
4. スクリプトエディタで、インデックス付きフィールドを追加するデータシェイプのエントリまで下にスクロールします。
5. 次のプロパティを持つデータシェイプの indexedFields 配列を追加します。
◦ unique - 列に一意の値が必要かどうかを指定します。
◦ fieldnames - 列の名前を含む配列。1 つの列だけが指定されている場合、単一インデックスが作成されます。複数の列が指定されている場合、複合インデックスが作成されます。
|
fieldnames に単一の値を指定する代わりに、単一の値に列の名前である name を指定することで、単一インデックスを作成できます。name と fieldnames が両方とも指定されている場合、name は無視され、fieldnames の値を使用してインデックスが作成されます。
|
◦ identifier - データベース内でのエンティティの名前。指定されない場合、システムは <テーブル名>_<列 1 名><列 2 名>_<列 N 名>_idx のフォーマットで値を自動的に生成します。指定された場合、値は指定した値と自動的に生成された任意の値の両方に対して一意でなければなりません。値の最大長は、データベースに許容されている識別子の最大長です。
6. 「保存」をクリックして、変更をサービスに保存します。
7. PTC.DBConnection.Manager Thing に移動します。
インデックス付きフィールドの除去
インデックス付きフィールドを除去するには、次の操作を行います。
1. 新しい構築ブロックを作成します。このブロックはデータベーステーブルに関連するエンティティのマネージャを含んでいる PTC 構築ブロックから拡張されます。これらのマネージャは、PTC.Base.Manager の「コンフィギュレーション」ページにある DefaultGlobalManagerConfiguration テーブルで指定されています。たとえば、ジョブオーダーからインデックス付きキーを除去するには、PTC.JobOrderImpl.Manager Thing に移動します。
2. システムに設定されているデータベース Thing (PTC.DBConnection.MSSQLDatabase など) に移動します。
3. 「サービス」で、次の入力を指定して「RemoveIndex」サービスを実行します。
◦ dataShapeName - インデックス付きフィールドの制約を除去するデータベーステーブルのデータシェイプ。必須。
◦ fieldName - インデックス付きフィールドの制約を除去するデータシェイプ上のフィールド。この入力は、単一のインデックス付きフィールドを除去するときにのみ必要です。
◦ dbInfo - 除去するインデックス付きフィールドの制約の JSON の説明。インデックス付きフィールドが定義されている GetDBInfo サービスで指定されているものと同じ identifier (存在する場合) および name の情報を指定する必要があります。この入力は、複合インデックスを除去するときに必要です。
4. 「実行」をクリックします。
5. インデックス付きフィールドが定義されている
GetDBInfo サービスに移動し、そのサービスからインデックス付きフィールドの定義を除去します。これが除去されていない場合、次に
同期化サービスが実行されたときに、インデックス付きフィールドがデータベースに再び追加されます。
たとえば、MyObject データシェイプで、WorkDefinitionUID という名前のフィールドから、identifier が指定されたインデックス付きフィールドの制約を除去するには、入力パラメータに対して次のように指定します。
• dataShapeName - MyObject
• fieldName - WorkDefinitionUID
• dbInfo -
{
"identifier":"myobject_workdefinitionuid_idx"
"name":"WorkDefinitionUID",
}