注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Foundry のオブジェクトのアイデンティティはいくつかの異なる方法で表現され、これらの異なる表現を理解することは、Functions で正確なコードを書くために重要になる場合があります。このセクションでは、オブジェクトがどのように識別され、それがユーザーのコードにどのような影響を与えるかについて説明します。
"RID" は Resource Identifier を指し、Palantir のオープンソース仕様でエンティティを識別するために使用されます。オントロジーオブジェクトは、元データセットをインデックス化したり、アクションの一部として作成したりするときに、RID が割り当てられます。
Functions では、すべてのオントロジーオブジェクトには string | undefined
型の rid
フィールドがあります。RID が未定義になる理由は、オブジェクトの作成 API を使用して Functions で新しいオブジェクトを作成することが可能だからです。新しく作成されたオブジェクトの rid
値は常に undefined
で、既存のオブジェクトは常に定義された rid
を持っています。
オブジェクトはまた、そのオブジェクトタイプとプライマリキーによって一意に識別することもできます。プライマリキーは一意の propertyId
と値のペアです。たとえば、Employee オブジェクトタイプは employeeId
という string
プロパティによって一意に識別することができます。
すべてのオントロジーオブジェクトは常に typeId
と primaryKey
フィールドを持っており、新しく作成されたオブジェクトにもこれらのフィールドが存在します。これは、新しいオブジェクトを作成するときにプライマリキーを提供する必要があるからです。
Functions 内では、各オントロジーオブジェクトは JavaScript オブジェクト を使用して表現されます。1つのオントロジーオブジェクトが複数の JavaScript オブジェクトとして表現されることがあります。例えば、オブジェクト検索からオントロジーオブジェクトを複数回ロードしたり、パラメーターとして渡されたオブジェクトをオブジェクト検索からロードしたりすると、このようなことが起こります。
Copied!1 2 3 4 5 6 7 8 9 10 11 12
public myFunction(employee: Employee): void { // 従業員オブジェクトを検索して、employee2に代入します。 const employee2 = Objects.search().employee() .filter(e => e.id.exactMatch(employee.id)) .all()[0]; // employeeとemployee2が同じオブジェクトかどうかをチェックし、結果をコンソールに出力します。 console.log(employee == employee2); // false // employeeとemployee2が同じオブジェクトかどうかを厳密にチェックし、結果をコンソールに出力します。 console.log(employee === employee2); // false // employeeとemployee2のIDが同じかどうかをチェックし、結果をコンソールに出力します。 console.log(employee.id === employee2.id); // true }
上記の例で、employee
と employee2
は同じ概念的なオントロジーオブジェクトを指しているにもかかわらず、==
および ===
演算子を使用して比較すると、変数が2つの異なるJavaScriptオブジェクトを指しているため、false
が返されます。新しく作成されたオブジェクトは rid
が undefined
であるため、rid
フィールドを単純に比較することは問題があります。
その結果、2つのオントロジーオブジェクトを等価性で比較する最良の方法は、typeId
と primaryKey
を比較することです:
Copied!1 2 3 4 5 6
// OntologyObjectの型であるo1とo2が等しいかどうかを判断する関数 function isEqual(o1: OntologyObject, o2: OntologyObject) { // o1とo2のtypeIdが等しく、primaryKeyが等しい場合にtrueを返す return o1.typeId === o2.typeId && JSON.stringify(o1.primaryKey) == JSON.stringify(o2.primaryKey); }
オブジェクトからある値へのマッピングを保存することは、よく役立ちます。例えば、オブジェクトの配列を反復処理し、効率的な検索のために値を保存したい場合があります。
上記で説明した等価性チェックの問題のため、JavaScript の Map を使って各オブジェクトの値を保存することはできません。代わりに、オントロジーオブジェクトをキーとしてサポートするように特別に設計された FunctionsMap を使用することができます。