Получение помощников пользователя Microsoft Dynamics CRM

У сущности «Пользователь» (systemuser) в Microsoft Dynamics CRM есть возможность добавить других пользователей в качестве помощников. Давайте рассмотрим возможность получения списка помощников пользователя с помощью JavaScript.

Для начала создадим JavaScript ресурс и загрузим его в CRM. Подробнее о добавлении ресурсов можно прочитать в Добавление HTML Web Resources в Microsoft Dynamics CRM. Ниже приведена асинхронная функция, выполняющая запрос к веб api экземпляра Dynamics CRM. Она получает список всех помощников пользователя, чей идентификатор был передан в функцию. В случае возникновении ошибки создает исключение. Обратите внимание, что для работы скрипта необходимо указывать правильный адрес web api CRM. Найти его можно Параметры -> Настройки -> Ресурсы для разработчиков

/**
* Получить помощников
* @param {Guid} userId идентификатор пользователя
*/
function getAssistant(userId) {
    return new Promise(function (resolve, reject) {
        var parameters = {};
        var req = new XMLHttpRequest();
        req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.1/systemusers(" + userId + ")/Microsoft.Dynamics.CRM.RetrieveAllChildUsersSystemUser"true);
        req.setRequestHeader("OData-Version""4.0");
        req.setRequestHeader("OData-MaxVersion""4.0");
        req.setRequestHeader("Accept""application/json");
        req.setRequestHeader("Content-Type""application/json; charset=utf-8");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 200) {
                    var result = JSON.parse(this.response);
                    if (result && result.value && result.value.length) {
                        resolve(result.value);
                    }
                } else {
                    reject("Не удалось получить помощников пользователя.");
                }
            }
        };
 
        req.send(JSON.stringify(parameters));
    });
}

Теперь рассмотрим вызов данной функции.

function foo() {
    var id = Xrm.Page.context.getUserId();
    getAssistant(id)
        .then(function (assist) {
            if (assist) {
                var message = "";
                assist.forEach(function (currentValue, index, array) {
                    message += currentValue.fullname + "\r\n";
                });
                alert(message);
            }
        })
        .catch(function (errorData) {
            console.error(errorData);
        });
}