业务规则中的 Deluge 脚本

业务规则

业务规则可以自动化各种任务,例如将事故和服务请求分派至技术支持组;为请求分配技术人员、状态或优先级;甚至是发送邮件通知。

业务规则基于站点,对所有进入的请求运行,并可在请求创建、编辑或删除时应用。只要有进入的请求满足预先指定的条件,业务规则就可以确保自动执行相应的操作。 

业务规则由两个主要部分组成,即条件和操作,并且你可以通过自定义函数来配置这两部分。 

在为业务规则编写自定义函数之前,建议你先了解如何配置和使用业务规则(ServiceDesk Plus Cloud)。

业务规则条件的自定义函数 

要编写用于业务规则条件的自定义函数,请按照以下步骤进行:

  • 进入 设置 > 开发者空间 > 自定义函数 > 请求 - 业务规则(或)终止计时器条件。(你也可以在创建/编辑业务规则时直接编写自定义函数。)

  • 点击 新建自定义函数

  • 为自定义函数提供名称和描述。

  • Deluge 脚本编辑器中,根据以下提示编写自定义函数,然后保存此函数: 

如下截图所示,'requestObj' 和 'context' 将作为自定义函数的参数传入:
 

'requestObj' 用于存储业务规则需处理的请求详情,'context' 存储当前实例及当前登录用户信息。 

如果业务规则中的自定义函数配置为在请求编辑时执行,那么 context 对象还将包含 'initialObj' 和 'modifiedFields'。'initialObj' 存储原始请求值,而 'modifiedFields' 存储被修改过的字段信息。 

你必须编写自定义函数,使其返回 Boolean(布尔)类型。如果自定义函数返回 'true',则会执行你在业务规则中配置的操作。

例如,以下脚本会在请求主题包含“New issue”时返回 'true':
 

subject = requestObj.get("subject");
if(subject.contains("New issue")){
    return true;
}
return false; 

另举一例:你需要阻止用户重复提交请求,并限制其在 24 小时内每个同类别最多只能提交 3 个请求。你可以在业务规则条件下采用如下脚本自动完成此校验。

if(requestObj.containsKey("category"))
{
    category_name = requestObj.get("category").get("name");
    request_creation_time = requestObj.get("created_time").get("value");
    request_creation_time = request_creation_time.toDate().toLong();
    check_upto_time = request_creation_time - 24 * 60 * 60 * 1000;
    requester_email = requestObj.get("requester").get("email_id");
    criteria = "{list_info:{search_criteria:{field:category.name,values:['" + category_name + "'],condition:like,children:[{field:created_time.value,condition:GT,logical_operator:and,value:'" + check_upto_time + "'},{field:requester.email_id,condition:like,logical_operator:and,values:['" + requester_email + "']}]}}}";
    response = zoho.sdp.invokeurl
    [
        url :"/app/itdesk/api/v3/requests"
        type :GET
        parameters:{"input_data":criteria}
    ];
    requests = response.get("requests");
    if(requests.toJSONList().size() > 2)
    {
        return true;
    }
}
return false;

脚本测试执行 

编写好自定义函数后,可以按以下步骤进行测试: 

  • 点击 保存并执行脚本

  • 从显示的请求列表中选择一个示例请求并点击 下一步。 

  • 将在参数 'requestObj' 下显示传递给自定义函数的数据。你可以选择性地修改 requestObj 字段。点击 执行

  • 脚本将被执行,输出结果将显示出来。
     

测试自定义函数不会影响你生产环境的数据。但如果测试中包含 API 调用(如用 zoho.sdp.invokeurl 或 invokeurl),这些 API 会被实际调用。请确保你不会调用导致不良后果的 API。

调试技巧 

Deluge 支持通过 info 操作进行调试。你可以打印自定义函数的输出,方便代码调试和排查。

例如,要了解 requestObj 和 context 的结构,只需运行以下脚本并参考响应即可。

info requestObj;  
info context;
return true; 

业务规则操作的自定义函数 

要编写可用于业务规则操作的自定义函数,请按照下列步骤进行:

  • 进入 设置 > 开发者空间 > 自定义函数 > 请求 - 业务规则操作。(你也可以在创建/编辑业务规则时直接编写自定义函数。)

  • 点击 新建自定义函数

  • 为自定义函数提供名称和描述。

  • Deluge 脚本编辑器中,根据以下提示编写自定义函数,然后保存: 

 如下截图所示,'requestObj' 和 'context' 将作为自定义函数的参数传入:
 

你必须编写自定义函数,返回 'requestObj'。返回值的数据类型为 Map(映射/字典)。

你对 'requestObj' 字段的更改会自动反映到实际请求中。

注意,你只能在 requestObj 中更新如下请求字段:subject, resolution, mode, group, item, level, impact, service_category, update_reason, priority, udf_fields, impact_details, subcategory, status, request_type, description, urgency, technician, category。

新的字段值需按照如下格式从自定义函数返回: 

以下示例脚本将请求主题修改为 “Firewall Upgrade”,优先级设为 “High”:
 

requestObj.put("subject", "Firewall Upgrade");
requestObj.put("priority", {"name": "High"});
return requestObj;

比如你想将 “Network/Internet” 类别请求自动设置为高优先级,可以在业务规则操作中使用如下脚本:
 

if(requestObj.containsKey("category"))
{
    if(requestObj.get("category").get("name") == "Internet" || requestObj.get("category").get("name") == "Network")
    {
        requestObj.put("priority",{"name":"High"});
    }
}
return requestObj;

脚本测试执行 

编写好自定义函数后,可以按以下步骤进行测试: 

  • 点击 保存并执行脚本

  • 从显示的请求列表中选择一个示例请求并点击 下一步。 

  • 将在参数 'requestObj' 下显示传递给自定义函数的数据。你可以选择性地修改 requestObj 字段。点击 执行。 

  • 脚本将被执行,输出结果将显示出来。
     

 如果你在测试自定义函数时调用了 zoho.sdp.invokeurl 或 invokeurl,API 实际会被调用。请确保你的操作不会引发不良后果。

调试技巧 

测试自定义函数时,可以用 info 语句调试代码并输出结果。例如,想了解 requestObj 和 context 结构,只需运行如下脚本即可。

info requestObj;
info context;
return true; 
如果你需要快速了解如何在 ServiceDesk Plus Cloud 各功能中使用自定义函数,请访问此链接获取概览信息。