1. 程式人生 > >Salesforce學習之路-developer篇(四)Visualforce結合Reports展示圖表

Salesforce學習之路-developer篇(四)Visualforce結合Reports展示圖表

Salesforce作為一款CRM系統,個人覺得最重要的環境便是在於資料的展示和聯動,而Salesforce也本身提供了相當強大的功能,Report在展示圖表的方面十分強大,前段時間更是宣佈以157億美元收購tableau之後更是如虎添翼。雖然,其本身標準組件很強大,但是在實際專案上依舊捉襟見肘。

話不多說,這裡提一提本人在展示圖表的心歷路程。


 

1. 什麼是報告?

以最簡單的形式,報告是滿足您定義的條件的記錄(如機會或帳戶)的列表。但是報告不僅僅是簡單的列表。要獲取所需的資料,可以對記錄進行過濾,分組和數學運算。您甚至可以在圖表中以圖形方式顯示它們!

每個報告都儲存在一個資料夾中。報告資料夾確定如何訪問報告,以及誰可以訪問它們以檢視,編輯或管理。資料夾可以是公共的,隱藏的或共享的。您可以根據角色,許可權,公共組,區域和許可證型別來控制誰有權訪問資料夾的內容。您可以將資料夾提供給整個組織使用,也可以將其設定為私有,以便只有所有者才能訪問。

2. 建立新的報告

建立Reprot Tyep

Report Type就像一個模版,確定建立Reports時可以使用哪些欄位和記錄。

  • 點選Setup--> Report Types
  • 點選New Custom Report Type

      

    • Primary Object: 這裡指Report資料的物件,這裡選擇的是Account。注意,這裡不能選utilization物件,因為utilization被Account關聯,所以主物件是Account。如果分不清,可以檢視記錄的Related。例如:物件A記錄的Realted列表中含有物件B,那麼物件A便為Primary object。
    • Store in Category: 是指該Report Type存放的目錄,在建立新Report時會用到。
    • 點選Next,建立自定義資料集合。

  

    • Each "A" record must have at least one related "B" record: 物件A的記錄必須有物件B的關聯資訊,即選擇物件A的Related列表中物件B不為空的記錄。
    • "A" records may or may not have related "B" records: 選擇物件A的所有資料,無論物件A的Related列表中是否包含物件B。  

新增過濾條件

過濾型別:

過濾型別 描述
標準過濾 預設情況下, 標準過濾應用於大多數物件。不同的物件具有不同的標準過濾器,但是大多數物件都包括標準過濾器Show Me和Date Field。Show Me過濾器:可根據常見分組(例如“我的賬號”或“所有賬號”)過濾物件。 Date Field過濾器:根據日期欄位進行過濾(如建立日期,上次活動)和日期範圍(如“所有時間”或“上個月”)
欄位過濾 欄位過濾器可用於報告,列表檢視,工作流規則以及應用程式的其他區域。對於每個過濾器,設定欄位,運算子和值。
過濾邏輯 新增Boolean條件來控制欄位過濾器。在使用過濾邏輯之前,至少得有一個欄位過濾。
交叉過濾 使用WITH或WITHOUT條件按子物件過濾報告。新增子過濾器進一步按照子物件上的欄位進行過濾。例如:如果有交叉過濾器Account with Opportunity,點選Add filter並建立子過濾器Opportunity Name Equals ACME
行數過濾 對於表格報告,選擇要顯示的最大行數,然後選擇要作為排序依據的欄位和排序順序。如果限制返回的行數,則可以將表格報告用作儀表盤或統計元件的源報表。

 過濾邏輯:

操作 定義
AND 與,必須同時滿足左右條件
OR 或,只需滿足左右任一條件
NOT 否,不滿足某條件

例如,某表格設定了三個過濾條件,其序號分別為1,2,3,設定過濾邏輯為:1 AND (2 OR 3) ==> 表格中只展示滿足條件1和(條件2或者條件3的某一個)的記錄。

