フィールドに表示されるエラー文について

a_129
Mega Guru

現在、フォームにエラー文を表示させるスクリプトを以下のように作成しています。

分岐により、エラーメッセージを変えておりますが、
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'
});

find_real_file.png

1 件の受理された解決策

Hitoshi Ozawa
Giga Sage
Giga Sage

aさん、

動作確認はまだ行っていませんが、もしかしてフィールド「work_start」でonChange()を設定されていますでしょうか?もしその場合はonChangeで自分自身の値を変更しているので再帰的にonChangeが実行されます。

それを再帰呼び出しを防止するにはif文に「newValue==<今日の日付>」を追加して既に今日の日付に設定されている場合はonChangeを実行しないようにします。

元の投稿で解決策を見る

7件の返信7

Hitoshi Ozawa
Giga Sage
Giga Sage

aさん、

動作確認はまだ行っていませんが、もしかしてフィールド「work_start」でonChange()を設定されていますでしょうか?もしその場合はonChangeで自分自身の値を変更しているので再帰的にonChangeが実行されます。

それを再帰呼び出しを防止するにはif文に「newValue==<今日の日付>」を追加して既に今日の日付に設定されている場合はonChangeを実行しないようにします。

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


>if文に「newValue==<今日の日付>」を追加
こちらを追加したところ、解決できました。

ありがとうございます。

Chetan Mahajan
Kilo Sage
Kilo Sage
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"


});

 

該当する場合は、正しくて役立つマークを付けてください

 

 

Chetan Mahajan
Kilo Sage
Kilo Sage

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"


});

該当する場合は、正しくて役立つマークを付けてください