DateTime型のフィールドについて

d-aizawa
Kilo Sage

コミュニティの皆様
いつもお世話になっております。

 

私が担当しているプロジェクトの要件で、

日付は必須であるが、時刻の入力は任意という記載があります。
DateTime型のフィールドの場合、日付(Date)のみの入力だとエラーが表示されるので、
以下2点いずれかで代替案を検討しています。
実現できる/できないや懸念事項等、知見がある方がいらっしゃれば、ご教示頂きたいです。
①Date型とTime型(仮)2つフィールドを作成し、UI Policyで表示/入力必須を制御
②DateTimeでエラーが出ないよう、スクリプトで制御(→ServiceNowの仕様上、実現不可でしょうか。)

1 ACCEPTED SOLUTION

BusinessRuleで 調整するにしても、時間を省略する条件はDateTimeだけでは判断できそうになかったので、時間指定なしの項目を作って判断するようにしてみました。

画像3.png

 ClientScriptのonChangeで判定して処理しています。u_d や u_c が項目名になっています。状況に合わせて変更してください。

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
	if(g_form.getValue('u_c') == '時間指定なし'){
		if(/00:00:00$/.test(newValue) == false){
			g_form.setValue('u_b',newValue.replace(/[0-9:]+$/,"00:00:00"));
		}
	}
}

 

View solution in original post

4 REPLIES 4

iwai
Giga Sage

Date型とTime型を使うのであれば、UI Policyを使わなくても、DateをDictionaryでMandatoryにして、Timeはそのままで任意になります。
DateTimeのエラーをScriptで制御する簡単な方法は思いつかないです(内部を改造すればできるかも)。時間を00:00:00に調整するくらいならできそうです。

iwaiさん

ご回答ありがとうございます。

DateとTime両方使う案も挙げましたが、別のスクリプト処理に影響するため、
できれば、DateTimeのまま検討できないか、考えておりますが、
時間を00:00:00に調整する方法として、
試しにBusiness Ruleを作成しましたが、うまく機能しませんでした。

どのようなコーディングであれば、00:00:00に調整可能でしょうか。

(function executeRule(current, previous /*null when async*/) {

	// Add your code here
	var chkDate = current.getValue('u_assigned_date');
	var gdt = new GlideDateTime(chkDate);
	gs.info('【No.123】時間なし:' + gdt);
	var sdt = gdt.getLocalDate()+'00:00:00';
	gs.info('【No.123】時間セット:' + gdt);

})(current, previous);

daizawa_0-1675916430294.png

 

BusinessRuleで 調整するにしても、時間を省略する条件はDateTimeだけでは判断できそうになかったので、時間指定なしの項目を作って判断するようにしてみました。

画像3.png

 ClientScriptのonChangeで判定して処理しています。u_d や u_c が項目名になっています。状況に合わせて変更してください。

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
	if(g_form.getValue('u_c') == '時間指定なし'){
		if(/00:00:00$/.test(newValue) == false){
			g_form.setValue('u_b',newValue.replace(/[0-9:]+$/,"00:00:00"));
		}
	}
}

 

Community Alums
Not applicable

Hi @d-aizawa ,

ここでは日付が重要なので、「日付」フィールドを追加し、Ui ポリシーを使用するか、辞書レベル自体で必須にします。

上記の日付フィールドに加えて、「時間」フィールド タイプの別のフィールドを作成し、これが必須でないことを確認します。
フィールドタイプについてもっと知りたい :

https://docs.servicenow.com/bundle/tokyo-platform-user-interface/page/administer/reference-pages/ref...