ServiceNow - 开发

ServiceNow 提供了很多内置功能和应用程序,我们可以轻松地使用它们在任何组织中实施 ITSM。同时,也有业务需求来设置不同的流程和功能。ServiceNow 具有高度可定制性,开发人员可以使用 Javascript 原理根据客户需求轻松创建应用程序和模块。

Javascript 是 ServiceNow 脚本的必需元素。在本节中,我们将为您概述 ServiceNow 开发。

应用程序创建概述

ServiceNow 提供了一个名为"Studio"的应用程序,您可以在其中创建新应用程序、提供源代码、为应用程序创建新表等。Studio 提供了用于创建新应用程序的指导性且易于使用的界面。让我们为以下 BookWorm ltd 案例创建一个新应用程序。

前端 IT 团队需要 ServiceNow 中的一个应用程序,经理可以在其中发布轮班 ROTA(轮班轮换)。每位员工将有 6 小时轮班,团队必须提供 24 X 7 全天候支持。

从导航器转到 Studio,将打开一个新窗口。单击"创建应用程序"。系统将提示您输入应用程序名称和说明。最后,单击"创建"。

应用程序创建概述

您将在下面找到应用程序页面。现在,是时候为我们的应用程序创建一个表了。转到"创建应用程序文件"。

创建应用程序文件

单击数据模型下的表,然后单击创建。系统将提示您输入新表的详细信息。指定表的名称,其余详细信息保留默认设置。

表新记录

现在向下滚动并开始定义这些表的列。我们有以下列定义,这里要注意的重点是,我们在成员列中选择了 sys_user 的引用。

表格列

现在,单击 Shift 列并选择"创建选择列表",如下所示,我们将创建班次选择,如 6am-12pm、12pm-6pm、6pm-12am 和 12am-6am。

创建选择列表

现在,我们已经创建了表格,我们在工作室中的应用程序如下所示。

应用程序资源管理器

工作室已自动为我们创建表单、列表、模块、应用程序菜单。我们可以从创建应用程序文件选项中创建其他模块、表格、UI 等,就像创建 ROTA 表一样。

现在让我们看看我们的应用程序在服务中的样子。在导航栏中搜索 Frontend_IT_ROTA 并转到我们的新模块。

让我们继续在我们的应用程序中添加一些新的 ROTA 记录。单击新建按钮。

服务管理

服务管理1

服务管理2

UI 策略和操作

ServiceNow 将 UI 策略定义为一种工具,通过该工具,我们可以动态更改表单上信息的行为并控制任务的自定义流程。另一方面,UI 操作用于使 UI 更具交互性、定制化和针对用户活动。让我们借助一个例子来理解这一点。

假设,我们必须以这样的方式配置事件表单,即如果任何事件被分配给前端 IT 团队分配组,则服务字段应变为不可见,配置项应被禁用。这里的 UI 策略是"如果分配组被选为前端 IT 团队",这里的 UI 操作是"服务字段应变为不可见,配置项字段应被禁用"。

UI 操作可以通过一种简单的使用界面的方式以及客户端脚本来实现。编写客户端脚本将帮助我们在字段中执行高级操作。我们还将在本部分后面演示客户端脚本。

这里要注意的重要一点是,UI 操作速度更快,首先执行,然后是客户端脚本。让我们为我们的用例创建一个 UI 策略和操作。从导航栏中,打开"系统 UI"应用程序下的"UI 策略"模块,然后单击新建按钮。

系统 UI

给出表的名称,在我们的例子中是 Incident。将应用程序保留为全局。如果找不到全局选项,请导航到右上角的齿轮,然后从开发人员选项卡中选择应用程序为全局。

现在,开始在下一节中给出条件。在我们的例子中,它将是"任务组是前端 IT 团队"。接下来,有一些复选框,如下所示 −

  • 全局 − 勾选即可,您的 UI 策略将全局实施。

  • 加载时 − 勾选即可,每次刷新页面时运行您的 UI 策略。

  • 如果为 false,则反转 − 勾选即可,如果条件发生变化,则反转我们创建的所有操作。

  • 继承 −如果需要,请勾选,扩展指定表的表(在其中创建 UI 策略)将继承此 UI 策略。

填写所有必需的详细信息并按提交。

UI Policy Record

现在,再次打开 UI 策略,您将找到输入 UI 操作的选项。让我们根据用例给出 UI 操作。单击 UI 操作部分中的新建按钮。

UI 策略操作

我们将为服务和配置项字段选择以下操作。

服务和配置项字段

服务和配置项字段1

单击提交以确认您的 UI 操作,最后单击"更新"以保存 UI 策略中的更改。您现在可以转到事件表单并验证您的 UI 策略和操作。

