Loading
使用 Salesforce Flow 自动化业务流程
Apex 定义的数据类型

Apex 定义的数据类型

通过 Apex 定义的数据类型,流可以操纵通常从对 Web 服务调用返回的各种复杂数据对象。在流中创建 Apex 定义的变量,并直接处理从 Web 调用返回的 JSON。

所需的 Edition

查看支持的版本。

开发人员可以定义 Apex 类,以用作从 Web 到流自动转换的模式,并允许使用声明性方法完全操纵在流中执行的结果对象,无需其他代码。对于将流连接到通过 Mulesoft 和 REST 调用访问的丰富外部 Web 对象,Apex 定义的资源非常有用。如果不支持数据类型,流可将值传输到 Lightning 组件,您可以使用 Apex 对其进行操作。

示例
示例 通过汽车经销商的屏幕流,客户可以搜索经销商的库存数据;该数据将存储在其他数据库中。经销商将在组织中创建 Apex 类,以定义汽车数据类型。然后,经销商创建包含 2 个 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 相似,但代表为列表。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 类定义了金额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 类定义了 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 设计系统 (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