事前コミットトリガーを持つアクションスクリプト
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
この例は、エンティティデータを保存する前に自動的に検証または修正する方法を示しており、必要なすべてのフィールドが完全でビジネスルールに準拠していることを保証します。ウェブスクリプトはプリ コミット トリガーに接続されており、適用された変更がシステムに保存される前に実行されます。これは、画像やウェブに適したファイルタイプを、大量アップロード時に手動で介入せずに適切に分類するのに役立つのに役立ちます。
!注始める前に
スクリプトで参照されているアセットがContent Hubスキーマに存在していることを確認してください。
スクリプトロジックで使用されるTitleやDescriptionなどの必要なプロパティを定義します。
スクリプトを実行するユーザーやロールが参照対象エンティティを作成または変更する必要な権限を持っているか確認してください。
文字
using System.Linq;
var webExtensions = new { ".jpg", ".jpeg", ".png", ".gif" };
var entity = Context.Target as IEntity;
// Make sure that the following members are loaded await entity.LoadMembersAsync(new PropertyLoadOption("FileName"), new RelationLoadOption("AssetTypeToAsset"));
var filename = entity.GetPropertyValue
var extension = GetExtension(filename)?.ToLowerInvariant();
if (string.IsNullOrEmpty(extension)) return; if (!webExtensions.Contains(extension)) return;
var query = Query.CreateQuery(entities => from e in entities where e.Identifier == "M.AssetType.Web" select e);
var webTypeId = await MClient.Querying.SingleIdAsync(query); if (!webTypeId.HasValue) return;
var relation = entity.GetRelation
relation.Parent = webTypeId;
string GetExtension(string path) { var tokens = path.Split('.'); if (tokens.Length > 1) { return "." + tokenstokens.Length - 1; } return null; }
脚本の説明
このセクションでは、スクリプトを実行順に順に進め、各パートについて説明します。番号付きの項目はシーケンスを記述しており、実行命令ではありません。
-
スクリプトで使用するライブラリを含めてください。どのライブラリを含めるべきかを理解するには、「 コンテキストプロパティ (プロパティタイプ)」を参照してください。
using System.Linq;
-
ウェブ互換のファイル拡張子のリストを定義し、どのファイルがウェブアセットと認められるかを判断します。
var webExtensions = new { ".jpg", ".jpeg", ".png", ".gif" };
-
ファイル名プロパティとアセットタイプの関係が読み込まれていることを確認してください。もし読み込まれていなければ、怠惰に読み込まれます。
// Make sure that the following members are loaded await entity.LoadMembersAsync(new PropertyLoadOption("FileName"), new RelationLoadOption("AssetTypeToAsset"));
-
コンテキスト(Context.Target)からターゲットエンティティを取得し、必要なメンバーを読み込みます。これにはFileNameプロパティとAssetTypeToAsset関係が含まれます。エンティティが無効またはファイル名が空の場合、スクリプトは終了します。
var entity = Context.Target as IEntity;
// Make sure that the following members are loaded await entity.LoadMembersAsync(new PropertyLoadOption("FileName"), new RelationLoadOption("AssetTypeToAsset"));
var filename = entity.GetPropertyValue
("FileName"); if (string.IsNullOrEmpty(filename)) return; !警告Targetオブジェクトタイプはトリガーの目的(例えばエンティティ、エンティティ定義、ポリシー)に依存します。この場合、トリガーの目的はEntity creationとEntity modificationです。したがって、IEntityにTargetをキャストする必要があります。
-
GetExtensionヘルパーメソッドを使ってファイル名から拡張子を抽出します。拡張子がウェブ互換拡張子のリストに存在しない場合、スクリプトは終了します。
var extension = GetExtension(filename)?.ToLowerInvariant();
if (string.IsNullOrEmpty(extension)) return; if (!webExtensions.Contains(extension)) return;
-
M.AssetType.Webエンティティを見つけるクエリを作成します。エンティティが見つからなければ、スクリプトは終了します。
var query = Query.CreateQuery(entities => from e in entities where e.Identifier == "M.AssetType.Web" select e);
var webTypeId = await MClient.Querying.SingleIdAsync(query); if (!webTypeId.HasValue) return;
!注MClientオブジェクトは常に利用可能で、すべてのスクリプトタイプで使用できます。
-
アセットからAssetTypeToAssetリレーションを取得します。リレーションが存在する場合、そのリレーションの親をM.AssetType.Webエンティティに設定し、アセットをウェブアセットタイプにリンクさせます。リレーションがなければスクリプトは終了します。
var relation = entity.GetRelation
("AssetTypeToAsset"); if (relation == null) return; relation.Parent = webTypeId;
-
ヘルパーメソッドGetExtensionファイル名から拡張子を抽出し、関連するファイルタイプのみが処理されるようにします。
string GetExtension(string path) { var tokens = path.Split('.'); if (tokens.Length > 1) { return "." + tokenstokens.Length - 1; } return null; }
!注IDだけを回収するにはContext.TargetIdを使えますが、エンティティ全体を取り戻したい場合はContext.Targetを使うことをお勧めします。
セットアップ
- タクソノミーページで、識別子M.AssetType.WebのWeb名のアセットタイプを作成します。
- 上記のスクリプトを作成Action
- Action scriptのアクションを作成し、スクリプトにリンクします。
- 新しいトリガーを作成し 、そのトリガーの目標を Entity creation と Entity modificationに設定します。
- トリガー条件でエンティティの定義を追加 Asset 「 *Filename has changed」*という条件を追加します。
- トリガーアクションで新しいアクションを 事前コミットアクションに追加します。
- トリガーをセーブして有効化してください。