ServiceNow 脚本

ServiceNow 中有两种类型的脚本,即客户端和服务器端。服务器端脚本意味着处理发生在 Web 服务器上,而客户端脚本意味着处理发生在用户的机器上。每种类型的脚本都可以完成特定的任务。让我们讨论一下这两种脚本的示例 −

客户端脚本

客户端脚本可用于各种场景,如在表单字段中填充一些默认值、显示一些警报消息、根据用户在表单中另一个字段中的响应在一个字段中设置值、更改选择列表等。客户端脚本主要有三种类型。

  • Onload() - 加载表单时执行此脚本。

  • Onchange() - 更改表单中的特定字段时执行此脚本。

  • Onsubmit() - 提交表单时执行此脚本。

让我们为两个用例创建一个客户端脚本。在我们的新应用程序"前端 IT 团队 ROTA"中,我们将在应用程序加载后实现一条警报"请每周使用此应用程序一次,设置轮班"。然后,如果选择 12am-6am 为轮班时间,我们将显示一条警报"会员有权获得轮班津贴"。

导航到 Studio 模块,打开应用程序并单击"创建应用程序"文件。然后,在客户端开发选项下选择客户端脚本并提供所需的详细信息,如下所示 −

创建应用程序

向下滚动并提供脚本。我们将发出以下警报。

创建应用程序1
Function onLoad() {
alert ("请每周使用此应用程序一次来设置轮班轮换");
}

单击提交并加载您的新应用程序以查看结果。

现在,让我们实现下一个用例。这里我们将使用 onChange。ServiceNow 自动向 onChange 函数传递了 5 个参数。

  • Control − 这是客户端脚本配置的字段

  • OldValue − 这是加载表单时(更改之前)的字段值。

  • newValue − 这是更改后的字段值。

  • isLoading − 这是布尔值,表示更改是否作为表单加载的一部分发生。如果更改是由于表单加载引起的,则值为 true。当表单加载时,表单上的所有字段值都会更改。

  • isTemplate − 这是布尔值,表示发生的更改是否是由于模板填充字段引起的。如果更改是由于模板填充而导致的,则值为真。

客户端脚本
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '12am-6pm') {
      alert("The member is entitled for shift allowance");
      return;
   }
}
客户端脚本 1

Glideform (g_form) 类

Glideform 是用于控制表单和表单字段的类。我们可以执行诸如隐藏字段值、根据其他字段的响应设置字段值、将字段添加到选择列表等任务。

Glide 表单类带有许多方法。一些重要的方法是 addOption()、clearOptions()、showFieldMsg()、clearMessages()、clearValue()、setValue() 等。

如果分配组被选为前端 IT 团队,让我们在事件表单中创建一个客户端脚本,以在描述字段中填充一些消息。转到 UI 策略并创建新策略。在"申请地点"部分中输入条件"任务组为前端 IT 团队"。

UI 策略高级视图

提交 UI 策略,再次打开,然后单击高级视图。稍后,您将找到提供脚本的选项。

何时应用此脚本

脚本会自动填充函数 onCondition()。一旦满足我们在 UI 策略中给出的条件,onCondition 函数将自动执行一次。另一点需要注意的是,有两个脚本,"如果为真则执行"和"如果为假则执行"。

"如果为真则执行"脚本将在条件匹配后执行,如果我们更改字段中的值,使得我们提到的条件不再满足,则将执行"如果为假则执行"中的脚本。

让我们为两者编写一个脚本。在这里,我们将使用 setValue 和 clearValue 方法。要获取需要在脚本中提及的字段名称,请打开事件表单并右键单击所需字段,您可以找到格式为"显示 - <fieldname>"的字段名称

Execute_Files

On true 脚本

function onCondition() {
   g_form.clearValue('description');
   g_form.setValue(‘description’,'**Please mention server name, instance name and error code**');
}

On false 脚本

function onCondition() {
   g_form.clearValue('description');
}
运行脚本

现在,打开事件表单并检查结果。

运行脚本1

服务器端脚本

服务器端脚本在 ServiceNow 服务器或数据库上执行。服务器端脚本有两个类别 −

  • 业务规则

  • 脚本包含

让我们逐一了解每个类别。

业务规则

业务规则模块可以在系统定义应用程序中找到。要创建业务规则,请单击新建。我们可以使用业务规则操作创建一个简单的业务规则,这些操作具有一个简单的下拉界面。

您可以使用业务规则操作来设置字段的值或在表单中添加消息。我们可以选择何时运行业务规则,如下所示 −

  • 之前 − 业务规则中的逻辑在数据库操作之前执行

  • 之后 − 业务规则中的逻辑在数据库操作之后执行

  • 异步 − 异步业务规则在数据库操作发生后执行其逻辑,但调度程序会将任务排队以尽快运行,但不一定在数据库操作后立即运行。

  • 显示 −当表单加载并从数据库加载记录时,显示业务规则会执行其逻辑。

