MS CRM 2011 Form与Web Resource在JScript中的相互调用

 

原创地址:http://www.cnblogs.com/jfzhu/archive/2013/02/14/2912580.html

转载请注明出处

 

在Form中可以添加一个html的web resource,在web resource里可以用JScript来使用REST Endpoint或者SOAD Endpoint。

 

你可以在Form中添加一个web resource,也可以为Form添加一个指向某web resource的Navigation Link。

image

image

 

不论是以哪种方式,web resource可以用parent.window.Xrm来获得CRM Form中的Xrm对象。举一个小例子,在account的Form中添加一个html的web resource bm_ContactReadPane.htm来模拟出一种类似Outlook的Read Pane的功能:选择不同的primary contact,web resource就显示出相应的contact的full name和 business phone。

 

bm_ContactReadPane.htm代码:

<html> 
<head> <title></title> <script src="ClientGlobalContext.js.aspx"></script> <script type="text/jscript" src="bm_ContactReadPane.js"></script> <script type="text/jscript" src="bm_json.js"></script>    <style type="text/css"> td { font-family: Segoe UI, Tahoma, Arial; font-size: 11px } </style> 
</head> 
<body onload="ContactReadPaneLibrary.OnLoad()"> 
<div> 
<table> <tr> <td>Full Name:</td> <td><input id="TextFullname" type="text" disabled="disabled" /></td> </tr> <tr> <td>Business Phone:</td> <td><input id="TextBusinessPhone" type="text"/></td> </tr> <tr> <td></td> <td><input id="TextHiddenId" type="text" style="display:none"/></td> </tr> 
</table> 
</div> 
</body> 
</html> 

要注意上面代码中对<script src="ClientGlobalContext.js.aspx"></script>的引用,引用了它以后才可以使用CRM的REST Endpoint或者 SOAP Endpoint。如果你的web resource为bm_html/ContactReadPane.htm,那么引用就要改为script src="../ClientGlobalContext.js.aspx"></script>,注意文件夹的结构。

 

bm_ContactReadPane.js的代码:

