ピボット結果の保存
ピボットとエンリッチメント は取り込みで終了します。選択された候補がキャンバス上に表示されます。 それらをもたらしたピボットがタグ付けされており、他の場所にはタグ付けされていません。 save は後退です — pivot は独自の結果を元のシステムに書き込み、ライブラリが書籍を保管します。 交差したものについて。
summarize → fetch → triage → ingest → save
"2,143" the 210 the 12 on canvas in the source systemライブラリ自体はどこにも書き込みを行わず、資格情報を保持しません。それが貢献するのは、 簿記 - 実行によってどの要素が作成されたか、書かれたかどうか、どの要素が作成されたか 失敗したこと、そして再試行が何を伝えるべきか — それはそれ自身だけが知っている部分だからです。
宣言する
const objects = {
id: 'objects',
label: 'Objects & attributes',
fetch: (nodes, narrowing, ctx) => api.objects(nodes[0].id, { signal: ctx.signal }),
save: async ({ origin, nodes, children, edges }, ctx) => {
const written = await api.createObjects(origin[0].id, [...nodes, ...children], {
signal: ctx.signal,
})
return {
savedNodeIds: written.ok.map(o => o.localId),
savedEdgeIds: edges.map(e => e.id),
canonicalIds: Object.fromEntries(written.ok.map(o => [o.localId, o.uuid])),
message: written.failed.length ? `${written.failed.length} refused` : undefined,
}
},
}ペイロードは生のフラグメントではなく、ライブ グラフ オブジェクトです。
| フィールド | 保持しているもの |
|---|---|
origin | ピボットが実行された対象 - 「これはどのイベントに関連付けられているか」 |
nodes | この実行によって作成されたノード |
children | ユニオンが追加されたコンテナーの内容、フラット化。それぞれのコンテナから parentNode 経由で到達可能 |
edges | この実行で作成されたエッジ |
vouched | この実行前にすでにキャンバス上にあったもの |
attempt | 初回は1、再試行するとさらに高くなります |
save を省略すると、ピボットの結果は 保存不可 になります。 これらは台帳に入力されません。 未保存とはカウントされず、保存は表示されません。それは正しい宣言です 派生データを中心にピボットします。相関エンジンの出力はユーザーが書き戻すものではありません。 これは、救済策のない永久的な「210 の未保存」を阻止するものです。
返すもの
| 返されました | 手段 |
|---|---|
undefined / true | ペイロード全体が書き込まれた |
false、または投げる | どれもそうではありませんでした。エラーは再試行トーストに達します |
{ savedNodeIds, savedEdgeIds } | 部分的な書き込み — 名前のないものは保存されないままになります |
{ canonicalIds } | ローカル ID をキーとして割り当てられたソース システムの ID |
{ message } | 結果トーストにそのまま表示されます |
{ cancelled: true } | アナリストは撤回:何も記録されていない、トーストも試みもされていない |
savedNodeIds は nodes と children を一緒にカバーします。この実行で行われた要素に名前を付ける ID not create は無視されます。ピボットは生成しなかったものを書き込むことはありません。そのため、それを報告することはできません。 どちらかに書かれています。
書き込まれたエッジはレポートするが、エッジが接続するノードはレポートしない保存は、額面通りに解釈されます。 ソースシステムが書いたと主張するものは、ライブラリが覆すものではありません。
まずはアナリストに聞く
書き込みには、それぞれの関係がどの関係にあるのかなど、書き込みを開始する前に 1 つの答えが必要になる場合があります。 結果をエンリッチ元のノードに送信します。 ctx.promptData ライブラリ独自のモーダルが開きます。 ノードとエッジの作成の背後にあるオプションと同じオプションを使用します: 宣言的 fields、または render + getValues を自分用の HTML に。値、またはキャンセル時に null に解決されます。
save: async (payload, ctx) => {
const answer = await ctx.promptData({
fields: [{ key: 'relationship', label: 'Relationship', type: 'text', defaultValue: 'related-to' }],
})
if (!answer) return { cancelled: true }
await api.attach(payload, answer.relationship, { signal: ctx.signal })
},モーダルにはタイトルが付けられ、title と submitLabel が指示しない限り、保存 で送信されます。 それ以外の場合は。 { cancelled: true } に戻ると、実行前とまったく同じままになります。 クリック: まだ保存されておらず、トーストも再試行も行われず、次の試行はまだ attempt: 1 です。保存 数回の実行で最初のキャンセルで停止し、レポートではそれが cancelled にカウントされます。 失敗というよりは。キャンセルされた再試行では、トーストが元の状態に戻ります。
誰かがクリックした保存のみが要求できます。ピボット パネルの保存、レビュー ペインの保存、 トーストの再試行パス interactive: true; autoSave とプレーン graph.pivots.save() は行います そうではないので、彼らのpromptDataは何も引かずにすぐにnullを解決します。保存のあるホスト 独自のボタンもフラグを渡します。
await graph.pivots.save(undefined, { interactive: true })一つお願いします
await graph.pivots.save() // every savable run with something still unsaved
await graph.pivots.save(runId) // one run
await graph.pivots.save(pivotId) // every unsaved run of one pivot
graph.pivots.unsaved() // the runs still waiting
graph.pivots.unsavedCount() // { nodes, edges } — exact, not advisory
graph.pivots.unsavedCount(pivotId) // one pivot's share of it
graph.pivots.isSaved(node) // false for the unsaved *and* the not-savable
graph.pivots.isSavable(node) // which of those two it isランニングの一部
const selected = graph.renderer.getGraphInteraction().getSelectedNodeIDs() ?? []
await graph.pivots.save({ elements: selected }) // Nodes, Edges or their ids名前付き要素の 1 つを作成する各実行では、ペイロードが次のように絞り込まれて 1 回質問されます。 名前が付けられたもの。名前付きノードが保留中の子をそのノードの下に置き、エッジが発生します。 一方の端に名前が付けられ、もう一方の端にも名前が付けられるか、書かれないままにならない場合: 起点、すでに保存されているノード、台帳が待機していないもの。保留中のエッジ 取り残されたノードはそのまま残るため、書き込みによってラインが何も送信されることはありません。名前付き 何も待機していない要素は無視され、呼び出しは実行ごとに 1 つのトーストを取得します。 と尋ねた。
残りは保留されたままであり、再試行と canonicalIds は全体と同様に機能します。 走る。実行は、書き込むものがなくなった場合にのみ履歴に永続としてマークされます。 isSavable(el) と isSaved(el) は、* 選択した内容を保存* のようなメニュー エントリが 何をするにも。
実行は一度に 1 つずつ行われ、それぞれの実行にはまだ保存されていないものだけが送信されるため、再試行は同じです 電話する。結果はトーストとして届きます: Saved 12 nodes、または Saved 9 of 12 (再試行) 2 番目のトーストを重ねるのではなく、同じトーストを引き継ぎます。
UI では、カウントとボタンがピボット パネルとレビュー ペインの下部にあります。 ヘッダーには独自のプロバイダーの共有が含まれます。数値がゼロの間は何も表示されません。
どちらも保留中のすべてを書き込み、選択する方法はありません。節約を提供するアプリケーション ノード メニューの Save selected エントリなど、別の場所でオフにできます。
new Pivotick(el, data, { pivots: [objects], pivotSaveControls: false })
graph.pivots.saveControls = true // and back, at runtime2 つのコントロールのみが機能します。元帳、カウント、save(...)、そのトーストと再試行、そして canonicalIds は以前と同じように動作します。
autoSave: true は、ジェスチャーなしで、着地した瞬間に各ランを書き込みます。それはその後に実行されます 取り込みは内部ではなく解決されるため、遅いバックエンドがキャンバスを保持することはありません。 障害は通知機能を通じて報告され、データはそのまま残ります。と組み合わせてください autoIngest: true ハンドオフのエンドツーエンドのピボット — イベントを次のように拡張します すでにソース自身のものであるオブジェクト。
ソースシステムが作成したID
通常、保存すると何かが作成され、作成されたものにはソースの ID が取得されます。 システムが選択したものであり、プロバイダーが候補だったときに使用したものではありません。明日のランニング 次に、dedup が認識しない ID で同じオブジェクトを返し、アナリストは 12 を取得します。 昨日保存したものの複製。
canonicalIds を返すと、ライブラリはエイリアスを保持します。重複除去、子結合、および エッジ エンドポイントはすべてこれを参照するため、再実行すると、代わりに 12 がすでにキャンバス上にある と表示されます。
graph.pivots.canonicalId(node) // 'a1b2…' — the id the source assignedノードが到達した ID を保持する理由
再キーイングは、エッジ、クラスター、選択、クエリ エンジン、出所、および 歴史上、エイリアスは重要な部分にすでに提供されているため、利点があります。正直なコスト: graph.getNode(canonicalId) は依然としてミスしており、canonicalId() はミスしなかった読み取りです。
元に戻す操作がソース システムに到達しない
保存した実行を元に戻すと、そのノードがキャンバスから削除されます。 ではありません 書き込み先のシステムであり、ライブラリは補償書き込みを発行しません。 ローカル ビューは 2 つのシステムにわたるトランザクションではありません。
歴史がそう言っているので、それはあなた自身が知ることではありません。ライトスルーとマークされたランは、 チップ化保存、そしてメニューのフッターはスパンが何を残すかをカウントします。 PivotRun クリック前に警告を必要とする表面に対して saved カウントが保持されます。参照 永続化されたエントリの処理方法については、元に戻すと履歴を参照してください。
保存に失敗しても、キャンバスには触れません。アナリストはこれら 12 個のノードを受け入れました。ある バックエンドの拒否はバックエンドに関する情報であり、決定を覆すものではありません。彼らは 維持、未保存のまま、再試行可能のままです。
未保存のノードのマーク付け
new Pivotick(el, data, { pivots: [objects], pivotMarkUnsaved: true })実行によって作成され、ライトバックされていないすべてのノードに pvt-node-unsaved クラスを配置します。 スタイルシートは選択できます。デフォルトは破線の縁です。デフォルトではオフ、むしろクラス リム バッジよりも: ノードには 4 つのリム コーナーがあり、子を持つと 2 つだけになります。 宣言されたポテンシャルをリムから押し出すマーカーは、それが言う以上にコストがかかります。