オントロジーファンクションオブジェクトの関数オブジェクト識別子

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

オブジェクト識別子

Foundry のオブジェクトのアイデンティティはいくつかの異なる方法で表現され、これらの異なる表現を理解することは、Functions で正確なコードを書くために重要になる場合があります。このセクションでは、オブジェクトがどのように識別され、それがユーザーのコードにどのような影響を与えるかについて説明します。

識別子の種類

オブジェクト RID

"RID" は Resource Identifier を指し、Palantir のオープンソース仕様でエンティティを識別するために使用されます。オントロジーオブジェクトは、元データセットをインデックス化したり、アクションの一部として作成したりするときに、RID が割り当てられます。

Functions では、すべてのオントロジーオブジェクトには string | undefined 型の rid フィールドがあります。RID が未定義になる理由は、オブジェクトの作成 API を使用して Functions で新しいオブジェクトを作成することが可能だからです。新しく作成されたオブジェクトの rid 値は常に undefined で、既存のオブジェクトは常に定義された rid を持っています。

プライマリキー

オブジェクトはまた、そのオブジェクトタイプとプライマリキーによって一意に識別することもできます。プライマリキーは一意の propertyId と値のペアです。たとえば、Employee オブジェクトタイプは employeeId という string プロパティによって一意に識別することができます。

すべてのオントロジーオブジェクトは常に typeIdprimaryKey フィールドを持っており、新しく作成されたオブジェクトにもこれらのフィールドが存在します。これは、新しいオブジェクトを作成するときにプライマリキーを提供する必要があるからです。

コードへの影響

等価性のチェック

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 }

上記の例で、employeeemployee2 は同じ概念的なオントロジーオブジェクトを指しているにもかかわらず、== および === 演算子を使用して比較すると、変数が2つの異なるJavaScriptオブジェクトを指しているため、false が返されます。新しく作成されたオブジェクトは ridundefined であるため、rid フィールドを単純に比較することは問題があります。

その結果、2つのオントロジーオブジェクトを等価性で比較する最良の方法は、typeIdprimaryKey を比較することです:

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 を使用することができます。