ServiceNow Helsinki Tips (随時更新)

# 目的
Helsinkiより追加・更新・変更された点を、開発者視点でメモ。（備忘録代わりに随時・日々更新）
※もしかしたら Fuji, Geneva あたりから変更されていたかもしれないが、そこはご愛嬌。

# ライブラリ
- 標準で利用できるJavaScriptが追加されている。（公式ドキュメントやCommunityでは多く言及されていない。）
    - moment.js
        - form, list で使用可能
        - Service catalog では使えない
    - lodash.js
        - Service Portal でのみ可

※Global UI Script を作ったり UI Macro や onLoad Script 作って各種ライブラリを適用することも可能だが、
　個人的経験からするとオススメできない。標準で使えるものだけ使っていたほうがいい。
　メンテナンス工数や顧客要望がきつくなってくる。（無理やり適用しているので、歪が出てくる。）

- Server Side が （漸く）ECMAScript5 対応。JavaScript エンジンは Rhino 1.7 R5らしい。

[参考] (https://docs.servicenow.com/bundle/helsinki-servicenow-platform/page/script/JavaScript-engine-upgrade/concept/c_JS_engine_upgrade.html)

# API
- GlideModal
    - ソースを読む限り、BootstrapのModalを使用している。
    - data-backdrop="static" の設定方法が不明。[（Modalダイアログの枠外をクリックしても、Modalが消えないようにする設定）](http://getbootstrap.com/javascript/#modals-options)
   - 下みたいなやり方ではダメだった。要調査。
   
```js
 var dialog = new GlideModal("UI_PAGE");
 dialog.setPreference("data-backdrop", "static");
 dialog.render();
```
- Server side で Java Classを呼び出せなくなっている。下のようなコードは
![2016-10-28 13_07_15-Sample _ ServiceNow.png](https://qiita-image-store.s3.amazonaws.com/0/72876/f40c0078-3a30-a3b0-0fa9-277468f71906.png)

エラーになる。
Illegal attempt to access class 'java.XXX' via script
![2016-10-28 13_06_45-INC0010005 _ ServiceNow.png](https://qiita-image-store.s3.amazonaws.com/0/72876/2909a5d4-7c74-a434-baa3-87a685412b49.png)

- gs.sqlが使えなくなっている。以前より非推奨で将来的には無効化されると言われていたが、とうとう本当に無効化されている。

![image](https://qiita-image-store.s3.amazonaws.com/0/72876/04a2769e-a342-46a1-db0c-902e59caedbc.png)

Security restricted: Calling gs.sql is not allowed
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/91d51eca-33f1-e4cf-f614-e1f93cbbd8f8.png)

## GlideForm
- addDecoration, removeDecoration の追加。各fieldにicon(Glyphiconみたいなもの)を追加する。[API Document](https://developer.servicenow.com/app.do#!/api_doc?v=helsinki&type=client&scoped=null&to=class__client_glideform__helsinki)

## GlideSystem
- [xmlToJSON](https://developer.servicenow.com/app.do#!/api_doc?v=geneva&type=server&scoped=true&to=method_class__scoped_xmltojson_string_xmlstring__glidesystem__geneva)
    - 従来、mid server 経由で作られたecc queueの解析など、XmlDocument を使ったり非常に面倒くさかった。
    - 本メソッドが追加されたことにより、公式APIで、より簡単に、より扱いやすいJSONオブジェクトを取得することができる。画期的。
    - Fujiから追加されているらしい。（知らなかった...。）

例) Help the help deskで作られたqueue reocrdを対象

```js
var gr = new GlideRecord('ecc_queue');
gr.get('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
var json = gs.xmlToJSON(gr.payload);

JSUtil.logObject(json);
```

こんな感じになる
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/ed28e9b6-7dfd-5fd7-3068-c968dc8798c5.png)


- [XMLHelper(Script Include)の toObject を使っても同じ結果になるらしい。] (https://community.servicenow.com/community/develop/blog/2016/04/19/processing-inbound-xml-scoped-application-strategy?author=authors/dave.slusher)未検証。これも初めて知った。~~（いつからあるんだ...）~~ 手元のEurekaで調べてみたらあったorz 情報更新が止まっていたらしい...キャッチアップできていない。反省...。


# Report
- 「自由なフォーマットでReportを出力したい。Crystal ReportsやWordの差込印刷のような機能が欲しい。」と多々言われるが、OOTBのSNOWでは難しかった。

## PDF Document Generator
- 上記課題を解決するためには、[Share](https://share.servicenow.com/app.do#/home/false) に公開されている [PDF Document Generator](https://community.servicenow.com/thread/164365) を活用するしかなかったが、どうやらGenevaより PDF Generator(com.snc.pdf_generator) という公式プラグインが公開されたらしい。
- ただ、[Community](https://community.servicenow.com/message/914548#914548)でも指摘されているように実装がイケてない。

## UXstorm PDF
- [こーゆーのもある] (https://store.servicenow.com/sn_appstore_store.do#!/store/application/ad5c5f11f7131200d03eedd0358dff1b/1.1.1)  
だだ、クソ高い *$1,700.00 Per Month*

# Misc
- [JavaScript Debugger] (http://wiki.servicenow.com/index.php?title=JavaScript_Debugger#gsc.tab=0) が Genevaから消えている。
    - (Community) ["I don't see the JavaScript Debugger in Geneva"] (https://community.servicenow.com/thread/211196)
    - Debugについてはlog機能とかScript Background で頑張れ！！！らしい...。