javascript - Dynamics CRM 表单的客户规模操作

标签 javascript jquery html dynamics-crm dynamics-crm-2011

原始问题:

我正在尝试创建一些 JavaScript 以添加到 Microsoft Dynamics CRM 中的表单。

我有以下脚本,已将其分配给表单 onLoad 事件:

$(document).ready(function () {

    if ($('#CheckBox1').is(':checked')) {

        $('<div id="div2">Some Data Here</div>').insertAfter("#Div1");

        $('#divHeader').height('+=25px');

        var newtop = $('#divMain').position().top + 25;
        $('#divMain').css('top', newtop + 'px');
    }

});

以下是 HTML 表单的精简版本

<div id="divHeader">
    <div id="Div1"></div>
</div>

<div id="divMain"></div>

当表单加载时,应该发生的是这样的:

<div id="divHeader">
    <div id="Div1"></div>
    <div id="Div2">Some Data Here</div>
</div>

<div id="divMain"></div>

这确实发生了。但是,问题是 divHeaderdivMain 不会调整大小,因此除非用户向下滚动,否则无法看到新添加的 Div2divHeader 内。

如果我添加警报:

$(document).ready(function () {

    if ($('#CheckBox1').is(':checked')) {

        alert("Random alert");

        $('<div id="div2">Some Data Here</div>').insertAfter("#Div1");

        $('#divHeader').height('+=25px');

        var newtop = $('#divMain').position().top + 25;
        $('#divMain').css('top', newtop + 'px');
    }

});

整个事情运作得很完美。如何在没有警报的情况下使其正常工作?

<小时/>

更新1:

setTimeout 也可以代替使用 alert

$(document).ready(function () {

    setTimeout(function () {
        if ($('#CheckBox1').is(':checked')) {

            $('<div id="div2">Some Data Here</div>').insertAfter("#Div1");

            $('#divHeader').height('+=25px');

            var newtop = $('#divMain').position().top + 25;
            $('#divMain').css('top', newtop + 'px');

        }
    }, 5000);

});

所以看来 $(document).ready 似乎没有正确完成它的工作。在 alertsetTimeout 两种情况下,表单都会在调整 div 标签大小之前获得额外的时间来完成加载。

最佳答案

完全不支持在 Dynamics CRM 中执行 DOM 操作。请参阅Do Not Access the DOM .

您将需要使用受支持的表单操作方法(即 Xrm.Page )。虽然无法在 CRM 表单上动态添加/删除内容,但您可以显示和隐藏元素。据我了解,如果表单上的 bool 字段(显示为复选框)为真,您将尝试显示一些内容。

这可以通过将您想要显示/隐藏的控件添加到表单来完成(该控件可以是标准 CRM 字段之一,也可以是自定义 Web 资源,具体取决于您的要求)。然后,您可以编写一些 JavaScript 来在 bool 属性更改其值时显示/隐藏相关控件:

function onload() {
    Xrm.Page.getAttribute("booleanField").addOnChange(showMoreStuffInHeader);
    showMoreStuffInHeader();
}

function showMoreStuffInHeader() {
    var visible = Xrm.Page.getAttribute("booleanField").getValue();
    Xrm.Page.getControl("someDataHereControl").setVisible(visible);
}

关于javascript - Dynamics CRM 表单的客户规模操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854213/

相关文章:

jquery - 如何从文件夹中删除根目录?

javascript - myModal Javascript 弹出窗口未打开

javascript - Bootstrap 3 旋转木马和导航栏不工作

javascript - 引用数组中的任意元素

javascript - 使用javascript用另一个字符动态替换一个字符,而不将页面返回到初始状态

javascript - Jasmine 可以用来测试并发失败吗?

Jquery验证: Get rid of label tag for error

jQuery $ ("img[src=the_image_souce]").attr ('src' ,'new_src' );不起作用

javascript - 即使在使用bind unbind、on off之后,AJAX表单也会向MySQL提交多个值

html - 如何使图像的一部分可点击?