エンティティ ビューのカスタマイズ
公開日: 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: ビューの作成と編集
このトピックの内容
ビューの種類
タスクの表示
ビューの作成
ビューの更新
ビューの削除
ビューの取得
ビューの非アクティブ化
フィルター条件の編集または並べ替えの構成
列の編集
列に対するユーザー定義アイコンのツールヒントの追加
既定として設定
ビューの種類
次の表には、カスタマイズがサポートされている 5 種類のビューが示されています。 ビューの種類コードは、SavedQuery.QueryType 属性に保存されます。 このエンティティは、Microsoft Office Outlook フィルターおよびテンプレートの保存にも使用されているため、QueryType 属性に対してこの一覧に記載されていない有効な値が他にもあります。 詳細については、「オフラインと 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 に慣れていない場合は、メッセージ QueryExpressionToFetchXmlRequest および FetchXmlToQueryExpressionRequest を使用して、QueryExpression と FetchXML の間で変換できます。
列の編集
ビューに表示する列は、エンティティまたは関連するエンティティから取得できます。 列を指定する方法については、<layoutxml> (SavedQuery) を参照してください。
列に対するユーザー定義アイコンのツールヒントの追加
列の値により列に表示するツールヒントのテキストを含むユーザー定義アイコンを追加できます; ローカライズされたツールヒント テキストを指定することもできます。 これにより、[Dynamics 365] インスタンス内のイメージ Web リソースとしてユーザー定義アイコンを追加し、[JavaScript] Web リソースを使用して列の値によるアイコンを表示するための列の [JavaScript] コードを追加することができるようになります。
注意
この機能は Dynamics 365 用 2016 年 12 月の更新プログラム (オンラインおよび設置型) に導入されています。 ユーザー定義アイコンのツールヒントの追加は読み取り専用グリッドでのみサポートされます。この機能は編集可能なグリッドではサポートされません。 編集可能なグリッドの詳細については、「Dynamics 365 での編集可能グリッドの使用」を参照してください。
2 つの新しい属性は、[imageproviderwebresource] と [imageproviderfunctionname] であり、Web リソース名、および列のユーザー定義アイコンとツールヒントのテキストを表示する [layoutxml] 関数名を指定させる savedquery (<cell> (SavedQuery) を参照してください。) の [JavaScript] に追加されます。 ページが読み込まれると、[JavaScript] コードが実行されます。
新しい [Web リソース] および [列のプロパティ] ページ内の [関数名] フィールドを使用しながら、[Dynamics 365] Web クライアント名と [JavaScript] 関数名の定義を表示する属性 (列) のプロパティを変更することができます。
次のサンプルコードは、[layoutxml 内の [opportunityratingcode] 列に対するユーザー定義アイコンとツールヒントを追加するための Web リソースと [JavaScript] 関数名をプログラムで指定する方法を示します:
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] 関数には、次の 2 つのトピックが表示されます : layoutxml で指定された行オブジェクト全体と呼び出し側ユーザーのロケール ID (LCID) です。 LCID パラメーターでは、複数の言語でアイコンのツールヒントのテキストを指定できます。 CRM によってサポートされている言語の詳細については、「言語を有効にする」および「Microsoft Dynamics 365 の言語パックのインストレーションまたはアップグレード」を参照してください。 コードで使用できるロケール ID (LCID) 値の一覧については、「Microsoft によって割り当てられるロケール ID」を参照してください。
事前定義された限定のオプション セットによるオプション セット型の属性でカスタム アイコンを追加する可能性が最も高いと想定される場合は、ラベルの代わりにオプションの整数値を使用して、ローカライズされたラベル文字列の変更によるコードの破損を回避することを確認します。 または、JavaScript関数で、属性の値のアイコンとして使用するイメージ Web リソースの名前を指定します。 イメージは、16 x 16 ピクセル サイズであるべきです; より大きな画像は、16 x 16 ピクセル サイズに自動的に縮小されます。
次のサンプル コードは、[opportunityratingcode (Rating)] 属性内の異なったアイコン、およびツールヒントのテキストの値 [1: Hot, 2: Warm, 3: Cold] のいずれかに基づいて表示されます。 サンプル コードは、ローカライズしたツールヒントのテキストを表示する方法についても示します。 このサンプルを機能させるには、それぞれ 16 x 16 画像の 3 つのイメージ Web リソース (、
、
) を次の名前のDynamics 365 インスタンス内で作成する必要があります: 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] 列の値、およびカーソルを置いたときのアイコンのツールヒント テキストが表示されます。
既定として設定
既定のビューとして設定できるのは、アクティブな共有ビューが 1 つだけです。 ビューを既定のビューにするには、IsDefault プロパティを true に設定します。
関連項目
サンプル: ビューの操作
SavedQuery (ビュー) エンティティのメッセージとメソッド
Saved query XML reference
FetchXML を使用したクエリの構築
Dynamics 365 メタデータと共に組織サービスを使用する
エンティティ フォームのカスタマイズ
グローバル オプション セットのカスタマイズ
Microsoft Dynamics 365 アプリケーションをカスタマイズする
Microsoft Dynamics 365
© 2017 Microsoft. All rights reserved. 著作権