【问题标题】:Why unchanged string fields that were setSubmitMode('always') are sent to server side with empty string and not null?为什么将 setSubmitMode('always') 未更改的字符串字段以空字符串而不是 null 发送到服务器端?
【发布时间】:2020-01-13 06:10:34
【问题描述】:

setSubmitMode('always') 的未更改字符串字段以空字符串发送到服务器端,而不是 null。

重现步骤:

  1. 假设我们有两个字段:字符串类型的jk_name 和任意类型的jk_dummy
  2. jk_name 值设置为null。保存记录。
  3. 在字符串类型字段上调用setSubmitMode('always')

    Xrm.Page.getAttribute("jk_name").setSubmitMode("always");
    
  4. 更改jk_dummy 值;不要更改jk_name 的值。

  5. 保存记录。
  6. 在你的插件中,观察你的目标的Attributes,你会看到:

    target -> Attributes -> Keys   -> [0] -> "jk_name"
    target -> Attributes -> Values -> [0] -> ""
    

    意思是,未更改的jk_name 字段以空字符串值传递给插件

现在,将此与您有另一个字段的情况进行比较,例如,整数类型的 jk_code。重复上面的步骤,现在你会看到:

    target -> Attributes -> Keys   -> [0] -> "jk_code"
    target -> Attributes -> Values -> [0] -> null

意思是,不变的jk_code字段被传递给插件一个空值。

概括:

setSubmitMode('always') 未更改的字符串字段以空字符串发送到服务器端,而 setSubmitMode('always') 未更改的非字符串字段以空值发送到服务器端。

CRM 这样做是否有特定原因?

【问题讨论】:

  • 可能你必须用 MS 创建一张票才能得到像“是的,这是设计使然”或“是的,这是一个错误”之类的答案:) 就像 jasonscript 回答的那样,有默认值概念对于每个 CRM 数据类型。如果你想恢复 DBNULL 而不是空字符串,那么你必须想办法处理它。
  • 这有什么更新吗?
  • @ArunVinoth,不

标签: dynamics-crm dynamics-crm-2015


【解决方案1】:

我想知道这是否是 CRM 使用的原语的结果。 请参阅here for a blog post from Guido Preite,其中他描述了不同的属性类型和默认值

我在这里复制了主表:

CRM 类型 .NET 类型可以为空吗?默认值 ----------------------+-------+-------- ---------+--------------- 单行文本字符串 是 选项集 OptionSetValue 是 两个选项 bool 没有 false 图片字节[] 是 整数 int 无 0 浮点数 double 否 0.0 十进制数 十进制 否 0 货币 是 多行文本字符串 是 日期和时间 DateTime 否 DateTime.MinValue 查找 EntityReference 是

【讨论】:

  • 谢谢,但它没有回答问题。
【解决方案2】:

嘿裘德

当在字段上使用 setSubmitMode("always") 时,意味着当使用您使用 JS 为给定字段设置的表单时,在保存时该字段将始终包含在其中。

MS docs 中setSubmitMode 的功能如下-“设置保存记录时是否提交属性中的数据。” 这意味着当在此表单上发生保存时,该字段将始终保存到数据库中。

https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/attributes/setsubmitmode

要了解为什么您在目标实体中收到此字段为空白,您需要了解在执行上下文中传递给插件的目标实体的行为方式。

目标实体将始终包含已更改的字段。在创建时,这意味着所有字段都已填写或始终处于提交模式。更新所有已更改的字段或您的案例中始终包含在保存中的字段。

相反,我们可以使用 setSubmitMode 通过使用“never”参数从不向数据库提交任何内容。 第三个选项是“脏”,这是表单上所有字段的默认行为。

我希望这能回答你的问题:)

【讨论】:

  • 谢谢。我知道setSubmitMode() 的工作原理。我问为什么字符串字段与非字符串字段的工作方式不同。
  • 这很奇怪。我复制了我自己的理智。为了推测它发生的原因,在客户端使用 JS 来获取值导致 "" 被传递而不是 null。目前我无法证明任何事情:(
猜你喜欢
  • 2012-12-29
  • 2023-02-15
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2020-11-29
相关资源
最近更新 更多