自定义实体视图
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
实体视图是使用特定筛选器检索数据的已保存的特殊查询。 它们还包含有关视图中的数据应该如何在应用程序中显示的信息。 实体视图是可以通过编程方式创建的 SavedQuery 记录。 还可以将它们定义为 XML,并使用非托管解决方案将它们导入 Microsoft Dynamics 365。
实体视图与 UserQuery 不同。 “用户查询”(被称作应用程序中的已保存视图)由单个用户拥有,可以进行分派并与其他用户共享,还可供其他用户根据查询的访问权限进行查看。 它适用于跨实体类型的频繁使用的查询以及执行聚合的查询。详细信息:UserQuery(已保存的视图)实体
也可以使用 Dynamics 365 中的自定义工具自定义视图。详细信息:TechNet:创建和编辑视图
本主题内容
视图类型
查看任务
创建视图
更新视图
删除视图
检索视图
停用视图
编辑筛选条件或配置排序
编辑列
为列添加带工具提示的自定义图标
设置为默认值
视图类型
下表描述自定义支持的五种视图。 视图的类型代码存储在 SavedQuery.QueryType 属性中。 请注意,QueryType 属性的其他一些有效值未在此处列出,因为此实体还用于存储 Microsoft Office Outlook 筛选器和模板。 有关详细信息,请参阅脱机和 Outlook 筛选器和模板。
如果为特定实体定义了视图,SavedQuery.ReturnedTypeCode 属性将返回该实体的逻辑名称。
视图类型 |
类型代码 |
说明 |
---|---|---|
公有 |
0 |
|
高级查找 |
1 |
|
关联 |
2 |
|
快速查找 |
4 |
|
查找 |
64 |
|
查看任务
因为视图是 SavedQuery 记录,所以可以创建、更新、检索、删除和停用它们。 此外,还可以编辑筛选条件或配置排序、编辑列,或者将视图设置为默认视图。
创建视图
若要创建公共视图,请指定以下属性:
SavedQuery.Name:已保存查询的唯一标识符。
SavedQuery.ReturnedTypeCode:匹配实体的逻辑名称。
SavedQuery.FetchXml:请参阅使用 FetchXML 构建查询。
SavedQuery.LayoutXml:有关有效元素,请参阅 <layoutxml> (SavedQuery)。
SavedQuery.QueryType:必须始终为零 (0)。
以下示例为商机实体创建新的公共视图:
System.String layoutXml =
@"<grid name='resultset' object='3' jump='name' select='1'
preview='1' icon='1'>
<row name='result' id='opportunityid'>
<cell name='name' width='150' />
<cell name='customerid' width='150' />
<cell name='estimatedclosedate' width='150' />
<cell name='estimatedvalue' width='150' />
<cell name='closeprobability' width='150' />
<cell name='opportunityratingcode' width='150' />
<cell name='opportunitycustomeridcontactcontactid.emailaddress1'
width='150' disableSorting='1' />
</row>
</grid>";
System.String fetchXml =
@"<fetch version='1.0' output-format='xml-platform'
mapping='logical' distinct='false'>
<entity name='opportunity'>
<order attribute='estimatedvalue' descending='false' />
<filter type='and'>
<condition attribute='statecode' operator='eq'
value='0' />
</filter>
<attribute name='name' />
<attribute name='estimatedvalue' />
<attribute name='estimatedclosedate' />
<attribute name='customerid' />
<attribute name='opportunityratingcode' />
<attribute name='closeprobability' />
<link-entity alias='opportunitycustomeridcontactcontactid'
name='contact' from='contactid' to='customerid'
link-type='outer' visible='false'>
<attribute name='emailaddress1' />
</link-entity>
<attribute name='opportunityid' />
</entity>
</fetch>";
SavedQuery sq = new SavedQuery
{
Name = "A New Custom Public View",
Description = "A Saved Query created in code",
ReturnedTypeCode = "opportunity",
FetchXml = fetchXml,
LayoutXml = layoutXml,
QueryType = 0
};
_customViewId = _serviceProxy.Create(sq);
Console.WriteLine("A new view with the name {0} was created.", sq.Name);
更新视图
如果 SavedQuery.IsCustomizable 托管属性允许更新视图,则可以使用 IOrganizationService.Update 方法或 UpdateRequest 消息更新视图。
删除视图
只应删除您已创建的已保存查询。 解决方案组件或应用程序部件可能依赖于已保存的特定查询。 如果存在您不希望显示在应用程序中的查询,应该停用它们。
检索视图
可以使用 RetrieveMultipleRequest 或 IOrganizationService.RetrieveMultiple 检索已保存查询的记录。
以下示例检索商机实体的所有公共视图:
QueryExpression mySavedQuery = new QueryExpression
{
ColumnSet = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery"),
EntityName = SavedQuery.EntityLogicalName,
Criteria = new FilterExpression
{
Conditions =
{
new ConditionExpression
{
AttributeName = "querytype",
Operator = ConditionOperator.Equal,
Values = {0}
},
new ConditionExpression
{
AttributeName = "returnedtypecode",
Operator = ConditionOperator.Equal,
Values = {Opportunity.EntityTypeCode}
}
}
}
};
RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest { Query = mySavedQuery };
RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveSavedQueriesRequest);
DataCollection<Entity> savedQueries = retrieveSavedQueriesResponse.EntityCollection.Entities;
//Display the Retrieved views
foreach (Entity ent in savedQueries)
{
SavedQuery rsq = (SavedQuery)ent;
Console.WriteLine("{0} : {1} : {2} : {3} : {4} : {5},", rsq.SavedQueryId, rsq.Name, rsq.QueryType, rsq.IsDefault, rsq.ReturnedTypeCode, rsq.IsQuickFindQuery);
}
停用视图
如果您不希望公共视图显示在应用程序中,可以停用它。 不能停用设置为默认视图的公共视图。 以下示例停用商机实体的“当前财政年度的已关闭商机”视图。
System.String SavedQueryName = "Closed Opportunities in Current Fiscal Year";
QueryExpression ClosedOpportunitiesViewQuery = new QueryExpression
{
ColumnSet = new ColumnSet("savedqueryid", "statecode", "statuscode"),
EntityName = SavedQuery.EntityLogicalName,
Criteria = new FilterExpression
{
Conditions =
{
new ConditionExpression
{
AttributeName = "querytype",
Operator = ConditionOperator.Equal,
Values = {0}
},
new ConditionExpression
{
AttributeName = "returnedtypecode",
Operator = ConditionOperator.Equal,
Values = {Opportunity.EntityTypeCode}
},
new ConditionExpression
{
AttributeName = "name",
Operator = ConditionOperator.Equal,
Values = {SavedQueryName}
}
}
}
};
RetrieveMultipleRequest retrieveOpportuntiesViewRequest = new RetrieveMultipleRequest { Query = ClosedOpportunitiesViewQuery };
RetrieveMultipleResponse retrieveOpportuntiesViewResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveOpportuntiesViewRequest);
SavedQuery OpportunityView = (SavedQuery)retrieveOpportuntiesViewResponse.EntityCollection.Entities[0];
_viewOriginalState = (SavedQueryState)OpportunityView.StateCode;
_viewOriginalStatus = OpportunityView.StatusCode;
SetStateRequest ssreq = new SetStateRequest
{
EntityMoniker = new EntityReference(SavedQuery.EntityLogicalName, (Guid)OpportunityView.SavedQueryId),
State = new OptionSetValue((int)SavedQueryState.Inactive),
Status = new OptionSetValue(2)
};
_serviceProxy.Execute(ssreq);
编辑筛选条件或配置排序
若要编辑筛选器或数据排序方式,必须设置 SavedQuery.FetchXml 属性。 有关详细信息,请参阅使用 FetchXML 构建查询。
提示
如果您不熟悉 FetchXML,可以使用下列消息在 QueryExpression 和 FetchXML 之间转换:QueryExpressionToFetchXmlRequest 和 FetchXmlToQueryExpressionRequest。
编辑列
可以从实体或相关实体中获取要显示在视图中的列。 有关如何指定要显示的列的详细信息,请参阅 <layoutxml> (SavedQuery)。
为列添加带工具提示的自定义图标
可以在列中添加带根据列值显示的工具提示文本的自定义图标;也可以指定本地化的工具提示文本。 方法是在 Dynamics 365 实例中将自定义图标作为图像 Web 资源添加,然后使用 JavaScript Web 资源添加列的 JavaScript 代码,以便根据列值显示这些图标。
备注
此功能在 适用于 Dynamics 365 的 2016 年 12 月更新(联机和本地) 中进行了介绍。 只有只读网格才支持添加带工具提示的自定义图标;可编辑网格不支持此功能。 有关可编辑网格的详细信息,请参阅在 Dynamics 365 中使用可编辑网格。
向 savedquery 的 layoutxml 添加了 imageproviderwebresource 和 imageproviderfunctionname 这两个新属性(请参阅 <cell> (SavedQuery)),用于指定 Web 资源的名称和一个 JavaScript 函数名称来显示列的自定义图标和工具提示文本。 加载页面时执行 JavaScript 代码。
修改 Dynamics 365 Web 客户端中的试图定义内的属性(列)的属性以指定 Web 资源名称和 JavaScript 函数名称时,也可以使用“列属性”页中的新“Web 资源”和“函数名称”字段。
以下示例代码演示如何以编程方式指定 Web 资源和 JavaScript 函数名称,添加 layoutxml 中的 opportunityratingcode 列的自定义图标和工具提示:
System.String layoutXml =
@"<grid name='resultset' object='3' jump='name' select='1'
preview='1' icon='1'>
<row name='result' id='opportunityid'>
<cell name='name' width='150' />
<cell name='customerid' width='150' />
<cell name='estimatedclosedate' width='150' />
<cell name='estimatedvalue' width='150' />
<cell name='closeprobability' width='150' />
<cell name='opportunityratingcode' width='150' imageproviderwebresource='new_SampleWebResource'
imageproviderfunctionname='displayIconTooltip' />
<cell name='opportunitycustomeridcontactcontactid.emailaddress1'
width='150' disableSorting='1' />
</row>
</grid>";
用于显示自定义图标和工具提示文本的 JavaScript 函数需要下面的两个自变量:layoutxml 中指定的完整行对象和调用用户的区域设置 ID (LCID)。 LCID 参数用于指定多种语言的图标工具提示文本。 有关 CRM 支持的语言的详细信息,请参阅启用语言 和安装或升级 Microsoft Dynamics 365 的语言包。 有关可在代码中使用的区域设置 ID (LCID) 值的列表,请参阅 Microsoft 分派的区域设置 ID。
假定您最可能为属性的选项集类型添加自定义图标,因为它有一小组预定义的选项,那么确保使用这些选项的整数值而不是标签,以免已本地化标签字符串中的改变导致破坏代码。 此外,请在 JavaScript 函数中仅指定要用作属性中的值的图标的图像 Web 资源的名称。 图像的大小应为 16x16 像素;超过此大小的图像将自动缩小为 16x16 像素。
以下示例代码根据 opportunityratingcode (Rating) 属性中的一个值 (1: Hot, 2: Warm, 3: Cold) 显示不同图标和工具提示文本。 此示例代码还演示如何显示已本地化的工具提示文本。 要让此示例工作,必须在 Dynamics 365 实例中创建带 16x16 图像(、 和 )且分别具有以下名称的三个图像 Web 资源:new_Hot、new_Warm 和 new_Cold。
function displayIconTooltip(rowData, userLCID) {
var str = JSON.parse(rowData);
var coldata = str.opportunityratingcode_Value;
var imgName = "";
var tooltip = "";
switch (coldata) {
case 1:
imgName = "new_Hot";
switch (userLCID) {
case 1036:
tooltip = "French: Opportunity is Hot";
break;
default:
tooltip = "Opportunity is Hot";
break;
}
break;
case 2:
imgName = "new_Warm";
switch (userLCID) {
case 1036:
tooltip = "French: Opportunity is Warm";
break;
default:
tooltip = "Opportunity is Warm";
break;
}
break;
case 3:
imgName = "new_Cold";
switch (userLCID) {
case 1036:
tooltip = "French: Opportunity is Cold";
break;
default:
tooltip = "Opportunity is Cold";
break;
}
break;
default:
imgName = "";
tooltip = "";
break;
}
var resultarray = [imgName, tooltip];
return resultarray;
}
这样将根据该值在 Rating 中显示值和相应图标,而您将鼠标光标悬停在图标上方时,将显示图表工具提示文本。
设置为默认值
只能将一个活动公共视图设置为默认视图。 若要使视图成为默认视图,请将 IsDefault 属性设置为 true。
另请参阅
示例:有关视图的操作
SavedQuery(视图)实体消息和方法
Saved query XML reference
使用 FetchXML 构建查询
使用含有 Dynamics 365 元数据的组织服务
自定义实体窗体
配置全局选项集
自定义 Microsoft Dynamics 365 应用程序
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权