您位於此處:
Apex 定義的資料類型
透過 Apex 定義的資料類型,流程可操縱各種通常從呼叫傳回到 Web 服務的複雜資料物件。在流程中建立 Apex 定義變數,並直接處理從 Web 呼叫傳回的 JSON。
必要版本
| 檢視支援的版本。 |
開發人員可定義 Apex 類別,以作為自動從 Web 轉換為流程的模式,這允許使用陳述性方法且不需要額外的程式碼,就能完全操縱所產生要在流程中執行的物件。Apex 定義的資源對於將流程連線至透過 Mulesoft 和 REST 呼叫存取的豐富外部 Web 物件而言,很有幫助。如果不支援資料類型,流程可以將值傳遞至 Lightning 元件,且您可以使用 Apex 對其進行操作。
透過 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 類別,以及 Price 和 Identifiers 的類別。WebProduct 有三種類型的資料。
- model 和 brand 欄位使用基本「字串」資料類型。
- 價格欄位參照
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 類別會定義 amount 和 salesUnit 欄位。
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 類別會定義 currencyValue、name 和 currency 欄位。
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;
}
建立 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} 中。
現在您可以在流程、Apex 和 Lightning 元件中操作資料。例如,建立一個流程以透過對識別碼執行迴圈,並組合一系列的產品來產生產品資料。將記錄的集合儲存至 Salesforce,並在流程畫面元件上顯示資料。
新增自訂圖示至 Apex 定義的動作
將自訂圖示新增至 Apex 定義的可叫用動作,讓在 Flow Builder 畫布上進行搜尋變得更加容易。
自訂圖示可以是 SVG 檔案或現有的 Salesforce Lightning Design System (SLDS) 圖示。
SVG 檔案必須符合下列需求:
- 檔案中的
<svg>元素包含id、xmlns和viewBox屬性。 - 檔案中的
<svg>元素不包含style、height和width屬性。 - 檔案不包含
<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 畫布上以代表它。
