梦回苍石居  |
Cangshi Live

在使用 Namespace 的 Org 中,当 @AuraEnabled 注解的方法中参数类型是 Custom Object 时, 在 LWC 中有时会调用异常的 Issue。

LWCLIGHTNINGSALESFORCE
苍石 发表于:2019-08-28 11:13:53  最后编辑于:5 年前 455 Views

在一次项目的部署中,我们准备将该项目打包为 manager package ,于是将代码转移到一个使用了 namespace 的 org,在将所有环境部署成功后,发现一个很奇怪的地方:

  • 在 LWC 的 Component 中,会有一些奇怪的报错,提示 Salesforce System Error (Error ID: 873779219-18807 (1435359008))
  • 发现是 LWC 调用一些 AuraEnable 标注的方法时发生的错误。
  • 在 Console 的 Log 中无法找到该请求的错误详情,其请求 log 只有 400b 左右,只有几行。
  • 不是所有的方法都会报这个错,通过测试发现只有方法参数为 *DataModel.*Request 的才会报错,也就是使用一个 Custom Object 作为参数时,通过 LWC 去调用会出现错误。
  • 通过 Anonymous 去直接调用该方法时可以正常执行的。
  • 如果将参数换为其他类型如:List,Map 都可以正常被 LWC 调用。
  • 检查过 Namespace,在 LWC 和 APEX 代码中都被正确的使用。
  • 在未设置 Namespace 的 Org 该方法可以正常的被 LWC 调用。


以上就是问题的大致情况,在最开始,并没有特别好的解决方案,想着 既然 List 和 Map 能用,就将参数包装在 List 中或使用 Map 来传递参数,但这样使得代码看起来很奇怪或改动较大。

在后面,不断地查询资料和不断测试,我们发现在 LWC 的官方文档上有一句未被我们注意的一段话,其含义大概是:

  • 通过 @AuraEnabled 标注的方法其参数最好不是 Inner Class 和 Extended Class,虽然在一些情况可以使用,但在很多地方是不能使用的。


于是我们将所有的 Custom Object 包装到一个 Outer Class 中,统一作为方法的参数,最后解决该问题。

文章评论 ( 0 )

Person name
未登录用户可以发表匿名评论