1737371745
2025-01-16 09:36:00
カタログ システムを使用している場合、メタフィールドの作成方法は簡単です。実際、「メタフィールド」のことは忘れても問題ありません。使用する必要があるのは、型指定されたコンテンツ タイプだけです。この属性をプロパティに追加するだけで、希望どおりに精度を設定できます。
[DecimalSettings(10, 2)]
public virtual Decimal MyAttributesDecimal { get; set; }
オーダーシステムを使用している場合は少し異なります。使用できる厳密に型指定された注文タイプがありません。メタフィールドの作成を自動化するには、基盤となる MetaField API を自分で使用する必要があります。おそらく、メタフィールドを作成し、それを目的のメタクラスに追加する方法はご存知でしょう。
var metaField = MetaField.Create(MetaDataContext.Instance, "Mediachase.Commerce.Orders.System.Shipment", "NewMetaField3", "new", "temp",
MetaDataType.Decimal, 17, true, true, false, false);
var metaClass = MetaClass.Load(MetaDataContext.Instance, "ShipmentEx");
metaClass.AddField(metaField);
ただし、この方法で作成されたメタフィールドはデフォルトの (18, 0) 精度でメタクラスに追加されますが、これは一種の意味がありません。 10 進メタフィールドの精度を制御するにはどうすればよいですか?
ちょっとした秘密は MetaField.Attributes にあります。 10 進数タイプの精度を制御する属性には、MdpPrecision と MdpScale の 2 つがあります。これらは、メタフィールドの作成後、メタクラスに追加される前に設定する必要があります (理由は単純です。テーブルに列を追加する基礎となるクエリは、列の精度を設定するためにこれらの値を検索します)。コードは次のようになります。
var metaField = MetaField.Create(MetaDataContext.Instance, "Mediachase.Commerce.Orders.System.Shipment", "NewMetaField5", "new", "temp",
MetaDataType.Decimal, 17, true, true, false, false);
metaField.Attributes["MdpPrecision"] = "38";
metaField.Attributes["MdpScale"] = "9";
var metaClass = MetaClass.Load(MetaDataContext.Instance, "ShipmentEx");
metaClass.AddField(metaField);
小さいながらも覚えておくべき重要な注意事項: 1 つをデフォルト値のままにする場合でも、両方の属性を設定する必要があります。
そして多田さん!
#方法 #カスタム精度で #Decimal #メタフィールドを作成する