我们还可以选择业务规则应执行的数据库操作。让我们在上一节中创建的 Frontend IT 团队 ROTA 应用程序中创建一个业务规则操作。

如果轮班时间为上午 12 点至上午 6 点,我们必须将备注字段中的值设置为"监控 XO887 批处理作业"。给出名称和表 frontend_it_rota。在里面,何时运行选项卡给出条件,因为班次是上午 12 点到上午 6 点,并选中"插入"和"更新"框。

服务器端脚本

在操作选项卡内给出备注字段的条件。

服务器端脚本1

我们还可以在此业务规则中提供自定义脚本。要开始编写自定义脚本,请选中"高级"复选框,您将看到用于编写脚本的新"高级"选项卡。

让我们编写一个脚本,当未提供成员、时间或日期字段时中止插入事务。我们将为此使用"当前"和"上一个"对象。

(function executeRule(current, previous /*null when async*/)) {
   if((current.member = ' ') || (current.date = ' ') || (current.shift = ' '){
      current.setAbortAction(true);
   }
}
服务器端脚本 2

脚本包含

使用脚本包含,我们可以编写自定义函数或类,然后在其他脚本中根据需要多次使用它们。它们是可重复使用的脚本;我们可以在其他客户端或服务器端脚本中使用它们。但是,只有在其他脚本明确调用时,它们才会执行。要创建新的脚本包含,我们在"系统定义"应用程序下有一个模块"脚本包含"。单击新建以创建新的脚本包含。

在脚本包含表单中,给出脚本包含的名称。API 名称字段是脚本包含的内部名称,当从其他应用程序调用此脚本包含时使用它。如果您想在客户端脚本中使用此脚本包含,请选中客户端可调用复选框。在应用程序中,给出使用此脚本的应用程序。在"可从...访问"字段中,给出应用程序范围。

让我们在前端 IT 团队 ROTA 应用程序中为以下案例编写一个脚本。首先,我们将编写一个脚本包含,它将检查任何字段中的无效字符。我们将定义一个函数,它将参数作为字符串并根据字符串中的字符返回 true 或 false。

我们将在业务规则脚本中使用此函数来验证在提交表单时成员(名称)字段(在前端 IT 团队 ROTA 应用程序中)中给出的值是否没有任何无效字符。

打开脚本包含模块,下面是我们将使用的脚本。

function validatefieldcharacters(fieldinput) {
   var validcharacters = /^[a-zA-Z]+$/;
   if(fieldinput.value.match(validcharacters)) {
      return true;
   } else {
      return false;
   }
}
Script Include

现在,让我们写下业务规则脚本来验证成员字段。打开业务规则模块并为我们的应用程序前端 IT 团队 ROTA 创建新的业务规则。

var memberfieldstatus = validatefieldcharacters(current.member)
   if(memberfieldstatus == false) {
   gs.addErrorMessage(" Special characters not allowed in member field");
   current.setAbortAction(true);
}
Script Include1

调试

如果我们的脚本没有按照预期执行,或者我们遇到了一些错误,我们可以使用各种调试技术。让我们讨论一下调试客户端和服务器端脚本的各种方法。

调试客户端脚本

调试客户端脚本的最佳方法是参考日志。Javascript 提供了 jslog() 方法来在 Javascript 日志中写入消息。jslog() 方法接受我们想要在参数中的日志中的消息。下面是一个关于如何实现 jslog() 的示例。您可以在业务规则脚本中使用以下脚本。

function onLoad(){
   jslog("This log is displayed from jslog().");
   jslog("The value of Member field is = " + g_form.getValue('Member'));
}

这将在日志中给出成员字段中给出的值。在本例中,我们使用了 getvalue 方法来检索成员字段的值。现在,下一步是打开日志。转到右上角的设置选项,然后单击开发人员选项卡。打开"Javascript 日志和字段观察器"选项。

Debugging

JavaScript 日志将在 ServiceNow 主浏览器窗口底部的新部分中打开。

Debugging1

除了 jslog() 之外,我们还可以使用 try/catch 语句,我们通常在 Javascript 中使用这些语句来调试脚本。

调试服务器端脚本

调试服务器端脚本的最常用方法是使用"脚本调试器"模块。脚本调试器可用于设置断点、逐步遍历代码、查看变量值等。要访问脚本调试器,请在导航栏中找到"脚本调试器"。它位于"系统诊断"应用程序内。

除此之外,我们还可以参考"应用程序日志"模块,它位于"系统日志应用程序"内。