【问题标题】:Can I start a Service Now workflow via an external SOAP call?我可以通过外部 SOAP 调用启动 Servicenow 工作流吗?
【发布时间】:2016-02-25 22:45:11
【问题描述】:

我想调用 ServiceNow SOAP 网络服务来启动特定网络服务的实例。

我可以找到 event.do 之类的函数的 WSDL,但似乎缺少找到合适的表/端点以启动工作流所需的步骤。

【问题讨论】:

  • 您可能需要在 ServiceNow 实例上设置自定义脚本化 Web 服务。从那里,您可以使用我在此处的回答从脚本启动工作流程:stackoverflow.com/a/34005305/25962
  • @Joey 所以你不能进行 SOAP 调用,将条目写入任何表,并提供 节点数据?

标签: soap workflow servicenow


【解决方案1】:

如果您想通过 SOAP 启动工作流,我认为唯一的方法是创建 Scripted Web-ServiceCustom Processor

您必须在其中定义一个启动您的工作流程的脚本。

var w = new Workflow();
var context = w.startFlow(id, current, current.operation(), getVars());

this wiki 文章中,您可以找到工作流的 API 方法。

【讨论】:

    【解决方案2】:

    棘手的一点是将变量放入工作流程。 虽然这听起来很容易,但实际上并非如此。

    如果您的工作流在表 sc_req_item 上运行(如果您正在处理 Request Fulfillment,这很可能),您首先需要将 Property (sys_properties) glide.workflow.enable_input_variables 设置为 true,因为否则,您将无法将正常的输入变量添加到您的工作流程中。

    然后,将输入变量添加到工作流。请注意,您有一些漂亮的数据类型available there。例如,请注意“数据结构”类型。 所有输入变量都被视为自定义列(实际上它们是特定于工作流的表的列)。这就是名称以 u_ 开头的原因。

    假设您定义了一个名为 u_dynamic_vars 的输入变量(数据类型“数据结构”)。

    这里是如何调用工作流:

    var wf_name = "Name of your workflow";
    
    // Instantiate JSON machinery
    var parser = new JSON();
    
    //Declare an instance  of workflow.js 
    var wf  = new Workflow ();
    //Get the workflow id 
    var  wfId  = wf.getWorkflowFromName (wf_name) ;
    
    //Start workflow, passing along object containing name/value pairs mapping to inputs expected by the workflow 
    var vars  = { } ;
    
    // Prepare the JSON Datastructure
    var obj ={"name":"George",
          "lastname":"Washington"};
    
    // Encode the data
    vars.u_dynamic_vars = parser.encode(obj);
    vars.u_new_email = "inject@new.com";
    
    
    // Get a specific RITM
    var gr = GlideRecord("sc_req_item");
    gr.get("18d8e9740f4013002f504c6be1050e48");
    gs.print(gr.number);
    
    // Start the Workflow with a "current" record
    wf.startFlow(wfId , gr , "update" , vars ) ;
    
    // You may also pass null, then current is null.
    wf.startFlow(wfId , null , "update" , vars ) ;
    

    在工作流程中,您可以像这样解压缩数据:

    // Let's unpack it. For some reason, intantiating the parse won't work here...
    payload = JSON.parse(workflow.variables.u_dynamic_vars);
    gs.print("payload.first_name:" + payload.name);
    

    另请注意,工作流不一定需要在表上运行。 为此,请在定义工作流时选择“全局”作为表名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多