前言

本文通过一个简单但完整的实验,来梳理 Dynamics CRM 中的货币字段(Currency Field) 是如何工作的,以及它在多币种场景下的表现规则。

在本文的实验环境中:

基础货币(Base Currency) 设置为 美元(USD)

新建了两个用于演示的实体:

  • Invoice
  • Invoice Detail

两个实体之间是一对多关系(Invoice → Invoice Detail)


基本概念

在 Dynamics CRM 中,货币(Currency)是一种特殊的字段类型,用于存储与金额相关的数据。

一个容易被忽略但非常重要的点是:

当你在实体中创建一个“货币字段”时,系统实际上会在后台自动创建 4 个字段

以我在 Invoice Detail 实体中新建的 Amount 货币字段为例,系统在后台生成了以下字段:

  1. gdh_amount 👉 存储 实际输入的货币值
  2. gdh_amount_Base 👉 存储 根据汇率换算后的基础货币金额

此外,还会自动关联两个字段:

  • 币种(Currency)
  • 汇率(Exchange Rate)

Invoice Detail 实体新添的 Amount 货币字段

新建币种(Currency)

进入路径:

打开 Power Platform 管理中心 –> 选择 “环境” –> 进入 “设置” –> 选择 “币种”

新建币种-01

在弹出的页面,新添币种

新建币种-02

为了这次实验,我添加了两个币种:人民币 和 日元,新建的信息如下:

货币名称 货币代码 货币符号 汇率 货币精度
US Dollar USD $ 1.0000 2
RMB CNY 7.2500 2
JPY JPY JPY ¥ 147.6300 2

💡1. 汇率 更新时,Dynamics CRM 不会重新计算所有货币字段
💡2. 汇率 由系统管理员设定

新建实验数据:多币种金额如何换算?

在 Invoice Detail 中,我分别创建了三条记录,使用不同币种填写 Amount 字段:

No. Currency Amount Amount(Base) Exchange Rate
SASD-00001260 JPY JPY ¥ 1,000.00 $6.77 147.6300000000
SASD-00001259 US Dollar $1,000.00 $1,000.00 1.0000000000
SASD-00001258 RMB ¥ 1,000.00 $137.93 7.2500000000

新建实验数据

可以清楚看到:

当币种是 基础货币(USD) 时,Amount 与 Amount(Base) 完全一致

当币种不是基础货币时,系统会根据:

Amount(Base) = Amount ÷ Exchange Rate

自动完成换算,无需任何自定义逻辑或插件。


货币字段 + 汇总(Rollup)会发生什么?

接下来,我们在 Invoice 实体中新建一个货币类型的汇总字段:

Example - Total Amount

该字段用于汇总当前 Invoice 下所有 Invoice Detail 的金额。

新建货币汇总字段

汇总规则说明

汇总字段的配置规则如下:

  • 汇总来源:Invoice Detail
  • 汇总字段:Amount
  • 汇总方式:Sum

字段汇总规则

汇总结果

汇总结果

最终你会发现:

系统并不是直接“把不同币种的 Amount 相加”

实际执行逻辑是:

1️⃣ 将子表金额统一转换为 Base 金额
2️⃣ 汇总 Amount(Base)
3️⃣ 再根据当前 Invoice 的币种和汇率,换算为显示金额

也就是说:汇总字段的计算核心,永远围绕 Amount(Base) 展开

💡CRM 中的 汇总字段是定时计算的,可在系统作业中设置频率,最快每 1 小时计算一次,也可以在字段旁点击“小键盘”图标,手动触发 重新计算

重新计算


关于用户默认货币(User Default Currency)

因为我们设置的基础货币是美元,其实在 CRM 中,每个用户都可以设置自己的默认货币,如果用户为自己设置了默认货币,那么在新建 Invoice 记录时,币种字段就会默认赋值用户自己设置的默认货币

关于用户默认货币-01

例如,我为 test06 用户设置默认货币为日元,然后去新建一条 Invoice 记录

关于用户默认货币-02

可以看到,在新建表单中的币种字段已经默认赋值为日元

关于用户默认货币-03

参考资料

  1. 使用 Power Apps 解决方案资源管理器创建和编辑 Microsoft Dataverse 的列
  2. 列的类型 - 使用货币列

如果本文对你有所帮助,可以请我喝杯咖啡

(完)