Loading
透過 Salesforce Flow 自動化業務流程
Apex 定義的資料類型

Apex 定義的資料類型

透過 Apex 定義的資料類型,流程可操縱各種通常從呼叫傳回到 Web 服務的複雜資料物件。在流程中建立 Apex 定義變數,並直接處理從 Web 呼叫傳回的 JSON。

必要版本

檢視支援的版本。

開發人員可定義 Apex 類別,以作為自動從 Web 轉換為流程的模式,這允許使用陳述性方法且不需要額外的程式碼,就能完全操縱所產生要在流程中執行的物件。Apex 定義的資源對於將流程連線至透過 Mulesoft 和 REST 呼叫存取的豐富外部 Web 物件而言,很有幫助。如果不支援資料類型,流程可以將值傳遞至 Lightning 元件,且您可以使用 Apex 對其進行操作。

範例
範例 汽車經銷商有一個畫面流程,可讓客戶搜尋經銷商的庫存資料,此資料儲存在另一個資料庫中。經銷商在其組織中建立一個 Apex 類別,以定義「汽車」資料類型。接著,經銷商建立一個畫面流程,其中包含兩個 Apex 定義變數。該流程會在流程、Apex 動作及 Lightning 元件之間傳遞變數。

透過 Apex 定義的資料類型擴充流程

業務流程若涉及通常從對 Web 服務的呼叫傳回的複雜資料物件,您可以使用 Apex、流程和 Lightning 元件的組合將該業務流程自動化。例如,取得 Web 產品相關的外部產品資料,然後在 Salesforce 中建立記錄。

對 REST 端點的呼叫會傳回含產品資料的 JSON 回應。

{
   "model": "Vintage Cruiser Jacket",
   "brand": "Acme",
   "identifiers": [
     {
       "SKU": "A-J001"
     },
     {
       "SKU": "A-J002"
     },
     {
       "SKU": "A-J003"
     }
   ],
   "price": {
     "amount": {
       "currencyValue": "500.00",
       "name": "Amount",
       "currency": "USD"
     },
     "salesUnit": {
       "code": "EA",
       "name": "Each"
     }
   }
}

含 Apex 類別的模型 JSON 物件

在 Apex 類別中定義複雜資料物件。例如,您可以為 JSON 物件建立符合的 Apex 類別。此類別會作為範本,並會將 JSON 轉換至流程可使用的物件。

在您為 Web 產品定義 Apex 類別後,您可以建立 Apex 動作,以使用 REST 呼叫從 Web 服務取得資料。將傳回的資料儲存在使用 Apex 定義之資料類型的流程變數中。然後在流程、Apex 和 Lightning 元件中操作資料。

範例
範例

以下是 WebProduct Apex 範本的範例。其中包含主要 WebProduct 類別,以及 PriceIdentifiers 的類別。WebProduct 有三種類型的資料。

  • modelbrand 欄位使用基本「字串」資料類型。
  • 價格欄位參照 Price 類別。請確定您將每個類別儲存在個別的類別檔案中,因為流程之 Apex 定義的資料類型中不支援內部類別。
  • identifiers 欄位類似 price,但表示成 List。Identifiers 類別可讓流程存取 JSON 陣列,以代表三個特定 SKU 編號的清單。
  • parse 方法會將 JSON 轉換為流程可存取的 Apex 物件。
  • 流程其 Apex 類別中的欄位需要 @AuraEnabled 註釋。
