D365中通过Power Automate同步用户/团队查找字段值的问题
解决Power Automate同步Dataverse用户/团队查找字段的错误问题
错误根源
你遇到的问题核心在于Dataverse的用户/团队查找字段(单一实体引用类型)只能存储用户或团队其中一种记录,不能同时给用户和团队两个属性赋值。你之前分开设置两个表达式,相当于同时向该字段写入两种类型的数据,触发了系统校验错误;另外团队表达式末尾多了一个逗号,属于语法错误,也会导致执行失败。
正确解决方案
放弃分开设置用户和团队的表达式,改用单一表达式判断Account字段的类型,生成符合Dataverse要求的实体引用JSON格式,直接赋值给Test表的目标字段。
具体表达式
假设Test表的目标字段为New_TestUser,Account表的源字段为New_User,将以下表达式粘贴到目标字段的输入框中:
if( equals(outputs('Get_Account_Details')?['body/_new_user_value@odata.type'], '#Microsoft.Dynamics.CRM.systemuser'), json(concat('{"@odata.type": "#Microsoft.Dynamics.CRM.systemuser", "id": "', outputs('Get_Account_Details')?['body/_new_user_value'], '"}')), if( equals(outputs('Get_Account_Details')?['body/_new_user_value@odata.type'], '#Microsoft.Dynamics.CRM.team'), json(concat('{"@odata.type": "#Microsoft.Dynamics.CRM.team", "id": "', outputs('Get_Account_Details')?['body/_new_user_value'], '"}')), // 当Account的New_User字段为空时, fallback到Account的所有者用户 json(concat('{"@odata.type": "#Microsoft.Dynamics.CRM.systemuser", "id": "', outputs('Get_a_row_by_ID_-_Get_Account_Owner')?['body/_parentsystemuserid_value'], '"}')) ) )
关键逻辑说明
- 判断实体类型:通过
_new_user_value@odata.type属性识别Account字段是用户(#Microsoft.Dynamics.CRM.systemuser)还是团队(#Microsoft.Dynamics.CRM.team) - 生成实体引用:用
json()和concat()组合出符合Dataverse要求的JSON结构,包含实体类型和ID - 空值 fallback:当Account的源字段为空时,自动使用Account的所有者用户(和你之前的逻辑一致)
操作注意事项
- 在Power Automate的「更新行」或「创建行」动作中,直接将上述表达式填入Test表目标字段的输入框,不要分开填写用户和团队的子输入框
- 确保
Get_Account_Details动作已正确返回_new_user_value和_new_user_value@odata.type属性(可以在流的运行历史中查看输出确认) - 删除之前错误的团队表达式,避免语法干扰
内容的提问来源于stack exchange,提问作者Kalp Shah
相关产品推荐
相关产品推荐

