我想调用ServiceNow SOAP webservice来启动特定Web服务的实例。
我可以找到像incident.do这样的函数的WSDL,但似乎缺少为工作流启动找到正确的表/端点所需的步骤。
答案 0 :(得分:2)
如果您想通过SOAP启动工作流,我认为唯一的方法是创建Scripted Web-Service或Custom 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”作为表名。