首页 > 解决方案 > Dynamics 365 CE - 货币不能为空

问题描述

我正在编写一个扩展方法来将源实体属性复制到一个新的目标 AttributesCollection 对象,给定要复制的属性列表。如果源实体不包含任何提供的属性,则目标集合应包含该属性的 Null 值。这适用于货币/货币以外的大多数属性类型。我收到一条错误消息,“货币不能为空。” 当我用目标集合更新目标实体时。

        public static AttributeCollection CopyAttributesFrom(this AttributeCollection target, Entity source, string[] attrList, bool resetAttributeIfMissingFromSource = false)
    {
        foreach (var attr in attrList)
        {
            if (resetAttributeIfMissingFromSource && !source.Contains(attr))
            {
                target[attr] = null;
                continue;
            }
            target[attr] = source[attr];
        }
        return target;
    }

有人可以提供一种一致且通用的方法来执行此操作,而不必以某种方式注入数据类型并检查方法中的类型吗?

标签: c#dynamics-crmmicrosoft-dynamicsdynamics-365

解决方案


您在该实体中有一个 Money 属性,因此TransactionCurrencyId将属性添加到实体中,应使用 Org 的默认货币或用户设置货币填充。这将被平台用于支持多币种计算。

当您尝试将其标记为 null 时,验证启动并抛出此异常,这是预期的。在尝试使该属性无效时检查该方案,或者将其保留在排除列表中以免将其标记为 null。


推荐阅读