---
title: "メディア処理スクリプト"
slug: "media-processing-script"
abstract: "ウェブスクリプトの例で、アセット処理中にコンテキストからメタデータプロパティを抽出し、それをアセットのメタデータに追加する方法を示しています。"
---
# メディア処理スクリプト

これは*Media processing*ウェブスクリプトの一例で、アセットが処理されるたびに(例えば新しいアセットがアップロードされたり、アセットの再現がリフレッシュされたりする時)実行されます。コンテキストからメタデータのプロパティを抽出し、アセットに追加します。

## 文字

using System.Linq;

var masterFileRelation = await Context.File.GetRelationAsync<IChildToManyParentsRelation>("MasterFile");

if (!masterFileRelation.Parents.Any() || !masterFileRelation.Parents.Contains(Context.Asset.Id.Value))
{
 return;
}

string ToCsvValue(object source)
{
 var str = source.ToString();
 if (str.Contains(","))
 {
 return "\\"" + str + "\\"";
 }
 return str;
}

var headers = string.Join(", ", Context.MetadataProperties.Keys.Select(ToCsvValue));
var values = string.Join(", ", Context.MetadataProperties.Values.Select(ToCsvValue));

var metadataProp = await Context.Asset.GetPropertyAsync<ICultureInsensitiveProperty>("Metadata");
metadataProp.SetValue(headers + "\\n" + values);

await MClient.Entities.SaveAsync(Context.Asset);

## 脚本の説明

このセクションでは、スクリプトを実行順に順に進め、各パートについて説明します。番号付きの項目はシーケンスを記述しており、実行命令ではありません。

1.  スクリプトで使用するライブラリも含めてください。
    
    using System.Linq;
    
2.  資産の関係性をMasterFile取得しましょう。
    
    var masterFileRelation = await Context.File.GetRelationAsync<IChildToManyParentsRelation>("MasterFile");
    
3.  現在のファイルがマスターファイルかどうかを確認してください。コピーされるのはこのメタデータだけです。
    
    if (!masterFileRelation.Parents.Any() || !masterFileRelation.Parents.Contains(Context.Asset.Id.Value))
    {
     return;
    }
    
4.  プロパティにすでにコンマがあるかどうかを確認し、引用符でそれを脱出するメソッドを作成しましょう。
    
    string ToCsvValue(object source)
    {
     var str = source.ToString();
     if (str.Contains(","))
     {
     return "\\"" + str + "\\"";
     }
     return str;
    }
    
5.  メタデータヘッダーをcsvに変換します。
    
    var headers = string.Join(", ", Context.MetadataProperties.Keys.Select(ToCsvValue));
    
6.  メタデータの値をcsvに変換します。
    
    var values = string.Join(", ", Context.MetadataProperties.Values.Select(ToCsvValue));
    
7.  アセットのメタデータプロパティフィールドを取得してください。
    
    var metadataProp = await Context.Asset.GetPropertyAsync<ICultureInsensitiveProperty>("Metadata");
    
8.  メタデータをアセットに保存します。
    
    metadataProp.SetValue(headers + "\\n" + values);
    
9.  資産を救え。
    
    await MClient.Entities.SaveAsync(Context.Asset);
    

## セットアップ

1.  M.Asset定義上で文字列[プロパティMetadataを作成し](https://doc.sitecore.com/ch/en/users/content-hub/create-a-member.html)、content typeをMultiple linesに設定します。
2.  *メタデータ処理*スクリプトを作成、公開、有効化[します](https://doc.sitecore.com/ch/ja/developers/cloud-dev/work-with-scripts.html "Work with scripts")。