自定义实体视图

 

发布日期: 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

  • 出现次数:多次

  • 操作:创建、更新、删除

  • 注释:可以通过将 SavedQuery.IsDefault 设置为 true,将这些视图之一设置为默认公共视图。

高级​​查找

1

  • 出现次数:1

  • 操作:仅更新。

  • 注释:默认情况下,当在“高级查找”中显示结果时,显示此视图。

关联

2

  • 出现次数:1

  • 操作:仅更新。

  • 注释:默认情况下,当在记录的导航窗格中显示相关记录的网格时,显示此视图。

快速查找

4

  • 出现次数:1

  • 操作:仅更新。

  • 注释:此视图定义当用户使用列表视图中的搜索字段搜索记录时将搜索的列。

查找

64

  • 出现次数:1

  • 操作:仅更新。

  • 注释:这是当没有为查找字段配置其他视图时将用来查找记录的默认视图。

查看任务

因为视图是 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 消息更新视图。

删除视图

只应删除您已创建的已保存查询。 解决方案组件或应用程序部件可能依赖于已保存的特定查询。 如果存在您不希望显示在应用程序中的查询,应该停用它们。

检索视图

可以使用 RetrieveMultipleRequestIOrganizationService.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 之间转换:QueryExpressionToFetchXmlRequestFetchXmlToQueryExpressionRequest

编辑列

可以从实体或相关实体中获取要显示在视图中的列。 有关如何指定要显示的列的详细信息,请参阅 <layoutxml> (SavedQuery)

为列添加带工具提示的自定义图标

可以在列中添加带根据列值显示的工具提示文本的自定义图标;也可以指定本地化的工具提示文本。 方法是在 Dynamics 365 实例中将自定义图标作为图像 Web 资源添加,然后使用 JavaScript Web 资源添加列的 JavaScript 代码,以便根据列值显示这些图标。

备注

此功能在 适用于 Dynamics 365 的 2016 年 12 月更新(联机和本地) 中进行了介绍。 只有只读网格才支持添加带工具提示的自定义图标;可编辑网格不支持此功能。 有关可编辑网格的详细信息,请参阅在 Dynamics 365 中使用可编辑网格

向 savedquery 的 layoutxml 添加了 imageproviderwebresourceimageproviderfunctionname 这两个新属性(请参阅 <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_Hotnew_Warmnew_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。 保留所有权利。 版权