zoukankan      html  css  js  c++  java
  • Dynamics 365利用navigateTo弹出遮罩窗口,关闭时执行代码。

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复402或者20200410可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

    V9以前版本打开HTML Web资源等一般是在新窗口中,没有原生的支持遮罩效果的前端API可以使用。现在增加了一个Client API,Xrm.Navigation.navigateTo 可以展示遮罩效果,详细内容可以参考官文档:navigateTo (Client API reference) 。本博文主要展示打开一个HTML Web资源的效果,在HTML里面调用Web API,一般还需要获取GlobalContext,当然需要在HTML Web资源中引入ClientGlobalContext.js.aspx ,参考官方文档:getGlobalContext (Client API reference) ,获取传递给HTML Web资源的参数值,我这里参考了官方的示例代码:Sample: Pass multiple values to a web resource through the data parameter

    我这里用来打开HTML Web资源的代码如下:

                var formContext = primaryControl;
                var pageInput = {
                    pageType: "webresource",
                    webresourceName: "ly_/pages/common/copysavedquery.html",
                    data: "typename=" + formContext.data.entity.getEntityName() + "&id=" + formContext.data.entity.getId()
                };
                var navigationOptions = {
                    target: 2,
                     1000, 
                    height: 600,
                    position: 1
                };
                Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
                    function success() {
                        var entityFormOptions = {};
                        entityFormOptions["entityName"] = formContext.data.entity.getEntityName();
                        entityFormOptions["entityId"] = formContext.data.entity.getId();
                        Xrm.Navigation.openForm(entityFormOptions);
                    },
                    function error() {
                        Xrm.Navigation.openErrorDialog({ message: "Open window error."});
                    }
                );

    在HTML Web资源中获取传递过来的参数值以及调用Web API可以参考如下代码:

    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Luo Yong's Demo</title>
        <script src="../../../ClientGlobalContext.js.aspx" type="text/javascript"></script>
    </head>
    <body onload="onLoad()">
        <script type="text/javascript">
            function onLoad() {
                var queryStrArray = new Array();
                var vals = new Array();
                var typeName = "";
                var id = "";
                if (location.search !== "") {
                    queryStrArray = location.search.substr(1).split("&");
                    for (var i in queryStrArray) {
                        queryStrArray[i] = queryStrArray[i].replace(/+/g, " ").split("=");
                    }
                    for (var i in queryStrArray) {
                        if (queryStrArray[i][0].toLowerCase() === "data") {
                            vals = decodeURIComponent(queryStrArray[i][1]).split("&");
                            for (var i in vals) {
                                vals[i] = vals[i].replace(/+/g, " ").split("=");
                                if (vals[i][0].toLowerCase() === "typename") {
                                    typeName = vals[i][1];
                                }
                                if (vals[i][0].toLowerCase() === "id") {
                                    id = vals[i][1];
                                }
                            }
                            break;
                        }
                    }
                    if (typeName && id) {
                        if (typeof GetGlobalContext != "undefined") {
                            var clientUrl = GetGlobalContext().getClientUrl() + "/api/data/v9.1/";
                            var req = new XMLHttpRequest();
                            req.open("GET", encodeURI(clientUrl + "accounts?$select=name&$filter=statecode eq 0&$top=1"), false);
                            req.setRequestHeader("Accept", "application/json");
                            req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                            req.setRequestHeader("OData-MaxVersion", "4.0");
                            req.setRequestHeader("OData-Version", "4.0");
                            req.onreadystatechange = function () {
                                if (this.readyState == 4) {
                                    req.onreadystatechange = null;
                                    if (this.status == 200) {
                                        var responseJson = JSON.parse(this.responseText);
                                        if (responseJson.value.length >= 1) {
                                            alert(responseJson.value[0].name+ "&Id=" + id.replace('{', '').replace('}', ''));
                                        }
                                    }
                                    else {
                                        throw new Error("Query data error:" + JSON.parse(this.responseText));
                                    }
                                }
                            };
                            req.send();
                        } else {
                            throw new Error("Reference to ClientGlobalContext.js.aspx error.");
                        }
                    }
                }
            }
        </script>
    </body>
    </html>

    打开效果图如下:

  • 相关阅读:
    5-1 Leetcode中和链表相关的问题
    4-7 带有尾指针的链表:使用链表实现队列
    4.6 使用链表实现栈
    4.5 链表元素的删除
    4.4 链表的遍历、查询和修改
    4.3 为链表设置虚拟头结点dummyhead
    4.2在链表中添加元素
    4.1链表
    mybatis 力量操作参数为List的非空校验
    linux 运行和停止jar的shell 脚本
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Power_Apps_Client_API_navigateTo.html
Copyright © 2011-2022 走看看