1. Web のスクリプト

Web スクリプトの例

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

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

これは、アセットの集約データ、関連するアセット タイプ、および関連するタグを読み取るアクション スクリプトの例です。 このスクリプトは、Web API を使用して実行されるように 設計されています。

ユース ケース

アセット メタデータは、プロパティとリレーションの両方に保存できます。 リレーションは、関連付けられたタグとアセット タイプをアセットにリンクします。 これらの関連エンティティには、独自のメタデータもあります。 このスクリプトを使用すると、ユーザーは 1 回の Web API 呼び出しでこのすべてのデータを取得できるため、Web サーバーへ何度も行き来する必要がなくなります。

スクリプト

using System.Linq;
using System.Net;
using Newtonsoft.Json.Linq;
using System.Globalization;

var enUsCulture = CultureInfo.GetCultureInfo("en-US");

var data = Context.Data as JObject;
var assetId = data?["assetId"]?.Value<long>();

if (assetId == null) 
{
    SetError(HttpStatusCode.BadRequest, "No asset-id has been specified."); // Bad request 
    return;  
}

var loadConfig = new EntityLoadConfiguration(
    CultureLoadOption.Default, 
    new PropertyLoadOption("Title", "FileName"), 
    new RelationLoadOption("TagToAsset", "AssetTypeToAsset"));

var asset = await MClient.Entities.GetAsync(assetId.Value, loadConfig);

if (asset == null)
{
    SetError(HttpStatusCode.NotFound, "Asset not found.");
    return;
}

var result = new JObject(
    new JProperty("title", asset.GetPropertyValue<string>("Title")),
    new JProperty("filename", asset.GetPropertyValue<string>("FileName"))
);

var tagIds = asset.GetRelation<IChildToManyParentsRelation>("TagToAsset").Parents;

if (tagIds.Any()) 
{
    var tags = await MClient.Entities.GetManyAsync(tagIds);
    var tagNames = tags.Select(t => t.GetPropertyValue<string>("TagName"));

    if (tagNames.Any())
    {
        result["tags"] = new JArray(tagNames);
    }
}

var typeId = asset.GetRelation<IChildToOneParentRelation>("AssetTypeToAsset").Parent;

if (typeId.HasValue) 
{
    var type = await MClient.Entities.GetAsync(typeId.Value);

    if (type != null) 
    {
        result["type"] = type.GetPropertyValue<string>("Label", enUsCulture);
    }
}

Context.Result = result;

void SetError(HttpStatusCode statusCode, string message)
{
    Context.StatusCode = statusCode;
    Context.Result = new JObject(new JProperty("error", message));
}

スクリプトの説明

  1. スクリプトで使用するライブラリをインクルードします。
この記事を改善するための提案がある場合は、 お知らせください!