以编程方式自定义模型驱动应用中的视图,以控制用户检索的数据以及应用程序显示方式。 视图是 SavedQuery 使用特定筛选器和显示设置的记录。 可以在代码中创建它们,或将其定义为 XML,并使用非托管解决方案导入它们。
SavedQuery视图不同于 .UserQuery 在模型驱动应用中称为 “已保存视图 ”的用户查询由单个用户拥有,可以分配并与其他用户共享,并且可以由其他用户根据查询的访问权限查看。 此视图类型适用于跨表类型和执行聚合的查询的常用查询。 有关详细信息,请参阅 保存的查询。
还可以使用自定义工具自定义视图。 有关详细信息,请参阅 “创建和编辑视图”。
视图类型
下表列出了可以自定义的五种类型的视图。 视图的类型代码存储在参数中 SavedQuery.QueryType 。
定义特定表的视图时,参数 SavedQuery.ReturnedTypeCode 将返回表逻辑名称。
| 视图类型 | 类型代码 | Description |
|---|---|---|
| Public | 0 |
-
出现:多次 - 操作:创建、更新、删除 - 注释:通过设置为 SavedQuery.IsDefault true 将其中一个视图设置为默认公共视图。 |
| 高级查找 | 1 |
-
出现:1 次 - 操作:仅更新。 - 注释:默认情况下,当结果显示在高级查找中时,将显示此视图。 |
| 已关联 | 2 |
-
出现:1 次 - 操作:仅更新。 - 注释:默认情况下,当相关记录的网格出现在记录的导航窗格中时,将显示此视图。 |
| 快速查找 | 4 |
-
出现:1 次 - 操作:仅更新。 - 注释:此视图定义用户在列表视图中使用搜索列搜索记录时搜索的列。 |
| 查找 | 64 |
-
出现:1 次 - 操作:仅更新。 - 注释:这是在没有为查找列配置其他视图时用于查找记录的默认视图。 |
将视图作为解决方案组件进行管理
视图是解决方案组件。 创建、更新或删除解决方案组件时,请将更改应用到包含它们的解决方案。 如果未显式指定解决方案,则更改将设置为运行代码的用户 的首选解决方案 。 如果该人没有首选解决方案,则更改将转到 默认解决方案之一。
作为开发人员,使用 SolutionUniqueName 可选参数 将这些数据更改显式关联到特定的非托管解决方案。
创建视图
若要创建公共视图,请指定以下 SavedQuery 属性:
| 财产 | Description |
|---|---|
Name |
保存的查询的唯一标识符。 |
ReturnedTypeCode |
匹配表的逻辑名称。 |
FetchXml |
编辑筛选条件或配置排序。 请参阅 使用 FetchXml 的查询数据。 |
LayoutXml |
layoutxml有关有效元素,请参阅自定义解决方案文件架构中的元素。 |
QueryType |
必须始终为零(0)。 |
以下示例为 “机会”表创建新的公共视图:
此示例将 IOrganizationService.Execute 方法 与 CreateRequest 类 和 SolutionUniqueName 可选参数配合使用。
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>
<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>";
var sq = new SavedQuery
{
Name = "A New Custom Public View",
Description = "A Saved Query created in code",
ReturnedTypeCode = "opportunity",
FetchXml = fetchXml,
LayoutXml = layoutXml,
QueryType = 0
};
var request = new CreateRequest
{
Target = sq
};
request["SolutionUniqueName"] = "< Your Solution Unique Name >";
var response = (CreateResponse)service.Execute(request);
_customViewId = response.id;
Console.WriteLine("A new view with the name {0} was created.", sq.Name);
更新视图
IsCustomizable如果托管属性允许更新视图,请使用 UpdateRequest 类消息更新视图。 始终更新解决方案上下文中的视图。
SolutionUniqueName使用可选参数将更改与解决方案关联到视图。
有关更新示例,请参阅 停用视图
删除视图
应仅删除创建的已保存查询。 解决方案组件或应用程序的一部分可能依赖于特定的已保存查询。 如果存在不想显示在应用程序中的查询,请停用它们。 始终删除解决方案上下文中的视图。
SolutionUniqueName使用可选参数将删除视图与解决方案相关联。
检索视图
以下示例检索 “机会”表的所有公共视图:
此示例使用具有 IOrganizationService.Execute 方法的 RetrieveMultipleRequest 类来检索保存的查询记录。
var 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)service.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);
}
停用视图
如果不希望在应用程序中显示公共视图,请停用它。 不能停用设置为默认视图的公共视图。
停用是更新操作。 始终更新解决方案上下文中的视图。
SolutionUniqueName使用可选参数将更改与解决方案关联到视图。
以下示例停用“机会”表的“当前会计年度”视图中的“已关闭机会”视图:
此示例将 IOrganizationService.Execute 方法 与 UpdateRequest 类 和 SolutionUniqueName 可选参数一起使用。
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)service.Execute(retrieveOpportuntiesViewRequest);
SavedQuery OpportunityView =
(SavedQuery)retrieveOpportuntiesViewResponse.EntityCollection.Entities[0];
var updateRequest = new UpdateRequest
{
Target = new SavedQuery
{
Id = OpportunityView.Id,
StateCode = new OptionSetValue(1), // Inactive
StatusCode = new OptionSetValue(2) // Inactive
}
};
updateRequest["SolutionUniqueName"] = "< Your Solution Unique Name >";
service.Execute(updateRequest);
注释
视图状态: active 或在 inactive 将视图添加到解决方案时不包含该视图。 因此,将解决方案导入目标组织时,状态默认设置为活动状态。
编辑列
可以选择要在表或相关表中的视图中显示的列。
有关如何指定要显示的列的详细信息,请参阅layoutxml中的 元素。
添加自定义图标和工具提示以查看列
可以使用工具提示文本添加自定义图标,以便根据列值在列中显示。 还可以指定本地化的工具提示文本。 将自定义图标添加为实例中的图像 Web 资源,然后使用 JavaScript Web 资源为列添加 JavaScript 代码,以便根据列值显示图标。
注释
可以仅向只读网格添加带有工具提示的自定义图标。 可编辑网格不支持此功能。 有关可编辑网格的详细信息,请参阅使用可编辑网格。
将两个新参数 imageproviderwebresourceimageproviderfunctionname添加到 cell savedquery 的 layoutxml 元素。 通过这些参数,可以指定 Web 资源的名称和 JavaScript 函数名称,以显示列的自定义图标和工具提示文本。
加载页面时,JavaScript 代码将运行。
还可以在“列属性”页中使用新的 Web 资源和函数名称,同时修改视图定义中列的属性以指定 Web 资源名称和 JavaScript 函数名称。
以下示例代码演示如何以编程方式指定 Web 资源和 JavaScript 函数名称,以便为 opportunityratingcode 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 参数用于以多种语言为图标指定工具提示文本。 有关支持的语言的详细信息,请参阅 环境的区域和语言选项。 有关可在代码中使用的区域设置 ID (LCID) 值的列表,请参阅 Microsoft 分派的区域设置 ID。
假设为所选列类型添加自定义图标,因为它具有一组有限的预定义选项,请使用选项的整数值而不是标签,以避免由于本地化标签字符串中的更改而中断代码。 在 JavaScript 函数中,只需指定要用作列中值的图标的图像 Web 资源的名称。 图像应为 16x16 像素。 较大的图像会自动缩小到 16x16 像素。
以下示例代码根据列中的值之一(1:热、2:暖、3:冷) opportunityratingcode (Rating) 显示不同的图标和工具提示文本。 此示例代码还演示如何显示已本地化的工具提示文本。 若要使此示例正常工作,必须在实例中创建三个图像 Web 资源,每个资源分别具有 16x16 映像(![]()
和
)名称: 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 (parseInt(coldata, 10)) {
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。
社区工具
有几个社区工具使用这些 API 来管理视图:
注释
这些社区工具不是 Dataverse 的产物,Microsoft不支持社区工具。 如果对工具有疑问,请联系发布者。 详细信息: 社区工具