2020年11月14日土曜日

フォームコンテキストメニューからレコード毎のXMLによるエクスポートをadmin以外のユーザに許可する

Form context menu =フォーム画面の左上の「≡」マークのいわゆるハンバーガ―メニューから、adminであれば今見ているレコードの情報をxmlでエクスポート可能である。

↓はインシデントをエクスポートしてみた場合の例。

<?xml version="1.0" encoding="UTF-8"?> <unload unload_date="2020-11-14 08:43:33"> <sys_db_object action="INSERT_OR_UPDATE"> <access/> <actions_access>true</actions_access> <alter_access>true</alter_access> <caller_access/> <client_scripts_access>true</client_scripts_access> <configuration_access>false</configuration_access> <create_access>true</create_access> <create_access_controls>false</create_access_controls> <delete_access>false</delete_access> <extension_model/> <is_extendable>false</is_extendable> <label>Incident</label> <live_feed_enabled>true</live_feed_enabled> <name>incident</name> <number_ref display_value="INC">3</number_ref> <read_access>true</read_access> <scriptable_table>false</scriptable_table> <super_class display_value="Task" name="task">7517cd867102101091f9db5cf8a37240</super_class> <sys_class_code/> <sys_class_name>sys_db_object</sys_class_name> <sys_class_path/> <sys_created_by>system</sys_created_by> <sys_created_on>2020-07-18 03:52:06</sys_created_on> <sys_id>1c5b85067106101091f9db5cf8a37215</sys_id> <sys_mod_count>1</sys_mod_count> <sys_name>Incident</sys_name> <sys_package display_value="Incident" source="com.snc.incident">0c5b45067106101091f9db5cf8a372c2</sys_package> <sys_policy/> <sys_scope display_value="Global">global</sys_scope> <sys_update_name>sys_db_object_1c5b85067106101091f9db5cf8a37215</sys_update_name> <sys_updated_by>system</sys_updated_by> <sys_updated_on>2020-07-18 04:17:57</sys_updated_on> <update_access>true</update_access> <user_role display_value=""/> <ws_access>true</ws_access> </sys_db_object> </unload>

このエクスポートはadminであれば↓の画面で可能である。

関係部署含めたすべての業務がServiceNowに移行できればこんなものを使う場面はそうそうないと思われるが、現実はなかなかそうも行かず、ServiceNowに記入した情報を外部にExcelで送付したり、別システムに連携したりというカバーが当面は必要になるケースもままあると思われる。

そういった場合にこのようなデータが出力できればExcelの関数やマクロでいろいろと加工ができるのだが、adminしか出せないとユーザ側にその手の業務を任せる事が出来なくなってしまうので、レコード単位のxmlでのエクスポートをユーザに任せられる様にしたい。

前提としてデフォルトのデモデータに入っている abel.tuter に itil のロールを付与した状態で設定を進める。

参考:https://hi.service-now.com/kb_view.do?sysparm_article=KB0852765
※どうやらこの記事を見るとAdmin以外(itilユーザ)がインシデントをXMLでエクスポートできないのはNew Yorkからのデグレみたいな事が書いてある。。。

この辺の設定はUI Actionかと思っていたがどうやらSystem UI -> UI Macros に入っているらしい。context_form_header という定義を探す。

そしてhi のworkaroundの通りに18行目の
「<g2:evaluate var="jvar_context_menu_export_xml" expression="gs.hasRightsTo('ui/context_menu.export_xml/read', null)" />」
というところを
「<g2:evaluate var="jvar_context_menu_export_xml" expression="gs.hasRole('itil')" />」
に置き換えてSaveしてみる。


abel.tuterにImpersonateして確認してみる。

無事XMLでエクスポートできた。admin出したxmlと比較すると微妙に不足はあったが主要なところは出力できている様に見える。

これでユーザ側でServiceNowの個々のレコードについてもデータとして取り出し、如何様にも料理できる。


0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...