我可以通过外部 SOAP 调用启动 Service Now 工作流吗?
Can I start a Service Now workflow via an external SOAP call?
我想调用 ServiceNow SOAP 网络服务以启动特定网络服务的实例。
我可以找到像 incident.do 这样的功能的 WSDL,但似乎缺少为工作流找到合适的 table/endpoint 所需的步骤。
如果您想通过 SOAP 启动工作流,我认为唯一的方法是创建一个 Scripted Web-Service or a Custom Processor。
在那里你必须定义一个脚本来启动你的工作流。
var w = new Workflow();
var context = w.startFlow(id, current, current.operation(), getVars());
在 this wiki 文章中,您可以找到 API 工作流方法。
棘手的一点是将变量放入工作流中。
虽然这听起来很容易,但实际上并非如此。
如果您的工作流程 运行 在 table sc_req_item 上(如果您正在处理请求履行,则很可能),您首先需要设置 属性 (sys_properties) glide.workflow.enable_input_variables 为真,否则您将无法将正常的输入变量添加到您的工作流中。
然后,将输入变量添加到工作流中。请注意,您有一些漂亮的数据类型 available there。请注意例如 "Data Structure" 类型。
所有输入变量都被视为客户列(实际上它们是特定于 workflw 的列 table)。这就是名称以 u_.
开头的原因
比方说,您定义了一个名为 u_dynamic_vars(数据类型 "Data Structure")的输入变量。
调用工作流的方法如下:
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);
另请注意,工作流不一定需要 运行 上 table。
为此,在定义工作流时选择 "global" 作为 table 名称。
我想调用 ServiceNow SOAP 网络服务以启动特定网络服务的实例。
我可以找到像 incident.do 这样的功能的 WSDL,但似乎缺少为工作流找到合适的 table/endpoint 所需的步骤。
如果您想通过 SOAP 启动工作流,我认为唯一的方法是创建一个 Scripted Web-Service or a Custom Processor。
在那里你必须定义一个脚本来启动你的工作流。
var w = new Workflow();
var context = w.startFlow(id, current, current.operation(), getVars());
在 this wiki 文章中,您可以找到 API 工作流方法。
棘手的一点是将变量放入工作流中。 虽然这听起来很容易,但实际上并非如此。
如果您的工作流程 运行 在 table sc_req_item 上(如果您正在处理请求履行,则很可能),您首先需要设置 属性 (sys_properties) glide.workflow.enable_input_variables 为真,否则您将无法将正常的输入变量添加到您的工作流中。
然后,将输入变量添加到工作流中。请注意,您有一些漂亮的数据类型 available there。请注意例如 "Data Structure" 类型。 所有输入变量都被视为客户列(实际上它们是特定于 workflw 的列 table)。这就是名称以 u_.
开头的原因比方说,您定义了一个名为 u_dynamic_vars(数据类型 "Data Structure")的输入变量。
调用工作流的方法如下:
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);
另请注意,工作流不一定需要 运行 上 table。 为此,在定义工作流时选择 "global" 作为 table 名称。