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

高度な機能

以下の機能は、Workshop の動的スケジューリング機能に追加の機能を提供します。

カスタム保存アクション

スケジューリング ガント チャート ウィジェットは Scenarios を利用しており、仮説分析の作成と比較を可能にします。ウィジェットで行われた変更は、直接オントロジーに書き込まれるのではなく、実質的に「ステージング」または「シミュレーション」された変更として扱われます。変更をオントロジーに書き込むには、スケジュール保存アクションが必要です。

提案された変更をオントロジーに書き込むには、単純な修正アクション(OMA ウィザード経由で構成可能)が通常は十分です。オントロジーを更新した後にさらに編集が必要な場合、関数を利用したカスタム保存アクションを使用できます。

タイプと例の関数のサンプルコードスニペットを以下に示します。

タイプ

以下のタイプは、スケジュール変更のシリアル化された詳細を表しており、指定された割り当ての古い状態と新しい状態に関する情報を含みます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /* 変更履歴の種類 */ type ChangelogEntryType = "allocation"; // 変更履歴のタイプを定義 interface IChangelogEntryBase { type: ChangelogEntryType; // 変更履歴のタイプ id: string; // 変更履歴のID touchCounter: number; // 変更回数をカウントする parentEntryId?: string; // 親の変更履歴ID(オプション) } interface IAllocationChangelogEntry extends IChangelogEntryBase { type: "allocation"; // 変更履歴のタイプが "allocation" であることを明示 puckId: string; // パックのID allocatedTo: string | undefined; // 割り当て先 allocatedFrom: string | undefined; // 割り当て元 newStartTime: number | undefined; // 新しい開始時間 newEndTime: number | undefined; // 新しい終了時間 previousStartTime: number | undefined; // 以前の開始時間 previousEndTime: number | undefined; // 以前の終了時間 id: string; // 変更履歴のID touchCounter: number; // 変更回数をカウントする parentEntryId?: string; // 親の変更履歴ID(オプション) } export interface IEnhancedChangelog extends IAllocationChangelogEntry { fixedResourceObjectTypeId: string; // 固定リソースオブジェクトのタイプID puckId: string; // パックのID } export interface ISubmitAllocationPayload { changelog: IEnhancedChangelog[]; // 強化された変更履歴の配列 comment?: string; // コメント(オプション) }

Example function

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import { IEnhancedChangelog, ISubmitAllocationPayload } from "./types"; export class MyFunctions { // @Editsと@OntologyEditFunctionはデコレータであり、関数のメタデータを追加するために使用されます。 @Edits(scheduleObjectAPI) @OntologyEditFunction() public functionName(submissionPayload: string): void { // submissionPayloadをJSON.parseして、ISubmitAllocationPayload型にキャストします。 const payload: ISubmitAllocationPayload = JSON.parse(submissionPayload) as ISubmitAllocationPayload; // payloadからchangelogを取得します。 const entries: IEnhancedChangelog[] = payload.changelog; // オブジェクトAPIを使ってすべての割り当てを検索します。 const allocations = Objects.search().objectAPI().all(); // 各エントリについて処理を行います。 entries.forEach(entry => { // entry.puckIdと一致する割り当てを検索します。 const maybeAllocation = allocations.find(alloc => alloc.assignmentId === entry.puckId); if (maybeAllocation == null) { return; } // entry.newEndTimeが存在する場合はendTimestampを更新します。 maybeAllocation.endTimestamp = entry.newEndTime !== undefined ? Timestamp.fromJsDate(new Date(entry.newEndTime)) : undefined; // entry.newStartTimeが存在する場合はstartTimestampを更新します。 maybeAllocation.startTimestamp = entry.newStartTime !== undefined ? Timestamp.fromJsDate(new Date(entry.newStartTime)) : undefined; // entry.fixedResourceObjectTypeIdがobjectIdと一致する場合はfixedResourceKeyを、それ以外の場合はschedulableKeyを更新します。 if (entry.fixedResourceObjectTypeId === objectId) { maybeAllocation.fixedResourceKey = entry.allocatedTo } else { maybeAllocation.schedulableKey = entry.allocatedTo } }); } }

カスタム割り当て動作

割り当て動作とは、ドラッグアンドドロップインターフェースでパックが移動された後の動作のことです。Scheduling Gantt Chart ウィジェットには、大部分のユースケースをカバーするために 5 つの定義済みオプションが用意されています。また、以下の例のように TypeScript 関数を使用して、ユーザー自身のカスタム割り当て動作を定義することもできます。


/* Changelog types */
/* 注: これらの型はカスタム保存アクションにも使用されており、すでに
   あなたの関数リポジトリに存在する可能性があります。 */

type ChangelogEntryType = "allocation"; // ChangelogEntryTypeの型定義

interface IChangelogEntryBase {
    type: ChangelogEntryType; // エントリーのタイプ
    id: string; // エントリーの識別子
    touchCounter: number; // タッチカウンター
    parentEntryId?: string; // 親エントリーの識別子(オプション)
}

interface IAllocationChangelogEntry extends IChangelogEntryBase {
    type: "allocation"; // エントリーのタイプ(固定値として"allocation")
    puckId: string; // パックの識別子
    allocatedTo: string | undefined; // 割り当て先
    allocatedFrom: string | undefined; // 割り当て元
    newStartTime: number | undefined; // 新しい開始時間
    newEndTime: number | undefined; // 新しい終了時間
    previousStartTime: number | undefined; // 前の開始時間
    previousEndTime: number | undefined; // 前の終了時間
    id: string; // エントリーの識別子
    touchCounter: number; // タッチカウンター
    parentEntryId?: string; // 親エントリーの識別子(オプション)
}