1. コミット前フェーズのスクリプト

アクション スクリプトの例 (コミット前フェーズ)

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

以下に、アセットが作成または変更されたときにコミット前フェーズ (処理中) のトリガーによって実行されるアクション スクリプトの例を示します。このスクリプトは、ファイル名に特定の拡張子が付いているアセットに対して既定のアセット タイプ (Web) を設定します。

ユース ケース

  1. ユーザーがアセットを作成または変更します。
  2. アセットのファイル名に特定の拡張子が付いている場合、そのアセットの AssetTypeWeb に設定されます。

前提条件

Web は、M.AssetType の既定のタイプではありません。必要に応じて作成する必要があります。

  • [管理] に移動して [タクソノミー] をクリックします。

  • [M.Asset] を検索します。

    タクソノミー上の M.AssetType

  • M.AssetType タクソノミーに新しいアイテムを追加するため、[+] をクリックします。

    M.AssetType タクソノミーに新しいクラスを追加します。

  • 新しいアイテムのラベルとして「Web」と入力します。

    M.AssetType タクソノミーの新しいクラスとして Web を追加する

  • [保存] をクリックします。

スクリプト

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<string>("FileName");
if (string.IsNullOrEmpty(filename)) return; // No filename, nothing to do.

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<IChildToOneParentRelation>("AssetTypeToAsset");
if (relation == null) return;

relation.Parent = webTypeId;



string GetExtension(string path)
{
var tokens = path.Split('.');
if (tokens.Length > 1)
{
return "." + tokens[tokens.Length - 1];
}
return null;
}

スクリプトの説明

  1. スクリプトで使用するライブラリをインクルードします。

    using System.Linq;
    ヒント

    インクルードするライブラリを確認するには、「コンテキスト プロパティ」セクションのプロパティ タイプを参照してください。

  2. 拡張子のリストを定義します。アセットのファイル名にこれらの拡張子のいずれかが含まれている場合、AssetType Web というラベルが付けられます。

    var webExtensions = new [] { ".jpg", ".jpeg", ".png", ".gif" };
  3. ファイル名プロパティとアセット タイプ リレーションが読み込まれていることを確認します。まだ読み込まれていない場合、それらは遅延読み込みされます。

    // Make sure that the following members are loaded
    await entity.LoadMembersAsync(new PropertyLoadOption("FileName"), new RelationLoadOption("AssetTypeToAsset"));
  4. Context から Target オブジェクトを取得し、IEntity にキャストします。Target は、作成または変更イベントに関与するアセットです。

    var entity = Context.Target as IEntity;
    警告

    Target オブジェクトのタイプは、トリガーの目的 (エンティティ、エンティティ定義、ポリシーなど) によって異なります。この例では、トリガーの目的はエンティティの作成エンティティの変更です。したがって、TargetIEntity にキャストする必要があります。

    ヒント

    コンテキスト プロパティの TargetType は、Target のタイプを示します。TargetType の有効な値は EntityEntityDefinitionPolicyDataSource です。コンテキスト プロパティの詳細については、「コンテキスト プロパティ」セクションを参照してください。

  5. GetPropertyValue を使用して、Target オブジェクトから Filename プロパティを取得します。

    var filename = entity.GetPropertyValue<string>("FileName");
  6. アセットにファイル名がない場合、スクリプトは終了します。

    if (string.IsNullOrEmpty(filename)) return;
  7. Path.GetExtension(System.IO) を使用して、ファイル名から拡張子を取得します。

    var extension = Path.GetExtension(filename)?.ToLowerInvariant();
  8. ファイル名に拡張子がない場合、スクリプトは終了します。

    if (string.IsNullOrEmpty(extension)) return;
  9. ファイル名に拡張子は付いているものの、指定された拡張子のいずれにも一致しない場合、スクリプトは終了します。

    if (!webExtensions.Contains(extension)) return;
  10. M.AssetType.Web の識別子を持つ AssetType WebID を取得するクエリを作成します。

    var query = Query.CreateQuery(entities =>
    from e in entities
    where e.Identifier == "M.AssetType.Web"
    select e);
  11. 作成したクエリを使用して、Web AssetType の ID を取得します。

    var webTypeId = await MClient.Querying.SingleIdAsync(query);
    注意

    MClient オブジェクトは常に使用可能であり、すべてのスクリプト タイプで使用できます。MClient の詳細については、「SDK リファレンス ノート」(MClient) を参照してください。

  12. AssetType の ID が返されなかった場合、スクリプトは終了します。

    if (!webTypeId.HasValue) return;
  13. GetRelation を使用して、IEntity オブジェクトから AssetTypeToAsset のリレーションを取得します。

    var relation = entity.GetRelation<IChildToOneParentRelation>("AssetTypeToAsset");
    注意

    AssetTypeToAsset は、Asset (子) と AssetType (親) の間のリレーションです。

  14. リレーションが存在しない場合、スクリプトは終了します。

    if (relation == null) return;
  15. AssetType Web をアセットに設定するため、AssetType の ID をリレーションの親属性に代入します。

    relation.Parent = webTypeId;
  16. これは、ファイル名の拡張子の取得に使用される内部メソッドです。

     string GetExtension(string path)
    {
    var tokens = path.Split('.');
    if (tokens.Length > 1)
    {
    return "." + tokens[tokens.Length - 1];
    }
    return null;
    }

設定

  1. M.AssetType.Web の識別子を持つアセット タイプ Web を作成します。
  2. アクション スクリプトを作成し、パブリッシュして有効にします。

  3. アクション スクリプト タイプのアクションを作成し、上記で作成したスクリプトにリンクします。

  4. 新しいトリガーを作成し、トリガーの目的をエンティティの作成エンティティの変更に設定します。

    • トリガー条件で、エンティティ定義としてアセットを追加した後、条件として「ファイル名が変更された」を追加します。
    • トリガー アクションで、[コミット前アクション] の下にこのアクションを追加します。
  5. トリガーを保存して有効にします。

この記事を改善するための提案がある場合は、 お知らせください!