ServiceNow - 开发


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

ServiceNow 脚本编写必须使用 JavaScript。在本节中,我们将为您概述 ServiceNow 的开发。

应用程序创建概述

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

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

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

应用程序创建概述

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

创建应用程序文件

单击“数据模型”下的“表”,然后单击“创建”。系统将提示您输入新表的详细信息。给出表的名称并将其余详细信息保留为默认值。

表新记录

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

表格列

现在,单击“班次”列并选择“创建选择列表”,如下所示,我们将创建班次选择,例如上午 6 点至中午 12 点、中午 12 点至下午 6 点、下午 6 点至上午 12 点和上午 12 点至上午 6 点。

创建选择列表

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

应用程序浏览器

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

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

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

服务管理

服务管理1

服务管理2

用户界面政策和行动

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

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

UI 操作可以通过简单的界面使用方式以及客户端脚本来实现。编写客户端脚本将帮助我们在该领域进行高级操作。我们还将在本节后面演示客户端脚本。

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

系统界面

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

现在,开始在下一节中给出条件。在我们的例子中,这将是“分配组是前端 IT 团队”。接下来,有一些复选框,如下 -

  • 全球- 如果您愿意,请勾选您的 UI 政策在全球范围内实施。

  • 加载时- 如果需要,请勾选以在每次刷新页面时运行 UI 策略。

  • 如果为假则反转- 如果需要,请勾选,以反转我们在条件更改时创建的所有操作。

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

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

UI政策记录

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

UI政策行动

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

服务和配置项字段

服务和配置项字段1

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

ServiceNow 脚本

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

客户端脚本编写

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

  • Onload() - 当加载表单时执行。

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

  • Onsubmit() - 当表单提交时执行。

让我们为两个用例创建一个客户端脚本。在我们的新应用程序“前端 IT 团队 ROTA”中,一旦加载应用程序,我们将实施警报“请每周使用此应用程序一次,以设置轮班轮换”。然后,如果轮班时间选择为上午 12 点至早上 6 点,我们将显示一条提醒“会员有权获得轮班津贴”。

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

创建应用程序

向下滚动并给出脚本。我们将发出如下警报。

创建应用程序1
Function onLoad() {
alert (“Please use this application once a week to set the shift rotation”);
}

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

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

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

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

  • newValue - 更改后字段的值。

  • isLoading - 它是布尔值,指示更改是否作为表单加载的一部分发生。如果更改是由于表单加载导致的,则值为 true。当表单加载时,表单上的所有字段值都会发生变化。

  • isTemplate - 它是一个布尔值,指示发生的更改是否是由于模板填充字段所致。如果变化是由于模板填充造成的,则值为 true。

客户端脚本
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 是用于控制表单和表单字段的类。我们可以执行诸如隐藏字段值、根据其他字段的响应设置字段值、将字段添加到选择列表等任务。

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

如果分配组被选为前端 IT 团队,那么让我们以事件形式创建一个客户端脚本,以在描述字段中填充一些消息。转到 UI 策略并创建新策略。在“申请地点”部分中将条件指定为“分配组是前端 IT 团队”。

UI 策略高级视图

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

何时应用此

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

一旦条件匹配,“execute if true”脚本就会执行,如果我们更改字段中的值,使得不再满足我们提到的条件,那么“execute if false”中的脚本将执行。

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

执行文件

真实剧本上

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

关于虚假脚本

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

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

运行脚本1

服务器端脚本

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

  • 商业规则

  • 脚本包括

让我们一一看看每个类别。

商业规则

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

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

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

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

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

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

我们还可以选择业务规则应执行的数据库操作。让我们在上一节中创建的前端 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 应用程序中为以下案例编写一个脚本。首先,我们将编写一个脚本 include,它将检查任何字段中的无效字符。我们将定义一个函数,它将参数作为字符串,并根据字符串中的字符返回 true 或 false。

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

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

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

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

var memberfieldstatus = validatefieldcharacters(current.member)
   if(memberfieldstatus == false) {
   gs.addErrorMessage(" Special characters not allowed in member field");
   current.setAbortAction(true);
}
脚本包含1

调试

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

调试客户端脚本

调试客户端脚本的最佳方法是参考日志。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 日志和字段观察器”选项。

调试

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

调试1

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

调试服务器端脚本

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

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