XRM WebAPI计算赢单报价单总金额报错,求解决方法
解决XRM WebAPI计算赢单报价单总金额错误的问题
问题根源
你的代码存在几个关键错误,直接导致了6[object object]的异常结果:
- 循环内部重复声明并重置
totalAmount为0,每次循环都从零开始计算,无法累加所有报价单的金额 totalAmount=totalAmount+results;中,results是完整的报价单实体对象,不是金额数值,数字与对象相加会触发字符串拼接,从而产生[object object]- 初始的
totalAmount未做初始化,可能引发未定义的计算问题
修正后的代码
function onSaveOpportunity(executionContext) { debugger; var formContext = executionContext.getFormContext(); var opporId = formContext.data.entity.getId(); // 直接获取属性对象,无需先调用getValue var attrWonQuotes = formContext.getAttribute("dstmda_wonquotestotalamount"); Xrm.WebApi.online.retrieveMultipleRecords("quote", "?$select=totalamount&$filter=(statuscode eq 4 and opportunityid eq " + opporId + ")").then( function success(result) { debugger; // 初始化总金额为0,放在循环外部保证累加有效 var totalAmount = 0; for (var i = 0; i < result.entities.length; i++) { var quoteEntity = result.entities[i]; // 增加非空判断,避免空值导致总金额变为NaN if (quoteEntity["totalamount"]) { totalAmount += quoteEntity["totalamount"]; } } attrWonQuotes.setValue(totalAmount); alert("pass"); }, function (error) { console.log(error.message); } ); }
额外优化说明
- 过滤条件简化为
opportunityid eq " + opporId即可,WebAPI中直接引用关联实体ID无需嵌套opportunityid/opportunityid - 变量命名更清晰,将
results改为quoteEntity,提升代码可读性 - 增加金额非空判断,避免因报价单金额为空导致计算结果异常
内容的提问来源于stack exchange,提问作者Azee
相关产品推荐
相关产品推荐

