Share via


自訂實體檢視表

 

發行︰ 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 (Online 和內部部署) 的 2016 年 12 月更新 中提供。 新增自訂圖示含工具提示,只有唯讀網格支援;可編輯的網格不支援此功能。 如需有關可編輯的網格的詳細資訊,請參閱在 Dynamics 365 中使用可編輯的網格

兩個新屬性 imageproviderwebresourceimageproviderfunctionname 已新增至已儲存查詢的 layoutxml (請參閱<cell> (SavedQuery)),讓您指定 Web 資源的名稱和 JavaScript 函數名稱,為欄顯示自訂圖示和工具提示文字。JavaScript 程式碼會在頁面載入時執行。

您也可以使用新的 [Web 資源] 和 [函數名稱] 欄位,在 [欄屬性] 頁面中,同時在 Dynamics 365 Web 用戶端的檢視表定義中修改屬性 (欄) 的屬性,以指定 Web 資源名稱和 JavaScript 函數名稱。

下列範例程式碼示範如何以程式設計方式指定 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 中指定的整列物件,以及呼叫端使用者的地區設定識別碼 (LCID)。 LCID 參數可讓您以多種語言指定圖示的工具提示文字。 如需有關 CRM 所支援語言的詳細資訊,請參閱啟用語言安裝或升級 Microsoft Dynamics 365 的語言套件。 如需可在程式碼中使用的地區設定識別碼 (LCID) 值清單,請參閱 Microsoft 指派的地區設定識別碼

假設您將可能為選項組類型的屬性新增自訂圖示,它擁有一組有限的預先定義選項,您務必使用整數值選項,而不要使用標籤,避免因翻譯的標籤字串變更而使程式碼中斷。 同時,在您的 JavaScript 函數中,僅指定要做為屬性中某個值的圖示使用的影像 Web 資原名稱。 影像大小應該是 16x16 像素;較大的影像會自動縮小成 16x16 像素大小。

下列範例程式碼會顯示不同的圖示和工具提示文字,根據 opportunityratingcode (Rating) 屬性中的其中一個值 (1: Hot, 2: Warm, 3: Cold)。 範例程式碼也會顯示如何顯示翻譯的工具提示文字。 若要讓此範例運作,您必須以各為 16x16 影像建立三個影像 Web 資源 (高度興趣評等圖示具有興趣評等圖示沒有興趣評等圖示),在您的 Dynamics 365 執行個體中,且分別具有下列名稱: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. 著作權所有,並保留一切權利。 著作權