65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2投票s)

2007年12月30日

Ms-PL

3分钟阅读

viewsIcon

35678

在本文中,我将向您展示如何在 Microsoft Dynamics CRM 中使用 JavaScript 代码访问网页。您可以在该页面中处理 CRM 实体或不同的操作。

引言

在本文中,我将向您展示如何在 Microsoft Dynamics CRM 中使用 JavaScript 代码访问网页。您可以在该页面中处理 CRM 实体或执行不同的操作。

在示例 JavaScript 代码中,我们将获取产品的 Guid,并将其传递给 * /QuoteCalcs/Calcs.aspx * 页面。此页面将处理一些事情,并在 <baris> XML 标记中返回结果。如果结果为 nullfalse,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 服务生成参考文件。

  1. 单击“开始”,指向“所有程序”,指向“Microsoft Visual Studio .NET 2003”,指向“Visual Studio .NET 工具”,然后单击“Visual Studio .NET 2003 命令提示符”。

  2. 在命令提示符下,通过键入以下命令并使用运行 Microsoft CRM 的服务器的 URL 来创建参考文件 * Microsoft.Crm.Sdk.Wsdl.cs *

    wsdl.exe /out: Microsoft.Crm.Sdk.Wsdl.cs 
        /namespace:CrmSdk http://<yourserver>/mscrmservices/2006/crmservice.asmx
  3. 使用步骤 2 中创建的引用,生成一个 WSDL DLL,该 DLL 将与您的解决方案一起打包,使用此命令

    csc /t:library Microsoft.Crm.Sdk.Wsdl.cs

现在可以将此 DLL 与您的附加组件一起打包。

Baris KANLICA
软件专家
brsk@e-kolay.net
www.cub-e.net

forum.cub-e.net

© . All rights reserved.