JavaScript无法读取属性' preventDefault'为null

时间:2017-01-25 17:33:47

标签: javascript dynamics-crm-2016

我正在检查CRM表单中的phoneNumber.length。到目前为止,我得到了8-15个字符=工作可接受的支票。当我尝试堆叠一个' if'检查我得到的零字符: TypeError:无法读取属性' preventDefault'在checkPhoneNumber中为null

function checkPhoneNumber(executioncontext) {
    var phoneNumber;
    phoneNumber = Xrm.Page.getAttribute("telephone1").getValue();

    if (phoneNumber == null) {
        Xrm.Page.ui.setFormNotification("Phonenumber can't be empty", "WARNING", "telephone1nc1");
        Xrm.Page.getControl("telephone1").setFocus(true);
        executioncontext.getEventArgs().preventDefault();
    } else {
        Xrm.Page.ui.clearFormNotification("telephone1nc1");
        //Insert 8-15 characters
        if (phoneNumber != null) {

            if (phoneNumber.length < 8 || phoneNumber.length > 15) {
                Xrm.Page.ui.setFormNotification("Phonenumber must be between 8-15 chars..", "ERROR", "telephoneerror1");
                Xrm.Page.getControl("telephone1").setFocus(true);
            } else {
                if (phoneNumber == null) {
                    Xrm.Page.ui.setFormNotification("Telefonnummret får inte vara tomt", "WARNING", "telephone1nc1");
                    Xrm.Page.getControl("telephone1").setFocus(true);
                    //executioncontext.getEventArgs().preventDefault(); //vid 0 bombar scriptet
                } else {

                    Xrm.Page.ui.clearFormNotification("telephone1nc1");
                }
                Xrm.Page.ui.clearFormNotification("telephoneerror1");

            }
            /*var regex = /^\+(?:[0-9] ?){6,14}[0-9]$/;

            if (regex.test(executionObj)) {
                // Valid international phone number
            } else {
                // Invalid international phone number */
        }
    }
}

一旦我解决了这个问题,我将开始研究代码以检查国际格式并根据实体的国家/地区插入国家/地区代码。因此注释了 var regex

2 个答案:

答案 0 :(得分:4)

您需要确保executioncontext.getEventArgs()不为空。

在一行中最简单的方法:

executioncontext.getEventArgs() && executioncontext.getEventArgs().preventDefault();    

答案 1 :(得分:1)

Dynamics CRM的

executionContext.getEventArgs()仅与保存事件相关:

  

This method returns null for any event other than the Save event.

您的代码似乎(仅)运行OnSave。

话虽如此,强制用户填写Dynamics CRM中的字段的正常方法是使其成为Business Required(即字段变为红色星号,用户无法在不填写字段的情况下保存表单) - 不要手动制作表格通知。