新しいビジネスサービスを別のインスタンスに移行する方法Issue 警告: この記事の目的は、新しいビジネスサービス (既存のビジネスサービスのエントリーポイントとして使用されていないエントリーポイントを含む) を 1 つの Service Now インスタンスから別のインスタンスに移行するのを支援することです。この記事で提供されているスクリプトを使用して、変更された (既存の) ビジネスサービス (およびエントリーポイント) を移行しないでください。既存のデータが上書きされたり、重複が発生したりするおそれがあります。注意して使用** [すべてのビジネスサービスを更新セットに追加] スクリプトは修正スクリプトであり、すべてのビジネスサービスとその関連エントリーポイントを 現在の 更新セットに追加して、移行エンジニアが最初に ServiceWatch から移行したこのコンテンツを 1 つの ServiceNow インスタンスから別のインスタンスに簡単に移行できるようにすることを目的としています。 スクリプトは、移行されたビジネスサービスに限定されないことに注意してください。すべてのビジネスサービスとそのエントリポイントが、移行とともに追加されたかどうかに関係なく、更新セットに追加されます。 このスクリプトが修正スクリプトとして実装されたのは、修正スクリプトはオンデマンドで簡単に実行でき、メンテナンス権限を必要としないためです。 更新セットの詳細については、ドキュメントトピック 更新セット およびそのサブトピックを参照してください。 修正スクリプトの詳細については、ドキュメントのトピック「 Fix_scripts」を参照してください。 スクリプト このドキュメントでは、次の 2 つの修正スクリプトの内容を提供し、それらについて説明します。 sys_script_fix_b801dd21c3002200ab8f9624a1d3ae31.xml – 「すべてのビジネスサービスを更新セットに追加」修正スクリプトsys_script_fix_90545218db852200e2c27a6eaf9619b0.xml ‐ 「BS をサービスモデルと同期」修正スクリプト sys_script_fix_b801dd21c3002200ab8f9624a1d3ae31.xml ‐ 「すべてのビジネスサービスを更新セットに追加」修正スクリプト <?xml version="1.0" encoding="UTF-8"?> <unload unload_date="2016-08-01 08:27:26"><sys_script_fix action="INSERT_OR_UPDATE"><active>true</active><before>false</before><description/><flush_cache>false</flush_cache><name>Add all business services to update set</name><run_once>true</run_once><script><![CDATA[var setID = gs.getPreference('sys_update_set'); var us = new GlideRecord('sys_update_set');if (us.get(setID)) { gs.log("About to add all business service groups to update set id=" + setID + " (" + us.name + ")"); addBsGroupsToUpdateSet();gs.log("About to add all business services and their entry points to update set id=" + setID + " (" + us.name + ")"); addToUpdateSet(); }function addBsGroupsToUpdateSet(){ var um = new GlideUpdateManager2();var gr = new GlideRecord('cmdb_ci_service_group'); gr.query();while (gr.next()) { um.saveRecord(gr);gs.log('Business Service Group id=' + gr.sys_id + ' (' + gr.name + ') added to update set'); } }function addToUpdateSet() {var um = new GlideUpdateManager2();var m2mGr = new GlideRecord('sa_m2m_service_entry_point'); m2mGr.query();while (m2mGr.next()) {var m2mId = m2mGr.getValue('sys_id');var bsId = m2mGr.getValue('cmdb_ci_service');var epId = m2mGr.getValue('cmdb_ci_endpoint'); var bsGr = new GlideRecord('cmdb_ci_service_discovered');if (bsGr.get(bsId)) {bsGr.setValue('layer','');um.saveRecord(bsGr);gs.log('Business Service id=' + bsId + ' (' + bsGr.name + ') added to update set'); } var groupGr = new GlideRecord('sa_service_group_member');groupGr.addQuery('service', bsId);groupGr.query();while (groupGr.next()) { um.saveRecord(groupGr);gs.log('Association of Business Service id=' + bsId + ' to group id=' + groupGr.service_group + ' added to update set'); } var epGr = new GlideRecord('cmdb_ci_endpoint');if (epGr.get(epId)) {// Getting the specific epvar clazz = epGr.getValue('sys_class_name');var specificEpGr = new GlideRecord(clazz);if (specificEpGr.get(epId)) { um.saveRecord(specificEpGr);gs.log('Entry Point id=' + epId + ' (' + specificEpGr.name + ') of type ' + clazz + ' added to update set'); } }var assocGr = new GlideRecord('svc_ci_assoc');assocGr.addQuery('service_id',bsId);assocGr.addQuery('ci_id',epId);assocGr.query();if (assocGr.next()) {um.saveRecord(assocGr); gs.log('Association of endpoint id=' + epId + ' to service id=' + bsId + ' added to update set'); } um.saveRecord(m2mGr);gs.log('M2m record id=' + m2mId + 'added to update set');} }]]></script><sys_class_name>sys_script_fix</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2016-06-16 07:37:26</sys_created_on><sys_customer_update>false</sys_customer_update><sys_id>b801dd21c3002200ab8f9624a1d3ae31</sys_id><sys_mod_count>5</sys_mod_count><sys_name>Add all business services to update set</sys_name><sys_package display_value="Global">global</sys_package><sys_policy/><sys_replace_on_upgrade>false</sys_replace_on_upgrade><sys_scope display_value="Global">global</sys_scope><sys_update_name>sys_script_fix_b801dd21c3002200ab8f9624a1d3ae31</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2016-08-01 08:05:31</sys_updated_on><unloadable>true</unloadable></sys_script_fix></unload> sys_script_fix_90545218db852200e2c27a6eaf9619b0.xml - 「BS をサービスモデルと同期」修正スクリプト <?xml version="1.0" encoding="UTF-8"?><unload unload_date="2016-08-01 08:34:01"><sys_script_fix action="INSERT_OR_UPDATE"><active>true</active><before>false</before><description/><flush_cache>false</flush_cache><name>Synchronize BS with Service Model</name><run_once>true</run_once><script><![CDATA[if (GlideProperties.getBoolean('sa.service_modeling.use', true)) {var utils = new ServiceMappingUtils();var gr = new GlideRecord('cmdb_ci_service_discovered');gr.query();while (gr.next()) { if (gr.layer == '') { utils.resetModel(gr); } }} else { gs.log("*** sa.service_modeling.use property is false ***"); }]]></script><sys_class_name>sys_script_fix</sys_class_name><sys_created_by>tal.benari</sys_created_by><sys_created_on>2016-08-01 08:21:22</sys_created_on><sys_customer_update>false</sys_customer_update><sys_id>90545218db852200e2c27a6eaf9619b0</sys_id><sys_mod_count>4</sys_mod_count><sys_name>Synchronize BS with Service Model</sys_name><sys_package display_value="Global">global</sys_package><sys_policy/><sys_replace_on_upgrade>false</sys_replace_on_upgrade><sys_scope display_value="Global">global</sys_scope><sys_update_name>sys_script_fix_90545218db852200e2c27a6eaf9619b0</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2016-08-01 08:33:52</sys_updated_on><unloadable>true</unloadable></sys_script_fix> </unload> スクリプトロジック スクリプトは、既存のすべてのビジネスサービスグループを更新セットに追加することから始まります。次に、ビジネスサービスをエンドポイントレコードにバインドするsa_m2m_service_entry_pointテーブルにクエリを実行し、それらをビジネスサービスのエントリーポイントにします。各レコードを使用し、sys_idsを使用してビジネスサービス (cmdb_ci_service_discovered) レコードとエンドポイント (cmdb_ci_endpoint) レコードをフェッチします。正確なエンドポイントタイプを調べるには、cmdb_ci_endpoint レコードの sys_class_name フィールドを使用します。特定のエンドポイントレコードは、このフィールドの内容を使用してフェッチされます。各サービスがバインドされているグループを見つけるために、ビジネスサービスのsys_idを使用してグループメンバーレコード (sa_service_group_member) をフェッチします。ビジネスサービスレコードとエンドポイントレコードのsys_idsを使用して、CI 関連性 (svc_ci_assoc) レコードもフェッチします。(これは、現在のマップ ノードが CI の関連付けに基づいているジュネーブで最も重要です)。最後に、m2m レコード、グループメンバーレコード、CI 関連付けレコード、ビジネスサービスレコード、および特定のエンドポイントレコードがすべて更新セットに追加されます。このスクリプトは GlideUpdateManager2 API を使用してこれを行います。ログに出力されたメッセージは、更新セットに追加されたレコードをユーザーに知らせます。 スクリプトの使用方法 ビジネスサービスを追加する更新セットが現在の更新セットであることを確認してください。そうでない場合は、最新のものにします。 詳細については、ドキュメントトピック 更新セットを参照してください。 「Add all business services to update set」修正スクリプト XML をインスタンスにインポートします。 システム定義 > ファイルをアップロードに移動します。ファイルを参照して選択します。アップロードボタンをクリックします。 システム定義 > 修正スクリプトに移動し、修正スクリプトを検索します。 修正スクリプトフォームで 修正スクリプトを実行 関連リンクをクリックし、 OK をクリックします。 続行またはバックグラウンドで進行をクリックします。 続行 - スクリプトをインタラクティブに実行します。スクリプトが終了すると、更新セットに追加されたレコードを示すスクリプトログがウィンドウに表示されます。後で参照できるように、このログをコピーして別の場所に保存できます。バックグラウンドで進行 - 修正スクリプトフォームの Show Program Workers リンクをクリックして Progress Worker テーブルに移動し、スクリプトの進行状況を監視します。スクリプトログは、関連する Progress Worker の Message フィールドに表示されます。 完了したら、[ 閉じる をクリックし、更新セットに移動してレコードが追加されたことを確認します。 重要 更新セットをターゲットインスタンスにインポートした後、関連する UI アクションを使用して、すべてのビジネスサービスをサービスモデルと同期する必要があります。スクリプトは、ビジネスサービスレコード自体を保存せずに、ビジネスサービスレコードを更新セットに追加する前に、レイヤーへの参照を削除します。 サービスモデルレコードが更新セットに追加されていないため、レイヤー参照は削除されます。サービスモデルレコードを更新セットに追加して、あるインスタンスから別のインスタンスに転送することは、モデルが壊れる可能性があるため安全ではありません。参照をそのままにしておくと、レイヤーへの存在しない参照に関するエラー メッセージがインポート中に表示されます。 この UI アクションへのアクセス権がない場合は、「BS をサービスモデルと同期」修正スクリプトをターゲットインスタンスにアップロードし、ソースインスタンスで以前の修正スクリプトを実行したときと同じ方法で実行します。 この修正スクリプトは、サービスモデルにないビジネスサービスのみを同期するため、安全です。(そうでなければ、既存のビジネスサービスの履歴がリセットされているでしょう)。 レコードはログに複数回表示される場合があります。ただし、レコードは更新セットに複数回存在することはできません。したがって、重複としては表示されません。 GlideUpdateManager2 API を使用すると、sys_update_version テーブルにレコードが作成され、XML ファイルは更新セットにレコードを追加できるメカニズムの一部であるため、カスタマーアップデートフォルダーの下に作成されます。これらのテーブルはupdate_synchとして定義されていないため、副作用はありません。