- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-02-2022 10:41 PM
現在、フォームにエラー文を表示させるスクリプトを以下のように作成しています。
分岐により、エラーメッセージを変えておりますが、
else ifの条件のときに、エラー文が2つとも出てきてしまいます。※添付画像
解決方法がありましたらご教授いただければ幸いです。
【クライアントスクリプト】
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ajax = new GlideAjax('CalculationDateTime');
ajax.addParam('sysparm_name', 'getCorrectDateTime');
ajax.addParam('sysparm_work_start', newValue);
ajax.getXMLAnswer(function(answer) {
var returnObject = JSON.parse(answer);
if(returnObject.number == '1'){ //日付が今日より前
g_form.setValue('work_start',returnObject.curDate);
g_form.showFieldMsg('work_start','現在時刻より前の日時は予約できません。','error');
}else if(returnObject.number == '2'){ //日時が1か月以上先
g_form.setValue('work_start',returnObject.curDate);
g_form.showFieldMsg('work_start','1か月以上先の日時は予約できません。','error');
}
});
}
【スクリプトインクルード】
var CalculationDateTime = Class.create();
CalculationDateTime.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getCorrectDateTime:function(){
var work_start = new GlideDateTime(this.getParameter('sysparm_work_start'));
var gdt = new GlideDateTime();
var currentDate = gdt.getDisplayValue();
gdt.addMonthsLocalTime(1);
var maxDate = gdt.getDate();
var result = {};
if(work_start < gdt){
result.number = 1;
result.curDate = currentDate;
}else if(work_start > maxDate){
result.number = 2;
result.curDate = currentDate;
}
return JSON.stringify(result);
},
type: 'CalculationDateTime'
});
解決済! 解決策の投稿を見る。

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-02-2022 11:23 PM
aさん、
動作確認はまだ行っていませんが、もしかしてフィールド「work_start」でonChange()を設定されていますでしょうか?もしその場合はonChangeで自分自身の値を変更しているので再帰的にonChangeが実行されます。
それを再帰呼び出しを防止するにはif文に「newValue==<今日の日付>」を追加して既に今日の日付に設定されている場合はonChangeを実行しないようにします。

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-02-2022 11:23 PM
aさん、
動作確認はまだ行っていませんが、もしかしてフィールド「work_start」でonChange()を設定されていますでしょうか?もしその場合はonChangeで自分自身の値を変更しているので再帰的にonChangeが実行されます。
それを再帰呼び出しを防止するにはif文に「newValue==<今日の日付>」を追加して既に今日の日付に設定されている場合はonChangeを実行しないようにします。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-05-2022 06:42 PM
ご回答ありがとうございます。
>if文に「newValue==<今日の日付>」を追加
こちらを追加したところ、解決できました。
ありがとうございます。

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-03-2022 12:30 AM
Hi,
You don't have to use objects in your script include. Simply pass the error message from the script include
to the client script, as shown below. The date is invalid. Clear the date value and display an error message
Client Script :
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var glideAjax = new GlideAjax('MyFavoritesAjax'); // client callbale script include name
glideAjax.addParam('sysparm_name', 'check_date2'); // function name
glideAjax.addParam('sysparm_value', g_form.getValue('release_date')); // parameter to pass on script include
glideAjax.getXML(getResults);
}
function getResults(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer != '') {
alert("Answer is " + answer); // 後で削除できます
g_form.setValue('release_date', '');
g_form.showFieldMsg('work_start',answer,'error');
}
Script Include :
var MyFavoritesAjax = Class.create();
MyFavoritesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check_date2: function() {
var today = new GlideDateTime();
var work_start_date = new GlideDateTime(this.getParameter('sysparm_value'));
var max_date = new GlideDateTime();
max_date.addMonthsUTC(1);
if (work_start_date < today) {
return '現在時刻より前の日時は予約できません';
} else if (work_start_date > max_date) {
return '1か月以上先の日時は予約できません。';
} else {
return "";
}
},
type: "MyFavoritesAjax"
});
該当する場合は、正しくて役立つマークを付けてください

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-03-2022 12:34 AM
Hi,
You don't have to use objects in your script include. Simply pass the error message from the script include
to the client script, as shown below. The date is invalid. Clear the date value and display an error message
Client Script :
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var glideAjax = new GlideAjax('MyFavoritesAjax'); // client callbale script include name
glideAjax.addParam('sysparm_name', 'check_date2'); // function name
glideAjax.addParam('sysparm_value', g_form.getValue('release_date')); // parameter to pass on script include
glideAjax.getXML(getResults);
}
function getResults(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer != '') {
alert("Answer is " + answer); // 後で削除できます
g_form.setValue('release_date', ''); //フィールド値を変更する
g_form.showFieldMsg('work_start',answer,'error');
}
Script Include:
var MyFavoritesAjax = Class.create();
MyFavoritesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check_date2: function() {
var today = new GlideDateTime();
var work_start_date = new GlideDateTime(this.getParameter('sysparm_value'));
var max_date = new GlideDateTime();
max_date.addMonthsUTC(1);
if (work_start_date < today) {
return '現在時刻より前の日時は予約できません';
} else if (work_start_date > max_date) {
return '1か月以上先の日時は予約できません。';
} else {
return "";
}
},
type: "MyFavoritesAjax"
});
該当する場合は、正しくて役立つマークを付けてください