从CRM onLoad

时间:2018-03-17 18:18:06

标签: jquery events post iframe dynamics-crm

javascript有点新鲜。我在Dynamics CRM实体的iFrame中嵌入了一个html Web资源。我可以轻松地从iFrame中获取输入以填充CRM,但是在将数据从CRM回发到iFrame时遇到了问题。我可以获得1或2个属性来填充,但似乎不再是我不能(除非我单步执行调试器然后适用于所有)。似乎有一些时间问题或其他问题。我试图总共填充28个字段,但仅在下面的代码中显示一些作为示例。我使用以下参考资料来帮助我做我正在做的事情:

https://community.dynamics.com/enterprise/b/crmmemories/archive/2017/05/08/post-data-from-a-dynamics-crm-form-to-an-iframe

function formLoad()
        {
            var iFrame = Xrm.Page.ui.controls.get('IFRAME_name').getObject();

            var a = Xrm.Page.getAttribute("a").getValue();
            iFrame.contentWindow.postMessage({ 'a': a }, '*');

            var b = Xrm.Page.getAttribute("b").getValue();
            iFrame.contentWindow.postMessage({ 'b': b }, '*');

            var c= Xrm.Page.getAttribute("c").getValue();
            iFrame.contentWindow.postMessage({ 'c': c }, '*');

    //etc.......
        }

        <script>
            $(document).ready(function(){


                $(window).on('message', function (event) {

                        // Important. Only accept messages from trusted origins.
                        if(~event.originalEvent.origin.indexOf('https://URL')){
                            var messageData = event.originalEvent.data;
                            if (messageData.a)
                            document.getElementById("a").value = messageData.a;
                            if (messageData.b)
                                document.getElementById("b").value = messageData.b;
                            if (messageData.c)
                                document.getElementById("c").value = messageData.c;
                             //.......etc
    else{
                            return;
                        }
                    })

           })
</script>

同样,如果我单步调试IE调试器,这会让我认为存在一些时序问题。我是以错误的方式接近这个吗?有什么我应该为多个帖子添加或一次处理多个帖子?任何额外的眼睛都会有帮助感谢。

1 个答案:

答案 0 :(得分:1)

这可能是因为你的表单onLoad函数是在加载iframe之前调用的,所以事件监听器还没有附加,但如果你把一个调试器放在iframe javascript main函数中,你会发现它会在CRM表单之后被调用onLoad - 其他任何函数都不是您从CRM函数调用的函数是Executed。我认为它可以在调试中工作,因为浏览器会强制所有文件被完全加载以允许调试,然后连接事件监听器,尝试从crm onload函数附加事件或至少确保iframe完全加载< / p>