LoginSignup
1
1

More than 5 years have passed since last update.

ServiceNow初期設定 ユーザによってデフォルトの通貨を切り替える

Last updated at Posted at 2017-08-07

ServiceNowの開発者向けインスタンスは最初、マルチ通貨が有効化されており、またデフォルトの通貨はUSドルになっている。
image.png

今回はログインしているユーザによってデフォルトの通貨を切り替える設定を行う。

マルチ通貨は有効のまま、全ユーザのデフォルト通貨を日本円にしたい場合はこちらの記事を参照して下さい。
マルチ通貨を無効にし、日本円のみ利用可能にしたい場合はこちらの記事を参照してください。

インスタンスのビルドタイプはJakarta。

今回行う通貨コード設定の仕組み

いろいろと調べてみたところ、ServiceNowではユーザごとに通貨コードを変える仕組みが用意されていないらしい。
(サービスカタログ製品の価格(price)のみ自動で変換されるらしい)

ServiceNow Community - How do I modify the default currency symbol? -
https://community.servicenow.com/thread/172803

そこで今回はスクリプトを自作し、強制的にデフォルト通貨を書き換えることにする。
内容
1. ログインしているユーザの言語、国コードを取得
2. 1で取得した内容を元に、ロケールテーブル(sys_locale)の設定を取得
3. 2で取得したロケールから通貨コードを取り出し、クライアントスクリプトからデフォルト通貨を設定する

ロケールテーブルレコードの読み込み

インスタンスにログイン
image.png

アプリケーションナビゲータの検索欄に、「sys_locale.list」と入力しEnterキーを押下する。
image.png

ロケールレコード一覧画面が表示されるが、何もレコードが無いことを確認する。
※ レコードがある場合はこのセクションまで作業をスキップしてください。
image.png

アプリケーションナビゲータの中から、システム定義 → モジュールを選択(赤枠)。
image.png

タイトルが「ロケールのロード」のモジュールを開く。
image.png

モジュールをアクティブにし、更新ボタンをクリックする。
image.png

モジュールをアクティブにしたことで、モジュールが表示されるようになった。
アプリケーションナビゲータの中から、システムローカライズ → 変換 → ロケールのロードを選択(赤枠)。
※モジュールをクリックした時点でJavascriptが動作し、レコードが作成されます
image.png

Script completedと表示されていれば成功。
image.png

再度ロケールテーブルを見るとレコードが追加されたことを確認できる。
image.png

補足:「ロケールのロード」モジュールは以降使わないので非アクティブに戻しても構いません

日本ユーザのデフォルト通貨を設定する

アプリケーションナビゲータの検索欄に、「sys_locale.list」と入力しEnterキーを押下する。
image.png

image.png

アクティブ列を見るとわかるが、まだ日本のロケールは非アクティブとなっているので有効化が必要。

補足:デフォルトでアクティブとなっているロケール
image.png

通貨コードをJPYで検索するなどして、「Japanese(Japan)」が名前のレコードを探して開く。
※もう一つは日付形式が異なるので見送り。こちらを有効化しても問題はない。
image.png

アクティブにチェックを入れ、更新ボタンをクリックする。
image.png

スクリプトインクルードの作成

アプリケーションナビゲータの中から、システム UI → スクリプトインクルードを選択(赤枠)。
image.png

新規」ボタンをクリック。
image.png

以下の内容を設定して保存。

項目
名前 GetCurrencyTypeByUserLocale
クライアントコール可能 チェックあり
説明 任意(または:ログインしているユーザの通貨コードを取得するサーバサイドスクリプト)
アクセス可能 すべてのアプリケーションスコープ
アクティブ チェックあり

スクリプト

var GetCurrencyTypeByUserLocale = Class.create();
GetCurrencyTypeByUserLocale.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getCurrencyType: function() {
        var logginUser = gs.getUser();
        var locale = new GlideRecord('sys_locale');
        locale.addQuery('key', 'STARTSWITH', logginUser.getLanguage() + '.' + logginUser.getCountry());
        locale.addQuery('active', 'true');
        locale.setLimit(1);
        locale.query();

        if(locale.next()){
            return locale.currency_code;
        }

        return void 0;
    }
});

image.png

クライアントスクリプトの作成

今回はマーケティングイベントアプリケーションのマーケティングイベントテーブルに対して、新規レコード作成時に「予算」(budget)項目の通貨種類をユーザによって切り替える、簡単なスクリプトを作成する。
※ 全ページに対して、全通貨項目を動的に取得し更新するスクリプトも作成できましたが、動作が重くなってしまい諦めました。もし高速に動くスクリプトができた方はコメントください!

アプリケーションナビゲータの中から、システム定義 → クライアントスクリプトを選択(赤枠)。
image.png

新規」ボタンをクリック。
image.png

以下の内容を設定して保存。

項目
名前 任意
テーブル マーケティングイベント
UIタイプ デスクトップ
タイプ onLoad
アクティブ チェックあり
グローバル チェックあり

スクリプト

function onLoad() {
    // This script is running only a new record
    if(g_form.isNewRecord()){
        var ga = new GlideAjax('global.GetCurrencyTypeByUserLocale');
        ga.addParam('sysparm_name','getCurrencyType');
        ga.getXML(CurrencyInit);
    }
}

// Ajax callback function
function CurrencyInit(response) {
    // `answer` equals return value
    var answer = response.responseXML.documentElement.getAttribute("answer");
    if(answer) {
        g_form.setValue('budget', answer + ';0', answer + ';0');
    }
}

image.png

動作確認

ユーザ情報の「言語」、「国コード」を設定します。
image.png

再ログインし、マーケティングイベントの新規作成画面を開くと日本円がデフォルト選択になったことを確認できます。

image.png

さいごに

今回作ったスクリプトは金額も強制的に0円で初期化しています。新規のレコードなので基本的に問題ありませんが、デフォルト金額を他のスクリプトで設定しているなどした場合には、競合しないように書き換える必要があります。
また、今回のスクリプトはモバイル非対応です。理由がわかっていないのでどなたかご指摘いただけますと助かります。

参考サイト

ServiceNow Community - How do I modify the default currency symbol? -
https://community.servicenow.com/thread/172803

ServiceNow Wiki - Script Includes -
http://wiki.servicenow.com/index.php?title=Script_Includes

ServiceNow Wiki - GlideAjax -
http://wiki.servicenow.com/index.php?title=GlideAjax

関連記事

1
1
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
1
1