studio-web
latest
false
重要 :
请注意,此内容已使用机器翻译进行了部分本地化。 新发布内容的本地化可能需要 1-2 周的时间才能完成。
UiPath logo, featuring letters U and I in white

Studio Web 用户指南

上次更新日期 2025年11月20日

检索工单详细信息

本教程演示如何使用 API 工作流并检索工单详细信息,以便稍后与智能体和 Maestro 集成。

API 工作流旨在从 ServiceNow 中检索事件详细信息,然后从 Salesforce 验证并获取有关工单创建者及其关联公司的其他信息(如果适用)。
docs image
docs image
  1. (可选)创建 API 工作流
  2. 打开数据管理器,然后使用以下属性添加事件编号作为输入属性:
    • 类型:字符串
    • 说明:传入工单编号的参考
    • 必填项: True
  3. 数据管理器中,将事件对象isValidCallerIdLink添加为具有以下属性的变量:
    • IncidentObject — 存储丰富的事件详细信息。
      • “类型”:对象
      • 默认值:留空
    • isValidCallerIdLink — 验证从 ServiceNow 检索的Caller_id_link是否为有效的 URL。
      • 类型:布尔值
      • 默认值: false
  4. 打开“调试配置”窗口。在必填的事件编号字段中,输入 NC0026701。
  5. 添加一个“连接器”活动,并将其配置为使用以下ServiceNow活动: “按事件编号搜索事件” 。这将根据作为输入提供的事件编号检索事件详细信息。
    1. 选择您的 ServiceNow 连接。
    2. “事件 ID”连接到以下变量: “工作流” > “输入” > “事件编号”
    3. 将活动上下文输出重命名为$context.outputs.incident_1
  6. 要检查在上一步中是否发现了任何事件,请添加具有以下条件的“If条件”活动:
    $context.outputs.incident_1.content && $context.outputs.incident_1.content.length > 0$context.outputs.incident_1.content && $context.outputs.incident_1.content.length > 0
  7. Then分支中,如果发现任何事件,请继续验证caller_id_link并获取更多详细信息。添加“Try Catch 异常处理”活动。
    1. 在 Try 块内,添加具有以下“代码”的“脚本” 活动 :
      const callerIdLink = $context.outputs.incident_1.content[0].caller_id_link;
      const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
      $context.variables.isValidCallerIdLink = (callerIdLink && urlRegex.test(callerIdLink));
      return $context.variables.isValidCallerIdLink;const callerIdLink = $context.outputs.incident_1.content[0].caller_id_link;
      const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
      $context.variables.isValidCallerIdLink = (callerIdLink && urlRegex.test(callerIdLink));
      return $context.variables.isValidCallerIdLink;
      将该活动重命名为“验证来电者 ID”链接,并将上下文输出名称重命名为$context.outputs.Validate_Caller_ID_Link
    2. 在同一个 Try 块中,添加具有以下 条件 If 活动:$context.variables.isValidCallerIdLink 。将活动重命名为“如果来电者 ID 链接有效”,将上下文输出名称重命名为$context.outputs.If_Caller_ID_Valid
    3. 在上一个“IF 条件” 活动的“Then” (链接有效)分支中,添加具有以下配置的“连接器” 活动 Service Now HTTP 请求
      • ServiceNow 连接— ServiceNow 开发者帐户
      • 方法— GET
      • 请求 URL

        $context.outputs.incident_1.content[0].caller_id_link$context.outputs.incident_1.content[0].caller_id_link
      将该活动重命名为“获取工单创建者”。上下文输出名称仍为$context.outputs.ServiceNow_HTTP_Request_1
    4. 在上一个“IF 条件” 活动的“Else (链接无效)”分支中,添加具有以下“代码” 的“脚本” 活动:
      console.error("Invalid caller_id_link, skipping 'Get Ticket Creator' activity.");
      return null;console.error("Invalid caller_id_link, skipping 'Get Ticket Creator' activity.");
      return null;
      将活动重命名为“记录无效的来电者 ID 链接”,并将上下文输出名称重命名为$context.outputs.Log_Invalid_Caller_ID
    5. 在“If 条件” 活动外部,但仍在“Try ”块内,使用以下“代码” 添加“脚本” 活动。此活动会将初始事件详细信息与获取的创建者详细信息合并到单个事件对象中。
      const incident = $context.outputs.incident_1.content[0];
      let creatorDetails = null;
      const creatorOutput = $context.outputs.ServiceNow_HTTP_Request_1.content;
      if (creatorOutput && Array.isArray(creatorOutput) && creatorOutput.length > 0) {
        creatorDetails = creatorOutput[0];
      } else if (creatorOutput && typeof creatorOutput === 'object' && creatorOutput !== null) {
        creatorDetails = creatorOutput;
      }
      
      let companyDetails = null;
      const companyOutput = $context.outputs.ServiceNow_HTTP_Request_1.content;
      if (companyOutput && typeof companyOutput === 'object' && companyOutput !== null) {
        companyDetails = companyOutput;
      } else if (companyOutput && Array.isArray(companyOutput) && companyOutput.length > 0) {
        companyDetails = companyOutput[0];
      }
      
      return {
        ...incident,
        creator: creatorDetails,
        company: companyDetails
      };const incident = $context.outputs.incident_1.content[0];
      let creatorDetails = null;
      const creatorOutput = $context.outputs.ServiceNow_HTTP_Request_1.content;
      if (creatorOutput && Array.isArray(creatorOutput) && creatorOutput.length > 0) {
        creatorDetails = creatorOutput[0];
      } else if (creatorOutput && typeof creatorOutput === 'object' && creatorOutput !== null) {
        creatorDetails = creatorOutput;
      }
      
      let companyDetails = null;
      const companyOutput = $context.outputs.ServiceNow_HTTP_Request_1.content;
      if (companyOutput && typeof companyOutput === 'object' && companyOutput !== null) {
        companyDetails = companyOutput;
      } else if (companyOutput && Array.isArray(companyOutput) && companyOutput.length > 0) {
        companyDetails = companyOutput[0];
      }
      
      return {
        ...incident,
        creator: creatorDetails,
        company: companyDetails
      };
      
      将活动重命名为“JS - 事件对象”。上下文输出名称仍为$context.outputs.Javascript_1
    6. 将事件对象分配给变量:添加具有以下配置的“分配”活动:
      • 目标变量— 选择在开头定义的事件对象变量。
      • 设置值— 引用上一个脚本活动的上下文名称:

        $context.outputs.Javascript_1$context.outputs.Javascript_1
      将活动重命名为“分配事件对象”。上下文输出名称仍为$context.outputs.Assign_1
    7. 在当前“Try Catch 异常处理”活动的 Catch 块中,添加具有以下“代码” 的“脚本” 活动:
      let errorMessage = `Error in Try_Catch_1: ${$error.title || 'Unknown Error'}`;
      if ($error.detail) {
        errorMessage += `\nDetails: ${$error.detail}`;
      }
      if ($error.data && $error.data.status) {
        const statusCode = $error.data.status;
        if (statusCode === 0 || statusCode === -1) {
          errorMessage += "\nNetwork error: Unable to connect to ServiceNow.";
        } else if (statusCode >= 500 && statusCode < 600) {
          errorMessage += "\nServiceNow server error.";
        }
      }
      console.error(errorMessage);
      console.error("Stack Trace:", $error);
      return null;let errorMessage = `Error in Try_Catch_1: ${$error.title || 'Unknown Error'}`;
      if ($error.detail) {
        errorMessage += `\nDetails: ${$error.detail}`;
      }
      if ($error.data && $error.data.status) {
        const statusCode = $error.data.status;
        if (statusCode === 0 || statusCode === -1) {
          errorMessage += "\nNetwork error: Unable to connect to ServiceNow.";
        } else if (statusCode >= 500 && statusCode < 600) {
          errorMessage += "\nServiceNow server error.";
        }
      }
      console.error(errorMessage);
      console.error("Stack Trace:", $error);
      return null;
      
      将活动重命名为“记录错误详情”,并将上下文输出名称重命名为$context.outputs.Log_Error_Catch
    8. 如果发生任何错误,请添加“分配”活动,以使用带有来自 ServiceNow 的初始详细信息的简化事件对象:
      • 目标变量— 选择在开头定义的事件对象变量。
      • 设置值

        (($incidentDetails) => ({ id: $incidentDetails.sys_id, number: $incidentDetails.number, short_description: $incidentDetails.short_description, description: $incidentDetails.description, state: $incidentDetails.state, urgency: $incidentDetails.urgency, impact: $incidentDetails.impact, opened_at: $incidentDetails.opened_at, closed_at: $incidentDetails.closed_at }))($context.outputs.curated_search_incident_1.content[0])(($incidentDetails) => ({ id: $incidentDetails.sys_id, number: $incidentDetails.number, short_description: $incidentDetails.short_description, description: $incidentDetails.description, state: $incidentDetails.state, urgency: $incidentDetails.urgency, impact: $incidentDetails.impact, opened_at: $incidentDetails.opened_at, closed_at: $incidentDetails.closed_at }))($context.outputs.curated_search_incident_1.content[0]) 
      活动名称和上下文输出名称将保持原样。
  8. 退出“Try Catch 异常处理” 活动,并在“Else” 分支中添加空“响应” 。将“响应”活动重命名为“未找到结果”。
  9. 要检查是否有任何事件对象包含有关创建者电子邮件和公司帐户 ID 的足够信息,请添加具有以下条件的If活动:
    $context.variables.incidentObject && $context.variables.incidentObject.creator && $context.variables.incidentObject.creator.email && $context.variables.incidentObject.company && $context.variables.incidentObject.company.account_id$context.variables.incidentObject && $context.variables.incidentObject.creator && $context.variables.incidentObject.creator.email && $context.variables.incidentObject.company && $context.variables.incidentObject.company.account_id
    1. Then分支中,添加一个连接器活动,并将其配置为使用Salesforce活动:使用 SOQL 搜索。将活动重命名为“获取联系人”,并将上下文输出名称重命名为$context.outputs.soqlQuery_1
    2. “查询”字段中,打开“表达式编辑器”并写入:
      "SELECT Id, Name, Email, AccountId FROM Contact WHERE Email = '" + $context.variables.incidentObject.creator.email + "' LIMIT 1""SELECT Id, Name, Email, AccountId FROM Contact WHERE Email = '" + $context.variables.incidentObject.creator.email + "' LIMIT 1"
    3. 在“Then” 分支中,添加具有以下“条件” 的“If 条件”活动:
      $context.outputs.soqlQuery_1.content && $context.outputs.soqlQuery_1.content.length > 0$context.outputs.soqlQuery_1.content && $context.outputs.soqlQuery_1.content.length > 0
      将活动重命名为“If Contact Found”,并将上下文输出名称重命名为$context.outputs.If_Contact_Found 。此条件活动会检查是否在 Salesforce 中找到联系人。
    4. 在“If Contact Found”活动的Then分支中,添加一个“连接器”活动并将其配置为使用Salesforce “获取帐户”活动:
      • Salesforce 连接— Salesforce 开发者帐户
      • 帐户 ID

        $context.variables.incidentObject.company.account_id$context.variables.incidentObject.company.account_id
      将上下文输出重命名为$context.outputs.curated_account_1 。此活动使用增强后的“事件对象” 中的 account_id 检索 Salesforce 中的帐户详细信息。
    5. 在“If Contact Found”活动的Then分支中,添加一个For Each活动并配置其查找: $context.outputs.soqlQuery_1.content 。此循环将遍历 Salesforce 联系人搜索的结果(尽管 SOQL 查询限制为 1)。在循环内,它尝试获取与已找到联系人相关的案例详细信息。
    6. 在“遍历循环”的主体内部,添加具有以下配置的“连接器”活动“立即服务 HTTP 请求”和的配置:
      • ServiceNow 连接— Salesforce 开发者帐户
      • 方法— GET
      • 请求 URL

        "/services/data/v64.0/sobjects/Case/" + $currentItem.Id"/services/data/v64.0/sobjects/Case/" + $currentItem.Id
      将活动重命名为“案例详细信息”。上下文输出名称保持原样。
    7. 退出遍历循环并添加一个空的“响应”活动。
    8. 在“If Contact Found”活动的 Else 分支中,添加具有以下 Response 的 Response 活动:
      • 响应
        "No Salesforce Contact found for the incident creator email.""No Salesforce Contact found for the incident creator email."
      将该活动重命名为“返回未找到联系人错误”。

此页面有帮助吗?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath Logo
信任与安全
© 2005-2025 UiPath。保留所有权利。