ServiceNowのSingleLineText変数を右寄せにする方法

JavaScript

ServiceNowのサービスカタログでSingleLineText変数を右寄せにしたい場合、単純にg_form.getControlで取得してstyleを変更するだけでは、変数が正しく取得できないことがあります。これは、ServiceNowの変数が内部でiframeや別のDOM構造としてレンダリングされることが原因です。本記事では、確実にSingleLineTextの入力欄を右寄せにする方法を解説します。

1. 変数IDと名前の確認

まず、変数のnameではなく、実際の変数IDを取得することが重要です。変数のnameが正しくても、DOM上でのinput要素のIDとは一致しない場合があります。

ServiceNowでは、変数のスクリプト名(script name)やg_form.getElement()で要素を取得するのが確実です。

2. onLoad Client Scriptでの右寄せ実装例

以下のように、g_form.getElementを使って変数のinput要素を取得し、textAlignを設定します。

function onLoad() {
  var variables = ["変数のスクリプト名1", "変数のスクリプト名2"];

  variables.forEach(function(varName) {
    var elem = g_form.getElement(varName);
    if (!elem) {
      console.log('[SKIP] Variable not found:', varName);
      return;
    }
    elem.style.textAlign = 'right';
  });
}

これにより、SingleLineTextの入力欄を右寄せにすることができます。

3. DOMロードタイミングの注意

変数のinput要素はカタログアイテムのロード後に生成されるため、onLoadで取得できない場合があります。その場合、setTimeoutやMutationObserverで要素が生成された後に右寄せ処理を行うことも有効です。

4. CSSを利用した方法

Client Scriptではなく、カタログアイテムのCSSで強制的に右寄せすることも可能です。例えば:

.catalog_variable input[type='text'] {
  text-align: right;
}

CSSを利用すると、全てのSingleLineText変数に適用可能で、JavaScript依存を減らせます。

まとめ

ServiceNowのSingleLineText変数を右寄せにするには、g_form.getElementで正しい要素を取得するか、CSSで強制的にtext-alignを指定する方法があります。変数名やDOM生成タイミングに注意することで、確実に右寄せを実現できます。

コメント

タイトルとURLをコピーしました