предотвращение открытия записи по двойному щелчку в динамике 365 - PullRequest
0 голосов
/ 06 мая 2020

Я создал очередь для нашей абстрактной сущности. Я пытаюсь предотвратить открытие записи двойным щелчком. Я настроил обработчик для события и вызываю .stopPropagation () и .preventDefault () для объекта события, и он продолжает открывать окно.

Не уверен, что я упускаю что-то очевидное или что .. вот мой код:

function attachDoubleClick() {
    var grid = document.getElementById("gridBodyTable");
    if (grid == null) {
        setTimeout(function () { attachDoubleClick(); }, 2000); //if the grid hasn’t loaded run this again
        return;
    }

    function handler(e) {
        var abstractId = document.getElementsByClassName("ms-crm-List-SelectedRow").item().getAttribute("oid").replace("}", "").replace("{","");
        XrmSvcToolkit.retrieve({
            entityName: "prod_abstract",
            id: abstractId,
            select: ["prod_abstractstatus"],
            async: false,
            successCallback: function (result) {
                if (result.prod_abstractstatus.Value != 108410000) {
                    alert("This abstract is already being worked on or is completed.");
                    e.stopPropagation();
                    e.preventDefault();
                    console.log(e);
                    return;
                }
            },
            errorCallback: function (error) {
                console.log(error);
            }
        });
    }
    grid.ondblclick = handler;
}


1 Ответ

0 голосов
/ 06 мая 2020

Проблема заключалась в том, что мне нужно было добавитьEventListener с третьим параметром, равным true. (это параметр useCapture.) Конечный код выглядел так:

function attachDoubleClick() {
    var grid = document.getElementById("gridBodyTable");
    if (grid == null) {
        setTimeout(function () { attachDoubleClick(); }, 2000); //if the grid hasn’t loaded run this again
        return;
    }
    grid.addEventListener("dblclick", handler, true);
}


function handler(e) {
    console.log(e);
    var abstractId = document.getElementsByClassName("ms-crm-List-SelectedRow").item().getAttribute("oid").replace("}", "").replace("{", "");
    XrmSvcToolkit.retrieve({
        entityName: "prod_abstract",
        id: abstractId,
        select: ["prod_abstractstatus"],
        async: false,
        successCallback: function (result) {
            if (result.prod_abstractstatus.Value != 108410000) {
                alert("This abstract is already being worked on or is completed.");
                e.stopPropagation();
                e.preventDefault();
                return;
            }
        },
        errorCallback: function (error) {
            console.log(error);
        }
    });

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