<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ServiceNow研究所</title><description>ServiceNowの日本語情報サイト / 「問い合わせ・仕事依頼」より仕事依頼受付中</description><link>https://servicenow-lab.com/</link><item><title>ServiceNowで外部システムとファイルを送受信する方法</title><link>https://servicenow-lab.com/file-exchange/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=5176</guid><description>ServiceNowは、多くの外部システムと連携し、自動化されたワークフローを構築することが可能です。この記事では、外部システムと画像やPDFなどのバイナリファイルを送受信する方法を解説します。</description><pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowは、多くの外部システムと連携し、自動化されたワークフローを構築することが可能です。この記事では、外部システムと画像やPDFなどのバイナリファイルを送受信する方法を解説します。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;p&gt;外部システムとのファイルの送受信は、通信の起点、データの所在、送受信時のデータ形式に応じて様々なパターンが存在します。各パターンごとの実現方法を下表に示します。&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方式&lt;/th&gt;&lt;th&gt;データ形式&lt;/th&gt;&lt;th&gt;実現方法&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowから外部システムにファイルを送信&lt;/span&gt;&lt;/strong&gt;する場合&lt;br&gt;通信の起点：ServiceNow&lt;br&gt;ファイルの場所：ServiceNow&lt;/td&gt;&lt;td&gt;バイナリ&lt;/td&gt;&lt;td&gt;・REST Step&lt;br&gt;・REST Message&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Base64エンコード&lt;/td&gt;&lt;td&gt;・Base64エンコードした上でREST Step or REST Message&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;multipart/form-data形式&lt;/td&gt;&lt;td&gt;・REST Step&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowから外部システムのファイルを取得&lt;/span&gt;&lt;/strong&gt;する場合&lt;br&gt;通信の起点：ServiceNow&lt;br&gt;ファイルの場所：外部システム&lt;/td&gt;&lt;td&gt;バイナリ&lt;/td&gt;&lt;td&gt;・REST Step&lt;br&gt;・REST Message&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Base64エンコード&lt;/td&gt;&lt;td&gt;・REST Step or REST Messageで受信した上でGlideSysAttachmentでファイルを保存&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;multipart/form-data形式&lt;/td&gt;&lt;td&gt;– (送信のための方式なので考慮不要)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;外部システムからServiceNowのファイルを取得&lt;/span&gt;&lt;/strong&gt;する場合&lt;br&gt;通信の起点：ServiceNow&lt;br&gt;ファイルの場所：外部システム&lt;/td&gt;&lt;td&gt;バイナリ&lt;/td&gt;&lt;td&gt;・Attachment APIのGET /now/attachmentを利用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Base64エンコード&lt;/td&gt;&lt;td&gt;・カスタムAPIを利用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;multipart/form-data形式&lt;/td&gt;&lt;td&gt;– (送信のための方式なので考慮不要)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;外部システムからServiceNowにファイルを送信&lt;/span&gt;&lt;/strong&gt;する場合&lt;br&gt;通信の起点：外部システム&lt;br&gt;ファイルの場所：外部システム&lt;/td&gt;&lt;td&gt;バイナリ&lt;/td&gt;&lt;td&gt;・Attachment API&lt;br&gt;・Import Set API&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Base64エンコード&lt;/td&gt;&lt;td&gt;・カスタムAPIを利用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;multipart/form-data形式&lt;/td&gt;&lt;td&gt;・Attachment API&lt;br&gt;・/sys_importset.do&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;em&gt;ServiceNowにおける外部システムとのバイナリファイルの送受信方法のまとめ&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;以下、各パターンにおける具体的なデータの送受信方法について解説します。&lt;/p&gt;
&lt;h2&gt;前提知識&lt;/h2&gt;
&lt;p&gt;まず、ServiceNowと外部システム間でファイルをやり取りするために必要な基本的な知識について解説します。&lt;/p&gt;
&lt;h3&gt;Webシステムにおける画像やPDFなどのバイナリファイルの送受信方法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowはWebシステムの一つであるため、まずはWebシステム全般における画像やPDFなどのバイナリファイルを送受信する一般的な方法について説明&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;Webシステム間でHTTP(S)を利用してバイナリファイルをやり取りする際には、主に以下の3つの方法が一般的に使われます。ServiceNowもこれらの方式をサポートしています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;バイナリをそのまま送受信&lt;/strong&gt;&lt;br&gt;
リクエストボディにバイナリデータを直接設定するシンプルな方法です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Base64エンコードを使用して送受信&lt;/strong&gt;&lt;br&gt;
バイナリデータをBase64という方式でテキストに変換して送受信する方法です。この方法ではデータサイズが増えるデメリットがありますが、JSON形式のデータの中に画像などを含めることができるため、多くのAPIで使用されています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;multipart/form-data形式で送受信&lt;/strong&gt;&lt;br&gt;
フォームデータを送信する際に使われる方式で、複数のテキストやファイルを同時に送信できます。リクエストボディを区切り文字で複数の部分に区切ってテキストやファイルを指定するため、multipartと呼ばれます。ファイルを含める場合は、バイナリデータはエンコードされず、そのまま送信されるのが一般的です。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なお、システム間でファイルを転送する際にはFTP(SFTP)も利用されることがあります。ServiceNowでは、MIDサーバやRPAの機能を用いてローカルシステムとファイルをやり取りする際にFTP(SFTP)を利用することもできますが、本記事では対象外とします。&lt;/p&gt;
&lt;h3&gt;ServiceNowにおいて外部システムと通信する方法&lt;/h3&gt;
&lt;p&gt;ServiceNowでは、外部システムとの通信を行うために、いくつもの方法が用意されています。ここでは、それらのうち主要な方法について解説します。&lt;/p&gt;
&lt;h4&gt;ServiceNowが通信の起点となる場合：REST Step or REST Message&lt;/h4&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowから外部システムにリクエストを送る場合、主にFlow（ワークフロー機能）の中で使用する&lt;strong&gt;REST step&lt;/strong&gt;、もしくはスクリプトから直接呼び出す&lt;strong&gt;REST Message&lt;/strong&gt;&lt;/span&gt;を利用します。&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方式&lt;/th&gt;&lt;th&gt;概要&lt;/th&gt;&lt;th&gt;備考&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;REST step&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;ノーコードで外部システムとのシステム連携を構築するための機能&lt;/td&gt;&lt;td&gt;・Flowの一部として組み込むことで、簡単に外部連携が構築可能&lt;br&gt;・使用にはIntegration Hubのライセンスが必要（トランザクション単位の課金）*1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;REST Message&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;スクリプトを使用して外部システムと連携する機能&lt;/td&gt;&lt;td&gt;・コーディングが必要で、開発の難易度が高い&lt;br&gt;・ServiceNow標準の機能であり、トランザクション単位の課金は発生しない&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;em&gt;ServiceNowが通信の起点となる場合の外部連携方法&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;*1 課金体系については2024年Xanaduバージョン現在のものです。今後変更される可能性があるため注意してください。&lt;/p&gt;
&lt;h4&gt;外部システムが通信の起点となる場合：標準公開API or カスタムAPI&lt;/h4&gt;
&lt;p&gt;外部システムが通信の起点となる場合、ServiceNowでは標準で提供されているAPIか、カスタムAPIを利用して通信を行います。&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方式&lt;/th&gt;&lt;th&gt;概要&lt;/th&gt;&lt;th&gt;備考&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;標準公開されているWeb API&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;ServiceNowが標準で提供する外部公開API&lt;/td&gt;&lt;td&gt;・システムアカウントを発行するだけで利用可能で、開発作業は不要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;カスタムAPI&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;スクリプトを使って独自のAPIを作成し、外部システムに公開する&lt;/td&gt;&lt;td&gt;・スクリプト作成が必要で開発の難易度が高い&lt;br&gt;・自由度が高く、柔軟な実装が可能&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;em&gt;外部システムが通信の起点となる場合の外部連携方法&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;IP制限がかかったネットワーク内に外部システムが存在する場合はMID Serverを介して通信&lt;/h4&gt;
&lt;p&gt;外部システムが通信の起点となる場合は基本的には問題ありませんが、ServiceNowが通信の起点となる場合は、外部システムがIPアドレス制限などの通信制限を行っているケースがあります。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowインスタンスから直接アクセスできない内部ネットワークに外部システムが存在する場合はMID Serverを介して通信を行う必要があります&lt;/span&gt;&lt;/strong&gt;。詳細については、次の記事を参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/mid-server-part1/&quot;&gt;ServiceNow - MIDサーバーってなに？&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;ServiceNowにおけるファイルの保管方法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowにはGoogleドライブ・Oneドライブ・Boxのようなファイルスを単体で格納するためのトレージは存在せず、ファイルは特定のレコードに対する添付ファイルとして保存されます&lt;/span&gt;&lt;/strong&gt;。GUI上でも、ストレージのような場所にファイルをアップロードするのではなく、「特定のレコードに添付する」という形でファイルをアップロードします。&lt;/p&gt;
&lt;p&gt;データベース上では以下の2つのテーブルに分けて格納されます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Attachment（添付ファイル） [sys_attachment]&lt;/strong&gt;&lt;br&gt;
ファイル名、サイズ、拡張子といったメタデータを保管します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attachment Document（添付ドキュメント） [sys_attachment_doc]&lt;/strong&gt;&lt;br&gt;
ファイルの実体そのものを保存します。ファイルサイズが大きい場合は、1つの添付ファイルが複数のレコードに分割されて保存されます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/10/image-2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;ファイルをスクリプトから操作する際はGlideSysAttachmentを使用&lt;/h4&gt;
&lt;p&gt;上述のように、添付ファイルは複数のテーブルにまたがって、かつ必要に応じて分割して保管されているため、スクリプトから操作する際には、Attachment（添付ファイル）を操作するためのAPI(クラス)である&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/GlideSysAttachment/&quot;&gt;GlideSysAttachment&lt;/a&gt;を利用します。このAPIを利用することで、ファイルの取得や作成が可能です。&lt;/p&gt;
&lt;p&gt;ここまでが前提知識です。以降はパターンごとの外部システムとの添付ファイルの送受信方法について解説します。&lt;/p&gt;
&lt;h2&gt;ServiceNowから外部システムにファイルを送信する場合&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-37-1024x120.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;バイナリ&lt;/h3&gt;
&lt;p&gt;REST step、またはREST Messageを用いてバイナリを直接外部システムに送信することができます。&lt;/p&gt;
&lt;h4&gt;REST stepを用いる方法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;REST stepの設定において、HTTP Methodを”POST”に、Request Typeを”Binary”を選択すると、指定したAttachment（添付ファイル）レコードのバイナリデータをリクエストボディに設定することができます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/10/image.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;図では簡単のためAttachmentレコードを直接指定しましたが、一般的には事前に”Get Attachments on Record”アクションなどで取得したAttachmentのSysIDを渡すことになります。&lt;/p&gt;
&lt;h4&gt;REST Messageを用いる方法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/setRequestBodyFromAttachment&quot;&gt;RESTMessageV2.setRequestBodyFromAttachment()&lt;/a&gt;を用いることで、指定したAttachment（添付ファイル）レコードのバイナリデータをリクエストボディに設定することができます&lt;/span&gt;&lt;/strong&gt;。使い方はシンプルで、AttachmentレコードのSysIDを引数に渡すだけです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RESTMessageV2.setRequestBodyFromAttachment()の使い方&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;var request = new sn_ws.RESTMessageV2();
// requestのエンドポイント、メソッド、ヘッダ等を設定
request.setRequestBodyFromAttachment(&apos;&amp;lt;attachment sys_id&amp;gt;&apos;);
response = request.execute();
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Base64エンコード&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Base64エンコードしたファイルを送信する必要がある場合は、事前にスクリプトでファイルをBase64エンコードした文字列を取得した上で、REST stepやREST Messageに渡します&lt;/span&gt;&lt;/strong&gt;。ただし、&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;Base64エンコードしたファイルの取得方法は&lt;/strong&gt;&lt;/span&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;が&lt;/strong&gt;&lt;/span&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;スクリプトをScopedで書く場合とGlobalで書く場合で異なる点に注意が必要&lt;/strong&gt;&lt;/span&gt;です。&lt;/p&gt;
&lt;h4&gt;ScopedでBase64エンコード済みファイルを取得する方法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Scopedの場合は比較的シンプルで、&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/getContentBase64&quot;&gt;GlideSysAttachment.getContentBase64()&lt;/a&gt;を使ってBase64エンコードされたファイルを取得できます&lt;/span&gt;&lt;/strong&gt;。以下に、指定されたインシデントレコードに添付されたファイルをBase64形式で取得し、JSON形式のペイロードを作成するコード例を示します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ScopedでBase64エンコード済みファイルを取得する方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;var incidentSysID = &apos;インシデントレコードのSysID&apos;;
var gsa = new GlideSysAttachment();
var attachments = gsa.getAttachments(&apos;incident&apos;, incidentSysID); // Get attached file(s)
var payload = [];

while (attachments.next()) {
    var fileName = attachments.getValue(&apos;file_name&apos;); // Get file name of attachment
    var attachmentContent = gsa.getContentBase64(attachments); // Get attachment content in Base64
    
    payload.push({
        &apos;filename&apos;: fileName,
        &apos;contentBase64&apos;: attachmentContent
    });
}

gs.info(JSON.stringify(payload));
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;GlobalでBase64エンコード済みファイルを取得する方法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Globalでは、GlideSysAttachment.getContentBase64()が利用できず&lt;/span&gt;&lt;/strong&gt;、”undefined”を返してしまいます。そのため、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Scopedで作成したScript Includeを介して取得することを推奨&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;なお、Community等で調べると、次のようにGlideSysAttachment.getBytes()とGlideStringUtil.base64Encode()を使用してGlobalでBase64エンコード済みファイルを取得する方法が紹介されていますが、これらは公式にドキュメント化されていないAPIであるため、基本的には使用しない方がよいでしょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GlobalでBase64エンコード済みファイルを取得する方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;var incidentSysID = &apos;インシデントレコードのSysID&apos;;
var gsa = new GlideSysAttachment();
var attachments = gsa.getAttachments(&apos;incident&apos;, incidentSysID); //create attachment GlideRecord
var payload = [];

while (attachments.next()) {
    var fileName = attachments.getValue(&apos;file_name&apos;); // Get file name of attachment
    var attachmentContent = GlideStringUtil.base64Encode(gsa.getBytes(attachments)); // Encode attachment content in Base64
    
    payload.push({
        &apos;filename&apos;: fileName,
        &apos;contentBase64&apos;: attachmentContent
    });
}

gs.info(JSON.stringify(payload));
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;multipart/form-data形式&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;multipart/form-data形式でファイルを送信する場合、REST stepを使用&lt;/span&gt;&lt;/strong&gt;します。REST stepにおいて、HTTP Methodを”POST”に、Request Typeを”Multipart”を選択すると、Multipartを構成するUIが表示されます。このUIで(+)ボタンを押してPart Typeを”File”とすることで、ファイルを添付して送信することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/10/image-1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;一方で、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;REST Messageではmultipart/form-data形式のリクエストを作成するためのメソッドが存在せず、次の理由から恐らく実現は困難です&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;バイナリデータの扱いが困難&lt;/strong&gt;&lt;br&gt;
REST Messageでは、ペイロードにバイナリデータを直接含める必要がありますが、ServiceNowではスクリプト内でバイナリデータを直接扱う、公式にドキュメント化されたAPI(クラス)が存在しません。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;リクエストボディの型の制約&lt;/strong&gt;&lt;br&gt;
仮にペイロードを作成できたとしても、RESTMessageV2.setRequestBody()はString型しか受け付けません。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;実現方法をご存じの方がいれば、コメントでご教示いただければと思います。&lt;/p&gt;
&lt;h2&gt;ServiceNowから外部システムの中のファイルを取得しに行く場合&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-35.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;バイナリ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;REST stepまたはREST Messageを用いて、外部システムのファイルをバイナリで返すAPIやファイルをダウンロードするエンドポイントにアクセスし、その結果であるファイルをAttachmentテーブルに格納することができます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;REST stepを用いる方法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;REST stepの設定において、Save As Attachmentにチェックを入れた上で、ファイルを添付するレコードを指定&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/10/image-3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;REST Messageを用いる方法&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/saveResponseBodyAsAttachment&quot;&gt;RESTMessageV2.saveResponseBodyAsAttachment()&lt;/a&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;を用いることで、レスポンスのバイナリデータを指定したレコードの添付ファイルとして保存することができます。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;コード例は以下の通りです。&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;レスポンスのオブジェクトに対してこのメソッドを呼び出すのではなく、リクエストを行うRESTMessageV2インスタンスに対してこのメソッドを呼び出した上でリクエストのを行う（execute()メソッドを呼ぶ）&lt;/span&gt;&lt;/strong&gt;ことに注意です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RESTMessageV2.saveResponseBodyAsAttachment()でレスポンスのバイナリデータをAttachmentテーブルに格納&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;var request = new sn_ws.RESTMessageV2();
// requestのエンドポイント、メソッド、ヘッダ等を設定
request.saveResponseBodyAsAttachment(tablename, recordSysId, filename);        
response = request.execute();     
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Base64エンコード&lt;/h3&gt;
&lt;p&gt;外部システムからBase64エンコードされたバイナリファイルが返ってくる場合は、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;レスポンスボディからBase64エンコード済みのファイル部分を取り出した上でスクリプトを用いて保存&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;Base64エンコード済みのファイルの保存取得方法はがスクリプトをScopedで書く場合とGlobalで書く場合で異なる点に注意が必要&lt;/strong&gt;&lt;/span&gt;です。&lt;/p&gt;
&lt;h4&gt;ScopedでBase64エンコード済みファイルを保存する方法&lt;/h4&gt;
&lt;p&gt;Scopedの場合は、&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/writeBase64&quot;&gt;GlideSysAttachment.writeBase64()&lt;/a&gt;を用いることでBase64エンコード済みファイルをAttachmentテーブルに保存することができます。て保存します。&lt;/p&gt;
&lt;p&gt;例として、ファイル名、ファイルタイプ、Base64エンコード済みのファイルの中身を含むペイロードが取得できた前提で、そのファイルを指定されたインシデントレコードに添付するコードを示します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ScopedでBase64エンコード済みファイルを保存する方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;var incidentSysID = &apos;インシデントレコードのSysID&apos;;
var incident = new GlideRecord(&apos;incident&apos;);
incident.get(incidentSysID);

