addCustomFilter() не работает с BPF для поиска системных пользователей с фильтром связанных сущностей в Microsoft Dynamics 365 CRM

#javascript #dynamics-crm #microsoft-dynamics

#javascript #dynamics-crm #microsoft-dynamics

Вопрос:

Я пытаюсь добавить пользовательский фильтр для поиска системных пользователей в BPF, поскольку критерии фильтрации включают фильтр связанных сущностей, поэтому нельзя использовать фильтр XML напрямую; поэтому я разделил его на функции.

Приведенный ниже код работает нормально и дает мне ожидаемый пользовательский фильтр, если я использую его в том же поле формы, но не работает в BPF.

Примечание: CT.Application.Constants.ATETeamUsersList является глобальной переменной в файле сценария.

 CT.Application.ATETeamAuthTrainingManagerCustomUserList = function (executionContext) {
    /// Show Custom Filter (Users in ATE Team) on Authorised Training Manager field on ATE Application Process BPF.
    try {
        var formContext = executionContext.getFormContext();
            var UsersList = CT.Application.GetATETeamUsersList();
            if (UsersList !== null amp;amp; UsersList !== undefined) {
                CT.Application.Constants.ATETeamUsersList  = '<filter type="and"><filter type="or">';
                for (var i = 0; i < UsersList.value.length; i  ) {
                    CT.Application.Constants.ATETeamUsersList  = '<condition attribute="systemuserid" operator="eq" value="{'   UsersList.value[i].systemuserid.toUpperCase()   '}" />';
                }
                CT.Application.Constants.ATETeamUsersList  = '</filter><condition attribute="isdisabled" operator="eq" value="0" /></filter >';
                var authTrainingManager = formContext.getControl("ct_authorisedtrainingmanagerate");
                if (authTrainingManager !== null) {
                    authTrainingManager.addPreSearch(ATEAuthTrainingManagerPreSearchFilter);
                }
            }
    }
    catch (ex) {
        CT.CommonUtility.ErrorHandler(ex);
    }
}

function ATEAuthTrainingManagerPreSearchFilter(executionContext) {
    /// Adding Custom Filter for ATE Team Users
    try {
        var formContext = executionContext.getFormContext();
        var fetchQuery = CT.Application.Constants.ATETeamUsersList;
        formContext.getControl("ct_authorisedtrainingmanagerate").addCustomFilter(fetchQuery, "systemuser");
    }
    catch (ex) {
        CT.CommonUtility.ErrorHandler(ex);
    }
}

CT.Application.GetATETeamUsersList = function (ATETeamGUID) {
    /// Function to get the list of Users present in ATE Team.
    try {
        var UserList = null;
        var fetchXml = `<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
                            <entity name='systemuser'>
                                <attribute name='fullname' />
                                <attribute name='systemuserid' />
                                <order attribute='fullname' descending='false' />
                                    <filter type='and'>
                                        <condition attribute='isdisabled' operator='eq' value='0' />
                                    </filter>
                                    <link-entity name='teammembership' from='systemuserid' to='systemuserid' visible='false' intersect='true'>
                                        <link-entity name='team' from='teamid' to='teamid' alias='ab'>
                                            <filter type='and'>
                                                <condition attribute='teamid' operator='eq' uiname='ATE Team' uitype='team' value='{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' />
                                            </filter>
                                        </link-entity>
                                    </link-entity>
                            </entity>
                        </fetch>`;
        var encodedFetchXml = encodeURI(fetchXml);

        function SuccessCallBack(response) {
            if (response !== undefined) {
                if (response.value.length > 0) {
                    UserList = response;
                }
            }
        }
        function ErrorCallBack(response) { }
        CT.WEBAPI.retrieveRecordThroughFetchXMLsync("systemusers", null, encodedFetchXml, SuccessCallBack, ErrorCallBack);

        return UserList;
    }
    catch (ex) {
        CT.CommonUtility.ErrorHandler(ex);
    }
}
  

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