使用 JavaScript 代码访问 Dynamics CRM 中的网页






3.67/5 (2投票s)
在本文中,我将向您展示如何在 Microsoft Dynamics CRM 中使用 JavaScript 代码访问网页。您可以在该页面中处理 CRM 实体或不同的操作。
引言
在本文中,我将向您展示如何在 Microsoft Dynamics CRM 中使用 JavaScript 代码访问网页。您可以在该页面中处理 CRM 实体或执行不同的操作。
在示例 JavaScript 代码中,我们将获取产品的 Guid,并将其传递给 * /QuoteCalcs/Calcs.aspx * 页面。此页面将处理一些事情,并在 <baris>
XML 标记中返回结果。如果结果为 null
或 false
,JavaScript 代码将向用户显示错误警报。
如果要在出现此错误后取消 CRM 的保存过程,则必须在错误代码后添加以下代码块
event.returnValue = false;
如果对象中有值,请传递一个区域以显示给用户。
您将在 JavaScript 代码之后找到 C# 代码。
使用 JavaScript 代码
此代码将向您展示如何使用 JavaScript 访问网页(我将在 JavaScript 代码中继续本文)
var oProduct = document.crmForm.all.productid;
// we passed the Lookup object for access to Guid
var aProduct = new Array();
//The lookup is an array on CRM Form. So we must access
//this objects of array with an array object.
aProduct = oProduct .DataValue;
//Yeah, we found the Guid of Product
var sProductID = aProduct [0].id;sProductID = encodeURIComponent(sProductID);
if (sProductID!=null)
{
//We create an Microsoft.XMLDOM object
var oXmlDoc = new ActiveXObject('Microsoft.XMLDOM');
oXmlDoc.async = false; // we don't want asenkron code process
var path = '/QuoteCalcs/Calcs.aspx?productid=' + sProductID ;
//we passed the path of our web page to XMLDOM object
oXmlDoc.load(path);
//we look for <baris> xml tag - Baris is my name:-)
var oNode = oXmlDoc.selectSingleNode('baris');
if (oNode != null && oNode.text == 'false')
{
alert('an error');
}
if (oNode != null && oNode.text != 'false')
{
//we set value to price area in CRM Form
crmForm.all.price.value = oNode.text;
}
}
使用 C# 脚本代码
真正的流程将在 ASPX 页面上运行。我们获取从 JavaScript 代码传递的参数。我们正在寻找为空的参数。稍后,我们使用默认凭据访问 CRM Web 服务。如果您与 Microsoft Dynamics CRM 不在同一域中,则无法使用默认凭据访问 CRM Web 服务,因此必须使用用户名和密码访问 Web 服务。我们将发送一个如下的查询...
select * from filteredproduct where productid=ProductId
...在使用 Web 服务时。来自 Web 服务的响应是一个 BussinessEntityCollection
,它是 Microsoft Dynamics CRM 中所有实体的基础。我们将 BussinessEntityCollection
类转换为 product 类,找到我们想要的值,并在 <baris>
XML 标记中返回该值
<%@ Page Language="'c#'%">
<%@ Import Namespace='CrmSdk' %>
<script runat="'server'">
protected override void Render(HtmlTextWriter writer)
{
Response.Clear();
Response.ContentType = 'text/xml';
string ProductID = Request.QueryString['ProductID'];
string TYPE = Request.QueryString['Type'];
if (ProductID != null &&
ProductID !='null')
{
CrmService service = new CrmService();
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
QueryByAttribute attributeQuery = new QueryByAttribute();
attributeQuery.ColumnSet = new AllColumns();
attributeQuery.Attributes = new string [] {'productid'};
attributeQuery.Values = new string [] {ProductID};
attributeQuery.EntityName = EntityName.product.ToString();
RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
retrieve.Query = attributeQuery;
RetrieveMultipleResponse retrieved =
(RetrieveMultipleResponse)service.Execute(retrieve);
if (retrieved.BusinessEntityCollection.BusinessEntities.Length > 0)
{
product prd = (product)
retrieved.BusinessEntityCollection.BusinessEntities[0];
if (prd.price!=null)
{
Response.Write('<baris>'+prd.price.Value.ToString()+'</baris>');
}
else
{
Response.Write('<baris>false</baris>');
}
}
else
{
Response.Write('<baris>false</baris>');
}
}
}
</script>
在所有这些过程中,我们都有一个 JavaScript 和一个 C# 脚本代码。在 C# 脚本代码中,我们使用 import
方法将 CrmSdk DLL 导入到页面中。您可以创建自己的 CrmSdk
( * Microsoft.Crm.Sdk.Wsdl.dll *) DLL。下面,您可以找到如何创建自己的 CrmSdk
DLL。在所有这些过程中,我们必须将代码放到服务器上,并且必须在 IIS 中的 CRM 网站中创建一个虚拟目录。
为 Microsoft CRM Web 服务创建 DLL
在开发解决方案时,您首先需要生成一个 WSDL,它将为您提供 Microsoft CRM 3.0 中的所有类和方法。您应该始终从 Microsoft CRM 3.0 的全新安装开始,该安装未进行任何自定义。这样,您的代码就不会依赖于客户安装上找不到的信息。
以下步骤演示了如何为 SDK 生成此参考文件。您可以使用相同的过程为元数据 Web 服务生成参考文件。
-
单击“开始”,指向“所有程序”,指向“Microsoft Visual Studio .NET 2003”,指向“Visual Studio .NET 工具”,然后单击“Visual Studio .NET 2003 命令提示符”。
-
在命令提示符下,通过键入以下命令并使用运行 Microsoft CRM 的服务器的 URL 来创建参考文件 * Microsoft.Crm.Sdk.Wsdl.cs *
wsdl.exe /out: Microsoft.Crm.Sdk.Wsdl.cs /namespace:CrmSdk http://<yourserver>/mscrmservices/2006/crmservice.asmx
-
使用步骤 2 中创建的引用,生成一个 WSDL DLL,该 DLL 将与您的解决方案一起打包,使用此命令
csc /t:library Microsoft.Crm.Sdk.Wsdl.cs
现在可以将此 DLL 与您的附加组件一起打包。
Baris KANLICA
软件专家
brsk@e-kolay.net
www.cub-e.net