var gsa = new GlideSysAttachment();

var payload = { // このような形式のpayloadが取得できていると仮定
    &apos;fileName&apos;: &apos;example.png&apos;,
    &apos;contentType&apos;: &apos;image/png&apos;,
    &apos;contentBase64&apos;: &apos;iVBORw0KGgoAAAANSUhEUgAA...==&apos; // Example Base64 encoded content
};

// Write the Base64 encoded content as an attachment
var attachmentSysID = gsa.writeBase64(incident, payload.fileName, payload.contentType, payload.contentBase64);

gs.info(&apos;The attachment sys_id is: &apos; + attachmentSysID);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;GlobalでBase64エンコード済みファイルを保存する方法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;GlobalではwriteBase64()が利用できず、またドキュメント化されたメソッドも無いため、ScopedなScript Includeを介して実現&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;簡単にできる方法をご存じの方がいたらコメントをください。&lt;/p&gt;
&lt;h2&gt;外部システムからServiceNowの添付ファイルを取得する場合&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-36-1024x120.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;バイナリ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;外部システムからServiceNowの添付ファイルをバイナリで取得する場合は、標準で外部公開されている&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/Attachment%20API&quot;&gt;Attachment API&lt;/a&gt;を利用&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;h4&gt;添付ファイルの取得：GET /now/attachment/{sys_id}/file&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;エンドポイント”GET /now/attachment/{sys_id}/file”を用いることで、添付ファイルをバイナリファイルとして取得することができます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;curlコマンドの例を示します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GET /now/attachment/{sys_id}/fileの使用例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl &amp;quot;https://&amp;lt;インスタンス名&amp;gt;.service-now.com/api/now/attachment/&amp;lt;AttachmentレコードののSysID&amp;gt;/file&amp;quot; \
 -u &amp;lt;認証情報&amp;gt; \
 -o &amp;quot;test.png&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このエンドポイントではAttachmenレコードのSysIDが必要となりますが、多くのユースケースでは、番号やSysIDが分かっているレコードから、そのレコードに添付されたファイルを取得します。そのため、次のエンドポイントとセットで利用されることが多いです。&lt;/p&gt;
&lt;h4&gt;メタデータの取得・検索：GET /now/attachment&lt;/h4&gt;
&lt;p&gt;“GET /now/attachment”を利用することで、Attachmentテーブルに格納されている添付ファイルのメタデータ（SysID、ファイル名、ファイルの種類、添付先のレコードなど）の一覧を取得することができます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;多くの場合、URLクエリパラメータ”sysparm_query”を利用してレコードのSysIDからそのレコードに添付されたファイルを検索するために利用&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;例として、インシデントレコードに添付されているファイルのメタデータを取得するcurlコマンドを示します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GET /now/attachmentの使用例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl &amp;quot;https://&amp;lt;インスタンス名&amp;gt;.service-now.com/api/now/attachment?sysparm_query=table_name%3Dincident%5Etable_sys_id%3D&amp;lt;インシデントレコードのSysID&amp;gt;&amp;quot; \
 -u &amp;lt;認証情報&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Base64エンコード&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;ServiceNowからBase64エンコードされたファイルを取得するための標準APIは提供されていません&lt;/span&gt;&lt;/strong&gt;。そのため、外部システム側でBase64エンコードを行うか、Scripted REST API等を用いてエンドポイントを作成する必要があります。&lt;/p&gt;
&lt;p&gt;エンドポイントを自作する場合は、上述の&lt;a href=&quot;https://servicenow-lab.com/#how-to-retrieve-base64-encoded-file-scoped&quot;&gt;ScopedでBase64エンコード済みファイルを取得する方法&lt;/a&gt;及び&lt;a href=&quot;https://servicenow-lab.com/#how-to-retrieve-base64-encoded-file-global&quot;&gt;GlobalでBase64エンコード済みファイルを取得する方法&lt;/a&gt;を参照ください。&lt;/p&gt;
&lt;h2&gt;外部システムからServiceNowにファイルを送信（アップロード）する場合&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-38-1024x120.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;バイナリ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;外部システムからServiceNowにバイナリファイルを直接アップロードする場合に利用できるのが、&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/Attachment%20API&quot;&gt;Attachment API&lt;/a&gt;のエンドポイント”POST /now/attachment/file”&lt;/span&gt;&lt;/strong&gt;です。クエリパラメータでファイル名、添付先テーブル、添付先レコードのSysIDを指定し、リクエストボディにバイト列を書き込みます。&lt;/p&gt;
&lt;p&gt;インシデントレコードにファイルを添付するcurlコマンドの例を示します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST &amp;quot;https://&amp;lt;インスタンス名&amp;gt;.service-now.com/api/now/attachment/file?file_name=&amp;lt;ファイル名&amp;gt;&amp;amp;table_name=incident&amp;amp;table_sys_id=&amp;lt;インシデントレコードのSysID&amp;gt;&amp;quot; \
 -u &amp;lt;認証情報&amp;gt; \
 -H &amp;quot;Content-Type: image/png&amp;quot; \
 --data-binary @test.png
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Base64エンコード&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;外部システムからServiceNowにBase64エンコード済みのファイルを直接アップロードできる標準APIは提供されていません&lt;/span&gt;&lt;/strong&gt;。そのため、外部システム側でバイナリ変換を行うか、Scripted REST API等を用いてBase64エンコード済みファイルを受け付けることができるエンドポイントを作成する必要があります。&lt;/p&gt;
&lt;p&gt;エンドポイントを自作する場合は、上述の&lt;a href=&quot;https://servicenow-lab.com/#save-base64-encoded-file&quot;&gt;ScopedでBase64エンコード済みファイルを保存する方法&lt;/a&gt;を参照ください。&lt;/p&gt;
&lt;h3&gt;multipart/form-data形式&lt;/h3&gt;
&lt;p&gt;外部システムからServiceNowに&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;multipart/form-data形式&lt;/span&gt;&lt;/strong&gt;でファイルをアップロードする方法は、用途に応じて複数そんざいします。&lt;/p&gt;
&lt;h4&gt;Attachment API – POST /now/attachment/upload&lt;/h4&gt;
&lt;p&gt;汎用的に利用できるのが、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;&lt;a href=&quot;https://developer.servicenow.com/dev.do#!/search/latest/All/Attachment%20API&quot;&gt;Attachment API&lt;/a&gt;のエンドポイント”POST /now/attachment/upload”&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;curlコマンドの例を示します。バイナリを直接送信する/fileとは異なり、ファイル名や添付対象レコードの情報は、マルチパートデータ内に含めます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST &amp;quot;https://&amp;lt;インスタンス名&amp;gt;.service-now.com/api/now/attachment/upload&amp;quot; \
 -u &amp;lt;認証情報&amp;gt; \
 -H &amp;quot;Content-Type: multipart/form-data&amp;quot; \
 -F &amp;quot;table_name=incident&amp;quot; \
 -F &amp;quot;table_sys_id=&amp;lt;インシデントレコードのSysID&amp;gt;&amp;quot; \
 -F &amp;quot;file=@test.png&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;なお、ファイルを表すパートの名前の指定は無いようです。また、ファイルを複数添付しても初めの一つしかアップロードされませんでした。そのため、恐らく最初にアップロードされたバイナリのインプットを添付ファイルとして認識する仕様になっているようです。&lt;/p&gt;
&lt;h4&gt;Import Setを用いてExcelやCSVファイルを取り込ませたい場合は /sys_importset.do&lt;/h4&gt;
&lt;p&gt;従業員データの取り込みなど、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ExcelやCSV形式のファイルを特定のテーブルにImport Setを経由して取り込ませたい場合はエンドポイント”/sys_importset.do”を利用&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;例として、Import Set “Sys UI Message”とTrasnform Map “Sys UI Message Transform Map”を用いて、Messageテーブルの翻訳をインポートするcurlコマンドを示します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -X POST &amp;quot;https://&amp;lt;インスタンス名&amp;gt;.service-now.com/sys_import.do?sysparm_import_set_tablename=u_sys_ui_message&amp;amp;sysparm_transform_after_load=true&amp;quot; \
 -u &amp;lt;認証情報&amp;gt; \
 -H &amp;quot;Content-Type: multipart/form-data&amp;quot; \
 -F &amp;quot;file=@sysuimessagedata.xlsx&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sysparm_transform_after_load=trueとすることで、ファイルがアップロード後にTransform Mapを用いたデータの登録までを1回のリクエストで行うことができます。&lt;/p&gt;
