Добавить пользовательский фильтр в поле, используя связанные объекты, используя Javascript в Dynamics 365 - PullRequest
0 голосов
/ 23 июня 2018

У меня есть поле, в которое я хочу добавить пользовательский фильтр. Этот фильтр будет основан на значении связанной сущности.

Но я обнаружил, что у нас не может быть сложных запросов с использованием метода addCustomFilter ().

Как еще можно сделать то же самое?

1 Ответ

0 голосов
/ 27 июня 2018

Да, у вас могут быть сложные запросы.Создайте запрос, используя FetchXml.Хорошо, здесь JS, который я использовал.Я объясню.У меня есть пользовательский поиск, который я фильтрую, используя пользовательское представление, основанное на значении, выбранном в другом поиске, называемом областями.

Создайте функцию javascript ниже в форме, в которой вы хотите эту функцию.

fetchXmlгде вы создаете запрос.Как видите, я запрашиваю сущность системного пользователя, затем перехожу на сущность AreaUserLink (присоединение к tes_user = systemuserid) и затем фильтрую по полю tes_area = значению, вставленному из поля формы.

layoutXml - это место, где вы определяете макет экрана, который отображается, когда человек нажимает на поиск и переходит к экрану сведений поиска.Вам нужно будет изменить их, чтобы они соответствовали вашему новому сценарию.

viewId - это просто произвольный GUID, который вам нужно предоставить, чтобы CRM мог его сохранить.Он должен быть уникальным.

В приведенном ниже коде ...

function AttachReviewByCustomView() {
    var areaLookup = Xrm.Page.getAttribute('tes_area').getValue();
    if (areaLookup == null) {
        return;
    }

    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' value='0' operator='eq'/></filter>" +
        "<link-entity name='tes_userarealink' from='tes_user' to='systemuserid' alias='ak'>" +
        "<filter type='and'>" +
        "<condition attribute='tes_area' operator='eq' uitype='tes_area' value='" + areaLookup[0].id + "' />" +
        "</filter></link-entity></entity></fetch>";

    var layoutXml = "<grid name='resultset' object='1' jump='systemuserid' select='1' icon='1' preview='1'>" +
                    "<row name='result' id='systemuserid'>" +
                    "<cell name='fullname' width='150' />" +
                    "</row></grid>";

    var viewId = "{00000000-0000-0000-0000-000000000003}";
    var viewDisplayName = "Active Users In Selected User-Area";
    Xrm.Page.getControl("tes_operative").addCustomView(viewId, "systemuser", viewDisplayName, fetchXml, layoutXml, true);
}

Наконец, вам нужно позвонить из двух мест.1. Когда форма загружается.2. Когда человек выбирает значение из выпадающего поля, которое используется в переменной fetchXml для фильтрации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...