2 回答
TA贡献1868条经验 获得超4个赞
是的,您可以将复杂的参数传递给标记为@AuraEnabled. 在客户端,它将是一个具有正确字段名称的 JSON 对象,就像您已经拥有的{ lstConIds : this.selectedRecords, invoiceId : this.invId}. 在 Apex 方面,它可以是具有多个参数或只有 1 个参数的函数(一些辅助包装类,同样具有正确的字段名称)。Salesforce 将在调用您的代码之前为您“解包”该 JSON 并放入正确的字段中。
您的偏好会更清洁。我倾向于使用包装器。如果您有一个可重用的类似服务的功能,并且您想稍后添加一些可选参数 - 您只需将新字段放入包装类并完成工作。向其他顶点代码中使用的函数添加新参数可能并不容易,有点混乱。
(在您的情况下,我肯定会尝试将发票和行项目创建为 1 个调用,因此如果有任何失败 - 正常的交易回滚将帮助您。如果其中一个项目失败 - 您不想只留下发票标题,正确的?)
您看过https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.apex吗?这是一堵文字墙,但它提到了有趣的例子,在那里搜索“apexImperativeMethodWithParams”。
在这里查看 JS 文件:https ://github.com/trailheadapps/lwc-recipes/tree/master/force-app/main/default/lwc/apexImperativeMethodWithComplexParams 看看它是如何调用的
ApexTypesController {
@AuraEnabled(cacheable=true)
public static String checkApexTypes(CustomWrapper wrapper) {
...
CustomWrapper在哪里
public with sharing class CustomWrapper {
class InnerWrapper {
@AuraEnabled
public Integer someInnerInteger { get; set; }
@AuraEnabled
public String someInnerString { get; set; }
}
@AuraEnabled
public Integer someInteger { get; set; }
@AuraEnabled
public String someString { get; set; }
@AuraEnabled
public List<InnerWrapper> someList { get; set; }
}
TA贡献1942条经验 获得超3个赞
问题是插入是异步的,并且您正在同步触发它们。因此,这意味着您正在尝试在父记录完成之前插入行。
// CREATE THE INVOICE RECORD
createRecord(recordInput)
.then(invoice => {
**this.invId = invoice.Id;**
// Call the next function here
// CREATE THE INVOICE LINE RECORDS
**createInvLines({ lstConIds : this.selectedRecords, invoiceId : this.invId})**
.then(result => {
...some codes here...
})
.catch(error => {
...some codes here...
});
);
}
添加回答
举报