&lt;p&gt;このAPIは、XMLやJSON形式に変換してデータを送信する必要のある&lt;a href=&quot;https://docs.servicenow.com/search?&amp;amp;q=Import%20Set%20API&quot;&gt;Import Set API&lt;/a&gt;と比べ&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;使い勝手が良い反面、エラーハンドリングが不十分であることに注意&lt;/span&gt;&lt;/strong&gt;が必要です。例えば、以下のような状況でも、200 – OKというステータスが返ります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;存在しないImport Set名を指定した場合&lt;/li&gt;
&lt;li&gt;誤ったファイル形式（例: 画像ファイル）を送信した場合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、成功した場合でも、リクエストボディは空で成否判定もできません。そのため、Transform Mapのログを定期的に確認するなど、エラーハンドリングや結果確認を補完する処理とセットで利用することを推奨します。&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;
</content:encoded><category>検討・企画</category></item><item><title>ServiceNow – 開発者・管理者必見! SN Utilsの概要・使い方</title><link>https://servicenow-lab.com/sn-utils/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=5039</guid><description>ServiceNow開発者・管理者用便利ツールである SNUtilsの概要や使い方を説明します。</description><pubDate>Tue, 10 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNow開発者・管理者用便利ツールである SNUtilsの概要や使い方を説明します。&lt;/p&gt;
&lt;h2&gt;SN Utilsとは&lt;/h2&gt;
&lt;p&gt;SN Utilsとは&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNow開発者・管理者の作業効率を飛躍的に向上させる非公式のブラウザ拡張ツール&lt;/span&gt;です。開発者はServiceNow従業員の&lt;a href=&quot;https://www.linkedin.com/in/arnoudkooi/&quot;&gt;Arnoud Kooi&lt;/a&gt;であり、2024年8月時点でも更新が続いています。非公式ながらその便利さが認められ、&lt;a href=&quot;https://developer.servicenow.com/blog.do?p=%2Fpost%2Fbreak-point-044%2F&quot;&gt;ServiceNowのDeveloperブログ&lt;/a&gt;や&lt;a href=&quot;https://www.youtube.com/watch?v=NJzT3HGTHXQ&quot;&gt;Youtubeチャンネル&lt;/a&gt;でも紹介されています。&lt;/p&gt;
&lt;h2&gt;インストール方法&lt;/h2&gt;
&lt;p&gt;拡張機能/アドオンとして各ブラウザに追加します。対応ブラウザはChrome, Safari, Firefox, Edgeの4つです。&lt;br&gt;
以下、各ブラウザのインストールリンクです。&lt;br&gt;
&lt;a href=&quot;https://chrome.google.com/webstore/detail/sn-utils-tools-for-servic/jgaodbdddndbaijmcljdbglhpdhnjobg/reviews&quot;&gt;Chrome&lt;/a&gt; / &lt;a href=&quot;https://microsoftedge.microsoft.com/addons/detail/sn-utils-tools-for-serv/cpppnajnconeddhhoadibooafkhhalfd&quot;&gt;Edge&lt;/a&gt; / &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/servicenow-utils2/reviews/&quot;&gt;Firefox&lt;/a&gt; / &lt;a href=&quot;https://apps.apple.com/app/sn-utils/id1542209967&quot;&gt;Safari&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インストール後、各ServiceNowインスタンスにログインした状態でSN Utilsが自動で機能するようになります。&lt;/p&gt;
&lt;h2&gt;主な機能&lt;/h2&gt;
&lt;p&gt;SN Utilsには数多くの便利機能がありますが、その中でも筆者がよく利用する機能について紹介します。なお、筆者はWindows OSにてChrome版のSN Utilsを使用しています。&lt;/p&gt;
&lt;h3&gt;スラッシュコマンド（Slashcommands）&lt;/h3&gt;
&lt;p&gt;インスタンスを開いている状態でスラッシュキー(“/”)を押すと、以下のスラッシュコマンド画面が表示されます。&lt;span class=&quot;marker-under-blue&quot;&gt;この画面に様々なコマンドを入力することで、作業を大幅に効率化させることができます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-17.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;個人的によく使うスラッシュコマンドを説明します。どれも日々の生産性を高め、ServiceNow開発を非常に快適にさせてくれます。&lt;/p&gt;
&lt;h4&gt;言語切り替え&lt;/h4&gt;
&lt;p&gt;/lang &amp;lt;言語&amp;gt;で、&lt;span class=&quot;marker-under-blue&quot;&gt;インスタンス言語を変更することができます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-8-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;プロパティ検索&lt;/h4&gt;
&lt;p&gt;/p &amp;lt;検索したい文字列&amp;gt; で、&lt;span class=&quot;marker-under-blue&quot;&gt;検索したい文字列を含むプロパティを検索することができます。&lt;/span&gt;/pのみの場合、プロパティテーブルを開きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-6-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;ユーザ検索&lt;/h4&gt;
&lt;p&gt;プロパティ検索と同様に、&lt;span class=&quot;marker-under-blue&quot;&gt;/u &amp;lt;検索したい文字列&amp;gt;で、ユーザを検索することができます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-5-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;プロパティ・ユーザと同様に、&lt;span class=&quot;marker-under-blue&quot;&gt;ビジネスルール(/br)、UIアクション(/ua)、UIポリシー(/up)、スクリプトインクルード(/si)、クライアントスクリプト(/cs)も検索可能です。&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;レコード検索&lt;/h4&gt;
&lt;p&gt;/&amp;lt;SysID&amp;gt;で、&lt;span class=&quot;marker-under-blue&quot;&gt;該当SysIDを持つレコードの検索が可能です&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;。&lt;/span&gt;スクリプトやシステムプロパティにSysIDが直接入力されているレコードを確認したいときに便利です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-28-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;フォームの必須項目を入力&lt;/h4&gt;
&lt;p&gt;/rnd で、&lt;span class=&quot;marker-under-blue&quot;&gt;フォーム画面の必須項目を自動入力します。&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;テスト時や、さっとレコードを作成したいときに、非常に重宝します。&lt;/span&gt;&lt;br&gt;
開発者であるArunodお気に入りの機能だそうです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-9-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Docs検索&lt;/h4&gt;
&lt;p&gt;/docs &amp;lt;検索したい文字列&amp;gt;で&lt;a href=&quot;https://docs.servicenow.com/j&quot;&gt;ServiceNow Docs&lt;/a&gt;の記事検索ができます。同様に、/apiでは&lt;a href=&quot;https://developer.servicenow.com/&quot;&gt;ServiceNow Developper&lt;/a&gt;でAPIを、/commでは&lt;a href=&quot;https://www.servicenow.com/community/&quot;&gt;ServiceNow Community&lt;/a&gt;でコミュニティ記事を検索できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-16-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;バックグラウンドスクリプトに遷移&lt;/h4&gt;
&lt;p&gt;/bgで、バックグラウンドスクリプトを開きます。&lt;span class=&quot;marker-under-blue&quot;&gt;SN Utilsをインストールすることでバックグラウンドスクリプトも改良され、エディタが黒背景に、スクリプトの実行結果が画面右に出力されるようになります。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-11-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;また、/bgcで、&lt;span class=&quot;marker-under-blue&quot;&gt;今開いているレコードをGlideRecordで取得するスクリプトが自動的に入力された状態で、バックグラウンドスクリプトを開くことができます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-14-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;GlideRecordについては以下の記事で詳しく解説しています。あわせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/gliderecord/&quot;&gt;ServiceNow - GlideRecordのイメージと使い方　図解解説&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回紹介したスラッシュコマンドを一覧にまとめておきます。&lt;/p&gt;
&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;コマンド&lt;/td&gt;&lt;td&gt;説明&lt;/td&gt;&lt;td&gt;例&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/lang &amp;lt;言語コード&amp;gt;&lt;/td&gt;&lt;td&gt;インスタンス言語を切り替える&lt;/td&gt;&lt;td&gt;/lang ja&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/p &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;プロパティを検索する&lt;/td&gt;&lt;td&gt;/p home&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/u &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;ユーザを検索する&lt;/td&gt;&lt;td&gt;/u admin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/br &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;ビジネスルールを検索する&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/ua &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;UIアクションを検索する&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/up &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;UIポリシーを検索する&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/si &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;スクリプトインクルードを検索する&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/cs &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;クライアントスクリプトを検索する&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/&amp;lt;SysID&amp;gt;&lt;/td&gt;&lt;td&gt;SysIDからレコードを検索する&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/docs &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;Docsの記事を検索する&lt;/td&gt;&lt;td&gt;/docs GlideRecord&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/api &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;DeveloperサイトのAPIリファレンスを検索する&lt;/td&gt;&lt;td&gt;/api g_form&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/comm &amp;lt;検索したい文字列&amp;gt;&lt;/td&gt;&lt;td&gt;コミュニティ記事を検索する&lt;/td&gt;&lt;td&gt;/comm GlideAjax&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/rnd&lt;/td&gt;&lt;td&gt;フォーム画面で必須項目を自動入力する&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/bg&lt;/td&gt;&lt;td&gt;バックグラウンドスクリプトを開く&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;/bgc&lt;/td&gt;&lt;td&gt;開いていたレコードを取得するスクリプトが入力された状態のバックグラウンドスクリプトを開く&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;em&gt;よく使うスラッシュコマンド&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;項目名表示（Technical Names）&lt;/h3&gt;
&lt;p&gt;フォーム画面の白い部分をダブルクリックすることで、&lt;span class=&quot;marker-under-blue&quot;&gt;フィールドラベルの横にフィールド名を表示させることができます。&lt;/span&gt;各フィールドの内部名を確認したいときに非常に便利です。&lt;br&gt;
また、Referenceフィールドは、フィールド名をクリックすることで、参照元となるテーブルのリスト画面を表示可能です（リスト画面でも同様に余白をダブルクリックすることで、フィールドの項目名を表示することが可能です）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-20-1024x589.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;さらに、ヘッダー部分のリンクをクリックすることで、&lt;span class=&quot;marker-under-blue&quot;&gt;Scratchpadの値や、拡張元を含む各テーブルのフィールドがフォーム画面上に表示されているか・されていないか・表示されているが何らかのスクリプト等で隠されているか を確認することができます&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-19-1024x600.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;なおこれらの情報は/tn スラッシュコマンドでも表示させることができますが、筆者はダブルクリックでいつも表示させています。&lt;/p&gt;
&lt;h3&gt;ポップアップタブ（Pupup tabs）&lt;/h3&gt;
&lt;p&gt;拡張機能のアイコンをクリックすることで、ポップアップタブを開くことができます。こちらにも様々な便利機能が用意されています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-25-1024x503.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;以下、個人的によく利用するポップアップタブの機能を紹介します。&lt;/p&gt;
&lt;h4&gt;UpdateSet&lt;/h4&gt;
&lt;p&gt;現在のアプリケーションスコープにおける&lt;span class=&quot;marker-under-blue&quot;&gt;利用可能なUpdateSetの一覧を表示し、UpdateSetの切り替えや新規作成、各UpdateSetの定義画面へ遷移することができます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-26-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;UpdateSetについては以下の記事で詳しく解説しています。あわせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/what-is-update-set/&quot;&gt;ServiceNow - Update Set（更新セット）の図解解説&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/update-set-migration/&quot;&gt;Update Set（更新セット）移送に関する注意点・Tips&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Tables&lt;/h4&gt;
&lt;p&gt;テーブル名を検索し、&lt;span class=&quot;marker-under-blue&quot;&gt;リスト画面やテーブル定義を表示することができます。特に、作成したカスタムテーブルのリスト画面を表示したいときに重宝します。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-24-1024x499.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;その他&lt;/h2&gt;
&lt;p&gt;その他、筆者が利用している便利機能を紹介します。&lt;/p&gt;
&lt;h3&gt;スコープ・アプリケーションの確認・変更&lt;/h3&gt;
&lt;p&gt;地球儀アイコンの左に、&lt;span class=&quot;marker-under-blue&quot;&gt;現在のアプリケーションスコープやUpdateSetが表示されます。クリックすることで、それらを変更することができます。UpdateSet切り替えミスの防止に繋がると共に、切り替えのステップを短縮できます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-27-1024x503.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;また、現在のアプリケーションスコープと異なるスコープで作成されているレコードを開いた際、通常で表示されるスコープ変更リンクをクリックしても一時的にしかスコープが変更されませんが、&lt;span class=&quot;marker-under-blue&quot;&gt;SN Utilsで表示されるリンクをクリックすると、該当するスコープへ永続的に切り替えることができます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-33-1024x503.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;フォーム保存がショートカットで実行できる&lt;/h3&gt;
&lt;p&gt;以下のショートカットで、&lt;span class=&quot;marker-under-blue&quot;&gt;いちいちUpdateやSaveのUI Actionをクリックせずに、レコードの保存が可能です。&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ctrl+S：フォームの保存&lt;/li&gt;
&lt;li&gt;Ctrl+Shift+S：レコードを挿入して維持（Insert and Stay）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;リスト画面に特定の項目を瞬時に表示させる&lt;/h3&gt;
&lt;p&gt;リスト画面の歯車マーク右に表示されているアイコンをクリックすることで、&lt;span class=&quot;marker-under-blue&quot;&gt;特定の項目（初期設定では更新日時、更新者、作成日時、アプリケーション）を瞬時にリスト画面に表示させるようパーソナライズすることができます。&lt;/span&gt;最新のレコードや自分が開発していたレコードを確認するために、リスト画面を更新日時でソートしたい。が、リスト画面に更新日時フィールドが表示されていない…なんて時にとても役立ちます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-30-1024x529.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;表示させる項目は、ポップアップタブのSettingsでカスタム可能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-31-1024x503.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;インスタンスごとにタグを表示する&lt;/h3&gt;
&lt;p&gt;ポップアップタブのSettingsタブで「Enable Instance Tag」をチェックすることで、インスタンス毎にタグを表示させることができます。タグは色やサイズ、配置場所等を細かく設定できるため、&lt;span class=&quot;marker-under-blue&quot;&gt;開発環境、テスト環境、本番環境の区別を強調し、操作環境ミスを減らすことができます。&lt;/span&gt;&lt;br&gt;
タグの表示/非表示は/itt スラッシュコマンドで変更できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-32-1024x502.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;※ただし筆者は、以前から愛用していたEnvironment Indicatorという別の拡張機能を使用しています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/environment-indicator/kgdbcpllbbnimjgoiomfdebldcofmlbl?hl=ja&quot;&gt;Environment Indicator - Chrome ウェブストア&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;使用にあたっての注意&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-red&quot;&gt;画面やDOMに影響を与えるものである&lt;/span&gt;ため、クライアント系の動作テストやユーザマニュアル作成時、ベンダーの方はクライアントへのデモ披露時には念のためSN Utilsをオフにすることを推奨します。&lt;/p&gt;
&lt;p&gt;その他、SN Utilsには様々な便利機能が備わっています。&lt;a href=&quot;https://www.linkedin.com/company/sn-utils/posts/?feedView=all&quot;&gt;LinkedIn&lt;/a&gt;や&lt;a href=&quot;https://x.com/sn_utils&quot;&gt;X（旧Twitter）&lt;/a&gt;アカウントでもTipsが随時投稿されているので、是非チェックしてみてください。&lt;br&gt;
今回は以上です。&lt;/p&gt;
</content:encoded><category>開発・導入</category></item><item><title>Update Set（更新セット）移送に関する注意点・Tips</title><link>https://servicenow-lab.com/update-set-migration/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=5035</guid><description>ServiceNowのUpdate Set（更新セット）をインスタンス間で移送する際の注意点やTipsを共有します。なお、Update Set自体については「ServiceNow – Update Set（更新セット）の図解解説」を、Ser…</description><pubDate>Sun, 01 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowのUpdate Set（更新セット）をインスタンス間で移送する際の注意点やTipsを共有します。なお、Update Set自体については「&lt;a href=&quot;https://servicenow-lab.com/what-is-update-set/&quot;&gt;ServiceNow – Update Set（更新セット）の図解解説&lt;/a&gt;」を、ServiceNowにおける開発資源の移送全般については「&lt;a href=&quot;https://servicenow-lab.com/develop-transfer/&quot;&gt;ServiceNowにおける開発・資源移送（デプロイ）の全体像&lt;/a&gt;」を併せて参照ください。&lt;/p&gt;
&lt;h2&gt;開発時・移送前&lt;/h2&gt;
&lt;h3&gt;Update Set（更新セット）に記録されない変更に注意&lt;/h3&gt;
&lt;p&gt;Update Set（更新セット）には全ての変更が記録されるわけではありません。基本的な考え方として、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;設定系のテーブルは記録され、データ・トランザクション系のテーブルは記録されない&lt;/span&gt;&lt;/strong&gt;ことを覚えておきましょう。&lt;/p&gt;
&lt;p&gt;また、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;開発者からみると移送されるべきと考えられる変更の中に、一部Update Setに記録されないものがあります&lt;/span&gt;&lt;/strong&gt;。&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;これらの変更は、レコードをXML形式でエクスポート・インポートする機能を使って移送&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;詳細は次の記事で詳しく解説しているので、併せて参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/what-is-update-set/#which-are-captured&quot;&gt;ServiceNow - Update Set（更新セット）の図解解説&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Update Set（更新セット）への記録漏れに注意&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;移送対象のUpdate Set（更新セット）に記録すべき変更が、”Default” Update Setや、移送予定のない無関係なUpdate Setに含まれていると、機能を正しく移送することができません&lt;/span&gt;&lt;/strong&gt;。特に、Service Portal、Employee Centerの開発・変更を行う場合などで、複数のアプリケーションスコープをまたいで開発を行う場合に漏れやすいです。&lt;/p&gt;
&lt;p&gt;開発者各自が注意を払うべきですが、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;記録漏れを完全に防ぐのは難しいため、Update SetをComplete状態に変更する前に、以下の手順で必ず確認を行いましょう&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Customer Update（顧客アップデート）テーブルのリストを開く&lt;/strong&gt;&lt;br&gt;
メニューに”sys_update_xml.list”と打ち込むことでリストを開くことができます&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-14.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;開発を行った期間、および開発者のユーザで絞りこむ&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-15.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;適切なUpdate Setに含まれていることを確認する&lt;/strong&gt;&lt;br&gt;
この時、Update Setを明示的に指定していない場合に指定される”Default” Update Setになっている場合は漏れている可能性が高いです&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-16-1024x215.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Update Set（更新セット）への記録漏れを発見した場合&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;更新セットへの追加が漏れていた場合は、細心の注意を払いつつCustomer Update（顧客アップデート）レコードのUpdate Setフィールドの値を修正し、適切なUpdate Setに記録されるようにします&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;なお、適切なUpdate Setを選択した状態で再度更新を行う方法もありますが、この場合、対象レコードを意図的に変更してから元に戻すなどの操作が必要となり、操作ミス（二次被害）を誘発する可能性があります。また、”Default” Update Setなどにゴミが残るため、個人的には上述の方法を推奨します。&lt;/p&gt;
&lt;h3&gt;誤ったUpdate Set（更新セット）への記録に注意&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Update Setへの記録漏れに加え、誤ったUpdate Setに変更を記録してしまうことにも注意&lt;/span&gt;&lt;/strong&gt;が必要です。確認方法と対応は、上述の記録漏れの場合と同様です。&lt;/p&gt;
&lt;p&gt;ただし、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;誤って記録したUpdate Setが、本来記録されるべきUpdate Setと同時に移送する予定のUpdate Setである場合、後述のUpdate set batching機能を利用することで、複数のUpdate Setを一つのUpdate Setであるかのように扱うことができ、問題なく移送できます&lt;/span&gt;&lt;/strong&gt;。そのため、開発資源の管理の観点で適切なUpdate Setに必ず含めたいということでなければ、リスクを冒して正しいUpdate Setに移し替える必要はなく、そのまま放置することも一つの選択肢です。&lt;/p&gt;
&lt;h2&gt;移送時&lt;/h2&gt;
&lt;h3&gt;プラグインは移送先の環境で事前に有効化する&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;プラグインは各環境で個別に有効化する必要があります&lt;/span&gt;&lt;/strong&gt;。開発環境で有効化したプラグインが前提となるUpdate Setを、プラグインが有効化されていない移送先の環境に適用すると、エラーが発生する可能性があります。これを防ぐため、移送先の環境でも同じプラグインを事前に有効化しておきます。&lt;/p&gt;
&lt;h3&gt;他の環境から直接Update Setを取得する場合はユーザの認証設定に注意&lt;/h3&gt;
&lt;p&gt;「&lt;a href=&quot;https://servicenow-lab.com/develop-transfer&quot;&gt;ServiceNowにおける開発・資源移送（デプロイ）の全体像&lt;/a&gt;」でも解説しているように、Update Setの移送には、次の2つの方法があります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;本番インスタンス側で開発インスタンスの情報（URLや管理者権限を持つアカウントのID・パス）を設定し、Retrieve（取り込み）を行う&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;開発インスタンスからUpdate SetをXMLファイルとしてエクスポートし、それを本番インスタンスにアップロードする&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;前者の方法を採用する場合、開発インスタンスのユーザ情報を設定する際に以下の点に注意が必要&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ユーザの2FAが有効になっている場合&lt;/strong&gt;&lt;br&gt;
ServiceNowの2段階認証が設定されていると、パスワードの末尾にワンタイムパスワードを追加します。パスワードのみを入力すると認証エラーとなります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ユーザのパスワードリセットが強制されている場合&lt;/strong&gt;&lt;br&gt;
Update Set用に作成したユーザが一度もログインしていない場合などでパスワードリセットが強制されている（”Password needs reset” フィールドにチェックが入っている）と、エラーが発生します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-1024x224.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Update Set同士の依存関係はUpdate set baching機能で解消可能&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;複数のUpdate Setに依存関係がある場合、依存元のUpdate Setを依存先より先に、または同時に移送する必要があります&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;ただし、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;依存関係にある複数のUpdate Setを同時に移送する場合、Update Setに親子関係を持たせることで、親のUpdate Setを移送すれば子も含めて一括で移送できる Update Set batching 機能を利用することが可能です&lt;/span&gt;&lt;/strong&gt;。この機能を使うことで、依存関係を意識する必要がなくなります。&lt;/p&gt;
&lt;h3&gt;Update SetとXML移送の依存関係は特に注意する必要はない&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Update SetとXML移送の依存関係については、基本的に大きな注意を払う必要はありません&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;例えば、タスクのアサインを自動決定するためのAssignment Data Lookup設定と、そのアサイン先のグループ設定を考えた場合、グループ設定はUpdate Setに記録されないため、XMLで移送する必要があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/09/image-1-1024x353.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;この状態でLookup設定を先にUpdate Setで移送した場合、たとえAssignment Groupフィールドで指定しているグループのレコードが存在しなくても、フィールドの内部的な値であるSysIDは正しく移送されます&lt;/strong&gt;。そのため、&lt;strong&gt;XMLを用いてSysIDを維持したままグループを後から移送すれば、結果的に正しく紐づきます&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;ただし、グループを移送するまでは、Assignment Groupフィールドが設定画面上で空白に見える（＝設定されていないように見える）ため、基本的には依存元のデータ（XML）を先に移送することを推奨します。&lt;/p&gt;
&lt;p&gt;この考え方は、XML移送するデータ間の依存関係にも同様に適用されます。&lt;/p&gt;
&lt;h3&gt;Preview（プレビュー）は事前に実施する&lt;/h3&gt;
&lt;p&gt;Update Setの移送は次の3ステップで行います。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;特に利用ユーザのログインを止めたり、システムメンテナンスとして事前周知を行った上で行う移送の場合、Preview（プレビュー）までは作業日よりも前に完了させておき、作業当日に行うのはCommit（コミット）だけにしましょう&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Update Setの移送（資源移送）&lt;/strong&gt;　…　開発環境から検証・本番環境にUpdate Setを移送する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview（プレビュー）&lt;/strong&gt;　…　Update Setを適用した場合に、既存の設定との衝突等がないかを確認する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit（コミット）&lt;/strong&gt;　…　Update Setに含まれる変更を実際に適用する&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Previewで問題が発覚した場合の対応&lt;/h4&gt;
&lt;p&gt;Previewで問題が発覚した場合、次の2つの対応方法があります。それぞれにメリットとデメリットがあるため、原因や状況に応じて使い分けます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Update Setを修正して移送し直す&lt;/strong&gt;&lt;br&gt;
移送先の環境からRemote Update Set（リモート更新セット）を削除し、移送元環境でUpdate Setを修正して、再度移送します&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update Setを適用した上で、修正用のUpdate Setを追加移送する&lt;/strong&gt;&lt;br&gt;
問題のあるUpdate Setを適用、もしくは適用をスキップしてCommitした上で、修正用のUpdate Setを追加で移送します&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;移送後&lt;/h2&gt;
&lt;p&gt;移行後に注意すべき点は、移送元環境と移送先環境で異なる設定が必要な場合の設定漏れです。&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;外部連携（IF）における接続情報&lt;/strong&gt;の変更漏れに注意&lt;/h3&gt;
&lt;p&gt;外部システムとの連携を行う場合、通常、ServiceNow側と対向システム側の双方に開発、ステージング、本番といった複数の環境が存在することがあります。&lt;/p&gt;
&lt;p&gt;ServiceNowの移送元と移送先で接続する対向システムの環境が異なる場合は、移送後に手動で接続情報を変更しましょう。&lt;/p&gt;
&lt;h3&gt;Privateなシステムプロパティの設定漏れに注意&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;PrivateなSystem Property（システムプロパティ）の設定はそのインスタンスのみで有効な設定となり、別のインスタンスに移送されません&lt;/span&gt;&lt;/strong&gt;。そのため、移送後に手動で設定を行う必要があります。&lt;/p&gt;
&lt;p&gt;代表例はインスタンスのメール送信可否（メール送信On/Off）を制御するSystem Property “glide.email.smtp.active”で、設定が漏れるとメール通知が送信されない、といった障害に繋がります。&lt;/p&gt;
&lt;p&gt;詳細は下記の記事をご確認ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/what-is-system-property/&quot;&gt;ServiceNowのSystem Property（システムのプロパティ）とは何か&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Update Setの移行で失敗しないために&lt;/h2&gt;
&lt;p&gt;これまで説明してきたように、Update Setの移送には多くの注意点があります。移行の失敗を避けるために、開発段階で以下の3つのドキュメントを作成し、注意が必要なポイントに気づき次第メモしておくことをお勧めします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Update Set一覧&lt;/strong&gt;&lt;br&gt;
移送すべきUpdate Setの一覧と、依存関係を整理したもの。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XML移送対象一覧&lt;/strong&gt;&lt;br&gt;
Update Setには記録されずXMLで移送する対象の一覧。テーブル名やデータのフィルタ条件などを記載。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プラグイン一覧&lt;/strong&gt;&lt;br&gt;
プラグインと、それがどの環境で有効化されているか、または有効化する予定かを記録。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;システムプロパティ一覧&lt;/strong&gt;&lt;br&gt;
利用するシステムプロパティの一覧と、環境ごとの値を記録。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;移行手順書&lt;/strong&gt;&lt;br&gt;
Update SetやXMLの移送手順、移送後に手動で設定すべき項目についての手順を記載。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上です。移送の成功率が少しでも上がれば幸いです。&lt;/p&gt;
</content:encoded><category>検討・企画</category></item><item><title>ServiceNow – Auto-numbering(自動採番)の解説</title><link>https://servicenow-lab.com/auto-numbering/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=1257</guid><description>ServiceNowにおいて、レコードの自動採番を行うための仕組みであるauto-numbering(自動採番)、もしくはNumber Maintenance(番号メンテナンス)機能について解説します。</description><pubDate>Sun, 25 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowにおいて、レコードの自動採番を行うための仕組みであるauto-numbering(自動採番)、もしくはNumber Maintenance(番号メンテナンス)機能について解説します。&lt;/p&gt;
&lt;h2&gt;Auto-numbering(自動採番)機能の基本&lt;/h2&gt;
&lt;h3&gt;概要&lt;/h3&gt;
&lt;p&gt;Auto-numbering(自動採番)機能を使用すると、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;レコードに「接頭辞 + 0埋め連番」の形式で番号を自動的に付与&lt;/span&gt;&lt;/strong&gt;できます。例えば、Incident(インシデント)テーブルには「INC」という接頭辞と7桁の0埋め連番が設定されています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;自動採番の設定はServiceNow上の各テーブル単位で行われます。例えば、Request(要求)テーブルであれば、依頼や要求の種別にかかわらず、共通の接頭辞と連番で番号が設定されます。&lt;/p&gt;
&lt;p&gt;また、システムによっては「番号の上2桁を西暦にする」といった有意コードが採用されることがありますが、ServiceNowでは、接頭辞による最低限の意味付けはあるものの、それ以上の意味は持たない無意コードが採用されています。&lt;/p&gt;
&lt;h3&gt;構成要素&lt;/h3&gt;
&lt;p&gt;Auto-numbering(自動採番)は、次の要素で構成されています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Number(番号)テーブル&lt;/strong&gt;　…　各種テーブルの採番ルール（接頭辞、桁数、最初の番号）を管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Number Counter(数カウンタ)テーブル&lt;/strong&gt;　…　各テーブルの自動採番における連番部分の現在の値を管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;採番ロジック&lt;/strong&gt;　…　Numberテーブルの定義とCounterテーブルのカウンターの値を用いて自動採番を行うロジック&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Incident(インシデント)テーブルを例に、番号処理ロジックの動作を図示すると、次のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-4-1024x444.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Auto-numbering(自動採番)の設定方法&lt;/h2&gt;
&lt;p&gt;ServiceNowでは、Incident(インシデント)やRequest(要求)などの&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;主にトランザクションデータを格納する多くのテーブルには標準で自動採番が設定&lt;/span&gt;&lt;/strong&gt;されています。しかし、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;マスタデータを格納するテーブルや新規に作成したカスタムテーブルには、標準で自動採番が設定されていません&lt;/span&gt;&lt;/strong&gt;。ここでは、既存テーブルおよび新規テーブルに自動採番を設定する方法を説明します。&lt;/p&gt;
&lt;h3&gt;既存テーブルへの自動採番設定&lt;/h3&gt;
&lt;p&gt;既存のテーブルに自動採番を設定するには、以下の手順を実行します。&lt;/p&gt;
&lt;h4&gt;自動採番の設定&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;メニュー &amp;gt; System Definition &amp;gt; Number Maintenanceを開き、”New”ボタンをクリックして新しい設定を作成します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-6.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;対象テーブル、接頭辞、連番の最初の値、連番の桁数を設定します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-7.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;接頭辞は空白にして、接頭辞無しの連番で設定することも可能&lt;/span&gt;&lt;/strong&gt;です&lt;/li&gt;
&lt;li&gt;連番の最初の値の初期値は1,000です。これは、連番が小さい場合に0が多く連続することを避け、可読性を高めるためだと思われます（例：7桁の場合、初期値が1だと”0000001″のように0が続く）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;番号フィールドの作成（自動）&lt;/h4&gt;
&lt;p&gt;Number(番号)の設定が正常に送信されると、次のメッセージが表示され、対象テーブルにNumber[u_number]フィールドが作成されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-8.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Default Valueに設定されているスクリプトが、採番ロジックを呼び出す設定です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-5-1024x618.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;動作の確認&lt;/h4&gt;
&lt;p&gt;Numberフィールドをフォームに表示し、メニュー &amp;gt; Organization &amp;gt; Companiesを開いて”New”をクリックして新しいレコードを作成します。これにより、Numberフィールドに採番されたことを確認できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-9-1024x634.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;新規テーブル作成時の自動採番設定&lt;/h3&gt;
&lt;p&gt;新規テーブルの場合は、テーブル作成画面のControlsタブでAuto-numberを設定します。これにより、テーブル作成と同時に自動採番の設定が行われます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-12-1024x537.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;フィールド名のカスタマイズ&lt;/h3&gt;
&lt;p&gt;前述の設定方法では、自動でNumber[u_number]フィールドが作成されます。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;フィールド名を自分で定義したい場合は、Number(番号)テーブルの設定を行う前に、採番ロジックを呼び出す設定をしたフィールドを作成&lt;/span&gt;&lt;/strong&gt;しておきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-10-1024x447.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default value&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;javascript:global.getNextObjNumberPadded();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(補足1) global.getNextObjNumberPadded();は、&lt;a href=&quot;https://servicenow-lab.com/what-is-script-include/#global-business-rule&quot;&gt;この記事&lt;/a&gt;で紹介している過去の遺物であるGlobal Business Ruleの”getNextObjNumberPadded”内で定義されています。&lt;/p&gt;
&lt;p&gt;(補足2) コードを書かずに次のように設定することもできます。Task(タスク)テーブルのNumber[number]フィールドはこのような設定になっています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-11.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;必要に応じて：設定後に連番の値を直接変更する&lt;/h3&gt;
&lt;p&gt;自動採番の設定後に現在の番号を変更したい場合は、Number Counter(数カウンタ)テーブルを直接変更します。このテーブルへのアクセスは、Number（番号）レコードのフォーム画面下部にあるリンクから行えます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image-13.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;必要に応じて：レコード作成画面を開いた時点ではなく送信時に採番を行う（欠番防止）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;標準ではレコード作成画面を開いた時点で採番が行われますが、レコードが保存されなかった場合は欠番が生じます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;System Properties(システムプロパティ)で”glide.itil.assign.number.on.insert”を”true”に設定することで、送信時にのみ採番されるようにすることが可能&lt;/span&gt;&lt;/strong&gt;です。システムプロパティの設定方法は下記の記事を参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/how-to-configure-system-property/&quot;&gt;ServiceNowのSystem Property（システムのプロパティ）の設定方法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;このプロパティを設定する際には、以下の点に注意&lt;/span&gt;&lt;/strong&gt;が必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;フィールドの編集制限&lt;/strong&gt;&lt;br&gt;
標準の自動フィールドは、編集可能な設定になっていることが多く、フォームを開いた際にフィールドが空白だと、ユーザーが独自に番号を入力してしまう可能性が高まります。そのため、この設定を行う場合は、フィールドを読み取り専用に設定することも検討する必要があります&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全テーブルへの影響&lt;/strong&gt;&lt;br&gt;
標準・非標準問わず全ての自動採番フィールドでフォームを開いたときではなく送信時に採番されるようになります。既に業務で利用されている他の機能がある場合は、プロパティ設定前に影響を確認しておきましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tips&lt;/h2&gt;
&lt;h3&gt;連番の値が設定した桁数を超えた場合は桁数を超えてカウントされる&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;連番の値が設定した桁数を超えると、カウントはそのまま続行され、リセットは行われません&lt;/span&gt;&lt;/strong&gt;。たとえば、桁数を3桁に設定した場合、999の次は1000とカウントされ、4桁となります。&lt;/p&gt;
&lt;p&gt;ただし、番号の桁数が揃っていないと次のような問題が発生する可能性があるため、レコード数を事前に見積もり適切な桁数を設定しておくことを推奨します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ソート時に期待しない順序でレコードが並ぶ可能性がある&lt;/li&gt;
&lt;li&gt;番号を格納するフィールドや外部システムとの連携で桁数制限に引っかかる可能性がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;標準のNumberフィールドは重複を許容&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;標準のNumberフィールドには一意性制約(ユニーク制約)が無く、重複が許容&lt;/span&gt;&lt;/strong&gt;されています。これについては&lt;a href=&quot;https://www.servicenow.com/community/developer-forum/why-is-number-not-unique-by-default/m-p/1963558&quot;&gt;Community&lt;/a&gt;でも疑問が上がっていますが、&lt;a href=&quot;https://docs.servicenow.com/bundle/xanadu-platform-administration/page/administer/field-administration/concept/c_EnforcingUniqueNumbering.html&quot;&gt;Documentation:Enforcing unique numbering&lt;/a&gt;によると、Numberフィールドに一意性制約(ユニーク制約)を設定した場合、予期せぬエラーが発生する可能性があるため、代わりにBusiness Ruleの設定が推奨されています。&lt;/p&gt;
&lt;p&gt;個人的にはNumberフィールドの一意性制約については、次の対応方針が良いと考えます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;重複が発生しても深刻な影響がない場合は、特に対応を行わない&lt;/li&gt;
&lt;li&gt;重複を確実に防ぎたく、かつ万が一重複した場合に画面上にエラーが表示されても業務影響が少ない場合は、NumberフィールドにUnique設定を適用する&lt;/li&gt;
&lt;li&gt;重複を確実に防ぎたく、かつ万が一重複した場合に画面上にエラーが表示された場合に業務影響がある場合は、Documentationで紹介されているBusiness Ruleを設定する&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;資源移送時にNumber Counter(番号カウンタ)は移送されないため注意&lt;/h3&gt;
&lt;p&gt;Number(番号)テーブルは採番の設定を管理するため、開発資源として扱われ、Update Set（更新セット）などを使って移送することが可能です。しかし、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Number Counter(番号カウンタ)テーブルは、連番の現在の値を格納するデータテーブルであるため、開発資源としては扱われず、移送されません&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;多くの場合は特に問題になりませんが、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;マスタ系のテーブルやKnowledge(ナレッジ)テーブルに開発環境でデータを作成し、本番環境で利用するためにXML移送するような場合は、データ移行後に本番環境でNumber Counterの値を適切に&lt;/span&gt;&lt;span class=&quot;marker-under-red&quot;&gt;設定&lt;/span&gt;&lt;span class=&quot;marker-under-red&quot;&gt;しておかないと、本番環境で番号の重複が発生する可能性があります&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;上述した通り、一意性制約がないため、気づきにくい点も厄介です。&lt;/p&gt;
&lt;h3&gt;連番の最大桁数は15桁&lt;/h3&gt;
&lt;p&gt;標準では、Number(番号)テーブルのDigit(桁数)フィールドの値、つまり連番の桁数は、15桁以下に制御されています。この制御はBusiness Rule “Validate Number”によって行われています。&lt;/p&gt;
&lt;p&gt;なお、Prefix(プレフィックス)項目は、項目の最大桁数通りの40文字まで設定可能でした。&lt;/p&gt;
&lt;p&gt;どちらの制約も、実務上はまず引っかかることは無いと思います。&lt;/p&gt;
&lt;h3&gt;接頭辞 + 0埋め連番以外の採番ルールについて&lt;/h3&gt;
&lt;p&gt;推奨はしませんが、「接頭辞 + 0埋め連番」以外のルールを適用することも可能です。設計と開発方針について以下に示します：&lt;/p&gt;
&lt;h4&gt;標準テーブルの採番&lt;/h4&gt;
&lt;p&gt;標準テーブルの場合、拡張テーブルも含め整合性が取れるように複雑な採番ロジックが設定されており、さらにその一部はブラックボックスなので、手を入れることは避けたほうがよいでしょう。代わりに、以下の方法を検討できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;標準の採番ロジックは変更せず、採番後に番号を上書きする処理(Business Ruleなど)を追加する&lt;/li&gt;
&lt;li&gt;Number Counter(数カウンタ)テーブルを条件に応じて変更する処理を追加する&lt;br&gt;
例：上位2桁を西暦にしたい場合、毎年の初めにカウンタの上位2桁を設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;カスタムテーブルの採番&lt;/h4&gt;
&lt;p&gt;標準のテーブルとは無関係のカスタムテーブルであれば、採番ロジックを自作しても特に問題はないです。この場合、Global Business Rule “getNextObjNumberPadded”やScript Include “NumberManager”を参考にしつつ、必要な個所を変更するのがよいでしょう。&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;
</content:encoded><category>検討・企画</category></item><item><title>ServiceNow – 個人開発者インスタンス（PDI）の概要と取得・設定方法</title><link>https://servicenow-lab.com/pdi/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=4870</guid><description>ServiceNowの個人開発者インスタンス（PDI）について解説します。 ServiceNow社は開発者向けに、開発者インスタンス（PDI）を提供しています。企業が所有するインスタンスと比較していくつかの制限（後述）はありますが、PDIは…</description><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowの個人開発者インスタンス（PDI）について解説します。&lt;/p&gt;
&lt;h2&gt;PDI（Personal Development Instance）とは？&lt;/h2&gt;
&lt;h3&gt;ServiceNowが無料で提供し、自由に操作可能な個人開発用インスタンス&lt;/h3&gt;
&lt;p&gt;ServiceNow社は開発者向けに、開発者インスタンス（PDI）を提供しています。企業が所有するインスタンスと比較していくつかの制限（後述）はありますが、&lt;span class=&quot;marker-under-blue&quot;&gt;PDIは1人につき1つ、無料で、永久に所持することができます。&lt;/span&gt;ServiceNow開発者はPDIを活用して、&lt;span class=&quot;marker-under-blue&quot;&gt;企業が所有するインスタンスに影響を与えることなく、ServiceNowに関する学習・検証を実施することができます。&lt;/span&gt;&lt;br&gt;
※インスタンスについては下記の記事で詳しく説明しています。あわせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/what-is-instance/&quot;&gt;ServiceNowのインスタンスとは何か&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;PDIの入手手順&lt;/h2&gt;
&lt;p&gt;PDIを入手するためには、ServiceNow開発者プログラム（ServiceNow Developer）に登録し、PDIを取得する必要があります。&lt;/p&gt;
&lt;h3&gt;ServiceNow開発者プログラム（ServiceNow Developer）に登録&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.servicenow.com/dev.do&quot;&gt;ServiceNow Developers&lt;/a&gt;を開き、「Sign up and Start Building」を押下します。&lt;br&gt;
※&lt;a href=&quot;https://nowlearning.servicenow.com/lxp/en/pages/servicenow&quot;&gt;Now Learning&lt;/a&gt;等で既にServiceNowアカウントを作成している場合、&lt;a href=&quot;https://servicenow-lab.com/#get-pdi&quot;&gt;こちら&lt;/a&gt;までスキップ可能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_001-2-1024x667.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;必要事項を入力し、「サインアップ」を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_002-1-1024x896.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;登録したメールアドレス当てに認証用メールが届くので、「Verify Email」を押下します。メールアドレスが検証され、Developerサイトにリダイレクトします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_003-1024x580.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;初回ログイン時、2つの質問に回答します。Do you code?にはYesと回答しましょう。&lt;br&gt;
※Noと回答すると、PDI起動時に、App Engine StudioというServiceNow内のアプリ開発者向け画面に遷移します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_005-1-1024x686.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;任意で職務内容を選択し、左下のチェックボックスにチェックをつけ「Finish Setup」を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_006-1-1024x678.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;PDIを取得&lt;/h3&gt;
&lt;p&gt;アカウントの登録が完了したので、PDIを取得します。画面中央付近の「Start Building」もしくは「Request Instance」を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_007-1024x441.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;任意のファミリーバージョンを選択し、「Request」を押下後、数秒～数分程度待機待機します。&lt;br&gt;
※PDIのリソースは限られているため、すぐにインスタンスが発行されず、順番待ちになることがあります。この場合、「Request」ではなく「Join Waitlist」ボタンが表示されますが、筆者の経験上数分でインスタンスが取得できることが多いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_008-1024x780.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;インスタンスセットアップが完了すると、インスタンスのURLと管理者アカウントのID・パスワードが表示されます。&lt;br&gt;
PDIはdev&amp;lt;ランダムな数字&amp;gt;.service-now.comという個別のURL（サブドメイン）が割り振られます。&lt;br&gt;
「Open Instance」を押下することで、管理者（admin）としてログインできます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_010-1024x414.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_011-1024x509.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;以降はインスタンスのURLにアクセスし管理者としてID（admin）、パスワードを入力してログインするか、Developer Siteのホーム画面の「Start Building」を押下することでインスタンスにログインすることができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_012-1024x446.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;PDIの設定&lt;/h2&gt;
&lt;p&gt;Developer Siteのホーム画面右上のアイコンを押下すると、My Instance画面が表示されます。PDIの稼働状態やファミリーバージョンの確認や、各種設定を変更することが可能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_013-1024x422.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_014-2-1024x311.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;My Instance画面で設定可能な項目を順に解説します。&lt;/p&gt;
&lt;h3&gt;プラグインの有効化（Activete plugin）&lt;/h3&gt;
&lt;p&gt;PDIでは&lt;span class=&quot;marker-under-blue&quot;&gt;アプリケーションやプラグインを有効化することが可能です。&lt;/span&gt;インスタンスアクションから有効化する方法以外に、通常通りApplication Managerから有効化する方法もあります。多くのプラグインはApplication Managerから有効化できるため、Application Managerでプラグインが見つからなかった場合はインスタンスアクションにて確認するのがおすすめです。&lt;/p&gt;
&lt;h4&gt;②インスタンスアクションから有効化&lt;/h4&gt;
&lt;p&gt;プラグインを選択し、有効化します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_017-1024x491.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;プラグイン有効化中はその他のインスタンスアクションが実行できず、PDIはActivating Plugin状態となります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_018.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;プラグインの有効化が完了すると、登録したメールアドレスへ完了通知が届きます。&lt;/p&gt;
&lt;h4&gt;Application Managerから有効化&lt;/h4&gt;
&lt;p&gt;PDIに管理者でログインし、All &amp;gt; Pluginsに遷移し、インストールしたいアプリケーション/プラグインを検索・選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_019-1024x508.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;選択したアプリケーション/プラグインにて「Install」を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_020.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;しばらく待機すると、インストールが完了します。&lt;br&gt;
※インストール中に、PDIでその他操作をすることも可能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_021.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;メールプロパティの管理（Manage email properties）&lt;/h3&gt;
&lt;p&gt;PDIは&lt;span class=&quot;marker-under-blue&quot;&gt;メールの送受信を有効にすることができます&lt;/span&gt;（ただし後述しますが、制約があります）。まず、Enable email sending and receivingを有効にします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_022-1024x572.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;次に、All &amp;gt; System Mailboxes &amp;gt; Administration &amp;gt; Email Accountsで新規レコードを作成し、以下のように入力します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_023-1024x318.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;レコード保存後、Test Connectionの関連リンクを押下し、Connection Successfulと出ればOKです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;これでPDIからメールを送信できるようになりましたが、Docsの記事によると、&lt;span class=&quot;marker-under-red&quot;&gt;スパム防止のため、PDIから送信できるドメインは「&lt;a href=&quot;https://www.guerrillamail.com/&quot;&gt;guerrillamail.com&lt;/a&gt;」のみに制限されているとのことです。&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Unfortunately, personal developer instances (PDI) have been used both accidentally and maliciously to send email spam. In order to prevent spamming but still allow notifications on PDIs, we have restricted our email servers to sending to a single domain, &lt;a href=&quot;https://guerrillamail.com/&quot;&gt;guerrillamail.com&lt;/a&gt;. PDIs can receive email from any domain except guerrillamail.com.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ServiceNow DOCS:&lt;/em&gt; &lt;a href=&quot;https://docs.servicenow.com/bundle/utah-platform-administration/page/administer/reference-pages/concept/c_StandardEmailConfiguration.html&quot;&gt;Managing email properties for your PDI&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;実際に試してみたところ、筆者のGmailアカウント宛にPDIからメールを送信することはできませんでしたが、guerrillamailで一時的に作成したアドレスにはメールを送信できました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_025.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;また、POP3アカウントはパスワードが必須なこともあり、PDI用のメール受信サーバの設定をすることはできませんでした。&lt;span class=&quot;marker-under-blue&quot;&gt;こちらはGmailやYahooメールのアカウントを登録することで、Inbound Action等の確認をすることも可能になります。&lt;/span&gt;&lt;br&gt;
ServiceNowのメールについては下記の記事で詳しく説明していますので、あわせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/email/&quot;&gt;ServiceNow - Email(メール)送受信機能の図解解説&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;バージョンのアップグレード（Upgrade instance）&lt;/h3&gt;
&lt;p&gt;所持しているPDIのバージョンを、アップグレードすることができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_016-1024x701.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;その他の設定&lt;/h3&gt;
&lt;p&gt;その他、以下の操作が可能です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;インスタンスのリリース（Release Instance）
&lt;ul&gt;
&lt;li&gt;現在取得しているPDIをリリースすることができます。リリース後、新たにPDIを取得することが可能です。&lt;br&gt;
※新たにPDIを取得すると、URLのdev以降のランダムな数字が変更されます。また、&lt;span class=&quot;marker-under-red&quot;&gt;リリースしたPDIの開発データは引き継げないため注意してください。&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ユーザロールの変更（Change User Role）
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://servicenow-lab.com/#do_you_code&quot;&gt;こちら&lt;/a&gt;でNoと選択した等の理由によりPDIにてApp Engine Studio画面が表示されてしまう場合は、「Change User Role」からadminを選択し、「Change User Role」を押下することで解決します。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_015-1-1024x663.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;デモデータの削除（Remove Demo Data）
&lt;ul&gt;
&lt;li&gt;PDIにデフォルトで含まれているデモデータを削除することができます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;初期状態へのリセット（Reset and Wipe Instance）
&lt;ul&gt;
&lt;li&gt;「インスタンスのリリース」と似ていますが、こちらはPDIのURLを変えずにデータを初期状態にリセットすることが可能です。ただし、「インスタンスのリリース」よりも時間を要する（数時間程度）場合があります。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;インスタンスのパスワード管理（Manage instance password)
&lt;ul&gt;
&lt;li&gt;PDIのURLや管理者のユーザ名・パスワードを確認することができます。その他、メールにて認証情報を送信したり、管理者のパスワードを変更したりできます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;履歴の確認（View history）
&lt;ul&gt;
&lt;li&gt;パスワードリセット、プラグインの有効化、インスタンスのリセットの履歴が確認できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PDIに関するヘルプを取得する（Get instance help）
&lt;ul&gt;
&lt;li&gt;インスタンスに関する文書等のリンクが記載されています。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;PDIの注意事項&lt;/h2&gt;
&lt;p&gt;PDIは企業向けインスタンスと異なる点がいくつかあります。&lt;/p&gt;
&lt;h3&gt;10日間利用がないとインスタンスが消去される&lt;/h3&gt;
&lt;p&gt;PDIは&lt;span class=&quot;marker-under-red&quot;&gt;一定時間操作がない場合に休止状態になります。&lt;/span&gt;この場合、PDIのURLを開いてもログインすることはできず、&lt;a href=&quot;https://developer.servicenow.com/dev.do&quot;&gt;ServiceNow Developers&lt;/a&gt;へログインしてPDIを起動させる必要があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/get_pdi_026-1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;ログインした状態で再度ServiceNow Developersを開くと、自動でPDIの起動が開始します。10分程度待つことで、PDIが起動します。&lt;br&gt;
休止状態の場合はインスタンス内のデータは保持されていますが、&lt;span class=&quot;marker-under-red&quot;&gt;以下の操作の少なくとも1つが10日間確認できない場合、インスタンスは消去されます。&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;インスタンスへのサインイン&lt;/li&gt;
&lt;li&gt;アプリケーションの作成&lt;/li&gt;
&lt;li&gt;テーブルへのフィールドの追加&lt;/li&gt;
&lt;li&gt;スクリプトインクルードの作成&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この場合、&lt;span class=&quot;marker-under-red&quot;&gt;インスタンス内の開発記録はすべて消去されてしまい、復旧もできません。&lt;/span&gt;Docs記事によると、10日間という期間はPDIの空き状況により変更される場合もあるとのことなので、消去されたくないデータがある場合はこまめに起動させましょう。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PDIs are returned to the pool of available instances if they go unused for ten days. Duration may change due to availability.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ServiceNow DOCS:&lt;/em&gt; &lt;a href=&quot;https://docs.servicenow.com/csh?topicname=understanding_pdis&amp;amp;version=latest&quot;&gt;Understanding PDIs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UpdateSetをXML形式で保管しておく等、うっかりPDIが消去されてしまった時に備えてバックアップを取るのも一案です。下記の記事が参考になります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.servicenow.com/blog.do?p=/post/backup-your-pdi&quot;&gt;https://developer.servicenow.com/blog.do?p=/post/backup-your-pdi&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;インストール可能なプラグインが限定的&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;a href=&quot;https://store.servicenow.com/sn_appstore_store.do#!/store/home&quot;&gt;ServiceNowストア&lt;/a&gt;内の有償アプリや、ServiceNow社担当へ連絡が必要なプラグインはPDIにインストールできません。&lt;/span&gt;そのため、導入を検討しているがPDIで試せない…といったプラグインも往々にして存在します。&lt;/p&gt;
&lt;h3&gt;その他の制約&lt;/h3&gt;
&lt;p&gt;その他、以下の制約があります。筆者は以前ServiceNowの機械学習を試したくて学習させてみたところエラーが出た…という経験があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;企業向けインスタンスをPDIにクローンしたり、企業向けインスタンスに対してPDIをクローンしたりすることはできない。&lt;/li&gt;
&lt;li&gt;Team Developmentを介して企業向けインスタンスへリンクすることはできない。&lt;/li&gt;
&lt;li&gt;PDIで作成したアプリケーションはServiceNow Application RepositoryやServiceNowストアに公開できない。&lt;/li&gt;
&lt;li&gt;PDIで機械学習や&lt;a href=&quot;https://docs.servicenow.com/ja-JP/csh?topicname=instance-data-replication.html&amp;amp;version=latest&quot;&gt;Instance Data Replication&lt;/a&gt;、&lt;a href=&quot;https://www.servicenow.com/jp/products/metricbase.html?state=seamless&quot;&gt;MetricBase&lt;/a&gt;は機能しない。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上です。&lt;/p&gt;
</content:encoded><category>開発・導入</category></item><item><title>ServiceNow – Company(会社)テーブルの解説</title><link>https://servicenow-lab.com/company-table/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=4831</guid><description>ServiceNowにおける、会社の情報を格納するための標準テーブルであるCompany(会社)テーブルについて解説します。</description><pubDate>Sun, 04 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowにおける、会社の情報を格納するための標準テーブルであるCompany(会社)テーブルについて解説します。&lt;/p&gt;
&lt;h2&gt;Company(会社)テーブルとは？&lt;/h2&gt;
&lt;h3&gt;自社、グループ会社、取引先など、自社に関連するすべての会社情報を格納するテーブル&lt;/h3&gt;
&lt;p&gt;ServiceNowには標準で会社の情報を格納するためのCompany(会社)テーブルが存在します。このテーブルは、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;自社・自社のグループ会社・取引先などの自社に関連するあらゆる会社や法人の情報を格納することができます&lt;/span&gt;&lt;/strong&gt;。また、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;業務委託先の個人事業主などの非法人の取引先に関しても、より適したテーブルがあるわけではないので、他の法人の取引先と同様に管理したい場合はCompany(会社)テーブルで管理することもあります&lt;/span&gt;&lt;/strong&gt;。その意味では、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;自社に関連するすべてのエンティティの情報を格納するテーブルと考えてもよい&lt;/span&gt;&lt;/strong&gt;でしょう。&lt;/p&gt;
&lt;p&gt;また、Company(会社)テーブルは、ユーザ情報を格納するUser(ユーザ)テーブルや、組織の情報を格納するDepartment(部署)テーブルなど、様々なテーブルから参照されており、ServiceNowにおける中心的なテーブルの一つです。&lt;/p&gt;
&lt;h3&gt;階層の管理が可能&lt;/h3&gt;
&lt;p&gt;Company(会社)テーブルには、&lt;span class=&quot;marker-under-blue&quot;&gt;&lt;strong&gt;親を指定するためのParent(親)フィールドが存在するため、階層構造の管理が可能&lt;/strong&gt;&lt;/span&gt;です。&lt;/p&gt;
&lt;h3&gt;Customer Service Management (CSM)を利用する場合はより詳細な管理が可能に&lt;/h3&gt;
&lt;p&gt;カスタマーサポートの支援機能などを持つ&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Customer Service Management (CSM)という製品を購入する場合は、顧客を管理するための専用のテーブルや、顧客ごとに複数の連絡先を管理するためのテーブルなどが存在し、より詳細な管理が可能&lt;/span&gt;&lt;/strong&gt;になります。&lt;/p&gt;
&lt;p&gt;しかし、本記事では、購入する製品に関わらず常に利用できるCompany(会社)テーブルについて解説します。&lt;/p&gt;
&lt;h2&gt;Company(会社)テーブルのフィールド&lt;/h2&gt;
&lt;p&gt;Company(会社)テーブルに標準で含まれているフィールドについて、独断と偏見で分類して説明します。&lt;/p&gt;
&lt;h3&gt;基本情報を格納するフィールド&lt;/h3&gt;
&lt;p&gt;会社の基本的な情報を格納するためのフィールドとして、Name(名前)、Contact(連絡先)、Country(国)、State(都道府県)、City(市町村)などが存在します。&lt;/p&gt;
&lt;p&gt;なお、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Country(国)フィールドはCountry[core_country]テーブルへのReference型ではなく、String型&lt;/span&gt;&lt;/strong&gt;になっています。&lt;/p&gt;
&lt;h3&gt;財務情報を格納するフィールド&lt;/h3&gt;
&lt;p&gt;財務情報を格納するためのフィールドとして、Stock Symbol(銘柄コード), Market Cap(時価総額), Revenue per year(1年あたりの利益), Profits(利益)などが存在します。&lt;/p&gt;
&lt;p&gt;取引先の信用・与信の管理をCompany(会社)テーブルで行いたい場合など、財務情報を管理したいという要望がまれにあります。しかし、財務観点だと標準のフィールドは不要な項目が多く、逆に必要な項目が不足しているので、その場合はカスタムフィールドを追加する必要があります。&lt;/p&gt;
&lt;p&gt;とはいえ、取引先の信用・与信管理は一般的にはERPなどで行うことが多いため、結果としてこれらのフィールドが実際に使用されることはあまりありません。&lt;/p&gt;
&lt;h3&gt;会社を分類するフィールド&lt;/h3&gt;
&lt;p&gt;前述のように、&lt;span class=&quot;marker-under-blue&quot;&gt;&lt;strong&gt;Company(会社)テーブルには様々なタイプの会社が格納される可能性があるため、それらを分類するために下記のチェックボックス(True/False)型のフィールドが用意されています&lt;/strong&gt;&lt;/span&gt;。特に、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;自社の情報と取引先の情報をどちらもCompany(会社)テーブルで管理する場合は、これらの項目を用いて識別できるようにしておくのがよい&lt;/span&gt;&lt;/strong&gt;でしょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primary (プライマリ)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer (顧客)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manufacturer (メーカー)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vendor (ベンダー)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;自社を表すPrimary(プライマリ)フィールド&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Primary(プライマリ)フィールドは&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;、&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;自社、すなわち当該インスタンスを利用している会社を識別するためのフィールド&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;PrimaryフィールドはBusiness Rule(ビジネスルール)によって制御されており、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Companyテーブル内でこのフィールドをTrueにできるレコードは1つだけ&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;さらに、メニュー &amp;gt; System Properties &amp;gt; My Companyは、このPrimaryフィールドがTrueのCompanyレコードへのリンクになっています。このレコードのUI16 Banner Image(UI16バナーイメージ)フィールドとBanner text(バナーテキスト）フィールドは、それぞれメニュー &amp;gt; System Properties &amp;gt; Basic Configuration UI16からも設定できる、Classic UIの画面左上の画像およびその画像にマウスオーバーしたときに表示されるテキストとして使用されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/08/image.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;自社のグループ会社を表す&lt;strong&gt;Customer(顧客)&lt;/strong&gt;フィールド&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Customer(顧客)フィールドは、自社のグループ会社を識別するためのフィールド&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;Department(部署)テーブルやCMDB配下のテーブルなどにあるCompanyフィールド(CompanyテーブルへのReferenceフィールド)では、標準で”Customer = true”というフィルタが設定されています。&lt;/p&gt;
&lt;h2&gt;Company(会社)テーブルの標準仕様の注意点&lt;/h2&gt;
&lt;p&gt;Company(会社)テーブルの標準仕様の注意点と、それらの解決方法を説明します。&lt;/p&gt;
&lt;h3&gt;権限の弱いユーザは参照できない&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Company(会社)テーブルの標準の権限制御(ACL)では、itilロールなどの一定以上の権限のロールを持つユーザでないと参照することができ&lt;/span&gt;&lt;/strong&gt;ず、&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;例えば問い合わせや依頼を行う際に、申請者に会社を選ばせるといったことができません。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;申請者など、通常ロールを付与しないユーザにもCompany(会社)テーブルを参照させたい場合は、ACLの設定変更が必要&lt;/span&gt;&lt;/strong&gt;です。ACLについては次の記事も併せて参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/acl-evaluation/&quot;&gt;ServiceNowのAccess Control List（ACL）の概要と評価のプロセス&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;コードや番号を管理する項目が無い&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;特に取引先を管理するためにCompany(会社)テーブルを利用する場合、取引先のコードや番号を管理するフィールドが欲しいところですが、標準では適切なフィールドがありません&lt;/strong&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;コードや番号を管理するフィールドが必要な場合は、String(文字列)型のフィールドを追加し自動採番の設定を行います&lt;/span&gt;&lt;/strong&gt;。自動採番については次の記事も併せて参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/auto-numbering/&quot;&gt;ServiceNow - Auto-numbering(自動採番)の解説&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;論理削除（有効・無効）を管理する項目が無い&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;会社の合併や廃業等で、会社情報を論理削除（無効化）したいことがあると思いますが、標準ではこの管理ができません&lt;/strong&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;論理削除を表現する必要がある場合は、カスタムフィールドを追加&lt;/span&gt;&lt;/strong&gt;します。簡単な論理削除(有効 or 無効)であればチェックボックス(True/False)型、より複雑な状態を管理する場合はChoice(選択肢)型を選択します。&lt;/p&gt;
&lt;p&gt;論理削除の実装については、次の記事も合わせて参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/before_query/&quot;&gt;ServiceNow - Before Query Business Ruleの解説&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;
</content:encoded><category>開発・導入</category></item><item><title>ServiceNowとJira Service Managementの比較</title><link>https://servicenow-lab.com/servicenow-vs-jiraservicemanagement/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=4773</guid><description>この記事では、ITSM・ワークフローツールとしてのServiceNowとJira Service Management（旧Jira Service Desk）を比較します。この記事は、特定の製品を推奨するものではなく、皆さんの組織の状況や要…</description><pubDate>Sun, 21 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事では、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ITSM・ワークフローツールとしてのServiceNowとJira Service Management（旧Jira Service Desk）を比較します&lt;/span&gt;&lt;/strong&gt;。この記事は、特定の製品を推奨するものではなく、皆さんの組織の状況や要望に応じて、より適切な製品を選ぶ手助けをすることを目的としています。また、この記事で使用する比較軸は、他の製品を含めた比較する際にも参考になると思います。&lt;/p&gt;
&lt;p&gt;できる限り公平な視点を心がけていますが、筆者の知識がServiceNowに偏っているため、一定のバイアスがかかっている可能性があることをご理解ください。また、本記事は2024年7月時点の情報に基づいており、将来的に変化する可能性があることにも留意してください。&lt;/p&gt;
&lt;h2&gt;各製品の概要&lt;/h2&gt;
&lt;h3&gt;各製品の概要&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNow&lt;/span&gt;&lt;/strong&gt;は、ServiceNow社が提供する製品で、『&lt;a href=&quot;https://servicenow-lab.com/system-architecture-overview/&quot;&gt;ServiceNowのシステムアーキテクチャの全体像&lt;/a&gt;』で詳述しているように、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;NowPlatformと呼ばれるアプリ開発基盤(aPaaS)の上に、IT Service ManagementやIT Operation Managementなどの業務アプリケーション(SaaS)が構築されています&lt;/span&gt;&lt;/strong&gt;。ServiceNowは、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;これらの幅広い製品群全体を指します&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Jira Service Managementは、Atlassian社が提供するITサービス管理およびワークフローソリューション&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;Atlassianは、プロジェクト管理ツールのJira Softwareや社内WikiのConfluenceなどを独立したブランドとして提供しています。一方、ServiceNowは、社名と同じ名前で単一ブランドのクラウドサービスを提供しており、その中に様々な製品が含まれています。&lt;/p&gt;
&lt;h3&gt;競合するポイント&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Jira Service Managementが競合するServiceNowの機能としては、ITサービス管理（IT Service Management）やNowPlatformにおけるワークフロー機能、データベース機能&lt;/span&gt;&lt;/strong&gt;が挙げられます。&lt;/p&gt;
&lt;p&gt;そのため、本記事では「ServiceNow」と言った場合、ITサービス管理、ワークフロー、データベース機能の部分のみを指すこととします。&lt;/p&gt;
&lt;h3&gt;2製品に共通する特徴&lt;/h3&gt;
&lt;p&gt;ServiceNowとJira Service Managementの共通する特徴は以下の通りです。これらの特長をすべて備えている製品は、単なる「チケット管理ツール」や「ワークフローシステム」ではほとんど見られません。そのため、多くの業務プロセスをシステムに組み込むためのソリューションを検討する場合、ServiceNowとJira Service Managementが最終候補になる可能性が高いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;柔軟なワークフロー機能&lt;/strong&gt;: 承認フローの柔軟性に加え、ワークフロー内でのタスクチケットの生成やデータベースへの読み書きが可能。また、様々な問い合わせや申請に利用するための申請画面の作成が可能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;タスク管理・ダッシュボード機能&lt;/strong&gt;: 問い合わせや依頼の状況を可視化し、必要なKPIをトラッキングするためのレポート・ダッシュボード機能が存在&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;データベース機能&lt;/strong&gt;: 業務プロセスにおいて発生する様々な業務データを保持でき、細かな権限制御機能も備えたデータベース機能を持つ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;外部システムとの連携機能&lt;/strong&gt;: 他製品と連携して業務プロセスを自動化するための外部システムとの連携機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;製品の比較&lt;/h2&gt;
&lt;p&gt;筆者の独断で選んだ比較観点におけるそれぞれの製品の特長を説明します。&lt;/p&gt;
&lt;h3&gt;ライセンス体系・課金体系&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ライセンス体系・課金体系はどちらの製品も類似&lt;/span&gt;&lt;/strong&gt;しており、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;問い合わせや申請を行うユーザは&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ライセンス&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;不要&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;（&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;無償）で、対応を行うユーザに対して課金されるモデル&lt;/span&gt;&lt;/strong&gt;になっています。&lt;/p&gt;
&lt;p&gt;（なお、『&lt;a href=&quot;https://servicenow-lab.com/license/&quot;&gt;ServiceNowのライセンス体系の基本&lt;/a&gt;』で紹介しているように、ServiceNowには様々なライセンス体系が存在しますが、本記事ではRequester/Fulfillerモデルと呼ばれる最も一般的な購入方法を前提として説明します）&lt;/p&gt;
&lt;h4&gt;ServiceNow&lt;/h4&gt;
&lt;p&gt;ServiceNowは次の3種類の役割によって必要なライセンスが決定されます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;th&gt;必要ライセンス&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Requester&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;問い合わせや申請を行うユーザ。&lt;strong&gt;一&lt;/strong&gt;般従業員。&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ライセンス不要（無償）&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business Stakeholder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;申請に対して承認を行ったり、システムの各種データを閲覧するユーザ。管理職。&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Business Stakeholderライセンス（有償）が必要&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fulfiller&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;問い合わせや申請の対応を行うユーザ。IT部門など、コーポレート部門のユーザ。&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Fulfillerライセンス（有償）が必要&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;ServiceNowにおけるライセンス体系（Requester/Fulfillerモデルの場合）&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Jira Service Management&lt;/h4&gt;
&lt;p&gt;Jira Service Managementも同様に3種類の役割によって必要なライセンスが決定されます。少し定義が異なります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;th&gt;ライセンス&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;問い合わせや申請を行うユーザ。一般従業員。&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ライセンス不要（無償）&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Customerからの問い合わせや依頼に対応するユーザ。必要に応じてCollaboratorと協力して対応を行う。IT部門など、コーポレート部門のユーザ。&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Jira Service Management（有償）のライセンスが必要&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaborator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agentからの依頼を受けて問い合わせや依頼の対応に協力する。開発部門などのユーザ。&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Jira Softwareなどのライセンス（有償）が必要&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Jira Service Managementにおけるライセンス体系&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;ライセンス体系の違い&lt;/h4&gt;
&lt;p&gt;主な違いは以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ワークフローで承認を行うユーザは、ServiceNowではBusiness Stakeholder（課金対象）になるが、Jira Service ManagementではCustomer（非課金対象）になる&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jira Service ManagementにおけるCollaboratorは、Jira Softwareなどのライセンスが必要で、既にJira Softwareライセンスを持っているユーザに関しては追加の費用は不要&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ServiceNowのRequesterは他のユーザの申請を閲覧するのに制限がある（Watch listという機能を用いてby nameで追加した他のユーザのみ閲覧可能）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jira Service ManagementのCollaboratorはCustomerの問い合わせに直接回答ができない（Customerからの問い合わせや依頼に直接対応できるのはAgentだけ）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;重要なのは、実現したいことが無償のRequesterまたはCustomerで可能なのか、有償のライセンスが必要なのかをしっかり見極めること&lt;/span&gt;&lt;/strong&gt;です。例えば、ワークフローの承認者は、Jira Service Managementでは無償ですが、ServiceNowでは有償です。また、Jira Softwareのライセンスを持っているユーザでも、問い合わせや依頼に直接コメントしたい場合は、Jira Service Managementの追加ライセンスが必要です。&lt;/p&gt;
&lt;h4&gt;外部システムとの連携に関するライセンス体系&lt;/h4&gt;
&lt;p&gt;外部システムとの連携に関するライセンス体系について、各製品の概要を補足します。他の製品と連携してワークフローを自動化する場合は、注意が必要です。&lt;/p&gt;
&lt;h5&gt;ServiceNow&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inbound連携&lt;/strong&gt;: 外部システムからServiceNowのAPIを呼び出す場合（Inboundの連携）には課金はありません&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outbound連携&lt;/strong&gt;: 外部システムのAPIを呼び出す場合は、Integration Hubと呼ばれる外部システムとの連携用ライセンスを&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;別途購入する必要があります&lt;/span&gt;&lt;/strong&gt;このライセンスは、トランザクション数に応じて課金されます&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プログラムによる連携&lt;/strong&gt;: 外部システムのAPIをIntegration Hubではなく、Rest Messageというプログラミングを必要とする機能を用いて実現する場合、課金されません&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Jira Service Management&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自動化機能&lt;/strong&gt;: 外部システムとの連携に関しては、連携に対して課金というよりは、口述する自動化機能の実行数により課金されます。自動化機能の実行回数は購入ライセンス数に応じて付与され、別途購入は不要です&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;連携アプリ&lt;/strong&gt;: 外部システムとの連携用のアプリ（プラグインのようなもの）を用いる場合、アプリごとに別の課金体系が適用されます（ほとんどの場合アプリは本体のライセンスよりも安価です）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;コスト&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;コストについては、一般的にJira Service Managementの方が優位（安価）&lt;/span&gt;&lt;/strong&gt;です。ただし、ライセンス体系の違いや、要件による違い、そして各社が提示するディスカウントレートによる影響も考慮する必要がありますので、一概には言えない点にご注意ください。&lt;/p&gt;
&lt;h3&gt;無料トライアル&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowでは個人開発者インスタンス（PDI）という、登録さえすれば誰でも、無料で開発・検証用環境を受け取ることができます。&lt;/span&gt;&lt;br&gt;
下記の記事で詳しく解説していますので、あわせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/pdi/&quot;&gt;ServiceNow – 個人開発者インスタンス（PDI）の概要と取得・設定方法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一方Jira Service Managementでは、&lt;a href=&quot;https://www.atlassian.com/ja/try&quot;&gt;こちら&lt;/a&gt;から無料トライアルが可能とのことです。実際に、筆者はGmailアカウントで申し込むことができ、すぐにJira Service Managementが使えるようになりました。&lt;/p&gt;
&lt;h3&gt;ITSM機能の充足性&lt;/h3&gt;
&lt;p&gt;ITSM機能については、両製品とも非常に強力であり、類似点が多く見受けられます。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;互いにベンチマークしつつ不足機能を補完していると思われるため、ほとんど差異はないと考えてよい&lt;/span&gt;&lt;/strong&gt;でしょう。&lt;/p&gt;
&lt;p&gt;Gartnerによる&lt;a href=&quot;https://www.gartner.com/reviews/market/it-service-management-platforms&quot;&gt;IT Service Managementの比較&lt;/a&gt;を見ても、本記事執筆時点では同じレーティングになっています。&lt;/p&gt;
&lt;p&gt;なお、筆者にて各機能の詳細まで触れているわけではないので、細かい要件がある場合は、もちろん各製品でそれが満たせるかを確認してください。&lt;/p&gt;
&lt;h3&gt;フォーム画面の柔軟性&lt;/h3&gt;
&lt;p&gt;フォーム画面の柔軟性については、どちらの製品も多くの入力形式に対応しており、操作性の高いフォームを実現することができます。しかし、以下の点で違いがあります。&lt;/p&gt;
&lt;h4&gt;レイアウトの柔軟性ならJira Service Management&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Jira Service Managementでは、Form（フォーム）機能によって、Confluenceのページのように非常に柔軟なレイアウトを実現できます&lt;/span&gt;&lt;/strong&gt;。一方で、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;ServiceNowのフォーム画面はレイアウトの自由度はあまり高くありません&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;機能の柔軟性ならServiceNow&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowのフォーム画面&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;では&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;、&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;以下のような細かい設定や制御が可能&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;動的に行数を増やせる表形式の入力項目（いわゆる「明細」を受け付けるためのUI）&lt;/li&gt;
&lt;li&gt;過去の申請を参照して選択する入力項目&lt;/li&gt;
&lt;li&gt;ユーザの属性や既に入力された別の項目に基づいて他の項目の表示・非表示を制御&lt;/li&gt;
&lt;li&gt;ある項目の値の入力応じて別の項目の値を自動入力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方で、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Jira Service Managementのフォーム画面は、動的な制御はあまり得意ではありません&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;ワークフロー機能&lt;/h3&gt;
&lt;p&gt;どちらの製品もGUIでパーツを配置していく簡単なUIでワークフローを作成できます。以下で説明するように、機能の概念が異なりますが、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;単純な承認フローとしてのワークフローであればJira Service Managementで十分&lt;/span&gt;&lt;/strong&gt;です。一方、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;承認だけでなく、特定のワークフロー中で発生するタスク管理や外部システムとの連携などを含む一連の業務プロセスをシステムとして組み込む場合は、ServiceNowの機能に優位性があります&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;Jira Service Managementのワークフロー機能&lt;/h4&gt;
&lt;p&gt;Jira Service Managementには、ワークフローを実現するための機能として、Workflow（ワークフロー）とAutomation（自動化）の2つの機能が存在します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workflow（ワークフロー）&lt;/strong&gt;　…　&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;問い合わせや依頼のステータス遷移（例：マネージャ承認 → 部長承認）を制御するための機能&lt;/span&gt;&lt;/strong&gt;。どのボタンが押されるとどのステータスに遷移するかや、承認を取得するステータスで誰に承認依頼を行うかを設定します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automation（自動化）&lt;/strong&gt;　…　&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;特定の条件を満たした際に自動処理を実行するための機能&lt;/span&gt;&lt;/strong&gt;。承認が完了した際に問い合わせや依頼に自動でコメントをする、特定の項目の値を更新する、データベースを自動更新する、外部システムと連携するといったことが可能です。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば「アカウント申請」というワークフローを作成し、申請者のマネージャの承認が得られたらAPIを用いて特定のシステムにアカウントを自動で作成する場合、次のように実現します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;(Workflow) アカウント申請のステータス遷移をワークフロー機能で作る&lt;/li&gt;
&lt;li&gt;(Automation) 承認完了ステータスになったことをトリガとして、外部システムへのアカウント作成及びデータベースの更新ロジックを自動化機能で作る&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;そのため、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;「ワークフロー」を&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;「&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;承認フロー」とほぼ同じ意味で考えている場合は、Jira Service Managementで必要十分な機能があると言える&lt;/span&gt;&lt;/strong&gt;でしょう。&lt;/p&gt;
&lt;p&gt;しかし、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;複雑な一連の業務プロセスをワークフローとして組み込む場合、Jira Service Managementはあまり得意ではありません&lt;/span&gt;&lt;/strong&gt;。例えば、同様の「アカウント申請」で、マネージャ承認後にIT部門のユーザにアカウント手動作成のタスクを割り当て、タスク完了後に申請者に通知する場合、次のように実現します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;(Workflow) アカウント申請のステータス遷移をワークフロー機能で作成。&lt;/li&gt;
&lt;li&gt;(Automation) 承認完了ステータスをトリガとして、IT部門向けにアカウント作成のJiraタスクを起票するAutomationを作成。&lt;/li&gt;
&lt;li&gt;(Automation) Jiraタスクがクローズされたことをトリガとして、申請者にアカウント作成完了通知を行うAutomationを作成。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2.,3.の部分がポイントで、Automation機能では「条件を待つ」といった高度な制御ができないため、複雑なワークフローを組み込む場合、多くのAutomationを組み合わせなくてはなりません。&lt;/p&gt;
&lt;h4&gt;ServiceNowのワークフロー機能&lt;/h4&gt;
&lt;p&gt;ServiceNowは、Flow Designerという機能を使ってワークフローを作成します（以前はWorkflow Editorという機能もありましたが、現在はほとんど使用されていません）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Flow Designerは、Jira Service ManagementのWorkflow（ワークフロー）とAutomation（自動化）を一つにまとめたような機能&lt;/span&gt;&lt;/strong&gt;です。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;さらに、「条件を待つ」ことや、他の多くのシステムとの連携がパーツを配置するだけで簡単に組み込むことができます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Flow Designerはより高い柔軟性を提供するため、複雑な一連の業務プロセスをシステムで組み込みたい場合には、とても魅力的です。&lt;/p&gt;
&lt;h3&gt;外部システムとの連携機能&lt;/h3&gt;
&lt;p&gt;どちらも多くの外部システムとInboud・Outboundいずれでも連携することができます。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;標準で用意されているコネクターの数ではServiceNowが、Atlassian社の他製品との親和性ではJira Service Managementが優れています&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;ServiceNowの外部システム連携機能&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowは、グローバル標準のSaaSを中心とした数多くのサービスと、GUI上にパーツを配置するだけでシステム連携を構築できる非常に優れた外部システム連携機能を有しています&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.servicenow.com/ja-JP/bundle/tokyo-application-development/page/administer/integrationhub/reference/spokes-list.html&quot;&gt;Docs | ServiceNow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;さらに、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowは外部システムからのアクセスを可能にする豊富なInbound APIを提供しており、外部システム起点のシステム連携にも強みを持っています&lt;/span&gt;&lt;/strong&gt;。追加のWebhook URLを作成し、任意の動作をするエンドポイントを構築することも可能です。&lt;/p&gt;
&lt;p&gt;とはいえ、いくつか弱点も存在します。まず、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;ノーコードでシステム連携を行うためにはIntegration Hubというライセンスを、ユーザごとのライセンスとは別で購入する必要があり&lt;/span&gt;&lt;/strong&gt;、結構高いです。また、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;日本製品との標準コネクタはあまり提供されていないため、日系ツールとの連携を行う場合、3rdパーティ製のプラグインや日系SaaSに強いIntegration PaaS（iPaaS）を組み合わせる必要があります&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;Jira Service Managementの外部連携機能&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Jira Service Managementでは、標準でノーコードで簡単に連携できるシステムはあまりなく、多くの場合、3rdパーティーベンダが作成したアプリをインストールする必要があります&lt;/span&gt;&lt;/strong&gt;。これにより、連携機能がプラグイン内に閉じ、既存の自動化機能との組み合わせが難しい場合や、アップデートや障害対応が3rdパーティベンダに依存するというデメリットがあります。&lt;/p&gt;
&lt;p&gt;とはいえ、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Jira Service Managementも次のような外部システムと連携するための必要十分な機能は有しています&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;標準でREST APIをコールするためのステップがAutomation（自動化）に組み込まれているため、リクエストの作成やレスポンスのハンドリングを自分で行えば、Web APIを公開しているほぼすべてのシステムと連携が可能&lt;/li&gt;
&lt;li&gt;（上記デメリットはあるものの）3rdパーティベンダのシステム連携アプリが豊富で、要件に合うアプリがあれば、大抵は低コストで利用可能&lt;/li&gt;
&lt;li&gt;Webhookトリガで自動化を作成することで、Inboundのシステム連携にも対応可能&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Atlassian製品との親和性&lt;/h4&gt;
&lt;p&gt;Jira Service Managementは、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Atlassian社の他製品であるJira SoftwareやConfluenceとの親和性が非常に高い&lt;/span&gt;&lt;/strong&gt;です。既にAtlassian製品を利用している企業にとっては、この点は大きなメリットとなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jira Softwareとの親和性: &lt;strong&gt;Jiraタスクで仕事をする文化が根付いている場合、ワークフローで発生するタスクをJiraタスクとして生成できるのは大きな魅力&lt;/strong&gt;だと思います&lt;/li&gt;
&lt;li&gt;Confluenceとの親和性: &lt;strong&gt;問い合わせや依頼を起票する画面において、自動で関連するConfluenceページを検索して「この記事を見たら解決できるのでは？」という提案をしてくれます&lt;/strong&gt;。また、&lt;strong&gt;Confluenceページ内にJira Service Managementの問い合わせや申請フォームを埋め込むことができ、ナレッジの検索から問い合わせや申請の起票をシームレスに行えます&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;データベース機能&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;両製品ともに業務データを管理するためのデータベース機能を備えていますが、ServiceNowに若干の優位性があります&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;ServiceNowのデータベース機能&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowは内部のデータベースに直接に近い形で操作を行うことができます&lt;/span&gt;&lt;/strong&gt;。具体的には、標準のテーブルへのフィールド追加、新たなテーブルの追加、ビューの作成、トリガーの作成など（に相当する操作）が可能です。また、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ACLという機能を用いて非常にきめ細かい権限制御ができます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://servicenow-lab.com/acl-evaluation/&quot;&gt;ServiceNowのAccess Control List（ACL）の概要と評価のプロセス&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Jira Service Managementのデータベース機能&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Jira Service Managementでは、Asset（資産）という名前でデータベースにあたる機能を提供&lt;/span&gt;&lt;/strong&gt;しています。元々はAsset、つまりPCやサーバなどのITサービス管理における「資産」を管理する機能であるためか、ServiceNowの生に近いデータベース機能と比べると、下記の点で不足があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;キャパシティ　…　Atlassianの公式ページ「&lt;a href=&quot;https://support.atlassian.com/ja/jira-service-management-cloud/docs/how-much-data-can-you-store-in-assets/&quot;&gt;アセットに保存できるデータ量&lt;/a&gt;」に記載があるように、2024年7月時点では環境全体で100万件までの&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;データの制限があります&lt;/span&gt;&lt;/strong&gt;。大規模な組織で多くの業務データを格納する場合には少し不足がありますが、件数は今後拡張される可能性があります。&lt;/li&gt;
&lt;li&gt;権限制御　…　テーブル（スキーマ）単位やレコード単位の権限制御は可能ですが、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;フィールド単位での条件に応じた権限制御はできません&lt;/span&gt;&lt;/strong&gt;。例えば、「従業員データベース」を作成した場合、住所や報酬などの機密情報が、ITヘルプデスクの対応を行うユーザにも見えてしまう可能性があります。この点はスキーマの工夫や、何らかのアプリを探して対応する必要がありそうです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;開発管理機能・変更容易性&lt;/h3&gt;
&lt;p&gt;意外と見落としがちな観点が開発管理機能です。&lt;strong&gt;特にワークフロー機能を積極的に活用する場合、新しい申請を追加したり、修正したりすることが頻繁に発生すると予想されるため、設定の追加や改修を安全に素早くできるか、という観点を見ておきましょう&lt;/strong&gt;。&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;この点については、ServiceNowに優位性があります&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;資源移送機能&lt;/h4&gt;
&lt;p&gt;SAPやSalesforceなどと同様に、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ServiceNowには開発環境で作成した開発物（資源）を本番環境に移送（移行）する機能が存在&lt;/span&gt;&lt;/strong&gt;します。この機能により、開発と本番環境の同期を容易に行うことができます。一方、&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;Jira Service Managementにはこの機能がなく、検証環境でテストを行った後、手動で同じ設定を本番環境に反映する必要があります&lt;/strong&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;h4&gt;環境コピー機能&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;ServiceNowでは本番環境と同等の環境（ステージング環境）や検証環境を作成するために、本番環境をコピーする機能があります&lt;/strong&gt;。&lt;strong&gt;Jira Service Managementでは、データのコピー機能はありますが、設定値を含めた環境コピー機能はありません&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;自動テスト機能&lt;/h4&gt;
&lt;p&gt;こちらは実現しているシステムの方が少ないと思いますが、&lt;strong&gt;ServiceNowはテストを自動化する機能があり、開発時のイニシャルコストはかかりますが、一度作っておけばバージョンアップ時や改修時のリグレッションテストを省力化できます&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;管理（構築・運用・保守）の容易さ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;管理（構築・運用・保守）の容易さについては、個人的にはJira Service Managementに優位性があると考えます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Jira Service Managementは、直観的でキャッチアップしやすい管理画面を備えています。仕組み自体も複雑ではないため、失敗しても作り直せばよいという気軽さで使い始めることができます。これにより、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;管理する部門の体制が薄くても導入が可能&lt;/span&gt;&lt;/strong&gt;だと考えます。&lt;/p&gt;
&lt;p&gt;一方で、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;ServiceNowは非常に高い柔軟性を持つ反面、アーキテクチャが複雑で設定可能な箇所が多く、特に導入時には後戻りが難しい選択も多いため、慎重な設計が求められます&lt;/span&gt;&lt;/strong&gt;。&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;導入後も、最低一人は経験豊富なメンバーを確保することが望ましい&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;導入時にどのように体制を組むべきかについては、ITサービス管理のコンサルタントである加藤さんのnote記事も参考になります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://note.com/service_mgmt/n/n15b7f1e720e4&quot;&gt;ServiceNow ITSMとJira Service Management -お供を一人連れていくとしたら？-｜Akira@デジタル時代のITサービスマネジメント&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;その他の参考になるデータソース&lt;/h2&gt;
&lt;p&gt;その他、ServiceNowとJira Service Managementを比較する上で参考になるデータソースを提示します。&lt;/p&gt;
&lt;h3&gt;導入事例&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ServiceNow：&lt;a href=&quot;https://www.servicenow.com/jp/customers.html&quot;&gt;https://www.servicenow.com/jp/customers.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jira Service Management：&lt;a href=&quot;https://www.atlassian.com/ja/customers&quot;&gt;https://www.atlassian.com/ja/customers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;他者による比較資料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;各社による比較
&lt;ul&gt;
&lt;li&gt;ServiceNowによる比較：&lt;a href=&quot;https://www.servicenow.com/jp/servicenow-vs-jira.html&quot;&gt;https://www.servicenow.com/jp/servicenow-vs-jira.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Atlassianによる比較：&lt;a href=&quot;https://www.atlassian.com/ja/software/jira/service-management/comparison/jira-service-management-vs-servicenow&quot;&gt;https://www.atlassian.com/ja/software/jira/service-management/comparison/jira-service-management-vs-servicenow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;個人的に参考になった比較
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://deviniti.com/blog/enterprise-software/jira-service-management-vs-servicenow/&quot;&gt;https://deviniti.com/blog/enterprise-software/jira-service-management-vs-servicenow/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.adaptavist.com/blog/jira-service-management-and-servicenow-whats-the-difference&quot;&gt;https://www.adaptavist.com/blog/jira-service-management-and-servicenow-whats-the-difference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;各製品情報に関する訂正や、製品比較における支援が必要な場合は、サイト上部の問い合わせフォームよりお問い合わせください。&lt;/p&gt;
</content:encoded><category>検討・企画</category></item><item><title>ServiceNow – ダッシュボードのインスタンス間移送</title><link>https://servicenow-lab.com/dashboards_migration/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=4706</guid><description>過去に開発環境や検証環境で作成していた、もしくはこれから作成するダッシュボードを、本番環境に移送したいことがあると思います。</description><pubDate>Sat, 06 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;過去に開発環境や検証環境で作成していた、もしくはこれから作成するダッシュボードを、本番環境に移送したいことがあると思います。&lt;/p&gt;
&lt;p&gt;そんなとき、恐らく「数ある更新セットの顧客アップデートを確認して、必要なものだけを移送用の更新セットに移して…」であったり、「めんどくさいから元環境の設定を見ながら本番環境で直接作成する」といったことをしている方もいるかもしれません。&lt;/p&gt;
&lt;p&gt;今回は、そんな手間を省き、&lt;span class=&quot;marker-under-red&quot;&gt;簡単にインスタンス間でダッシュボードを移送する方法&lt;/span&gt;を解説していきます。&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;red&quot;&gt;※ 以降、移送元インスタンスをインスタンスAと記載し、&lt;strong&gt;ライトテーマ&lt;/strong&gt;で画像を貼ります&lt;br&gt;
※ 以降、移送先インスタンスをインスタンスBと記載&lt;/span&gt;&lt;span class=&quot;red&quot;&gt;し、&lt;strong&gt;ダークテーマ&lt;/strong&gt;で画像を貼ります&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;ダッシュボードの作成&lt;/h2&gt;
&lt;p&gt;インスタンスAに画像のようなダッシュボードを作成してみました。&lt;br&gt;
PDIを作成したときからデフォルトで存在するレポートやパフォーマンス分析をまとめたダッシュボードです。&lt;br&gt;
私が作成したレポートが存在しないわけですが、これをインスタンスBに移送できるか試してみます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-1024x468.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-1-1024x463.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;移送前準備&lt;/h2&gt;
&lt;h3&gt;更新セット&lt;/h3&gt;
&lt;p&gt;インスタンスAからインスタンスBにダッシュボードを移送するための更新セットを作成します。&lt;/p&gt;
&lt;p&gt;インスタンスAで、&lt;span class=&quot;marker-under-blue&quot;&gt;メニュー &amp;gt; System Update Sets &amp;gt; ローカル Update Sets(Local Update Sets)&lt;/span&gt; をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-5-1024x194.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;新規(New)をクリック&lt;/span&gt;し、任意の名前の更新セットを作成します。&lt;br&gt;
名前を入力したら、&lt;span class=&quot;marker-under-blue&quot;&gt;送信して最新にする(&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;marker-under-blue&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;marker-under-blue&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;marker-under-blue&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;)&lt;/span&gt;をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-7-1024x229.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;フィルターナビゲーターに &lt;em&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;pa_dashboards.list&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt; と入力し、Enterキーを押下します。&lt;br&gt;
インスタンスAに存在するすべてのダッシュボードのリストが表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-8-1024x483.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;先ほど作成した、サンプルダッシュボードをクリックします。&lt;br&gt;
画面左上の&lt;span class=&quot;marker-under-blue&quot;&gt;ハンバーガー（三本線）アイコンをクリック&lt;/span&gt;し、&lt;span class=&quot;marker-under-blue&quot;&gt;ダッシュボードのアンロード(Unload Dashboard)をクリック&lt;/span&gt;します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-9-1024x405.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;これで、今の更新セットの中にレポート・ダッシュボードを作成したすべての顧客アップデートが集まりました。&lt;br&gt;
一応、更新セットの中を見てみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-11.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;タブやパネルなど、作成した履歴が登録されているのがわかります。&lt;br&gt;
では、必要な顧客アップデートは全て集まったので、&lt;span class=&quot;marker-under-blue&quot;&gt;更新セットのステータスを完了に変更&lt;/span&gt;しましょう。&lt;br&gt;
ここまでで更新セットの準備は完了です。&lt;/p&gt;
&lt;h3&gt;更新ソース&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;インスタンスAのadmin(System Administrator)のパスワードを再設定しコピーします。&lt;/span&gt;&lt;br&gt;
&lt;span class=&quot;red&quot;&gt;※ 既にパスワードを控えている方は不要です。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-2-1024x368.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;インスタンスBにログインし、&lt;span class=&quot;marker-under-blue&quot;&gt;メニュー &amp;gt; System Update Sets &amp;gt; 更新ソース(Update Sources)&lt;/span&gt; をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-3-1024x363.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;新規(New)をクリック&lt;/span&gt;し、下記のように値を入力します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;　名前(Name)：任意の名前
　タイプ(Type)：開発
　URL：移送元のインスタンスURL
　ユーザー名(Username)：admin
　パスワード(Password)：adminのパスワード
　アクティブ(Active)：true
　簡単な説明(Short description)：任意の説明
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入力内容に誤りがないか確認し、&lt;span class=&quot;marker-under-blue&quot;&gt;テスト接続(Test Connection)ボタンをクリック&lt;/span&gt;します。&lt;br&gt;
画像のように接続成功のメッセージが表示されれば更新ソースの準備は完了です。&lt;br&gt;
&lt;span class=&quot;marker-under-blue&quot;&gt;送信(Submit)ボタンをクリック&lt;/span&gt;し、レコードを作成します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-4-1024x255.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;移送&lt;/h2&gt;
&lt;p&gt;移送先であるインスタンスBにログインします。&lt;br&gt;
前項で作成した更新ソースを開き、&lt;span class=&quot;marker-under-blue&quot;&gt;完了した更新セットを取得(Retrieve Completed Update Sets)ボタンをクリック&lt;/span&gt;します。&lt;br&gt;
ゲージが100%になったら&lt;span class=&quot;marker-under-blue&quot;&gt;クローズ(Close)をクリック&lt;/span&gt;します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-12-1024x498.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;関連リストの&lt;span class=&quot;marker-under-blue&quot;&gt;取得済み更新セット(Retrieved Update Sets)&lt;/span&gt;タブの、移送されてきたリモート更新セットレコードを開きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-14-1024x503.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;エラー表示が特になければ&lt;span class=&quot;marker-under-blue&quot;&gt;更新セットのコミット(Commit Update Set)ボタンをクリック&lt;/span&gt;します。&lt;br&gt;
ゲージが100%になったら&lt;span class=&quot;marker-under-blue&quot;&gt;クローズ(Close)をクリック&lt;/span&gt;します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-16-1024x508.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;これでインスタンスAで作成したダッシュボードの移送が完了しました。&lt;br&gt;
実際にダッシュボードを見比べてみましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;インスタンスA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-19-1024x441.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-20-1024x442.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;インスタンスB&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-17-1024x508.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2024/01/image-18-1024x510.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;うまく移送されていますね！&lt;br&gt;
レコード数やデータにインスタンス間で差異があるので全く同じレポートにならないことも想定通りです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回はレポート・ダッシュボードを更新セットを使用して簡単に移送する方法を解説しました。&lt;/p&gt;
&lt;p&gt;やることはシンプルで、簡単にまとめると下記のようになります。&lt;/p&gt;
&lt;p&gt;1.ダッシュボードを作成する&lt;br&gt;
2.移送用の更新セットを作成する&lt;br&gt;
3.&lt;span class=&quot;bold-red&quot;&gt;pa_dashboards.list &amp;gt; 目的のダッシュボードレコード &amp;gt; ハンバーガーアイコン &amp;gt; ダッシュボードのアンロード&lt;/span&gt;&lt;br&gt;
4.更新セットの移送&lt;/p&gt;
&lt;p&gt;冒頭で述べたような、一から各インスタンスに作り直すといった工程を踏むよりは遥かに楽になると思います。&lt;/p&gt;
&lt;p&gt;今回は以上です。ありがとうございました。&lt;/p&gt;
</content:encoded><category>開発・導入</category></item><item><title>ServiceNowのコメントにHTMLタグを使用する</title><link>https://servicenow-lab.com/journal_field_html/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=4690</guid><description>ServiceNowの追加コメントや作業メモにおいて、「@&lt;user_id&gt;」で任意のユーザーにメンションを付けてコメントを送信することができることは皆さんご存じかと思います。</description><pubDate>Sun, 17 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowの追加コメントや作業メモにおいて、「@&amp;lt;user_id&amp;gt;」で任意のユーザーにメンションを付けてコメントを送信することができることは皆さんご存じかと思います。&lt;/p&gt;
&lt;p&gt;しかしながら、&lt;span class=&quot;marker-under-red&quot;&gt;コメント内にリンクを埋め込んだり、表を作成できる&lt;/span&gt;ことは意外と知られていません。&lt;/p&gt;
&lt;p&gt;今回は、追加コメントや作業メモでHTMLタグを使う方法を解説していきます。&lt;/p&gt;
&lt;h2&gt;システムプロパティの確認&lt;/h2&gt;
&lt;p&gt;まず前提として、HTMLタグを使用できるかは、とあるシステムプロパティによって判断されます。&lt;br&gt;
デフォルトで使用できる設定になっていますが、一応確認しに行きましょう。&lt;/p&gt;
&lt;p&gt;フィルターナビゲータに &lt;span class=&quot;marker-under-red&quot;&gt;sys_properties.list&lt;/span&gt; と入力しEnterを押します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-1024x396.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Name (名前)が &lt;span class=&quot;marker-under-red&quot;&gt;glide.ui.security.allow_codetag&lt;/span&gt; のプロパティを探します。&lt;br&gt;
Value (値)が true になっていれば、追加コメント・作業メモでHTMLタグを使用できます。&lt;br&gt;
ユーザーにHTMLタグを使用させたくない場合は、こちらの値を false に変更してください。&lt;br&gt;
&lt;span class=&quot;red&quot;&gt;※ 正確には、フィールドタイプが Journal Input (ジャーナル入力) のフィールドでHTMLタグを使用できます。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-1-1024x232.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;実践&lt;/h2&gt;
&lt;p&gt;設定の確認が終わったらいよいよ実践です。&lt;br&gt;
試しに ServiceNow研究所 という文字列を太字にするHTML文を記載します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;b&amp;gt;ServiceNow研究所&amp;lt;/b&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-3-1024x91.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;タグがそのまま残ってしまい、太字にもなりませんでした。&lt;br&gt;
実は、ServiceNowの追加コメント・作業メモでそのままHTMLを使ったとしても、ただの文字列として認識されてしまい、期待通りに動作することはありません。&lt;/p&gt;
&lt;p&gt;ではどうするかというと、下記のように &lt;span class=&quot;marker-under-red&quot;&gt;[code][/code] でHTMLタグを囲んでしまいます。&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;[code]
&amp;lt;b&amp;gt;ServiceNow研究所&amp;lt;/b&amp;gt;
[/code]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-4-1024x93.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;今度は期待通りに太文字で表示されました。&lt;/p&gt;
&lt;p&gt;今のは簡単な例でしたが、こちらの[code][/code]タグ、HTML5でできることはおおよそできると考えていただいてよいです。例えば冒頭で述べたように…&lt;/p&gt;
&lt;p&gt;埋め込みリンクを作成したり、&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;[code]
&amp;lt;a href=&amp;quot;https://servicenow-lab.com/&amp;quot;&amp;gt;ServiceNow研究所&amp;lt;/a&amp;gt;
[/code]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-6-1024x97.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;表を作成したり、&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;[code]
&amp;lt;p&amp;gt;
  &amp;lt;a href=&amp;quot;https://servicenow-lab.com/&amp;quot;&amp;gt;ServiceNow研究所&amp;lt;/a&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;table border=&amp;quot;1&amp;quot; width=&amp;quot;200&amp;quot;&amp;gt;
  &amp;lt;tr bgcolor=&amp;quot;#e0ffef&amp;quot;&amp;gt;
    &amp;lt;th width=&amp;quot;70%&amp;quot;&amp;gt;カテゴリー&amp;lt;/th&amp;gt;
    &amp;lt;th width=&amp;quot;40%&amp;quot;&amp;gt;記事数&amp;lt;/th&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;検討・企画&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;20&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;運用&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;15&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;開発・導入&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;34&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
[/code]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-7-1024x217.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;こんな感じに書くことも可能です。&lt;br&gt;
※ ナレッジで書けと言われそうな内容ですが解説なので目を瞑ってください…&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;[code]
&amp;lt;h2&amp;gt;&amp;lt;a href=&amp;quot;https://servicenow-lab.com/&amp;quot;&amp;gt;ServiceNow研究所&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;h3&amp;gt;ServiceNowの日本語情報サイト&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;ServiceNowエンジニア三人が数々の導入案件に関わった経験をもとにServiceNowに関する情報を日本語で発信中&amp;lt;/p&amp;gt;

&amp;lt;ol&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://servicenow-lab.com/category/plan/&amp;quot;&amp;gt;検討・企画&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://servicenow-lab.com/category/operation/&amp;quot;&amp;gt;運用&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://servicenow-lab.com/category/install/&amp;quot;&amp;gt;開発・導入&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://servicenow-lab.com/inquiry/&amp;quot;&amp;gt;問い合わせ・仕事依頼&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;

&amp;lt;h3&amp;gt;記事数&amp;lt;/h3&amp;gt;
&amp;lt;table id =&amp;quot;lab&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;200&amp;quot;&amp;gt;
  &amp;lt;tr bgcolor=&amp;quot;#e0ffef&amp;quot;&amp;gt;
    &amp;lt;th width=&amp;quot;70%&amp;quot;&amp;gt;カテゴリー&amp;lt;/th&amp;gt;
    &amp;lt;th width=&amp;quot;40%&amp;quot;&amp;gt;記事数&amp;lt;/th&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;検討・企画&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;20&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;運用&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;15&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;開発・導入&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;34&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;h3&amp;gt;カテゴリ別閲覧者数&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;・・・・&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;サイト再訪問者率&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;・・・・&amp;lt;/p&amp;gt;
[/code]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/12/image-8-1024x554.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回は追加コメント・作業メモでHTMLタグを使用する方法を解説しました。&lt;/p&gt;
&lt;p&gt;基本的に、HTMLフォーマットでの文書の保存は、HTMLタイプのフィールドを作成し、アクティビティストリームに出力されるように設定を行う方が、入力者の手間がかかりません。&lt;br&gt;
標準のフィールドをHTMLタイプに変更するというのも一つの手ではあります。&lt;/p&gt;
&lt;p&gt;しかし、追加コメント・作業メモのように、フィールドの作成元であるタスク [task]から数多くの子テーブルに継承している場合は、影響範囲が広すぎるためタイプの変更は推奨されません。&lt;/p&gt;
&lt;p&gt;標準のフィールドに全く手を加えずリンクを作業メモに埋め込みたい、といった場合にご利用ください。&lt;/p&gt;
&lt;p&gt;今回は以上です。ありがとうございました。&lt;/p&gt;
</content:encoded><category>運用</category></item><item><title>ServiceNow – 少数を表すデータ型の解説（Decimal, Floating Point Number）</title><link>https://servicenow-lab.com/decimal/</link><guid isPermaLink="false">https://servicenow-lab.com/?p=4390</guid><description>ServiceNowにおいて、少数を表現するデータ型であるDecimal型とFloating Point Number型の仕様、それらの使い分けについて解説します。</description><pubDate>Wed, 20 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ServiceNowにおいて、少数を表現するデータ型であるDecimal型とFloating Point Number型の仕様、それらの使い分けについて解説します。&lt;/p&gt;
&lt;h2&gt;Decimal, Floating Poit Number, 他のデータ型の使い分け（結論）&lt;/h2&gt;
&lt;p&gt;まずは、この記事の結論である使い分けを初めに示しておきます。後述すように、少数を表すデータ型は仕様がトリッキーで、きれいには分離できないため、独断を含んでいます。なお、ServiceNowでは、一般的に倍精度浮動小数点数を表すDouble型は存在しません。&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;やりたいこと&lt;/th&gt;&lt;th&gt;適切なデータ型&lt;/th&gt;&lt;th&gt;解説&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;大きな桁数の整数を保持したい&lt;/td&gt;&lt;td&gt;long,&lt;br&gt;Decimal&lt;/td&gt;&lt;td&gt;Decimalを用いる場合約16桁までの値しか正確に保持できないが、long型であれば約19桁まで保持できる上に挙動がシンプルなので、longを推奨します。ただし、入力できる桁数を制限したい場合は、簡単な設定で桁数を制御できるDecimalが良いと思います。&lt;br&gt;*なお、”他システムから取得した値をスクリプト経由で計算処理無しで記録しておく”といった特殊ケースで、かつlongでは対応できない大きな桁数の値を保持したい場合は、Decimalを採用してもよいかもしれません。（詳細は後述）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;桁数の比較的少ない少数を保持したい&lt;/td&gt;&lt;td&gt;Floating Point Number,&lt;br&gt;Decimal&lt;/td&gt;&lt;td&gt;パーセント（e.g. 15.5%）や評価（e.g. 3.5点）、工数（e.g. 1.25人月）などの、口述のFloating Point Number型で表現できる範囲の桁数に収まることが確実な数であれば、Decimalよりも挙動が素直なFloatを推奨します。ただし、入力できる桁数を制限したい場合は、簡単な設定で桁数を制御できるDecimalが良いと思います。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;桁数の大きい少数を保持したい&lt;/td&gt;&lt;td&gt;Decimal&lt;/td&gt;&lt;td&gt;金額（e.g. 123,456,789,012.5ドル）や精密な量（0.00005523kg）などで、Floating Point Numberで表現できる範囲を超える可能性のある少数を格納する場合は、Decimalしか対応できません。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Decimal, Floating Point Number, longの使い分け&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Decimal型項目の解説&lt;/h2&gt;
&lt;h3&gt;基本&lt;/h3&gt;
&lt;p&gt;少数を保持する項目（フィールド）を作成する場合のデータ型の選択肢の一つが、Decimal型です。&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;&lt;strong&gt;Decimal型フィールドでは、整数部と小数部を合わせた最大桁数をMax length項目で、小数部の最大桁数をScale属性（Attribute項目で指定する項目の設定）で指定&lt;/strong&gt;&lt;/span&gt;できます。Max lengthを15、Scaleを7で指定した場合、整数部最大8桁、小数部最大7桁の少数を格納することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-9-1024x335.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Decimal型の不思議な挙動とその理由、対応方法&lt;/h3&gt;
&lt;p&gt;Decimalは数々のトリッキーな挙動を示すデータ型であり、以下に具体的な挙動とその理由、存在するものは対応方法を示します。&lt;/p&gt;
&lt;p&gt;なお、これらは贔屓目に見ても謎な仕様ばかりなので、今後修正が入る可能性もあります。本記事は2023年Vancouverバージョンの挙動をもとに調査しているため、後発のバージョンでは挙動が変わっている可能性があります。&lt;/p&gt;
&lt;p&gt;謎挙動をまとめると、次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Max Lengthの最大値は38&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ScaleはMax Length以下でなければならず、最大値は38&lt;/span&gt;（Max length = Scale = 38とした場合、0.&amp;lt;38桁&amp;gt;の形式の少数のみ保持できる）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;標準ではHTML/CSS上でDecimal型フィールドに対応するformタグにmaxlength=14が指定されているため、小数点やカンマを含めて14桁までしか入力できないようになっているフォーム上で14桁以上入力させる必要がある場合はonloadのClient Scriptでこの制御を外さなければならない&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;標準ではDecimal型項目に対してフォーム上で入力を行うと、整数部のみ自動フォーマットが行われ、3桁ごとのカンマや、21桁を超えた場合の指数表記への変換が行われる。この自動フォーマットにおいて、数値はIEEE 754 倍精度浮動小数点数で処理されているため、9,007,199,254,740,991(10進数、16桁)を超えた数値を入れると、丸め誤差が発生する可能性がある。つまり、&lt;span class=&quot;marker-under-blue&quot;&gt;フォームからの入力を前提とする場合、&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;正確&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;な値を&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;保持&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;できる&lt;/span&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;実質の最大桁数は15桁&lt;/span&gt;&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下、一つずつ詳細を説明していきます。&lt;/p&gt;
&lt;h3&gt;謎仕様① Max Lengthを14以下にしようとすると強制的に15になる&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Max lengthを14以下に変更しようとすると、”Set Length for Decimal”というBusiness Ruleによって強制的に15に変更される&lt;/span&gt;&lt;/strong&gt;ようです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-10-1024x425.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;基本的に桁数が大きい分には問題にならないと思いますが、例えば10桁以内の整数を格納する項目を作りたい場合などは、なぜこのような制御がかかっているかはわかりませんが、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;この制御が内部的なデータベースの扱いなどに関連している可能性もあるため、14桁以下に制御する必要がある場合は、標準のBusiness Ruleを無効化/変更せずUI PolicyやClient Script、Business Ruleを用いて制御するほうが良い&lt;/span&gt;&lt;/strong&gt;でしょう。&lt;/p&gt;
&lt;h3&gt;謎仕様② Max Lengthを38より大きくしても内部的には38桁までしか保存できない&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Decimal項目のMax lengthの値を38より大きくしようとすると、画面上は可能なのですが、内部的には38が限界なようです&lt;/span&gt;&lt;/strong&gt;。ServiceNowの内部で用いられているMySQL(MariaDB)の仕様では、最大桁数は65桁ですので、この制約はServiceNowのアプリケーションレイヤでかけられているものと思われます。&lt;/p&gt;
&lt;p&gt;ちなみに、Dictionary（項目定義）上では38桁より大きな値を入力しても、フォーム上でフィールドの情報を確認すると、38桁と表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-16-1024x336.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;謎仕様③ Scaleを変更しても小数点以下桁数が変更されない&lt;/h3&gt;
&lt;p&gt;Decimal型フィールドにおいて&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;Scale attributeだけを変更してもDBには反映されず、Max lengthを変更した際にMax lengthとScaleがまとめて反映される&lt;/span&gt;&lt;/strong&gt;そうです。そのため、Scaleだけを変更したい場合であっても、Scale変更後に一度Max lengthを変更して、元に戻す必要があります。&lt;/p&gt;
&lt;p&gt;参考: &lt;a href=&quot;https://support.servicenow.com/kb?id=kb_article_view&amp;amp;sysparm_article=KB0696658&quot;&gt;KB0696658 Number of decimal places always rounds to 2 even when ‘scale’ is attribute is set&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;謎仕様④ Decimal型のフィールドに14文字までしか入力できない&lt;/h3&gt;
&lt;p&gt;Max lengthの設定とは無関係に、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;フォーム上でDecimal型フィールドに値を入力しようとすると、小数点を含め最大14文字までしか入力することができません&lt;/span&gt;&lt;/strong&gt;。これは、&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;HTML/CSS側で最大文字数が14文字に制御されているため&lt;/strong&gt;&lt;/span&gt;です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-11-1024x284.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;なぜこのような制御がかかっているかはわかりませんが、このままだと小数点を含めて14文字以内の値しか入力できなくなってしまうので、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;符号や小数点を含め15文字以上を入力できる必要がある場合はonloadのClient Scriptで次のように制約を外す必要があります&lt;/span&gt;&lt;/strong&gt;。なお、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;ここで設定するmaxlengthは、テキストボックスへ入力できる最大文字数ですので、符号や整数の区切りのカンマ、小数点を考慮しておく必要があります&lt;/span&gt;&lt;/strong&gt;。厳密に桁数を制御したい場合は、別途UI PolicyやClient Script、Business Ruleで制御すべきです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-12-1024x395.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;maxlengthの制御を外すClient Script&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;function onLoad() {
	// Max length=15, Scale=7を前提として、小数点及び整数部のカンマを考慮し18文字に上書き
    g_form.getElement(&apos;u_decimal_field&apos;).setAttribute(&apos;maxlength&apos;, &apos;18&apos;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;なお、MySQLの仕様だと、小数部の桁数の最大値は30のようですが、ServiceNowとしては、Max Length = Scale = 38、つまり小数部が38桁の少数も格納することができるようでした。&lt;/p&gt;
&lt;h3&gt;謎仕様⑤ フォーム上で数値を入力すると整数部に丸め誤差が発生する/整数部が22桁以上になる値を入力すると指数表記（例:”1e,+21″）になり保存できない&lt;/h3&gt;
&lt;p&gt;前提として、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;フォーム上でDecimal型フィールドに数値を入力すると、整数部に3桁ごとのカンマが入ります&lt;/span&gt;&lt;/strong&gt;。これは、HTML/CSS側で値変更時に動作するformatNumber()関数によるものだと思われます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-13-1024x279.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;整数部に16桁以上入力できるようにした上で、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;例えば”9007199254740993″と入力してみると、”9,007,199,254,740,992″に勝手に変更され、丸め誤差が発生&lt;/span&gt;&lt;/strong&gt;します。&lt;/p&gt;
&lt;p&gt;実機の挙動を見る限り、これは、上述の&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;formatNumber()関数において、整数部の数値をIEEE 754 倍精度浮動小数点数で扱っているためだと思われます&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-14-1024x272.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;詳細は省きますが、IEEE 754 倍精度浮動小数点数では仮数部が53bitで表現できる9,007,199,254,740,991(10進数、16桁) = 1 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111(2進数、53桁)までの値を正確に保持できます。この値を超えると、仮数部が53bitを超える可能性があり、その場合に丸め誤差が発生します。例えば、9,007,199,254,740,99&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/span&gt;(10進数、16桁) = 10 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000(2進数、54桁) = 1 * 2^54は仮数部は1桁になるため丸め誤差は発生しまあせんが、9,007,199,254,740,99&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/span&gt;(10進数、16桁) = 10 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 000&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;1&lt;/span&gt;&lt;/strong&gt;(2進数、54桁)は仮数部が54桁となるため、53桁に丸められ9,007,199,254,740,99&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/span&gt;(10進数、16桁)に変更されます。&lt;/p&gt;
&lt;p&gt;仮に丸め誤差を許容したとしても、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;フォーム上で整数部が22桁以上になる値を入力すると指数表記（例:”1e,+21″）になり、指数表記の状態だとエラーが出て値を保存することができません&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servicenow-lab.com/wp-content/uploads/2023/09/image-15-1024x272.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;こちらも&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;formatNumber()の仕様によるものだと思われます&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;formatNumber()の処理を防ぐのは難しいと思われますが、onChangeのClientScriptで丸め誤差や指数表記をもとに戻すことは理論的には可能です。しかし、その処理を行うコードの中でも数値はIEEE 754 倍精度浮動小数点数で扱われてしまうため、実現するためには複雑な処理を実装しなければなりません。&lt;/span&gt;&lt;/strong&gt;そのため、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;桁数の大きな整数を保持する場合、9,223,372,036,854,775,807(19桁)までで問題なければlong型を利用するのが良い&lt;/span&gt;&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;なお、フォーム経由ではなくスクリプト経由で値を入れる場合は、formatNumber()が動作しないためか、これらの挙動は確認されませんでした。とはいえ、やはりこの場合も、スクリプトの中では基本的に数値は数値はIEEE 754 倍精度浮動小数点数で扱われてしまうため、気を付けないと結局丸められてしまいます。&lt;/p&gt;
&lt;h2&gt;Floating Point Number型項目の解説&lt;/h2&gt;
&lt;h3&gt;基本&lt;/h3&gt;
&lt;p&gt;少数を保持する項目（フィールド）を作成する場合のデータ型のもう一つの選択肢が、Floating Point Number型です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;Floating Point Number型は、Decimal型ほどではないですが、やはり少しトリッキーな挙動を示します&lt;/span&gt;&lt;/strong&gt;ので、以下にそれらを示します。こちらも2023年Vancouverバージョンの挙動をもとに調査しているため、後発のバージョンでは挙動が変わっている可能性があります。&lt;/p&gt;
&lt;h3&gt;謎仕様① Floating Point Number型のフィールドに14文字までしか入力できない&lt;/h3&gt;
&lt;p&gt;Decimal型と同様に&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;フォーム上でFloating Point Number型フィールドに値を入力しようとすると、小数点を含め最大14文字までしか入力することができません&lt;/span&gt;&lt;/strong&gt;。これは、&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;HTML/CSS側で最大文字数が14文字に制御されているため&lt;/span&gt;&lt;/strong&gt;です。対応については前述した通りです。&lt;/p&gt;
&lt;h3&gt;謎仕様② 単精度浮動小数点数ではない&lt;/h3&gt;
&lt;p&gt;Floating Point Numberというと、&lt;strong&gt;&lt;span class=&quot;marker-under-blue&quot;&gt;一般的なプログラミング言語でいうFloat(float)型、つまりIEEE 754 単精度浮動小数点数を表すように見えますが、ServiceNowのFloating Point Number型は、単精度浮動小数点数よりももう少し表現力が高い&lt;/span&gt;&lt;/strong&gt;ようです。&lt;/p&gt;
&lt;p&gt;内部のデータ構造はよくわかりませんでしたが、実機の挙動としては、少なくとも次のような値を表現することができました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;整数部&lt;/th&gt;
&lt;th&gt;小数部&lt;/th&gt;
&lt;th&gt;備考&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;11桁&lt;/td&gt;
&lt;td&gt;0桁&lt;/td&gt;
&lt;td&gt;整数部のみであれば11桁までの数値を格納できるようです。12桁以上の数値を入力したところ、100,000,000,000(11桁)に変更されてしまいました。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11桁&lt;/td&gt;
&lt;td&gt;5桁&lt;/td&gt;
&lt;td&gt;整数部11桁、小数部5桁もほとんどの数値を格納できました。ただし、99,999,999,999.99999としたところ、99,999,999,999.9999&lt;strong&gt;&lt;span class=&quot;marker-under-red&quot;&gt;8&lt;/span&gt;&lt;/strong&gt;と変更されてしまったり、10,000,000,000.9999&lt;span class=&quot;marker-under-red&quot;&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;/span&gt;だと末尾の9はそのままだったりと、少し変な挙動は示します。規則性はわかりませんでした。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0桁&lt;/td&gt;
&lt;td&gt;7桁&lt;/td&gt;
&lt;td&gt;小数部ので可能な限り大きな桁数を格納しようとすると、7桁まで格納できました。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9桁&lt;/td&gt;
&lt;td&gt;7桁&lt;/td&gt;
&lt;td&gt;小数部を7桁格納できる、かつ整数部にできるだけ大きな桁数を格納しようとすると、9桁まで格納できました。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;ServiceNowのFloating Point Number型で表現できる値&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;
</content:encoded><category>検討・企画</category></item></channel></rss>