如何以正确的范围将 Salesforce Flow 变量传递到 Apex Class?

How to pass Salesforce Flow variables into Apex Class with correct scope?

我正在尝试使用 Salesforce 中的 Flow 将变量传递到 Apex Class,该 Apex Class 执行到外部 API 的 HTTP Post。 Flow 抓住一个机会,解析它的一些字段,并将它们输入到 Apex class。从那里,Apex class 调用 InvocableMethod 来创建自定义对象以将这些输入存储为字符串列表,然后将它们传递给 'webservice' class,后者创建 JSON 对象的数据和 POST 它到 API.

我能够让 POST 与硬编码字符串一起正常工作,但是当我尝试使用输入变量时,Flow 错误提示输入参数“xxxxxx”不可用在引用的操作中。从“Apex-Class-xxxx”操作元素中删除它。

在 Flow 的调试屏幕中,我还可以看到这些输入正在从 Salesforce 中获取正确的值,但它会出错:为 Apex 操作指定了无效的输入参数

如何让这些输入正确进入 Apex class?

global class MyApexClass
{
    //Stores output from 'sendToWebService' to be converted to JSON
    public class Body {
      public String address;
      public String companywebsite;
      public String companyname;
      public string opportunityid;

    }
    //Stores inputs from Flow 
    public class FlowInputs {
        @InvocableVariable public String Address;
        @InvocableVariable public String CompanyWebsite;
        @InvocableVariable public String CompanyName;
        @InvocableVariable public String OppId;
    }
    //Method to call webservice method since InvocableVariables can't be passed to it directly
    @InvocableMethod(label='xxxx' description='xxxxx')
    public static List<String> sendToWebService(List<String> flowData){
        List<String> outList;

        for (String input : flowData){
            outList.add(input);
        }
        
        SendToAPI(outList);
    
        return outList;
    }

    //creates an object to store inputs, converts to JSON, and sends it to the API via HTTP POST
    webservice static void SendToAPI(List<String> accountData){
        
        Http m_http = new Http();
        HttpRequest req = new HttpRequest();
        .........

你基本上就在那里 -

在可调用方法上,您需要声明一个 list/array 您创建的用于存储输入的顶点对象,而不是字符串列表:

@InvocableMethod(label='xxxx' description='xxxxx')
public static List<String> sendToWebService(List<FlowInputs> request)

然后,您应该能够在请求 header/body 方法本身中对 json 进行格式化