我可以通过外部SOAP调用启动Service Now工作流程吗?

时间:2016-02-25 22:45:11

标签: soap workflow servicenow

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

我可以找到像incident.do这样的函数的WSDL,但似乎缺少为工作流启动找到正确的表/端点所需的步骤。

2 个答案:

答案 0 :(得分:2)

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

在那里,您必须定义一个启动工作流程的脚本。

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

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

答案 1 :(得分:2)

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

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

然后,将Input变量添加到工作流程中。请注意,您有一些漂亮的数据类型available there。例如,请注意“数据结构”类型。 所有输入变量都被视为customer列(实际上它们是workflw特定表的列)。这就是名称以 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);

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