{"id":3729,"date":"2023-12-15T16:50:12","date_gmt":"2023-12-15T08:50:12","guid":{"rendered":"http:\/\/www.ponybai.com\/?p=3729"},"modified":"2023-11-25T16:56:01","modified_gmt":"2023-11-25T08:56:01","slug":"flow","status":"publish","type":"post","link":"http:\/\/www.ponybai.com\/?p=3729","title":{"rendered":"Flow"},"content":{"rendered":"\n<p>Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a<dfn>\u6d41<\/dfn>\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u4f8b\u5982\uff0c\u60a8\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u6d41\u6765\u7f16\u5199\u5ba2\u6237\u652f\u6301\u4e2d\u5fc3\u6216 \u4e3a\u9500\u552e\u56e2\u961f\u751f\u6210\u5b9e\u65f6\u62a5\u4ef7\u3002\u60a8\u53ef\u4ee5\u5728 Visualforce \u9875\u9762\u6216 Aura \u7ec4\u4ef6\u4e2d\u5d4c\u5165\u6d41\u7a0b\uff0c\u7136\u540e \u5728 Apex \u63a7\u5236\u5668\u4e2d\u8bbf\u95ee\u5b83\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u83b7\u53d6\u6d41\u53d8\u91cf<\/strong><br>\u60a8\u53ef\u4ee5\u5728 Apex \u4e2d\u68c0\u7d22\u7279\u5b9a\u6d41\u7684\u6d41\u53d8\u91cf\u3002<\/li>\n\n\n\n<li>\u4ece\u53ef\u8c03\u7528\u64cd\u4f5c\u5411\u5916\u90e8\u7cfb\u7edf\u53d1\u51fa\u6807\u6ce8 \u5f53\u60a8\u5b9a\u4e49\u5728\u5c4f\u5e55\u6d41\u4e2d\u4f5c\u4e3a<strong>\u53ef\u8c03\u7528\u64cd\u4f5c<\/strong><br>\u8fd0\u884c\u5e76\u5411\u5916\u90e8\u7cfb\u7edf\u53d1\u51fa\u6807\u6ce8\u7684\u65b9\u6cd5\u65f6\uff0c\u8bf7\u4f7f\u7528\u4fee\u9970\u7b26\u3002<samp>callout<\/samp><\/li>\n\n\n\n<li><strong>\u4f7f\u7528 Process.Plugin \u63a5\u53e3\u5c06\u6570\u636e\u4f20\u9012\u5230<\/strong>\u6d41\u662f\u4e00\u4e2a\u5185\u7f6e\u63a5\u53e3<br>\uff0c\u53ef\u7528\u4e8e\u5904\u7406\u7ec4\u7ec7\u5185\u7684\u6570\u636e\u5e76\u5c06\u5176\u4f20\u9012\u7ed9\u6307\u5b9a\u7684\u6d41\u3002\u8be5\u63a5\u53e3\u5c06 Apex \u516c\u5f00\u4e3a\u670d\u52a1\uff0c\u8be5\u670d\u52a1\u63a5\u53d7\u8f93\u5165\u503c\u5e76\u5c06\u8f93\u51fa\u8fd4\u56de\u7ed9\u6d41\u3002<samp>Process.Plugin<\/samp><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u83b7\u53d6\u6d41\u53d8\u91cf<\/h1>\n\n\n\n<p>\u60a8\u53ef\u4ee5\u5728 Apex \u4e2d\u68c0\u7d22\u7279\u5b9a\u6d41\u7684\u6d41\u53d8\u91cf\u3002<\/p>\n\n\n\n<p>Apex \u7c7b\u63d0\u4f9b\u7528\u4e8e\u68c0\u7d22\u6d41\u53d8\u91cf\u7684\u65b9\u6cd5\uff0c \u5b83\u53ef\u4ee5\u4f4d\u4e8e Visualforce \u9875\u9762\u4e2d\u5d4c\u5165\u7684\u6d41\u7a0b\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u4f4d\u4e8e \u7531 subflow \u5143\u7d20\u8c03\u7528\u3002\u6b64\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u4f7f\u7528\u6b64\u65b9\u6cd5\u83b7\u53d6\u75d5\u8ff9\u5bfc\u822a \uff08\u5bfc\u822a\uff09\u6765\u81ea Visualforce \u9875\u9762\u4e2d\u5d4c\u5165\u7684\u6d41\u7a0b\u7684\u4fe1\u606f\u3002\u5982\u679c\u90a3\u6d41\u52a8 \u5305\u542b\u5b50\u6d41\u5143\u7d20\uff0c\u5e76\u4e14\u6bcf\u4e2a\u5f15\u7528\u7684\u6d41\u8fd8\u5305\u542b\u4e00\u4e2a\u53d8\u91cf\uff0cVisualforce \u9875\u9762\u53ef\u4ee5\u4e3a\u7528\u6237\u63d0\u4f9b \u9762\u5305\u5c51\uff0c\u65e0\u8bba\u9762\u8bd5\u8fd0\u884c\u54ea\u4e2a\u6d41\u7a0b\u3002<samp>Flow.Interview<\/samp><samp>getVariableValue<\/samp><var>vaBreadCrumb<\/var><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class SampleContoller {\n\n   \/\/ Instance of the flow\n   public Flow.Interview.Flow_Template_Gallery myFlow {get; set;}\n\n   public String getBreadCrumb() {\n      String aBreadCrumb;\n      if (myFlow==null) { return 'Home';}\n      else aBreadCrumb = (String) myFlow.getVariableValue('vaBreadCrumb');\n\n      return(aBreadCrumb==null ? 'Home': aBreadCrumb);\n\n   }\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4ece\u53ef\u8c03\u7528\u64cd\u4f5c\u5411\u5916\u90e8\u7cfb\u7edf\u53d1\u51fa\u6807\u6ce8<\/h1>\n\n\n\n<p>\u5f53\u60a8\u5b9a\u4e49\u4e00\u4e2a\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u5728\u5c4f\u5e55\u6d41\u4e2d\u4f5c\u4e3a\u53ef\u8c03\u7528\u64cd\u4f5c\u8fd0\u884c\uff0c\u5e76\u4f7f \u6807\u6ce8\u5230\u5916\u90e8\u7cfb\u7edf\u65f6\uff0c\u8bf7\u4f7f\u7528\u4fee\u9970\u7b26\u3002<\/p>\n\n\n\n<p><samp>callout<\/samp><\/p>\n\n\n\n<p>\u5f53\u8be5\u65b9\u6cd5\u4f5c\u4e3a\u53ef\u8c03\u7528\u64cd\u4f5c\u6267\u884c\u65f6\uff0c\u5c4f\u5e55\u6d41\u4f7f\u7528\u6b64\u4fee\u9970\u7b26\u6765\u786e\u5b9a \u8be5\u64cd\u4f5c\u662f\u5426\u53ef\u4ee5\u5728\u5f53\u524d\u4e8b\u52a1\u4e2d\u5b89\u5168\u6267\u884c\u3002\u6d41\u7ba1\u7406\u5458\u53ef\u4ee5\u914d\u7f6e \u8ba9 Flow \u51b3\u5b9a\u662f\u5728\u65b0\u4e8b\u52a1\u4e2d\u6267\u884c\u8be5\u64cd\u4f5c\u8fd8\u662f\u5728\u5f53\u524d\u4e8b\u52a1\u4e2d\u6267\u884c\u8be5\u64cd\u4f5c\u7684\u64cd\u4f5c \u4e00\u3002\u5f53\u6ee1\u8db3\u4ee5\u4e0b\u6240\u6709\u6761\u4ef6\u65f6\uff0c\u6d41\u5c06\u63d0\u4ea4\u5f53\u524d\u4e8b\u52a1\uff0c\u5f00\u59cb \u4e00\u4e2a\u65b0\u4e8b\u52a1\uff0c\u5e76\u5b89\u5168\u5730\u8c03\u7528\u5916\u90e8\u7cfb\u7edf\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u65b9\u6cd5\u7684\u6807\u6ce8\u4fee\u9970\u7b26\u662f \u3002<samp>true<\/samp><\/li>\n\n\n\n<li>\u5c4f\u5e55\u6d41\u4e2d\u64cd\u4f5c\u7684\u201c\u4e8b\u52a1\u63a7\u5236\u201d\u8bbe\u7f6e\u914d\u7f6e\u4e3a\u5141\u8bb8\u6d41 \u51b3\u5b9a\u3002<\/li>\n\n\n\n<li>\u5f53\u524d\u4e8b\u52a1\u5177\u6709\u672a\u63d0\u4ea4\u7684\u5de5\u4f5c\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5982\u679c\u6ee1\u8db3\u4ee5\u4e0b\u4efb\u4e00\u6761\u4ef6\uff0c\u5219\u6d41\u5c06\u5728\u5f53\u524d\u4e8b\u52a1\u4e2d\u6267\u884c\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6807\u6ce8\u4fee\u9970\u7b26\u4e3a \u3002<samp>false<\/samp><\/li>\n\n\n\n<li>\u8be5\u64cd\u4f5c\u7531\u975e\u5c4f\u5e55\u6d41\u6267\u884c\u3002<\/li>\n\n\n\n<li>\u5f53\u524d\u4e8b\u52a1\u6ca1\u6709\u672a\u63d0\u4ea4\u7684\u5de5\u4f5c\u3002<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528&nbsp;Process.Plugin&nbsp;\u63a5\u53e3\u5c06\u6570\u636e\u4f20\u9012\u5230\u6d41<\/h1>\n\n\n\n<p><samp>Process.Plugin<\/samp>&nbsp;<a><\/a>\u662f\u4e00\u4e2a\u5185\u7f6e\u63a5\u53e3\uff0c\u53ef\u8ba9\u60a8\u5728 \u60a8\u7684\u7ec4\u7ec7\u5e76\u5c06\u5176\u4f20\u9012\u7ed9\u6307\u5b9a\u7684\u6d41.\u8be5\u63a5\u53e3\u5c06 Apex \u516c\u5f00\u4e3a\u670d\u52a1\uff0c\u8be5\u670d\u52a1\u63a5\u53d7 \u8f93\u5165\u503c\u5e76\u5c06\u8f93\u51fa\u8fd4\u56de\u7ed9\u6d41\u3002<\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5f53\u60a8\u5b9a\u4e49\u5728\u7ec4\u7ec7\u4e2d\u5b9e\u73b0\u63a5\u53e3\u7684 Apex \u7c7b\u65f6\uff0c\u5b83\u5c06\u5728 Flow Builder \u4e2d\u4f5c\u4e3a\u65e7\u7248 Apex \u64cd\u4f5c\u63d0\u4f9b\u3002<samp>Process.Plugin<\/samp><\/p>\n\n\n\n<p><samp>Process.Plugin<\/samp>\u5177\u6709\u8fd9\u4e9b\u9876\u7ea7\u7c7b\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><samp>Process.PluginRequest<\/samp>\u00a0\u4ece\u4ee5\u4e0b\u7c7b\u4f20\u9012\u8f93\u5165\u53c2\u6570\uff1a \u5b9e\u73b0\u6d41\u7684\u63a5\u53e3\u3002<\/li>\n\n\n\n<li><samp>Process.PluginResult<\/samp>\u00a0\u4ece\u4ee5\u4e0b\u7c7b\u8fd4\u56de\u8f93\u51fa\u53c2\u6570\uff1a \u5b9e\u73b0\u6d41\u7684\u63a5\u53e3\u3002<\/li>\n\n\n\n<li><samp>Process.PluginDescribeResult<\/samp>\u00a0\u5c06\u8f93\u5165\u53c2\u6570\u4ece\u6d41\u4f20\u9012\u7ed9 \u5b9e\u73b0\u63a5\u53e3\u7684\u7c7b\u3002\u6b64\u7c7b\u786e\u5b9a\u8f93\u5165\u53c2\u6570\u548c \u63d2\u4ef6\u6240\u9700\u7684\u8f93\u51fa\u53c2\u6570\u3002<samp>Process.PluginResult<\/samp><\/li>\n<\/ul>\n\n\n\n<p>\u7f16\u5199 Apex \u5355\u5143\u6d4b\u8bd5\u65f6\uff0c\u5b9e\u4f8b\u5316\u4e00\u4e2a\u7c7b\u5e76\u5c06\u5176\u4f20\u9012\u5230\u63a5\u53e3\u65b9\u6cd5\u4e2d\u3002\u4f20\u5165\u7cfb\u7edf\u53c2\u6570 \u9700\u8981\uff0c\u521b\u5efa\u4e00\u4e2a\u5730\u56fe\u5e76\u5728\u6784\u9020\u51fd\u6570\u4e2d\u4f7f\u7528\u5b83\u3002\u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1\u4f7f\u7528 Process.PluginRequest \u7c7b\u3002<samp>invoke<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b9e\u73b0 Process.Plugin<\/strong>\u00a0\u63a5\u53e3\u662f\u4e00\u4e2a\u5185\u7f6e\u63a5\u53e3<br>\uff0c\u5141\u8bb8\u60a8\u5728\u7ec4\u7ec7\u548c\u6307\u5b9a\u6d41\u4e4b\u95f4\u4f20\u9012\u6570\u636e\u3002<samp>Process.Plugin<\/samp><\/li>\n\n\n\n<li><strong>\u4f7f\u7528 Process.PluginRequest<\/strong>\u00a0\u7c7b \u8be5\u7c7b\u5c06\u5b9e\u73b0\u63a5\u53e3\u7684\u7c7b<br>\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u4f20\u9012\u5230\u6d41\u3002<samp>Process.PluginRequest<\/samp><\/li>\n\n\n\n<li><strong>\u4f7f\u7528 Process.PluginResult<\/strong>\u00a0\u7c7b \u8be5\u7c7b\u4ece\u5b9e\u73b0\u6d41\u63a5\u53e3\u7684\u7c7b<br>\u8fd4\u56de\u8f93\u51fa\u53c2\u6570\u3002<samp>Process.PluginResult<\/samp><\/li>\n\n\n\n<li>\u4f7f\u7528\u00a0<strong>Process.PluginDescribeResult \u7c7b<\/strong><br>\u4f7f\u7528\u63a5\u53e3\u65b9\u6cd5\u52a8\u6001\u63d0\u4f9b\u6d41\u7684\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u3002\u6b64\u65b9\u6cd5\u8fd4\u56de\u7c7b\u3002<samp>Process.PlugindescribeProcess.PluginDescribeResult<\/samp><\/li>\n\n\n\n<li><strong>Process.Plugin \u6570\u636e\u7c7b\u578b\u8f6c\u6362<\/strong><br>\u4e86\u89e3\u5982\u4f55\u5728 Apex \u548c\u8fd4\u56de\u7ed9 .\u4f8b\u5982\uff0c\u6d41\u4e2d\u7684\u6587\u672c\u6570\u636e\u5c06\u8f6c\u6362\u4e3a Apex \u4e2d\u7684\u5b57\u7b26\u4e32\u6570\u636e\u3002<samp>Process.Plugin<\/samp><\/li>\n\n\n\n<li><strong>\u6f5c\u5728\u5ba2\u6237\u8f6c\u6362<\/strong><br>\u7684\u793a\u4f8b Process.Plugin \u5b9e\u73b0 \u5728\u6b64\u793a\u4f8b\u4e2d\uff0cApex \u7c7b\u5b9e\u73b0\u63a5\u53e3\u5e76\u5c06\u6f5c\u5728\u987e\u5ba2\u8f6c\u6362\u4e3a\u5ba2\u6237\u3001\u8054\u7cfb\u4eba\u548c\uff08\u53ef\u9009\uff09\u5546\u673a\u3002\u8fd8\u5305\u62ec\u63d2\u4ef6\u7684\u6d4b\u8bd5\u65b9\u6cd5\u3002\u53ef\u4ee5\u901a\u8fc7\u65e7\u7248 Apex \u64cd\u4f5c\u4ece\u6d41\u4e2d\u8c03\u7528\u6b64\u5b9e\u73b0\u3002<samp>Process.Plugin<\/samp><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u5b9e\u73b0&nbsp;Process.Plugin\u63a5\u53e3<\/h1>\n\n\n\n<p><samp>Process.Plugin<\/samp>\u662f\u4e00\u4e2a\u5185\u7f6e\u63a5\u53e3\uff0c \u5141\u8bb8\u60a8\u5728\u7ec4\u7ec7\u548c\u6307\u5b9a\u6d41\u4e4b\u95f4\u4f20\u9012\u6570\u636e\u3002<\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5b9e\u73b0\u63a5\u53e3\u7684\u7c7b\u5fc5\u987b\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u3002<samp>Process.Plugin<\/samp><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u540d\u5b57<\/th><th>\u53c2\u6570<\/th><th>\u8fd4\u56de\u7c7b\u578b<\/th><th>\u63cf\u8ff0<\/th><\/tr><\/thead><tbody><tr><td><samp>describe<\/samp><\/td><td><\/td><td><samp>Process.PluginDescribeResult<\/samp><\/td><td>\u8fd4\u56de\u63cf\u8ff0\u8fd9\u4e00\u70b9\u7684\u5bf9\u8c61 \u65b9\u6cd5\u8c03\u7528\u3002<samp>Process.PluginDescribeResult<\/samp><\/td><\/tr><tr><td><samp>invoke<\/samp><\/td><td><samp>Process.PluginRequest<\/samp><\/td><td><samp>Process.PluginResult<\/samp><\/td><td>\u5f53\u5b9e\u73b0 \u63a5\u53e3\u88ab\u5b9e\u4f8b\u5316\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u793a\u4f8b\u5b9e\u73b0<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>global class flowChat implements Process.Plugin { \n\n\/\/ The main method to be implemented. The Flow calls this at runtime.\nglobal Process.PluginResult invoke(Process.PluginRequest request) { \n        \/\/ Get the subject of the Chatter post from the flow\n        String subject = (String) request.inputParameters.get('subject');\n        \n        \/\/ Use the Chatter APIs to post it to the current user's feed\n        FeedItem fItem = new FeedItem(); \n        fItem.ParentId = UserInfo.getUserId(); \n        fItem.Body = 'Flow Update: ' + subject; \n        insert fItem; \n\n        \/\/ return to Flow\n        Map&lt;String,Object&gt; result = new Map&lt;String,Object&gt;(); \n        return new Process.PluginResult(result); \n    } \n\n    \/\/ Returns the describe information for the interface\n    global Process.PluginDescribeResult describe() { \n        Process.PluginDescribeResult result = new Process.PluginDescribeResult(); \n        result.Name = 'flowchatplugin';\n        result.Tag = 'chat';\n        result.inputParameters = new \n           List&lt;Process.PluginDescribeResult.InputParameter&gt;{ \n               new Process.PluginDescribeResult.InputParameter('subject', \n               Process.PluginDescribeResult.ParameterType.STRING, true) \n            }; \n        result.outputParameters = new \n           List&lt;Process.PluginDescribeResult.OutputParameter&gt;{ }; \n        return result; \n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u6d4b\u8bd5\u7c7b<\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u4e0a\u8ff0\u7c7b\u7684\u6d4b\u8bd5\u7c7b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@isTest\nprivate class flowChatTest {\n\n    static testmethod void flowChatTests() {\n      \n        flowChat plugin = new flowChat();\n        Map&lt;String,Object&gt; inputParams = new Map&lt;String,Object&gt;();\n\n        string feedSubject = 'Flow is alive';\n        InputParams.put('subject', feedSubject);\n\n        Process.PluginRequest request = new Process.PluginRequest(inputParams);           \n        \n        plugin.invoke(request);\n    } \n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528&nbsp;Process.PluginRequest&nbsp;\u7c7b<\/h1>\n\n\n\n<p>\u8be5\u7c7b\u4f20\u9012\u8f93\u5165 \u5b9e\u73b0\u6d41\u63a5\u53e3\u7684\u7c7b\u4e2d\u7684\u53c2\u6570\u3002<\/p>\n\n\n\n<p><samp>Process.PluginRequest<\/samp><\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u6b64\u7c7b\u6ca1\u6709\u65b9\u6cd5\u3002\u6784\u9020 \u51fd\u6570 \u7b7e\u540d\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginRequest (Map&lt;String,Object&gt;)<\/code><\/pre>\n\n\n\n<p>\u4e0b\u9762\u662f\u4f7f\u7528\u4e00\u4e2a\u8f93\u5165\u53c2\u6570\u5b9e\u4f8b\u5316\u7c7b\u7684\u793a\u4f8b\u3002<samp>Process.PluginRequest<\/samp><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Map&lt;String,Object&gt; inputParams = new Map&lt;String,Object&gt;();\n        string feedSubject = 'Flow is alive';\n        InputParams.put('subject', feedSubject);\n        Process.PluginRequest request = new Process.PluginRequest(inputParams);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ee3\u7801\u793a\u4f8b<\/h2>\n\n\n\n<p>\u5728\u6b64\u793a\u4f8b\u4e2d\uff0c\u4ee3\u7801\u4ece\u6d41\u7a0b\u4e2d\u8fd4\u56de Chatter \u5e16\u5b50\u7684\u4e3b\u9898\uff0c\u5e76\u53d1\u5e03 \u5b83\u5230\u5f53\u524d\u7528\u6237\u7684 \u9972\u6599\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>global Process.PluginResult invoke(Process.PluginRequest request) { \n        \/\/ Get the subject of the Chatter post from the flow\n        String subject = (String) request.inputParameters.get('subject');\n        \n        \/\/ Use the Chatter APIs to post it to the current user's feed\n        FeedPost fpost = new FeedPost(); \n        fpost.ParentId = UserInfo.getUserId(); \n        fpost.Body = 'Flow Update: ' + subject; \n        insert fpost; \n\n        \/\/ return to Flow\n        Map&lt;String,Object&gt; result = new Map&lt;String,Object&gt;(); \n        return new Process.PluginResult(result); \n    } \n\n    \/\/ describes the interface \n    global Process.PluginDescribeResult describe() { \n        Process.PluginDescribeResult result = new Process.PluginDescribeResult(); \n        result.inputParameters = new List&lt;Process.PluginDescribeResult.InputParameter&gt;{ \n            new Process.PluginDescribeResult.InputParameter('subject', \n            Process.PluginDescribeResult.ParameterType.STRING, true) \n            }; \n        result.outputParameters = new List&lt;Process.PluginDescribeResult.OutputParameter&gt;{ }; \n        return result; \n    }\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528&nbsp;Process.PluginResult&nbsp;\u7c7b<\/h1>\n\n\n\n<p>\u8be5\u7c7b\u8fd4\u56de \u4ece\u5b9e\u73b0\u63a5\u53e3\u7684\u7c7b\u8f93\u51fa\u53c2\u6570\u5230 \u6d41\u3002<\/p>\n\n\n\n<p><samp>Process.PluginResult<\/samp><\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u683c\u5f0f\u4e4b\u4e00\u5b9e\u4f8b\u5316\u7c7b\uff1a<\/p>\n\n\n\n<p><samp>Process.PluginResult<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><samp>Process.PluginResult (Map&lt;String,Object&gt;)<\/samp><\/li>\n\n\n\n<li><samp>Process.PluginResult (String,&nbsp;Object)<\/samp><\/li>\n<\/ul>\n\n\n\n<p>\u5f53\u60a8\u6709\u591a\u4e2a\u7ed3\u679c\u6216\u4e0d\u77e5\u9053\u6709\u591a\u5c11\u4e2a\u7ed3\u679c\u65f6\uff0c\u8bf7\u4f7f\u7528\u5730\u56fe \u5c06\u8fd4\u56de\u7ed3\u679c\u3002\u4e0b\u9762\u662f\u5b9e\u4f8b\u5316\u7c7b\u7684\u793a\u4f8b\u3002<\/p>\n\n\n\n<p><samp>Process.PluginResult<\/samp><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>string url = 'https:\/\/docs.google.com\/document\/edit?id=abc';\n        String status = 'Success';\n        Map&lt;String,Object&gt; result = new Map&lt;String,Object&gt;();\n        result.put('url', url);\n        result.put('status',status);\n        new Process.PluginResult(result);<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528&nbsp;Process.PluginDescribeResult&nbsp;\u7c7b<\/h1>\n\n\n\n<p>\u4f7f\u7528 interface \u65b9\u6cd5\u52a8\u6001\u63d0\u4f9b\u8f93\u5165\u548c \u6d41\u7684\u8f93\u51fa\u53c2\u6570\u3002\u6b64\u65b9\u6cd5\u8fd4\u56de\u7c7b\u3002<\/p>\n\n\n\n<p><samp>Process.Plugin<\/samp><samp>describe<\/samp><samp>Process.PluginDescribeResult<\/samp><\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u8be5\u7c7b\u6ca1\u6709 \u652f\u6301\u4ee5\u4e0b\u529f\u80fd\u3002<\/p>\n\n\n\n<p><samp>Process.PluginDescribeResult<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u67e5\u8be2<\/li>\n\n\n\n<li>\u6570\u636e\u4fee\u6539<\/li>\n\n\n\n<li>\u7535\u5b50\u90ae\u4ef6<\/li>\n\n\n\n<li>\u9876\u70b9\u5d4c\u5957\u6807\u6ce8<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Process.PluginDescribeResult&nbsp;\u7c7b\u548c \u5b50\u7c7b\u5c5e\u6027<\/h2>\n\n\n\n<p>\u4e0b\u9762\u662f\u8be5\u7c7b\u7684\u6784\u9020\u51fd\u6570\u3002<\/p>\n\n\n\n<p><samp>Process.PluginDescribeResult<\/samp><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult <em>classname<\/em> = new Process.PluginDescribeResult();<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PluginDescribeResult \u7c7b\u5c5e\u6027<\/li>\n\n\n\n<li>PluginDescribeResult.InputParameter \u7c7b\u5c5e\u6027<\/li>\n\n\n\n<li>PluginDescribeResult.OutputParameter \u7c7b\u5c5e\u6027<\/li>\n<\/ul>\n\n\n\n<p>\u4e0b\u9762\u662f\u8be5\u7c7b\u7684\u6784\u9020\u51fd\u6570\u3002<\/p>\n\n\n\n<p><samp>Process.PluginDescribeResult.InputParameter<\/samp><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult.InputParameter <em>ip<\/em> = new \n    Process.PluginDescribeResult.InputParameter(<em>Name<\/em>,<em>Optional_description_string<\/em>, \n      Process.PluginDescribeResult.ParameterType.<em>Enum<\/em>, <em>Boolean_required<\/em>);<\/code><\/pre>\n\n\n\n<p>\u4e0b\u9762\u662f\u8be5\u7c7b\u7684\u6784\u9020\u51fd\u6570\u3002<\/p>\n\n\n\n<p><samp>Process.PluginDescribeResult.OutputParameter<\/samp><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult.OutputParameter <em>op<\/em> = new \n    new Process.PluginDescribeResult.OutputParameter(<em>Name<\/em>,<em>Optional description string<\/em>, \n       Process.PluginDescribeResult.ParameterType.<em>Enum<\/em>);<\/code><\/pre>\n\n\n\n<p>\u8981\u4f7f\u7528\u8be5\u7c7b\uff0c \u521b\u5efa\u8fd9\u4e9b\u5b50\u7c7b\u7684\u5b9e\u4f8b\u3002<\/p>\n\n\n\n<p><samp>Process.PluginDescribeResult<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><samp>Process.PluginDescribeResult.InputParameter<\/samp><\/li>\n\n\n\n<li><samp>Process.PluginDescribeResult.OutputParameter<\/samp><\/li>\n<\/ul>\n\n\n\n<p><samp>Process.PluginDescribeResult.InputParameter<\/samp>\u662f\u4e00\u4e2a \u8f93\u5165\u53c2\u6570\u5217\u8868\uff0c\u5e76\u5177\u6709\u4ee5\u4e0b\u5185\u5bb9 \u683c\u5f0f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult.inputParameters = \n      new List&lt;Process.PluginDescribeResult.InputParameter&gt;{ \n         new Process.PluginDescribeResult.InputParameter(<em>Name<\/em>,<em>Optional_description_string<\/em>, \n      Process.PluginDescribeResult.ParameterType.<em>Enum<\/em>, <em>Boolean_required<\/em>)<\/code><\/pre>\n\n\n\n<p>\u4e3a \u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult result = new Process.PluginDescribeResult(); \nresult.setDescription('this plugin gets the name of a user');\nresult.setTag ('userinfo');\nresult.inputParameters = new List&lt;Process.PluginDescribeResult.InputParameter&gt;{ \n    new Process.PluginDescribeResult.InputParameter('FullName', \n       Process.PluginDescribeResult.ParameterType.STRING, true),\n    new Process.PluginDescribeResult.InputParameter('DOB', \n       Process.PluginDescribeResult.ParameterType.DATE, true),\n    }; <\/code><\/pre>\n\n\n\n<p><samp>Process.PluginDescribeResult.OutputParameter<\/samp>\u662f\u4e00\u4e2a \u8f93\u51fa\u53c2\u6570\u5217\u8868\uff0c\u5e76\u5177\u6709\u4ee5\u4e0b\u5185\u5bb9 \u683c\u5f0f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult.outputParameters = new List&lt;Process.PluginDescribeResult.OutputParameter&gt;{ \n    new Process.PluginDescribeResult.OutputParameter(<em>Name<\/em>,<em>Optional description string<\/em>, \n       Process.PluginDescribeResult.ParameterType.<em>Enum<\/em>)<\/code><\/pre>\n\n\n\n<p>\u4e3a \u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult result = new Process.PluginDescribeResult(); \nresult.setDescription('this plugin gets the name of a user');\nresult.setTag ('userinfo');\nresult.outputParameters = new List&lt;Process.PluginDescribeResult.OutputParameter&gt;{\n    new Process.PluginDescribeResult.OutputParameter('URL', \n        Process.PluginDescribeResult.ParameterType.STRING),<\/code><\/pre>\n\n\n\n<p>\u4e24\u4e2a\u7c7b\u90fd\u91c7\u7528\u679a\u4e3e\u3002\u6709\u6548\u503c\u4e3a\uff1a<\/p>\n\n\n\n<p><samp>Process.PluginDescribeResult.ParameterType<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5e03\u5c14<\/li>\n\n\n\n<li>\u65e5\u671f<\/li>\n\n\n\n<li>\u65e5\u671f\u65f6\u95f4<\/li>\n\n\n\n<li>\u5341\u8fdb\u5236<\/li>\n\n\n\n<li>\u53cc<\/li>\n\n\n\n<li>\u6d6e<\/li>\n\n\n\n<li>\u7f16\u53f7<\/li>\n\n\n\n<li>\u6574\u6570<\/li>\n\n\n\n<li>\u957f<\/li>\n\n\n\n<li>\u5b57\u7b26\u4e32<\/li>\n<\/ul>\n\n\n\n<p>\u4e3a \u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Process.PluginDescribeResult result = new Process.PluginDescribeResult(); \n        result.outputParameters = new List&lt;Process.PluginDescribeResult.OutputParameter&gt;{\n            new Process.PluginDescribeResult.OutputParameter('URL', \n            Process.PluginDescribeResult.ParameterType.STRING, true),\n            new Process.PluginDescribeResult.OutputParameter('STATUS', \n            Process.PluginDescribeResult.ParameterType.STRING),\n            };<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Process.Plugin&nbsp;\u6570\u636e\u7c7b\u578b \u8f6c\u6362<\/h1>\n\n\n\n<p>\u4e86\u89e3\u5982\u4f55\u5728 Apex \u548c\u8fd4\u56de\u7ed9 .\u4f8b\u5982\uff0c\u6d41\u4e2d\u7684\u6587\u672c\u6570\u636e\u4f1a\u8f6c\u6362 \u5728 Apex \u4e2d\u5b57\u7b26\u4e32\u6570\u636e\u3002<\/p>\n\n\n\n<p><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u6d41\u6570\u636e\u7c7b\u578b<\/th><th>\u6570\u636e\u7c7b\u578b<\/th><\/tr><\/thead><tbody><tr><td>\u6570<\/td><td>\u5341\u8fdb\u5236<\/td><\/tr><tr><td>\u65e5\u671f<\/td><td>\u65e5\u671f\u65f6\u95f4\/\u65e5\u671f<\/td><\/tr><tr><td>\u65e5\u671f\u65f6\u95f4<\/td><td>\u65e5\u671f\u65f6\u95f4\/\u65e5\u671f<\/td><\/tr><tr><td>\u5e03\u5c14<\/td><td>\u4ec5\u5177\u6709 1 \u6216 0 \u503c\u7684\u5e03\u5c14\u503c\u548c\u6570\u5b57\u503c<\/td><\/tr><tr><td>\u53d1\u77ed\u4fe1<\/td><td>\u5b57\u7b26\u4e32<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Lead \u7684\u793a\u4f8b Process.Plugin \u5b9e\u73b0 \u8f6c\u6362<\/h1>\n\n\n\n<p>\u5728\u6b64\u793a\u4f8b\u4e2d\uff0cApex \u7c7b\u5b9e\u73b0 \u63a5\u53e3\u5e76\u8f6c\u6362\u6f5c\u5728\u5ba2\u6237 \u8fdb\u5165\u5ba2\u6237\u3001\u8054\u7cfb\u4eba\u548c\uff08\u53ef\u9009\uff09\u5546\u673a\u3002\u63d2\u4ef6\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5982\u4e0b \u4e5f\u5305\u62ec\u5728\u5185\u3002\u53ef\u4ee5\u901a\u8fc7\u65e7\u7248 Apex \u64cd\u4f5c\u4ece\u6d41\u4e2d\u8c03\u7528\u6b64\u5b9e\u73b0\u3002<\/p>\n\n\n\n<p><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<p>\u63d0\u793a<\/p>\n\n\n\n<p>\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u6ce8\u89e3\u800c\u4e0d\u662f\u63a5\u53e3\u3002<samp>@InvocableMethod<\/samp><samp>Process.Plugin<\/samp><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u63a5\u53e3\u4e0d\u652f\u6301 Blob\u3001Collection\u3001sObject \u548c Time \u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u5b83 \u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3002\u5728\u7c7b\u4e0a\u5b9e\u73b0\u63a5\u53e3\u540e\uff0c\u7c7b \u53ea\u80fd\u4ece\u6d41\u4e2d\u5f15\u7528\u3002<\/li>\n\n\n\n<li>\u6ce8\u91ca\u652f\u6301\u6240\u6709\u6570\u636e\u7c7b\u578b\u548c\u6279\u91cf\u64cd\u4f5c\u3002\u4e00\u65e6\u60a8\u5b9e\u73b0\u4e86 \u6ce8\u89e3\uff0c\u53ef\u4ee5\u4ece\u6d41\u3001\u6d41\u7a0b\u548c\u81ea\u5b9a\u4e49\u4e2d\u5f15\u7528\u8be5\u7c7b \u53ef\u8c03\u7528\u64cd\u4f5c REST API \u7aef\u70b9\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Converts a lead as an action in a flow.\nglobal class VWFConvertLead implements Process.Plugin {\n    \/\/ This method runs when called by a flow's legacy Apex action.\n    global Process.PluginResult invoke(\n        Process.PluginRequest request) {\n            \n        \/\/ Set up variables to store input parameters from \n        \/\/ the flow.\n        String leadID = (String) request.inputParameters.get(\n            'LeadID');\n        String contactID = (String) \n            request.inputParameters.get('ContactID');\n        String accountID = (String) \n            request.inputParameters.get('AccountID');\n        String convertedStatus = (String) \n            request.inputParameters.get('ConvertedStatus');\n        Boolean overWriteLeadSource = (Boolean) \n            request.inputParameters.get('OverwriteLeadSource');\n        Boolean createOpportunity = (Boolean) \n            request.inputParameters.get('CreateOpportunity');\n        String opportunityName = (String) \n            request.inputParameters.get('ContactID');\n        Boolean sendEmailToOwner = (Boolean) \n            request.inputParameters.get('SendEmailToOwner');   \n        \n        \/\/ Set the default handling for booleans. \n        if (overWriteLeadSource == null) \n            overWriteLeadSource = false;\n        if (createOpportunity == null) \n            createOpportunity = true;\n        if (sendEmailToOwner == null) \n            sendEmailToOwner = false;\n        \n        \/\/ Convert the lead by passing it to a helper method.\n        Map&lt;String,Object&gt; result = new Map&lt;String,Object&gt;();\n        result = convertLead(leadID, contactID, accountID, \n            convertedStatus, overWriteLeadSource, \n            createOpportunity, opportunityName, \n            sendEmailToOwner);\n \n        return new Process.PluginResult(result); \n    }\n    \n    \/\/ This method describes the plug-in and its inputs from\n    \/\/ and outputs to the flow.\n    \/\/ Implementing this method makes the class available \n    \/\/ in Flow Builder as a legacy Apex action.\n    global Process.PluginDescribeResult describe() {\n        \/\/ Set up plugin metadata\n        Process.PluginDescribeResult result = new \n            Process.PluginDescribeResult();\n        result.description = \n            'The LeadConvert Flow Plug-in converts a lead into ' + \n            'an account, a contact, and ' + \n            '(optionally)an opportunity.';\n        result.tag = 'Lead Management';\n        \n        \/\/ Create a list that stores both mandatory and optional \n        \/\/ input parameters from the flow.\n        \/\/ NOTE: Only primitive types (STRING, NUMBER, etc.) are \n        \/\/ supported. Collections aren't supported.\n        result.inputParameters = new \n            List&lt;Process.PluginDescribeResult.InputParameter&gt;{\n            \/\/ Lead ID (mandatory)\n            new Process.PluginDescribeResult.InputParameter(\n                'LeadID', \n                Process.PluginDescribeResult.ParameterType.STRING, \n                true),\n            \/\/ Account Id (optional)\n            new Process.PluginDescribeResult.InputParameter(\n                'AccountID', \n                Process.PluginDescribeResult.ParameterType.STRING, \n                false),\n            \/\/ Contact ID (optional)\n            new Process.PluginDescribeResult.InputParameter(\n                'ContactID', \n                Process.PluginDescribeResult.ParameterType.STRING, \n                false),            \n            \/\/ Status to use once converted\n            new Process.PluginDescribeResult.InputParameter(\n                'ConvertedStatus', \n                Process.PluginDescribeResult.ParameterType.STRING, \n                true),\n            new Process.PluginDescribeResult.InputParameter(\n                'OpportunityName', \n                Process.PluginDescribeResult.ParameterType.STRING, \n                false),\n            new Process.PluginDescribeResult.InputParameter(\n                'OverwriteLeadSource', \n                Process.PluginDescribeResult.ParameterType.BOOLEAN, \n                false),\n            new Process.PluginDescribeResult.InputParameter(\n                'CreateOpportunity', \n                Process.PluginDescribeResult.ParameterType.BOOLEAN, \n                false),\n            new Process.PluginDescribeResult.InputParameter(\n                'SendEmailToOwner', \n                Process.PluginDescribeResult.ParameterType.BOOLEAN, \n                false)                                                   \n        };\n\n        \/\/ Create a list that stores output parameters sent \n        \/\/ to the flow.\n        result.outputParameters = new List&lt;\n            Process.PluginDescribeResult.OutputParameter&gt;{\n            \/\/ Account ID of the converted lead\n            new Process.PluginDescribeResult.OutputParameter(\n                'AccountID', \n                Process.PluginDescribeResult.ParameterType.STRING),\n            \/\/ Contact ID of the converted lead\n            new Process.PluginDescribeResult.OutputParameter(\n                'ContactID', \n                Process.PluginDescribeResult.ParameterType.STRING),\n            \/\/ Opportunity ID of the converted lead\n            new Process.PluginDescribeResult.OutputParameter(\n                'OpportunityID', \n                Process.PluginDescribeResult.ParameterType.STRING)                \n        };\n\n        return result;\n    }\n        \n    \/**\n     * Implementation of the LeadConvert plug-in.\n     * Converts a given lead with several options:\n     * leadID - ID of the lead to convert\n     * contactID - \n     * accountID - ID of the Account to attach the converted \n     *  Lead\/Contact\/Opportunity to.\n     * convertedStatus - \n     * overWriteLeadSource - \n     * createOpportunity - true if you want to create a new \n     *  Opportunity upon conversion\n     * opportunityName - Name of the new Opportunity.\n     * sendEmailtoOwner - true if you are changing owners upon \n     *  conversion and want to notify the new Opportunity owner.\n     *\n     * returns: a Map with the following output:\n     * AccountID - ID of the Account created or attached \n     *  to upon conversion.\n     * ContactID - ID of the Contact created or attached \n     *  to upon conversion.\n     * OpportunityID - ID of the Opportunity created \n     *  upon conversion.\n     *\/\n    public Map&lt;String,String&gt; convertLead (\n                               String leadID,\n                               String contactID,\n                               String accountID,\n                               String convertedStatus,\n                               Boolean overWriteLeadSource,\n                               Boolean createOpportunity,\n                               String opportunityName,\n                               Boolean sendEmailToOwner\n        ) {\n        Map&lt;String,String&gt; result = new Map&lt;String,String&gt;();\n                                \n        if (leadId == null) throw new ConvertLeadPluginException(\n            'Lead Id cannot be null');\n        \n        \/\/ check for multiple leads with the same ID\n        Lead&#91;] leads = &#91;Select Id, FirstName, LastName, Company \n            From Lead where Id = :leadID];\n        if (leads.size() &gt; 0) {\n            Lead l = leads&#91;0];\n            \/\/ CheckAccount = true, checkContact = false\n            if (accountID == null &amp;&amp; l.Company != null) {\n                Account&#91;] accounts = &#91;Select Id, Name FROM Account \n                    where Name = :l.Company LIMIT 1];\n                if (accounts.size() &gt; 0) {\n                    accountId = accounts&#91;0].id;\n                }\n            }\n            \n            \/\/ Perform the lead conversion.\n            Database.LeadConvert lc = new Database.LeadConvert();\n            lc.setLeadId(leadID);\n            lc.setOverwriteLeadSource(overWriteLeadSource);\n            lc.setDoNotCreateOpportunity(!createOpportunity);\n            lc.setConvertedStatus(convertedStatus);\n            if (sendEmailToOwner != null) lc.setSendNotificationEmail(\n                sendEmailToOwner);\n            if (accountId != null &amp;&amp; accountId.length() &gt; 0) \n                lc.setAccountId(accountId);\n            if (contactId != null &amp;&amp; contactId.length() &gt; 0) \n                lc.setContactId(contactId);\n            if (createOpportunity) {\n                lc.setOpportunityName(opportunityName);\n            }\n            \n            Database.LeadConvertResult lcr = Database.convertLead(\n                lc, true);\n            if (lcr.isSuccess()) {\n                result.put('AccountID', lcr.getAccountId());\n                result.put('ContactID', lcr.getContactId());\n                if (createOpportunity) {\n                    result.put('OpportunityID', \n                        lcr.getOpportunityId());\n                }\n            } else {\n                String error = lcr.getErrors()&#91;0].getMessage();\n                throw new ConvertLeadPluginException(error);\n            }\n        } else { \n            throw new ConvertLeadPluginException(\n                'No leads found with Id : \"' + leadId + '\"');\n        }\n        return result;\n    }\n        \n    \/\/ Utility exception class\n    class ConvertLeadPluginException extends Exception {}\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Test class for the lead convert Apex plug-in.\n@isTest\nprivate class VWFConvertLeadTest {\n    static testMethod void basicTest() {\n        \/\/ Create test lead\n        Lead testLead = new Lead(\n           Company='Test Lead',FirstName='John',LastName='Doe');\n        insert testLead;\n    \n        LeadStatus convertStatus = \n           &#91;Select Id, MasterLabel from LeadStatus \n           where IsConverted=true limit 1]; \n        \n        \/\/ Create test conversion\n        VWFConvertLead aLeadPlugin = new VWFConvertLead();\n        Map&lt;String,Object&gt; inputParams = new Map&lt;String,Object&gt;();\n        Map&lt;String,Object&gt; outputParams = new Map&lt;String,Object&gt;();\n\n        inputParams.put('LeadID',testLead.ID);\n        inputParams.put('ConvertedStatus', \n           convertStatus.MasterLabel);\n\n        Process.PluginRequest request = new \n           Process.PluginRequest(inputParams);\n        Process.PluginResult result;\n        result = aLeadPlugin.invoke(request);\n        \n        Lead aLead = &#91;select name, id, isConverted \n                       from Lead where id = :testLead.ID];\n        System.Assert(aLead.isConverted);\n        \n    }\n\n     \/*\n      * This tests lead conversion with \n      * the Account ID specified.\n      *\/\n    static testMethod void basicTestwithAccount() {\n\n        \/\/ Create test lead\n        Lead testLead = new Lead(\n            Company='Test Lead',FirstName='John',LastName='Doe');\n        insert testLead;\n        \n        Account testAccount = new Account(name='Test Account');\n        insert testAccount;\n    \n           \/\/ System.debug('ACCOUNT BEFORE' + testAccount.ID);\n\n        LeadStatus convertStatus = &#91;Select Id, MasterLabel \n                    from LeadStatus where IsConverted=true limit 1]; \n        \n        \/\/ Create test conversion\n        VWFConvertLead aLeadPlugin = new VWFConvertLead();\n        Map&lt;String,Object&gt; inputParams = new Map&lt;String,Object&gt;();\n        Map&lt;String,Object&gt; outputParams = new Map&lt;String,Object&gt;();\n\n        inputParams.put('LeadID',testLead.ID);\n        inputParams.put('AccountID',testAccount.ID);\n        inputParams.put('ConvertedStatus',\n            convertStatus.MasterLabel);\n\n        Process.PluginRequest request = new \n            Process.PluginRequest(inputParams);\n        Process.PluginResult result;\n        result = aLeadPlugin.invoke(request);\n        \n        Lead aLead = \n            &#91;select name, id, isConverted, convertedAccountID \n             from Lead where id = :testLead.ID];\n        System.Assert(aLead.isConverted);\n        \/\/System.debug('ACCOUNT AFTER' + aLead.convertedAccountID);\n        System.AssertEquals(testAccount.ID, aLead.convertedAccountID);\n    }\n\n    \/*\n     * This tests lead conversion with the Account ID specified.\n    *\/\n    static testMethod void basicTestwithAccounts() {\n\n        \/\/ Create test lead\n        Lead testLead = new Lead(\n            Company='Test Lead',FirstName='John',LastName='Doe');\n        insert testLead;\n        \n        Account testAccount1 = new Account(name='Test Lead');\n        insert testAccount1;\n        Account testAccount2 = new Account(name='Test Lead');\n        insert testAccount2;\n\n           \/\/ System.debug('ACCOUNT BEFORE' + testAccount.ID);\n\n        LeadStatus convertStatus = &#91;Select Id, MasterLabel \n            from LeadStatus where IsConverted=true limit 1]; \n        \n        \/\/ Create test conversion\n        VWFConvertLead aLeadPlugin = new VWFConvertLead();\n        Map&lt;String,Object&gt; inputParams = new Map&lt;String,Object&gt;();\n        Map&lt;String,Object&gt; outputParams = new Map&lt;String,Object&gt;();\n\n        inputParams.put('LeadID',testLead.ID);\n        inputParams.put('ConvertedStatus',\n            convertStatus.MasterLabel);\n\n        Process.PluginRequest request = new \n            Process.PluginRequest(inputParams);\n        Process.PluginResult result;\n        result = aLeadPlugin.invoke(request);\n        \n        Lead aLead = \n            &#91;select name, id, isConverted, convertedAccountID \n            from Lead where id = :testLead.ID];\n        System.Assert(aLead.isConverted);\n    }\n\n\n     \/*\n      * -ve Test\n      *\/    \n    static testMethod void errorTest() {\n\n        \/\/ Create test lead\n        \/\/ Lead testLead = new Lead(Company='Test Lead',\n        \/\/   FirstName='John',LastName='Doe');\n        LeadStatus convertStatus = &#91;Select Id, MasterLabel \n            from LeadStatus where IsConverted=true limit 1]; \n        \n        \/\/ Create test conversion\n        VWFConvertLead aLeadPlugin = new VWFConvertLead();\n        Map&lt;String,Object&gt; inputParams = new Map&lt;String,Object&gt;();\n        Map&lt;String,Object&gt; outputParams = new Map&lt;String,Object&gt;();\n        inputParams.put('LeadID','00Q7XXXXxxxxxxx');\n        inputParams.put('ConvertedStatus',convertStatus.MasterLabel);\n\n        Process.PluginRequest request = new \n            Process.PluginRequest(inputParams);\n        Process.PluginResult result;\n        try {\n            result = aLeadPlugin.invoke(request);    \n        }\n        catch (Exception e) {\n          System.debug('EXCEPTION' + e);\n          System.AssertEquals(1,1);\n        }\n        \n    }\n    \n    \n     \/*\n      * This tests the describe() method\n      *\/ \n    static testMethod void describeTest() {\n\n        VWFConvertLead aLeadPlugin = \n            new VWFConvertLead();\n        Process.PluginDescribeResult result = \n            aLeadPlugin.describe();\n        \n        System.AssertEquals(\n            result.inputParameters.size(), 8);\n        System.AssertEquals(\n            result.OutputParameters.size(), 3);\n        \n     }\n\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002<\/p>\n","protected":false},"author":1,"featured_media":3730,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[199],"tags":[215],"class_list":["post-3729","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apex-","tag-flow"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Flow - \u767d\u767d\u968f\u7b14<\/title>\n<meta name=\"description\" content=\"Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.ponybai.com\/?p=3729\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flow - \u767d\u767d\u968f\u7b14\" \/>\n<meta property=\"og:description\" content=\"Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.ponybai.com\/?p=3729\" \/>\n<meta property=\"og:site_name\" content=\"\u767d\u767d\u968f\u7b14\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-15T08:50:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-25T08:56:01+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.ponybai.com\/wp-content\/uploads\/2023\/11\/flow.png\" \/>\n\t<meta property=\"og:image:width\" content=\"867\" \/>\n\t<meta property=\"og:image:height\" content=\"327\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"ponybai\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"ponybai\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\/\/www.ponybai.com\/?p=3729#article\",\"isPartOf\":{\"@id\":\"http:\/\/www.ponybai.com\/?p=3729\"},\"author\":{\"name\":\"ponybai\",\"@id\":\"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883\"},\"headline\":\"Flow\",\"datePublished\":\"2023-12-15T08:50:12+00:00\",\"dateModified\":\"2023-11-25T08:56:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/www.ponybai.com\/?p=3729\"},\"wordCount\":255,\"publisher\":{\"@id\":\"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883\"},\"keywords\":[\"Flow\"],\"articleSection\":[\"Apex \u5f00\u53d1\u4eba\u5458\u6307\u5357\"],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.ponybai.com\/?p=3729\",\"url\":\"http:\/\/www.ponybai.com\/?p=3729\",\"name\":\"Flow - \u767d\u767d\u968f\u7b14\",\"isPartOf\":{\"@id\":\"http:\/\/www.ponybai.com\/#website\"},\"datePublished\":\"2023-12-15T08:50:12+00:00\",\"dateModified\":\"2023-11-25T08:56:01+00:00\",\"description\":\"Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\",\"breadcrumb\":{\"@id\":\"http:\/\/www.ponybai.com\/?p=3729#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.ponybai.com\/?p=3729\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.ponybai.com\/?p=3729#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"http:\/\/www.ponybai.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flow\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.ponybai.com\/#website\",\"url\":\"http:\/\/www.ponybai.com\/\",\"name\":\"\u767d\u767d\u968f\u7b14\",\"description\":\"Salesforce\u5b98\u65b9\u8bb2\u5e08\",\"publisher\":{\"@id\":\"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.ponybai.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883\",\"name\":\"ponybai\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"http:\/\/www.ponybai.com\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/www.ponybai.com\/wp-content\/uploads\/2025\/03\/cropped-Ihsans-WeChatQR.jpg\",\"contentUrl\":\"http:\/\/www.ponybai.com\/wp-content\/uploads\/2025\/03\/cropped-Ihsans-WeChatQR.jpg\",\"width\":248,\"height\":248,\"caption\":\"ponybai\"},\"logo\":{\"@id\":\"http:\/\/www.ponybai.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/121.37.188.161\"],\"url\":\"http:\/\/www.ponybai.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Flow - \u767d\u767d\u968f\u7b14","description":"Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.ponybai.com\/?p=3729","og_locale":"zh_CN","og_type":"article","og_title":"Flow - \u767d\u767d\u968f\u7b14","og_description":"Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002","og_url":"http:\/\/www.ponybai.com\/?p=3729","og_site_name":"\u767d\u767d\u968f\u7b14","article_published_time":"2023-12-15T08:50:12+00:00","article_modified_time":"2023-11-25T08:56:01+00:00","og_image":[{"width":867,"height":327,"url":"http:\/\/www.ponybai.com\/wp-content\/uploads\/2023\/11\/flow.png","type":"image\/png"}],"author":"ponybai","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"ponybai","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/www.ponybai.com\/?p=3729#article","isPartOf":{"@id":"http:\/\/www.ponybai.com\/?p=3729"},"author":{"name":"ponybai","@id":"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883"},"headline":"Flow","datePublished":"2023-12-15T08:50:12+00:00","dateModified":"2023-11-25T08:56:01+00:00","mainEntityOfPage":{"@id":"http:\/\/www.ponybai.com\/?p=3729"},"wordCount":255,"publisher":{"@id":"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883"},"keywords":["Flow"],"articleSection":["Apex \u5f00\u53d1\u4eba\u5458\u6307\u5357"],"inLanguage":"zh-Hans"},{"@type":"WebPage","@id":"http:\/\/www.ponybai.com\/?p=3729","url":"http:\/\/www.ponybai.com\/?p=3729","name":"Flow - \u767d\u767d\u968f\u7b14","isPartOf":{"@id":"http:\/\/www.ponybai.com\/#website"},"datePublished":"2023-12-15T08:50:12+00:00","dateModified":"2023-11-25T08:56:01+00:00","description":"Flow Builder \u5141\u8bb8\u7ba1\u7406\u5458\u6784\u5efa\u5e94\u7528\u7a0b\u5e8f\uff08\u79f0\u4e3a\u6d41\uff09\uff0c\u8fd9\u4e9b\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u6536\u96c6\u6765\u81ea\u52a8\u6267\u884c\u4e1a\u52a1\u6d41\u7a0b \u6570\u636e\u5e76\u5728\u60a8\u7684 Salesforce \u7ec4\u7ec7\u6216\u5916\u90e8\u7cfb\u7edf\u4e2d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002","breadcrumb":{"@id":"http:\/\/www.ponybai.com\/?p=3729#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.ponybai.com\/?p=3729"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.ponybai.com\/?p=3729#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"http:\/\/www.ponybai.com\/"},{"@type":"ListItem","position":2,"name":"Flow"}]},{"@type":"WebSite","@id":"http:\/\/www.ponybai.com\/#website","url":"http:\/\/www.ponybai.com\/","name":"\u767d\u767d\u968f\u7b14","description":"Salesforce\u5b98\u65b9\u8bb2\u5e08","publisher":{"@id":"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.ponybai.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":["Person","Organization"],"@id":"http:\/\/www.ponybai.com\/#\/schema\/person\/935c7592c850c65e1e5eba4530dbf883","name":"ponybai","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"http:\/\/www.ponybai.com\/#\/schema\/person\/image\/","url":"http:\/\/www.ponybai.com\/wp-content\/uploads\/2025\/03\/cropped-Ihsans-WeChatQR.jpg","contentUrl":"http:\/\/www.ponybai.com\/wp-content\/uploads\/2025\/03\/cropped-Ihsans-WeChatQR.jpg","width":248,"height":248,"caption":"ponybai"},"logo":{"@id":"http:\/\/www.ponybai.com\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/121.37.188.161"],"url":"http:\/\/www.ponybai.com\/?author=1"}]}},"_links":{"self":[{"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/posts\/3729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3729"}],"version-history":[{"count":1,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/posts\/3729\/revisions"}],"predecessor-version":[{"id":3731,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/posts\/3729\/revisions\/3731"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=\/wp\/v2\/media\/3730"}],"wp:attachment":[{"href":"http:\/\/www.ponybai.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3729"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.ponybai.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}