4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【ServiceNow】ServicePortalのIconLinkをGlyphではなく独自画像を設定する

Last updated at Posted at 2019-07-25

Service Portal

ServiceNowのプラットフォームではなく、利用者目線のCMS。
プラットフォームは管理者向けだとして、一般使用ユーザ向けの画面。

下記は、デフォルト(OOTB:Out of the box)のサービスポータルの画面です。まじめ。
portal default.png
一般ユーザは、上記画面から承認・問い合わせ・ナレッジベース(イントラ知識サイト)にアクセスするなどの用途があります。

自分が個人インスタンスでいじっているポータル画面は下記です。なんかめちゃくちゃ。
FireShot Capture 026 - Service Portal - The Greatest HP - dev74512.service-now.com.png

今回やりたいこと

ここに注目ください。
icon link.png

こういったアイコンは既存の設定アイコンが用意されており、選択方式で好みのアイコンを設定できるのです。
しかし、独自の画像を設定したい場合はどうすればよいのか、、、と調べました!発見しました!下記です!
original.png
今回は普通の画像の差し替え方と、オリジナル画像の差し替え方について書きます。

普通の画像差し替え(glyph)

サービスポータルのページでCtrl+右クリックするとリストが出るので、
FireShot Capture 027 - Service Portal - The Greatest HP - dev74512.service-now.com.png
そこのInstance in Page Editorをクリックする。
するとインスタンスの階層構造にアクセスできる。
FireShot Capture 028 - Page Edit - SP Configuration - dev74512.service-now.com.png
階層構造のInstance部分(ここではRequest Something)を選択して、
設定項目にGlyphがあるので、ここのアイコンを自由にいじれば、その内容が即時反映される。
gggg.png
これでアイコンが変更される。

オリジナル画像の差し替え

1)画像のアップロード

db_imageテーブルにアクセス(Platformのメニューでdb_image.list)する。
db_imageテーブルが画像のストレージなので、ここに今回使用する画像をアップロードする。
FireShot Capture 030 - rocket.png - Images - ServiceNow - dev74512.service-now.com.png

2)インスタンスを変更する

再度、サービスポータルのページでCtrl+右クリックして、
FireShot Capture 027 - Service Portal - The Greatest HP - dev74512.service-now.com.png
今度はWidget in Editorをクリックします。
するとエディターに遷移します。
FireShot Capture 031 - Editing_ clone icon link - dev74512.service-now.com.png
そこで変更するインスタンスを選択できるので、Icon Linkのインスタンスを選択してから、それをcloneします。
これでスクリプトを変更可能となったので、下記変更を加えます。

サーバー側

server.js
(function(){
	var gr = $sp.getInstanceRecord();
	data.href = $sp.getMenuHREF(gr);
	data.target = options.target || "";
	//db_tableの情報を読み込んでセットする
	var img = new GlideRecord('db_image');
	img.addQuery('name', 'rocket.png');
  img.query()
  if (img.next()){
    data.image = img.getValue('name');
	}
})();

クライアント側

client.html
<div class="iconlink" ng-class="{'high-contrast': accessibilityModeEnabled}">
  <!--// Top Icon -->
  <a ng-if="::(options.link_template == 'Top Icon' || !options.link_template)" ng-href="{{::data.href}}" class="top_icon {{::options.class_name}}" target="{{::data.target}}">
    <div class="m-b fa fa-{{::options.glyph}} fa-4x {{::options.class_name}} text-{{::options.color}}"></div>
    <h2>{{::options.title}}</h2>
    <span class="text-muted">{{::options.short_description}}</span>
  </a>

  <!--// Circle Icon -->
  <a ng-if="::(options.link_template == 'Circle Icon')" ng-href="{{::data.href}}" class="circle_icon {{::options.class_name}} text-{{::options.color}}" target="{{::data.target}}">
    <span class="fa fa-stack fa-2x">
      <i class="fa fa-circle fa-stack-2x"></i>
      //ここに画像を差し込む
      <img src="rocket.png"/ class="rocket">

    </span>
    <h2>{{::options.title}}</h2>
    <span class="text-muted">{{::options.short_description}}</span>
  </a>

  <!--// Color Box -->
  <a ng-if="::(options.link_template == 'Color Box')" ng-href="{{::data.href}}" class="color_box {{::options.class_name}} icon-link-background-{{::options.color}} text-white" target="{{::data.target}}">
    <div class="fa fa-{{::options.glyph}} fa-3x {{::options.class_name}}"></div>
    <h2>{{::options.title}}</h2>
    <span>{{::options.short_description}}</span>
  </a>
</div>

やってること自体は至極単純です。
db_tableからの値をサーバから呼び出し、クライアントに出力させているだけです。

以上の操作によって、はれてオリジナルの画像が表示されました!パチパチ!!

参考

Service Portal - Custom Icons

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?