0
0

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.

ATFでList型のフィールドに値設定できない

0
Posted at
  • ServiceNowのバージョンはKingston

こまったこと

  • ATFのテスト内で、List型のフィールドに値を設定したかった
  • でもSet Field Values では設定できなかった
  • 必須フィールドなので設定できないとテストできない

回避策

  • そのテスト中のみ、デフォルト値を無理やり設定することで回避できた
  • ただし sys_dictionary テーブルの変更なので、テストはGlobalスコープで作成する必要がある
    • テスト実行時のスコープは、そのテストを作成したスコープと同じ
    • できれば避けたい。。。が、いい方法が思いつかない
  • また、実行時のユーザーは、アクセス制御的にsys_dictionary変更可能なユーザーである必要がある。

詳細

Serverカテゴリのテストステップを作成する

inputsは以下の通り

  • u_table(TableName型)
  • u_field(FieldName型, depend on で↑を選ぶ)
  • u_value(String型 長さは512※)

outputsは以下の通り

  • u_value(String型 長さは512※)

※ sys_dictionary.default_valueの文字長が512

説明生成スクリプト

function generateDescription() {
	var t = step.inputs.u_table;
	var f = step.inputs.u_field;
	var v = step.inputs.u_value; // String
	
	var description = "["+t+"."+f+"] のデフォルト値を一時的に ["+v+"] に変更します";
	return description;
}
generateDescription();

実行スクリプト

(function executeStep(inputs, outputs, stepResult, timeout) {
	try {
		// GlideRecord準備
		var gr = new GlideRecord('sys_dictionary');
		
		// 入力値を準備
		var t = inputs.u_table;
		var f = inputs.u_field;
		var v = inputs.u_value; // String
		
		// 一応出力
		outputs.u_value = v;
		
		// 対象のフィールドを検索
		gr.addQuery('name', t);
		gr.addQuery('element', f);
		gr.query();
		var found = gr.getRowCount();
		
		// 1件ではなかった場合はテスト失敗
		if (found != 1) {
			stepResult.setOutputMessage('['+t+'.'+f+'] の検索結果が'+found+'件でした');
			stepResult.setFailed();
			return;
		}
		
		// 見つかったレコードを対象にする
		gr.next();
		
		// デフォルト値を更新
		gr.default_value = v;
		var result = gr.update();
				
		if (result) {
			// 更新に成功した
			stepResult.setOutputMessage('['+t+'.'+f+'] のデフォルト値を一時的に ['+v+'] に変更しました('+result+')');
			stepResult.setSuccess();
		}  else {
			// 更新に失敗した
			stepResult.setOutputMessage('['+t+'.'+f+'] のデフォルト値を一時的に ['+v+'] に変更しようとしましたが、失敗しました');
			stepResult.setFailed();
		}
	} catch(e) {
		// 例外発生時はテスト失敗
		stepResult.setOutputMessage(e);
		stepResult.setFailed();
	}
}(inputs, outputs, stepResult, timeout));

おしまい

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?