CSV ファイルを MID Server からインポートする方法Issue この KB は、MID Server からファイルをインポートする場合に適用されます。ファイルを MID Server にエクスポートすることはできますが、MID Server からファイルをインポートするための OOB(Out of Box)機能はありません。 Release すべて Cause この機能は、シンプルな UI インターフェースでは提供されていません。MID Server は、大量のデータ転送や大容量ファイルのアップリンクストリーミングを目的として設計されたものではありません。 そのため、Tomcat の設定方法に起因する制限があります。また、この種のリクエストは小さなチャンクに分割されるため、パフォーマンス上理想的ではありません。このため、非常に大きなファイルの使用は推奨していません。大容量ファイルを使用すると Out of Memory 問題が発生し、インスタンスが応答しなくなる可能性があります。 Resolution いくつかの回避策があります。&lt;br&gt; SOAP インバウンドリクエストを使用してインスタンスへファイルをインポートするCSV または Excel(XLS)ファイルの直接インポート(MID Server 固有ではありません)Attachment API または MID Command Probe を使用してファイルを直接添付するカスタマイズ(インスタンス上のスクリプトから MID Server ホスト上のファイルを取得する) SOAP インバウンドリクエストを使用してインスタンスへファイルをインポートする MID Server を介して SOAP メッセージを送信する 250MB のような大容量ファイル添付を ServiceNow にインポートする場合、SOAP の最大リクエストサイズ制限に達します。 1 インスタンスあたりの最大ヒープメモリは、デフォルトで 2GB です。 XML ペイロード(すべての SOAP リクエスト情報は XML 形式)を処理するためのメモリは、ペイロードサイズの 10~20 倍になる場合があります。そのため、ServiceNow インスタンスでは 100MB を超える SOAP ペイロードを処理できません。 これを超える SOAP ペイロードサイズは、ヒープメモリの上限に非常に近づくため、インスタンスをクラッシュさせるリスクが非常に高くなります。 プロパティ「glide.soap.max_inbound_content_length」のデフォルト値は 70MB です。この値を少しずつ調整し、インスタンスへのパフォーマンス影響を確認しながらテストすることを常に推奨します。 大容量添付ファイルをインポートする最善の方法は、代わりに Attachment API を使用することです。詳細については Attachment API を参照してください。コミュニティ Web サイトでも、同じディスカッションについて以下のリンクを参照できます。What is the maximum size of JSON message that ServiceNow can receive in a single REST call? CSV または Excel(XLS)ファイルの直接インポート(MID Server 固有ではありません) 組み込みの /sys_import.do「API」を使用すると、CSV ファイルまたは Excel ファイルを直接インポートできます。この方法では MID Server を使用する必要はなく、必要なツールを備えた任意のホスト(POST リクエストを実行できるスクリプトや Postman などのプログラム)から実行できます。また、このインポートを MID Server ホストから実行することも可能です。 この機能については、Post CSV or Excel files directly to an import setに記載されています。 サンプルスクリプトは次とおりです。:Posting a CSV file - Perl and Java examples 注意: ファイルコンテンツ自体は、マルチパート添付として POST リクエストでアップロードする必要があります。このパラメータの名前(キー)は任意に設定できます。 上記のサンプルスクリプトに加えて、Postman を使用してテストすることもできます。 シンプルなテスト用 CSV ファイルを作成します。インスタンス上で「Load Data」を使用して CSV ファイルを一度手動でアップロードし、必要な Import Set Staging テーブル(例: u_mytestimport)を作成します。Import Set Staging テーブル(例: u_mytestimport)からアップロードされたデータを削除します。次の URL に対して POST リクエストを送信します。https://INSTANCENAME.service-now.com/sys_import.do?sysparm_import_set_tablename=u_mytestimport&sysparm_transform_after_load=false(u_mytestimport は Import Set Staging テーブルです。このテーブルは、同じ列を持つ CSV を一度手動アップロードすることで事前に作成されている必要があります。)Authorization: Basic authenticationBody: form-data(マルチパート添付用)。パラメータ(POST パラメータ)を作成し、Key には任意の名前(「uploaded_csv_file」、「somefile」など)を指定します。タイプは File(ドロップダウンから選択)に設定し、Value にはファイルの場所を指定します。Send を実行すると、データが Import Set Staging テーブルに表示されます。 Attachment API または MID Command Probe を使用してファイルを直接添付する 推奨される方法(MID Server ホストからファイルを「プッシュ」する) サポート対象の OOB Attachment API を使用して、インシデントなどの既存レコードにファイルを添付できます。もちろん、この方法では MID Server ホスト上で API 呼び出しを実行してファイルを挿入するプログラムまたはスクリプトが必要です。MID Server ホスト上での実装方法(例: Windows 上の PowerShell スクリプト、Linux 上で cURL を使用する bash スクリプト)は、当社のサポート範囲外であり、サポートされません。 カスタマイズ(インスタンス上のスクリプトから MID Server ホスト上のファイルを取得する) この方法が利用できず、MID Server ホストからファイルを取得する必要がある場合は、MID Server Command Probe を利用できます。これにより、システム上でシェルコマンドを実行できます。これは次のようなスクリプトになります(必要に応じて Scheduled Job として実行できます)。 Linux または macOS: var probe = SncProbe.get("Command");probe.setName("cd /Users/me/Desktop && cat example.csv | base64");probe.create("<MID Server Name>"); Windows: ファイル内容を Base64 エンコード文字列として返す同等の Windows コマンドの例はこちらです。https://stackoverflow.com/questions/37046771/base64-encode-string-command-line-windows ECC Queue レコードを次のスクリプトで作成します。 mid.server.<MID SERVER NAME GOES HERE> は mid.server.MID_Server名 に置き換えます(不明な場合は他の ECC Queue Output レコードからコピーしてください)。<COMMAND TO RUN> は実行する PowerShell コマンドに置き換えます(「< >」は含めません)。 // based on Executing powershell command on mid server var payload = '<parameters>' + '<parameter name="probe_name" value="Windows - Powershell"/>' + '<parameter name="script.ps1" value="<COMMAND TO RUN>"/>' + '<parameter name="skip_sensor" value="true"/>' + '</parameters>';var sysid = '';var grECC = new GlideRecord('ecc_queue');grECC.initialize();grECC.agent = 'mid.server.<MID SERVER NAME GOES HERE>';grECC.topic = 'Powershell';grECC.name = 'Windows - PowerShell';grECC.source = '127.0.0.1';grECC.queue = 'output';grECC.payload = payload;sysid = grECC.insert(); この応答として、ファイルの Base64 エンコード文字列が返され、応答内の ECC Queue に書き込まれます。その後、インスタンス上の Business Rule を使用してこれを添付ファイルに変換できます。 新しい Business Rule を作成します。 名前: 任意の分かりやすい名前 (例: 「Process Input ECC queue command entries」) When to run → When: AfterInsert: チェックOrder: 100 When to run → Condition: Name が cd /Users/me/Desktop && cat example.csv | base64(注: probe.setName() に設定したコマンド、または Windows の場合は grECC.name に設定した値と完全に一致する必要があります。あるいはこの条件を省略し、スクリプト内の if 文で条件を設定することも可能です。)Topic が CommandQueue が inputState が ready Advanced にチェックを入れます。続いて Advanced → Script を以下のように設定します。 ('incident' および 'b1d588a21bab101093c210ea274bcbb7' は、添付ファイルを追加する対象レコードのテーブル名および sys_id に置き換えてください。) (function executeRule(current, previous /*null when async*/) {var encStr = gs.getXMLText(current.payload, "//stdout"); gs.info("Text was " + encStr);var stringUtil = GlideStringUtil;var attachment = new Attachment();attachment.write('incident', 'b1d588a21bab101093c210ea274bcbb7', 'example.csv', 'text/csv', stringUtil.base64DecodeAsBytes(encStr));})(current, previous); この方法は、Linux MID Server ホストを使用した Paris テストインスタンスでテストされており、実際に動作することが確認されています(Windows MID Server ホストで PowerShell を使用する方法は、まだテストされていません)。ただし、これはカスタマイズであり、この情報はお客様の開発者がさらに検討を進めるための提案として提供されています。十分にテストされていない場合があります。 ServiceNow はカスタマイズに対するサポートを提供できません。