如何在ServiceNow中使用Moment.js?

3
我们的团队正在尝试在我们的实例中使用 Moment.js,但似乎无法使其正常工作。以下是我们对此的几个问题:
  1. 我们注意到,默认情况下有一个名为 moment-timezone-with-data-2010-2020-v0.5 的依赖项,这个是否与 moment.js 相同?如果是,这是否意味着我们不需要引入 moment.js 作为新的依赖项?
  2. 我们尝试同时使用上述 ootb 依赖项和引入 moment.js 用于小部件,但始终会收到控制台错误,指出 moment 未定义。能否提供一些关于如何正确使用其中任意一个依赖项的说明?
  3. 如果我们想在平台业务规则中使用 moment.js,我们需要做什么才能实现这一点?您是否能够通过业务规则访问依赖项?
谢谢!
4个回答

1
这是我是如何做到的:
创建一个脚本包含,具有以下属性:
- 脚本名称为“moment”(必须使用此确切名称) - 作用域为全局或与您的项目相同的作用域(我使用了全局) - 设置为客户端可调用
MomentJS 2.22.1中的代码粘贴到脚本主体中。
要验证您是否可以访问脚本包含,请打开后台脚本并运行以下测试代码:
var calendar = moment().add(1, 'days').calendar();
gs.log("calendar test: " + calendar);

var dayCount = moment().diff('1809-02-12', 'days');
gs.log('Abraham Lincoln was born ' + dayCount + " days ago!");

关于 moment-timezone-with-data-2010-2020-v0.5 的问题:不是同一个库,这里有一个链接 Moment Timezone,它是同一组织的另一个库。

截至发帖时,2.22.1 是在 ServiceNow 中运行的最新版本。MomentJS 有更新的版本,但它们对 SN 解释器来说太新了。

您还可以使用版本为 2.22.1 的 UI 脚本。


0

moment.js

2022年4月1日,适用于SNOW San Diego的最新版本moment.js2.22.1

https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js


任何版本 > 2.22.1 都会给您以下错误:
Could not save record because of a compile error: JavaScript parse error at line (1) column (37954) problem = missing name after . operator (<refname>; line 1)



moment-timezone.js

2022年4月1日,适用于SNOW圣地亚哥的最新版本moment-timezone.js0.5.28

https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.28/moment-timezone.min.js


任何版本 > 0.5.28 都会出现以下错误:
Could not save record because of a compile error: JavaScript parse error at line (1) column (236) problem = missing name after . operator (<refname>; line 1)

0
将Moment.js的代码加载到脚本包含中,然后您可以像任何其他脚本包含一样调用它。
如果您要使用时区函数,则需要重写从时区JavaScript调用moment的调用,以使用上述脚本包含。

-1

很遗憾,在ServiceNow的服务器端无法使用momentjs。以下是momentjs在Rhino(SNOW使用的JavaScript解释器)上的安装说明:https://gist.github.com/UnquietCode/5614860

正如您所看到的,您需要编写新的Java类,而SNOW不允许您这样做。

另一方面,在客户端上,您可以使用它,只需复制“浏览器”实现并将其包含为全局UI脚本即可:https://momentjs.com/docs/#/use-it/browser/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接