1. アセットと製品のリンク

アセットと製品のリンク

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

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

このアクション スクリプトの例では、アセットのファイル名を {product number}_{name} の形式に変更すると、そこで指定した製品にアセットがリンクされます。 このアクションはコミット前の段階 (処理中) で実行されます。

[!注] コミット前ということは、このスクリプトがトリガー イベントの前に実行されることを意味します。 この例では、エンティティが変更される前にスクリプトが実行されます。

ユース ケース

  1. ユーザーがアセットのファイル名を編集します。
  2. 製品番号を使用した特定の形式によるファイル名を使用すると、アセットがその製品にリンクされます。

スクリプト

using System.Linq;
using System.Threading.Tasks;

var asset = Context.Target as IEntity;
if(asset == null) return;

var filename = asset.GetPropertyValue<string>("FileName");
if(string.IsNullOrEmpty(filename)) return;

var splitFilename = filename.Split('_');
if(splitFilename.Count() < 2) return;

var productNumber = splitFilename[0];
var productId = await GetProductId(productNumber);

if(productId.HasValue){
    var productRelation = asset.GetRelation("PCMProductToAsset");
    productRelation.SetIds(new long[]{ productId.Value });
    MClient.Logger.Info($"Asset {asset.Id} is linked to product {productId.Value}.");
}
else{
    MClient.Logger.Warn($"No product found with product number {productNumber}!");
}

async Task<long?> GetProductId(string productNumber)
{
    var query = Query.CreateQuery(entities =>
        from e in entities
        where e.Property("ProductNumber") == productNumber
        && e.DefinitionName =="M.PCM.Product"
        select e);
    var productId = await MClient.Querying.SingleIdAsync(query);
    MClient.Logger.Info(productId.ToString());

    return productId;
}

スクリプトの説明

この例のアクション スクリプトは次のように動作します。

  1. インクルードされるライブラリは次のとおりです。
この記事を改善するための提案がある場合は、 お知らせください!