注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
以下の機能は、Workshop のダイナミックスケジューリング機能に追加の機能を提供します。
スケジューリングガントチャートウィジェットは Scenarios によって支えられており、what-if 分析の作成と比較を可能にします。したがって、ウィジェットで行われる変更は直接オントロジーに書き込まれません。代わりに、それらは実質的に "ステージング" または "シミュレート" された変更です。スケジュールの保存アクションがオントロジーに変更を書き込むために必要です。
提案された変更をオントロジーに書き込むためには、通常、OMAウィザードを通じて設定できる簡単な修正アクションが十分です。オントロジーを更新した後にさらなる編集が必要な場合は、Function によって支えられたカスタム保存アクションを使用できます。
下記にはタイプと例示関数のサンプルコードスニペットが提供されています。
以下のタイプは、スケジュールの変更のシリアライズされた詳細を表し、それは指定された割り当ての旧状態と新状態の両方に関する情報を含みます。
/* Changelogの型 */
// Changelogエントリの型を定義します
type ChangelogEntryType = "allocation";
// IChangelogEntryBaseインターフェースを定義します
interface IChangelogEntryBase {
type: ChangelogEntryType; // エントリの型
id: string; // ID
touchCounter: number; // タッチカウンタ
parentEntryId?: string; // 親エントリのID(オプション)
}
// IAllocationChangelogEntryインターフェースを定義します
interface IAllocationChangelogEntry extends IChangelogEntryBase {
type: "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(オプション)
}
// IEnhancedChangelogインターフェースを定義します
export interface IEnhancedChangelog extends IAllocationChangelogEntry {
fixedResourceObjectTypeId: string; // 固定リソースオブジェクトタイプID
puckId: string; // パックID
}
// ISubmitAllocationPayloadインターフェースを定義します
export interface ISubmitAllocationPayload {
changelog: IEnhancedChangelog[]; // チェンジログの配列
comment?: string; // コメント(オプション)
}
import { IEnhancedChangelog, ISubmitAllocationPayload } from "./types";
export class MyFunctions {
// スケジュールオブジェクトAPIを編集する
@Edits(scheduleObjectAPI)
// オントロジー編集機能
@OntologyEditFunction()
// 関数名
public functionName(submissionPayload: string): void {
// サブミットアロケーションペイロードとしてJSONを解析
const payload: ISubmitAllocationPayload = JSON.parse(serializedInput) as ISubmitAllocationPayload;
// チェンジログのエントリを取得
const entries: IEnhancedChangelog[] = payload.changelog;
// すべてのオブジェクトを検索
const allocations = Objects.search().objectAPI().all();
// 各エントリを処理する
entries.forEach(entry => {
// アサインメントIDがpuckIdと一致するオブジェクトを見つける
const maybeAllocation = allocations.find(alloc => alloc.assignmentId === entry.puckId);
// オブジェクトが見つからなかった場合は終了
if (maybeAllocation == null) {
return;
}
// 新しい終了時間が定義されていれば設定する。そうでなければ未定とする。
maybeAllocation.endTimestamp = entry.newEndTime !== undefined ? Timestamp.fromJsDate(new Date(entry.newEndTime)) : undefined;
// 新しい開始時間が定義されていれば設定する。そうでなければ未定とする。
maybeAllocation.startTimestamp = entry.newStartTime !== undefined ? Timestamp.fromJsDate(new Date(entry.newStartTime)) : undefined;
// 固定リソースオブジェクトタイプIDがオブジェクトIDと一致する場合
if (entry.fixedResourceObjectTypeId === objectId) {
// アロケーションされたリソースキーを設定する
maybeAllocation.fixedResourceKey = entry.allocatedTo
} else {
// スケジュール可能キーを設定する
maybeAllocation.schedulableKey = entry.allocatedTo
}
});
}
割り当て動作とは、パックがドラッグアンドドロップインターフェースで移動した後の動作を指します。スケジューリングガントチャートウィジェットには、大半のユースケースをカバーするための5つの事前定義されたオプションが付属しています。以下の例のように、TypeScript関数を使用してユーザーのカスタム割り当て動作を定義することも可能です。
/* Changelogの種類 */
/* 注意: これらのタイプはカスタムセーブアクションでも使用されており、
すでにあなたのfunctionsリポジトリにあるかもしれません。 */
type ChangelogEntryType = "allocation";
// IChangelogEntryBaseインターフェース
interface IChangelogEntryBase {
type: ChangelogEntryType;
id: string;
touchCounter: number;
parentEntryId?: string;
}
// IAllocationChangelogEntryインターフェース
interface IAllocationChangelogEntry extends IChangelogEntryBase {
type: "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;
}