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>

    打开效果图如下:

  • 相关阅读:
    Atitit attilax要工作研究的要素 纪要 方案 趋势 方向 概念 理论
    Atitit 常见每日流程日程日常工作.docx v7 r8f
    Atitit it 互联网 软件牛人的博客列表
    Atitit 信息链(Information Chain)的概念理解 attilax总结
    Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
    Atitit 聚合搜索多个微博 attilax总结
    Atitit 企业知识管理PKM与PIM
    Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
    Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
    Atitit.每周末总结 于每周一计划日程表 流程表 v8 import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Power_Apps_Client_API_navigateTo.html
Copyright © 2011-2022 走看看