Невозможно использовать функции стрелок с CRM WebApi v9 и машинописью - PullRequest
0 голосов
/ 17 ноября 2018

Я работаю над обновлением кода 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 compiler ... Я также пытался настроить файл tsconfig для вывода на es5 и es2017, но он тоже не работал.

, поэтому ... можно ли использовать функции стрелок с Xrm.WebApi?если так ... что я делаю неправильно / не делаю?

Заранее спасибо!

1 Ответ

0 голосов
/ 18 ноября 2018

Я не думаю, что проблема вызвана функциями стрелок. Я думаю, что 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----", () => { });
                });
...