if (typeof (ContactReadPaneLibrary) == "undefined") { ContactReadPaneLibrary = { __namespace: true }; 
}ContactReadPaneLibrary = { Name: "ContactReadPaneLibrary", OnLoad: function () { if (parent.window.Xrm.Page.getAttribute("primarycontactid").getValue() != null && parent.window.Xrm.Page.getAttribute("primarycontactid").getValue().length > 0) { var primartycontact = parent.window.Xrm.Page.getAttribute("primarycontactid").getValue()[0]; var contactid = primartycontact.id; var oDataPath = Xrm.Page.context.prependOrgName("/xrmservices/2011/organizationdata.svc"); var filter = "/ContactSet(guid'" + contactid + "')?$select=ContactId,Telephone1,FullName"; var retrieveRecordsReq = new XMLHttpRequest(); retrieveRecordsReq.open("GET", oDataPath + filter, true); retrieveRecordsReq.setRequestHeader("Accept", "application/json"); retrieveRecordsReq.setRequestHeader("Content-Type", "application/json; charset=utf-8"); retrieveRecordsReq.onreadystatechange = function () { ContactReadPaneLibrary.RetrieveContactCallBack(this); }; retrieveRecordsReq.send(); } else { document.getElementById("TextFullname").value = ""; document.getElementById("TextBusinessPhone").value = ""; document.getElementById("TextHiddenId").value = ""; } }, RetrieveContactCallBack: function (retrieveRecordsReq) { if (retrieveRecordsReq.readyState == 4 /* complete */) { if (retrieveRecordsReq.status == 200) { //Success //alert(retrieveRecordsReq.responseText); if (retrieveRecordsReq.responseText) { var retrievedRecord = JSON.parse(retrieveRecordsReq.responseText).d; document.getElementById("TextFullname").value = retrievedRecord.FullName; document.getElementById("TextBusinessPhone").value = retrievedRecord.Telephone1 == null ? "" : retrievedRecord.Telephone1; document.getElementById("TextHiddenId").value = retrievedRecord.ContactId; } } else { alert("Error : " + retrieveRecordsReq.status + ": " + retrieveRecordsReq.statusText + ": " + JSON.parse(retrieveRecordsReq.responseText).error.message.value); } } } 
}

account Form中的代码,PrimaryContactOnChange为account的primary contact onchange的 event handler。

if (typeof (AccountLibrary) == "undefined") { AccountLibrary = { __namespace: true }; 
}AccountLibrary = { Name: "AccountLibrary", PrimaryContactOnChange: function () { var contactReadPane = Xrm.Page.getControl("WebResource_ContactReadPane").getObject().contentWindow; var contactReadPane2 = Xrm.Page.getControl("WebResource_ContactReadPane2").getObject().contentWindow; contactReadPane.location.reload(); contactReadPane2.ContactReadPaneLibrary.OnLoad(); } 
} 

 

我在account的form中添加了两个web resource,一个在更改form的primary contact的value以后需要刷新,另一个不需要刷新。

Form中的script调用web resource中的script,要使用对象Xrm.Page.getControl("WebResource_ContactReadPane").getObject().contentWindow。contactReadPane.location.reload()实现web resource的刷新,contactReadPane2.ContactReadPaneLibrary.OnLoad()是AJAX的实现,不需刷新,直接更改Full Name和Business Phone。

 

最后看一下效果图:

 

总结:web resource中的JScript需要用parent.window.Xrm来获得CRM Form中的Xrm对象,而CRM Form中的JScript需要使用Xrm.Page.getControl("WebResource_ContactReadPane").getObject().contentWindow对象来刷新web resource或调用web resource中的JScript函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 .NET 6 更新到 .NET 7

Upgrade from .NET 6 to .NET 7Intro.NET 7 已经发布了一段时间了&#xff0c;将几个服务升级到了 .NET 7&#xff0c;升级还是比较顺利的&#xff0c;也有遇到几个问题&#xff0c;分享一下TargetFramework首先我们需要将项目文件中的目标框架&#xff08;TargetFramework&…

MySQL-05:pymysql与pycharm设置

PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库&#xff0c;Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 pip install pymysql 连接数据库 前置条件&#xff1a; 已有一个MySQL数据库&#xff0c;并且…

hdmi-cec_如何使用HDMI-CEC使用PlayStation 4或Pro自动打开电视

hdmi-cecCall it petty, but there’s just something about eliminating the “turn on the TV” portion of firing up your PlayStation 4 that makes the whole process seem faster. And the good news is that getting this action on your setup is as easy and ticking…

ABP Framework 7.0 RC 新增功能简介

imageABP Framework 在架构上有四大目标&#xff1a;模块化、DDD、多租户和微服务。从 7.0 更新的功能来看&#xff0c;其侧重点转向微服务场景的实现&#xff0c;比如&#xff1a;Dapr 集成、动态权限和功能、外部本地化、分布式实体缓存服务&#xff0c;都是对微服务和分布式…

(原創) 07/28/1982 少女A (中森明菜)

Abstract明菜的第二首單曲&#xff0c;也是她的成名曲&#xff0c;在台灣曾經被歌手嘟嘟翻唱過。 Introduction[hjp2400,300,true]http://oomusou.googlepages.com/shojo_a.flv[/hjp2] 明菜從『少女A』這首單曲才開始竄紅&#xff0c;走的也是可愛路線&#xff0c;招牌的『明菜…

ftp服务

1.ftp工作原理FTP是一个客户机/服务系统。用户通过一个支持FTP协议的客户机程序&#xff0c;连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令&#xff0c;服务器程序执行用户所发出的命令&#xff0c;并将执行的结果返回到客户机。2.安装ftp服务yu…

Spark Streaming高级特性在NDCG计算实践

从storm到spark streaming&#xff0c;再到flink&#xff0c;流式计算得到长足发展&#xff0c; 依托于spark平台的spark streaming走出了一条自己的路&#xff0c;其借鉴了spark批处理架构&#xff0c;通过批处理方式实现了实时处理框架。为进一步了解spark streaming的相关内…

mac触控板 鼠标中键_如何在Windows 10中停止意外的触控板点击(以及其他鼠标增强功能)...

mac触控板 鼠标中键It’s been the bane of laptop users for years: you’re typing away, your palm brushes the trackpad, and the accidental click inserts the cursor in the middle of the text completely screwing things up. Banish the frustration of accidental …

推荐一款 .NET 编写的 嵌入式平台的开源仿真器

Renode 是一个开发框架&#xff0c;通过让你模拟物理硬件系统来加速物联网和嵌入式系统开发。Renode 可以模拟 Cortex-M、RISC-V 等微控制器&#xff0c;不仅可以模拟 CPU指令&#xff0c;还可以模拟外设&#xff0c;甚至可以模拟板载的外设。更强的是&#xff0c;它可以让你在…

Android Bluetooth模块学习笔记

一、蓝牙基础知识 1.蓝牙&#xff08; Bluetooth &#xff09;是一种无线技术标准&#xff0c;可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。蓝牙基于设备低成本的收发器芯片&#xff0c;传输距离近、低功耗。 2.微波频段&#xff1a;使用2.402GGHz到2.480GHz…

sql删除无人借阅的书_查找,下载,借阅,租赁和购买电子书的最佳网站

sql删除无人借阅的书So, you’ve got yourself an eBook reader, smartphone, tablet, or other portable device and you want to put some eBooks on it to take with you. There are many options for obtaining free eBooks as well as purchasing, borrowing, or even ren…

django05:ORM示例--person 增删改查

建立数据库连接后&#xff0c;演示代码 见我的资源 https://download.csdn.net/my

推荐一个开源的 .NET 二维码生成库

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;介绍QrCodeGenerator 是开源的 .NET 二维码生成库&#xff0c;它支持从文本字符串和字节数组生成二维码图片。这个库是基于 .NET Stan…

全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪个更好?

全量更新和增量更新There are few things as irritating as a Blue Screen of Death, but sometimes there is an easy fix for it like updating the BIOS for instance. If multiple updates are available though, do you do incremental updates or can you just use the l…

[Office 2010 易宝典]什么是Office Web App?如何在线查看Office文档?

什么是Office Web App&#xff1f; Office Web App使得Microsoft Office能扩展到网络浏览器上。用户可以直接在通过浏览器在线查看和编辑保存在网站上的文档。 如何上传Office文档&#xff1f; 在Microsoft Word 2010里面&#xff0c;您可以把Word文档保存到Windows Live SkyDr…

Pipy:保护 Kubernetes 上的应用程序免受 SQL 注入和 XSS 攻击

注入攻击在 OWASP Web 应用 10 大安全风险[1] 排名 2021 年下滑至第 3 位&#xff0c;多年来一直位居前十。SQL 注入 (SQLi) 是一种用于攻击网站和 Web 应用程序的常见注入技术。没有将用户输入与数据库命令完全分开的应用程序面临着将恶意输入作为 SQL 命令执行的风险。成功的…

如何阻止YouTube在iOS,Android和Web上自动播放视频

Over at YouTube, they love it when you watch more YouTube. If you’re sick of YouTube automatically queuing up more videos for you, however, it’s easy enough to turn the autoplay feature off and go back to watching your videos at your own pace. 在YouTube上…

(php)thinkphp3.2配置sql_server

(php)thinkphp3.2配置sql_server 标签&#xff1a; php thinkphp sql_server2016年12月16日 15:20:19631人阅读 评论(0) 收藏 举报分类&#xff1a;php&#xff08;18&#xff09; 最近要整一个crm和erp的对接&#xff0c;最坑的是&#xff0c;erp的是用.net写的&#xff0c;数…

Blog.Core 第四季度开源更新说明书

B/C/V/PAn open-source organization based on .NET/Core and Vue (React/NG) to quickly build MVC & SPA and microservice application.开源贡献NETCORE架构设计BCVP开发组成员说&#xff1a;BCVP是以Blog.Core为核心框架设计的一整套前后端分离、RBAC与数据鉴权、统一C…

如何将联系人导入Windows联系人文件夹和从中导出联系人

In Windows 7 and 8, there is a Contacts folder in your user directory. This folder can be useful if you have your contacts in a single .vcf file and want to move them into a .csv file for importing into programs like Outlook 2013. 在Windows 7和8中&#xff…