建立Reprot

  • 點選九宮格(App Launcher),在All Items下找到Reports並點選
  • 點選New Report
  • 選擇Report Type

      

  • 這裡選擇上面建立的Account & utilization資料集,然後點選Continue,進入Report的建立介面

        

    • Columns: 點選左側的Fields,可以看到所有可選擇的欄位,但是在我們的實際需求中,可能Report中只需要展示部分欄位,那麼將需要展示的欄位新增到Columns欄位下,新增的方法很簡單,1)在左側選中欄位後拖拽到Columns下面;2)在Columns的搜尋框中搜尋相應欄位,並選擇。
    • Groups: 如果需要針對某個欄位進行分組,例如建立直方圖時需要選擇橫座標進行分組,可將對應欄位拖拽至Group Rows下,或者在Group Rows的搜尋框中新增。
  • 新增過濾條件

    

  如上面所說,Filters下面為表格的過濾條件,這裡設定了5個過濾條件。

    • Show Me和Create Date為標準過濾,分別設定為:All accounts 和All Time
    • 條件1,條件2,條件3為自定義過濾,併為自定義條件加上過濾邏輯(預設為所有條件AND)

新增表格

  點選Add Chart按鈕,為Report新增表格

  

  • 右邊選擇Chart展示的型別,Salesforce自帶有8中型別:Bar, Column, Stacked Bar, Stacked Column, Line, Donut, Funnel, Scatter plot,可根據需求自行設定不同格式圖示。
  • X-Axis: 橫座標,對應Outline中Groups下的欄位。
  • Y-Axis: 縱座標,對應Columns下的number或Currency型別的欄位(可計數字段,並且在欄位前會加上#符號)。
  • Plot on Second Axis: 第二座標。

      

3. 建立Visualforce Page

Visualforce詳細內容:https://www.cnblogs.com/cloudman-open/p/11635346.html

Markup-檢視

<apex:page showHeader="false" controller="MeetingUsagePageController">
    <apex:outputPanel >
      <div style="display:inline-block;width:100%;height:50%;overflow:hidden;padding-left:20%">        
        <analytics:reportChart reportId="00OK0000000mQaBMAU" rendered="true"  showRefreshButton="true" size="huge" id="host_chart" cacheResults="true" filter="[
            {column:'Web_Account__c.Id', operator:'equals',value:'{!webAccountId}' }, 
            {column:'Site_Audio__c.Month__c', operator:'equals',value:'{!displayMonth}'},
            {column:'Site_Audio__c.Site_Name__c', operator:'equals',value:'{!displaySite}'}]">
        </analytics:reportChart>
      </div>
    </apex:outputPanel>               
</apex:page>
  • Controller:繫結的類名稱。
  • analytics:reportChart:該元件可將Salesforce報告圖表新增到Visualforce頁面。該元件在API版本29.0或更高版本中可用。
    • reportId:Report的ID,找到對應表格並開啟,瀏覽器中URL為https://***.force.com/lightning/r/Report/00OK0000000mQaBMAU/view, Report後面的便是reportId。
    • showRefreshButton: 是否展示重新整理按鈕,true表展示重新整理按鈕,false表不展示重新整理按鈕。
    • Size:表格展示的尺寸,分為:tiny, small, medium, large, huge。
    • cacheResults:顯示圖表時是否使用快取的資料。當該屬性設定為true時,資料將快取24小時,但是您可以使用cacheAge屬性修改時間長度。如果該屬性設定為false,則每次重新整理頁面時都會執行報告。
    • filter:除報表中已有的欄位過濾器外,還按欄位過濾報表圖表以獲取特定資料。請注意,一個報告最多可以包含20個欄位過濾器。過濾器具有以下JSON字串形式的屬性:
      • 列:您要過濾的欄位的API名稱。
      • 運算子:您要用來過濾欄位的條件的API名稱。例如,要按“不等於”進行過濾,請使用API​​名稱“ notEqual”。
      • 值:過濾條件。

Controller-控制類

public with sharing class MeetingUsagePageController {
    Id accountId = ApexPages.CurrentPage().getparameters().get('id');
    Web_Account__c account = [select Display_Months__c, Display_Site__c 
                              from Web_Account__c 
                              where Id = :accountId limit 1];
    
    public String webAccountId {
        get {
            if(webAccountId == null) {               
                webAccountId = accountId;
            }
            return webAccountId;
        }set;    
    }
    
    // filter chart with display month
    public String displayMonth {
        get {
            if(displayMonth == null) {
                displayMonth = account.Display_Months__c;
            }
            return displayMonth;
        }set;
    }
    
    // filter data with site name
    public String displaySite {
        get {
            if(displaySite == null) {
                displaySite = account.Display_Site__c;
            }
            return displaySite;
        }set;
    }  
}

結果如下

View Report:點選直接跳轉至對應的Report頁面。

Refresh: 點選右下角的重新整理按鈕會重新整理Visualforce Page中的圖表。

&n