public class WebProduct {

@AuraEnabled
public String model;

@AuraEnabled
public String brand;

//Because the identifiers information is an array in the JSON schema, we create a separate class called Identifiers and define a property that contains a List.
@AuraEnabled
public List<Identifiers> identifiers;

//This field has an Apex-defined data type in the Price Apex class.
@AuraEnabled
public Price price;

//This method is used as part of the Create Apex Action section.
public static WebProduct parse(String json) {
return (WebProduct) System.JSON.deserialize(json, WebProduct.class);
}

Identifiers Apex 類別會定義 SKU 欄位。

public class Identifiers {

@AuraEnabled
public String SKU;

}

Price Apex 類別會定義 amountsalesUnit 欄位。

public class Price {

//This field has an Apex-defined data type in the Amount Apex class.
@AuraEnabled
public Amount amount;


//This field has an Apex-defined data type in the SalesUnit Apex class.
@AuraEnabled
public SalesUnit salesUnit;

}

Amount Apex 類別會定義 currencyValuenamecurrency 欄位。

public class Amount {

@AuraEnabled
public String currencyValue;

@AuraEnabled
public String name;

@AuraEnabled
public String currency;

}

SalesUnit Apex 類別會定義 程式碼名稱欄位。

public class SalesUnit {

@AuraEnabled
public String code;

@AuraEnabled
public String name;

}
小秘訣
小秘訣 您可以使用第三方工具將 JSON 轉換成 Apex。

建立 Apex 動作

在您建立一個可將 JSON 資料翻譯成流程資源的機制後,您可以建立一個可擷取 JSON 資料的 Apex 類別。使用 @InvocableMethod 註釋將類別定義為流程的 Apex 動作。

GetWebProduct Apex 類別會定義 Apex 動作。它會從 REST 端點取得產品資料,並將 JSON 回應剖析至 WebProduct Apex 物件。

從 API 66.0 版開始,作為可叫用動作參數的自訂 Apex 類別需要可存取的無引數建構程式。在此範例中,「要求」與「結果」內部類別不會定義任何建構函式,因此 Apex 會提供隱含的無引數建構函式。如果您將其他建構元新增至這些類別,則類別需要具有適當存取權修飾元 (公用或全域) 的明確無引數建構元。

開發人員可以透過建立 InvocableActionExtension 中繼資料檔案,自訂此 Apex 動作在 Flow Builder 中的顯示方式。此中繼資料可讓您控制輸入順序和分組、新增自訂標題、定義輸入參數的選項清單,以及建立特定輸入的自訂內容編輯器。如需詳細資訊,請參閱《中繼資料 API 開發人員指南》中的「InvocableActionExtension」。

範例
範例
global with sharing class GetWebProduct {
 
    @InvocableMethod
    public static List<Results> GetWebProduct(List<Requests> requests)
       {
            Http http = new Http();
            HttpRequest request = new HttpRequest();
            String endpoint = requests[0].endpoint;
            String submittedId = requests[0].submittedId;
            request.setEndpoint(endpoint + submittedId );
            request.setMethod('GET');
            HttpResponse response = http.send(request);
           
            Results curResult = new Results();
            String responseJSON = response.getBody();
           
            WebProduct curProduct = WebProduct.parse(responseJSON);        
            curResult.WebProduct = curProduct;
           
            List<Results> resultsList = new List<Results>();
            resultsList.add(curResult);
            return resultsList;
       }
    
    global class Requests {
        @InvocableVariable
        global String submittedId;
        
        @InvocableVariable
        global String endpoint;       
    }
    
    global class Results {
        @InvocableVariable
        global WebProduct WebProduct;
    }

}
備註
備註

此範例使用全域存取權修飾詞,因為其針對受管理封裝案例設計。如果您建立 Apex 動作僅供組織內使用,您可以使用公用動作,而非全域動作。

設定 Apex 動作

將 Apex 動作新增至畫面流程並設定其輸入。

範例
範例

「取得 Web 產品 Apex」動作會自動將 Web 產品資料儲存在 {!Get_Web_Product} 中。

「取得 Web 產品」的「新動作」視窗

現在您可以在流程、Apex 和 Lightning 元件中操作資料。例如,建立一個流程以透過對識別碼執行迴圈,並組合一系列的產品來產生產品資料。將記錄的集合儲存至 Salesforce,並在流程畫面元件上顯示資料。

透過 Apex 定義的資料類型擴充流程的流程畫布

新增自訂圖示至 Apex 定義的動作

將自訂圖示新增至 Apex 定義的可叫用動作,讓在 Flow Builder 畫布上進行搜尋變得更加容易。

自訂圖示可以是 SVG 檔案或現有的 Salesforce Lightning Design System (SLDS) 圖示。

SVG 檔案必須符合下列需求:

  • 檔案中的 <svg> 元素包含 idxmlnsviewBox 屬性。
  • 檔案中的 <svg> 元素不包含 styleheightwidth 屬性。
  • 檔案不包含 <clipPath> 元素。
  • 檔案中的每個 <path> 元素皆包含 fill 屬性。

例如,系統支援此 SVG 檔案成為自訂圖示。

<svg id="top" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#673ab7" d="M12,44c-1.657,0-3-1.343-3-3V7c0-1.657,1.343-3,3-3h16l11,11v26c0,1.657-1.343,3-3,3H12z"/><path fill="#5e35b1" d="M39 15L28.883 14.125 39 24.124z"/><path fill="#b39ddb" d="M39,15h-8c-1.657,0-3-1.343-3-3V4L39,15z"/><path fill="#f5f5f5" d="M22 23H32V25H22zM22 28H32V30H22zM22 33H32V35H22zM17.5 22.5A1.5 1.5 0 1 0 17.5 25.5 1.5 1.5 0 1 0 17.5 22.5zM17.5 27.5A1.5 1.5 0 1 0 17.5 30.5 1.5 1.5 0 1 0 17.5 27.5zM17.5 32.5A1.5 1.5 0 1 0 17.5 35.5 1.5 1.5 0 1 0 17.5 32.5z"/></svg>

僅支援標準物件與自訂物件 SLDS 圖示作為 Apex 所定義可叫用動作的自訂圖示。

  • 如果您使用 SVG 檔案,請上載檔案作為您組織中的靜態資源。
  • 將可叫用動作的 InvocableMethod 註釋其 iconName 屬性設定為圖示的名稱。

針對 SVG 圖示,將名稱指定為 resource:namespace__iconName:svgID。例如:

public class CustomSvgIcon { 

@InvocableMethod(iconName='resource:google:top') 
public static void run() {} 

}
public class CustomSvgIcon { 

@InvocableMethod(label='myIcon' iconName='resource:myPackageNamespace__google:top')
global static List<Integer> myMethod(List<Integer> request) {
List<Integer> results = new List<Integer>();
results.add(1);
return results;

}
  • iconName 是您上載圖示時指定的名稱。

  • svgID 是 SVG 檔案中 <svg> 元素的 id 屬性值。

  • namespace 是包括所要自訂可叫用動作的封裝命名空間。如果可叫用動作位於受管理封裝中,則 namespace__ 是必要的字首。否則為選用。若要在受管理封裝中針對可叫用動作使用自訂圖示,請將定義可叫用動作的方法宣告為 global

針對 SLDS 圖示,將名稱指定為 slds:category:name。例如:

public class CustomSldsIcon { 

@InvocableMethod(iconName='slds:standard:choice') 
public static void run() {} 

}
  • category 是圖示的種類名稱。
  • name 是 SLDS 中的檔案名稱。

當使用者在 Flow Builder 中新增可叫用動作時,自訂圖示會出現在 Flow Builder 畫布上以代表它。

 
正在載入
Salesforce Help | Article