注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
オントロジーに基づいて導出値を返す関数を作成するだけでなく、オントロジー内のオブジェクト間のプロパティとリンクを編集する関数も作成できます。このページでは、関数で使用できるオブジェクト編集APIについて説明しています。編集関数の動作について詳しく知りたい場合は、概要ページをご覧ください。
実際の運用環境で使用するためには、オントロジー編集関数はアクションとして設定する必要があります。これをFunction-backed Actionと呼びます。このようにアクションを設定すると、追加のメタデータを提供したり、権限を設定したり、さまざまな運用インターフェースでアクションにアクセスしたりすることができます。ドキュメンテーションで述べられているように、アクションの外部で編集関数を実行しても、実際にはオブジェクトデータは変更されません。
オブジェクトを編集した後に検索すると、予想外の結果が返されることがあります。詳細は注意点セクションをご覧ください。
オントロジーを編集する関数は以下の条件を満たす必要があります:
@foundry/functions-api
からインポートされた@OntologyEditFunction()
デコレータで装飾されていること@foundry/functions-api
からインポートされた@Edits([object type])
デコレータで装飾されていることvoid
戻り値を持つことオブジェクトのプロパティ値を編集するには、単純にオブジェクトのプロパティ値を再割り当てするだけです。例えば:
Copied!1 2
// 従業員の姓を新しい名前に設定します。 employee.lastName = newName;
もし同じ関数実行内で後に lastName
プロパティの値にアクセスする場合、設定したばかりの新しい値が返されます。
オブジェクトの配列プロパティは、ReadOnlyArray
タイプで生成されます。配列を変更するには、配列のコピーを作成し、コピーを変更してからプロパティを更新してください:
Copied!1 2 3 4 5 6
// 新しい配列にコピー let arrayCopy = [...myObject.myArrayProperty]; // コピーした配列を変更できます arrayCopy.push(newItem); // 次に、プロパティ値を上書きします myObject.myArrayProperty = arrayCopy;
既存のオブジェクトの主キー属性値を更新することはできません。
SingleLink
および MultiLink
インターフェースには、リンクを更新するためのさまざまなメソッドが用意されています:
Copied!1 2 3 4 5 6 7 8 9 10 11
// 従業員の上司を設定する employee.supervisor.set(newSupervisor); // 従業員の上司をクリアする employee.supervisor.clear(); // 指定した従業員に新しいレポートを追加する employee.reports.add(newReport); // 指定した従業員に関連付けられた古いレポートを削除する employee.reports.remove(oldReport);
プロパティを更新するときと同様に、更新後のリンクにアクセスすると、行った更新が反映されます。
@foundry/ontology-api
から利用できるObjects.create()
インターフェースを使用して新しいオブジェクトを作成できます。新しいオブジェクトを作成する際には、その主キーの値を指定する必要があります。
この例では、与えられたIDを持つ新しいチケットオブジェクトを作成し、そのdueDate
プロパティを設定し、与えられた従業員に割り当てます(assignedTickets
リンクを変更することで)。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import { OntologyEditFunction, Edits } from "@foundry/functions-api"; import { Employee, Objects, Tickets } from "@foundry/ontology-api"; export class TicketActionFunctions { // 従業員とチケットを編集する @Edits(Employee, Tickets) // オントロジー編集機能 @OntologyEditFunction() // 新しいチケットを作成し、従業員に割り当てる public createNewTicketAndAssignToEmployee(employee: Employee, ticketId: Integer): void { // 新しいチケットを作成 const newTicket = Objects.create().ticket(ticketId); // 期限を現在の日付から7日後に設定 newTicket.dueDate = LocalDate.now().plusDays(7); // 従業員にチケットを割り当てる employee.assignedTickets.add(newTicket); } }
.delete()
メソッドを呼び出すことでオブジェクトを削除できます。
この例では、指定された従業員に割り当てられたすべてのチケットを削除します。
Copied!1 2 3 4
// 社員のチケットをすべて取得 const tickets = employee.tickets.all(); // 各チケットを削除 tickets.forEach(ticket => ticket.delete());