自定义实体视图

 

发布日期: 2016年11月

适用于: Dynamics CRM 2015

实体视图是使用特定筛选器检索数据的已保存的特殊查询。 它们还包含有关视图中的数据应该如何在应用程序中显示的信息。 实体视图是可以通过编程方式创建的 SavedQuery 记录。 还可以将它们定义为 XML,并使用非托管解决方案将它们导入 Microsoft Dynamics 365。

实体视图与 UserQuery 不同。 “用户查询”(被称作应用程序中的已保存视图)由单个用户拥有,可以进行分派并与其他用户共享,还可供其他用户根据查询的访问权限进行查看。 它适用于跨实体类型的频繁使用的查询以及执行聚合的查询。详细信息:UserQuery(已保存的视图)实体

本主题内容

视图类型

查看任务

  • 创建视图

  • 更新视图

  • 删除视图

  • 检索视图

  • 停用视图

  • 编辑筛选条件或配置排序

  • 编辑列

  • 设置为默认值

视图类型

下表描述自定义支持的五种视图。 视图的类型代码存储在 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)

设置为默认值

只能将一个活动公共视图设置为默认视图。 若要使视图成为默认视图,请将 IsDefault 属性设置为 true。

另请参阅

示例:有关视图的操作
SavedQuery(视图)实体消息和方法
Saved query XML reference
使用 FetchXML 构建查询
扩展元数据模型
自定义实体窗体
配置全局选项集
针对 Microsoft Dynamics CRM 2015 自定义的开发人员指南

© 2017 Microsoft。 保留所有权利。 版权