Dynamics CRM 2011编程系列(40):Portal的制作(一)
本博文来聊聊怎么制作Dynamics CRM 2011 系统的Portal吧。制作Portal有两种方式可以供我们选择,它们分别为:1.使用Dynamics CRM 2011 支持的Portal控件;2.直接调用Dynamics CRM 2011 的数据库。
这两种方法各有各的优势,在制作Portal的时候通常都将这两者结合起来一起使用。
咱们先来了解下Dynamics CRM 2011 支持的Portal控件吧。在使用Dynamics CRM 2011支持的Portal控件前,我们先要生成一个早期绑定的数据源,生成该数据源的代码如下:

图1
待工具“crmsvcutil.exe“生成完代码“Xrm.cs”后按如下步骤将它添加到Portal站点项目中。
图2

图3 为portal项目添加程序集引用
修改Portal站点Web.config文件如下:
<configuration><configSections><section name="microsoft.xrm.client" type="Microsoft.Xrm.Client.Configuration.CrmSection,Microsoft.Xrm.Client"/></configSections><system.web><compilation debug="true" targetFramework="4.0"><assemblies><add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/><add assembly="System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/><add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/><add assembly="System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation><pages><controls><add tagPrefix="crm" namespace="Microsoft.Xrm.Portal.Web.UI.WebControls" assembly="Microsoft.Xrm.Portal"/></controls></pages></system.web><connectionStrings><add name="Xrm" connectionString="Server=http://192.168.0.30:8110/test;Domain=crm;Username=administrator;Password=Pa$$w0rd"/></connectionStrings><microsoft.xrm.client><contexts><add name="Xrm" type="Xrm.XrmServiceContext,App_Code"></add></contexts></microsoft.xrm.client><system.serviceModel><serviceHostingEnvironment aspNetCompatibilityEnabled="true"/></system.serviceModel></configuration>
至此Portal的框架已经搭建完毕,现在我们来看看Dynamics CRM为我们提供了哪些数据显示控件:
LinqDataSourceAspx代码<asp:LinqDataSource ID="Contacts" ContextTypeName="Xrm.XrmServiceContext" TableName="ContactSet" runat="server" /><asp:GridView ID="GridView1" DataSourceID="Contacts" AutoGenerateColumns="false" runat="server"> <Columns> <asp:TemplateField HeaderText="First Name"> <ItemTemplate> <asp:Label ID="Label1" Text='<%# Eval("firstname")%>' runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Last Name"> <ItemTemplate> <asp:Label ID="Label2" Text='<%# Eval("lastname")%>' runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="City"> <ItemTemplate> <asp:Label ID="Label3" Text='<%#Eval("address1_city") %>' runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns></asp:GridView>显示效果
<crm:CrmMetadataDataSource ID="PriorityCodes" runat="server" EntityName="campaign" AttributeName="typecode" /><asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="PriorityCodes" DataTextField="OptionLabel" DataValueField="OptionValue" />
显示效果

SavedQueryDataSourceAspx代码
<crm:SavedQueryDataSource ID="ActiveContacts" SavedQueryName="可用联系人" runat="server" /><asp:GridView ID="GridView2" DataSourceID="ActiveContacts" AutoGenerateColumns="true" runat="server"></asp:GridView>
显示效果

<asp:GridView runat="server" ID="ContactsGridView" AutoGenerateColumns="false"> <Columns> <asp:TemplateField HeaderText="First Name"> <ItemTemplate> <asp:Label ID="Label1" Text='<%# Eval("firstname")%>' runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Last Name"> <ItemTemplate> <asp:Label ID="Label2" Text='<%# Eval("lastname") %>' runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="City"> <ItemTemplate> <asp:Label ID="Label3" Text='<%# Eval("address1_city") %>' runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns></asp:GridView>Aspx.cs代码
var xrm = new Xrm.XrmServiceContext("Xrm"); var exampleContacts = xrm.ContactSet; ContactsGridView.DataSource = exampleContacts; ContactsGridView.DataBind();显示效果

小结
由于找不到程序集“AntiXssLibrary ”的4.0版本,所以2个控件没能正常使用。它们分别是“使用Fetch来过滤数据源的CrmDataSource控件”和“CrmEntityFormView ”。
大家要是能找到这个程序集可以发给我。(:D)