我正在将js代码升级到Dynamics 365的新V9版本,并且在使用Xrm.WebApi时也无法使用箭头功能(还将js升级到ts)。
例如,这不起作用:
Xrm.WebApi.retrieveMultipleRecords(
'mks_entitlementline',
`$select=mks_name, _mks_parententitlementid_value&$filter=_mks_parententitlementid_value eq '${eId}'`).then(
(results) => {
if (!this.commonUtils.isUndefinedOrNull(results) && results.entities.length > 0) {
this.usesELS();
} else {
this.notUsingELS();
}
// filter contact lookup
this.filterContactLookup("", eId);
this.refreshPriorities(eId);
if (this.commonUtils.isUndefinedOrNull(this.formContext.getAttribute<Xrm.Attributes.LookupAttribute>('primarycontactid').getValue())) {
this.formContext.getControl<Xrm.Controls.LookupControl>('primarycontactid').setDisabled(false);
}
}).catch(error => {
console.log("ERROR -> entitlementSlaManagementOnUpdate: ", error);
Xrm.Utility.alertDialog("E----", () => { });
});
但是确实如此(我认为较丑):
Xrm.WebApi.retrieveRecord("role", searchedId, "$select=name")
.then(
function (role: { roleid: string, name: string }) {
outArr.push({ Id: role.roleid, Name: role.name, Type: "role" });
if (rolesAndTeams.length === outArr.length) {
if (!error) {
_onOk(outArr);
}
_onErr(errorObject)
}
},
function (err) {
errorObject = err;
error = true;
})
我收到的错误是:
Xrm.WebApi.retrieveMultipleRecords(...)。then(...)。catch不是函数
基本上告诉我'catch'是无效的,但是我不知道为什么它不是有效的,因为对于ts编译器来说是可以的...我也尝试配置tsconfig文件以在es5和es2017上输出,但是它没有也不行。
那么... Xrm.WebApi可以使用箭头功能吗?如果是这样...我在做什么错/不做什么?
谢谢!
答案 0 :(得分:2)
我认为问题不是由箭头功能引起的。我认为catch
是问题所在。如果返回值的类型为any
,则编译器不会告诉您任何信息。我不知道是不是这种情况,但是如果您查看CRM API,将会看到以下签名:
Xrm.WebApi.retrieveMultipleRecords(entityLogicalName, options, maxPageSize).then(successCallback, errorCallback);
这里没有提及catch
,但是您可以将errorCallback
传递给then
。
顺便说一下,这是您在第二个示例中通过errorHandler
的方式。
所以尝试一下:
Xrm.WebApi.retrieveMultipleRecords(
'mks_entitlementline',
`$select=mks_name, _mks_parententitlementid_value&$filter=_mks_parententitlementid_value eq '${eId}'`).then(
(results) => {
if (!this.commonUtils.isUndefinedOrNull(results) && results.entities.length > 0) {
this.usesELS();
} else {
this.notUsingELS();
}
// filter contact lookup
this.filterContactLookup("", eId);
this.refreshPriorities(eId);
if (this.commonUtils.isUndefinedOrNull(this.formContext.getAttribute<Xrm.Attributes.LookupAttribute>('primarycontactid').getValue())) {
this.formContext.getControl<Xrm.Controls.LookupControl>('primarycontactid').setDisabled(false);
}
},
error => {
console.log("ERROR -> entitlementSlaManagementOnUpdate: ", error);
Xrm.Utility.alertDialog("E----", () => { });
});