オプション
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-31-2022 12:42 AM
スクリプトに関して質問です。
現在、サービスカタログで入力された日時とテーブルに入っている日時の比較をしたいと考えています。
具体的に行いたいこととしては、
- サービスカタログで入力された作業開始日時と作業終了日時が、
貸与資産オーダーテーブルに入っている(既存の)作業開始日時と作業終了日時が被っているか判定。
(それぞれの日時が一緒だけでなく、入力された作業開始日時・作業終了日時のどちらかが、
既存で入っている作業開始日時と作業終了日時の間の場合も) - 被っている場合は、エラーメッセージを表示し、送信できないようにする。
以下のクライアントスクリプトとスクリプトインクルードを書いてみましたが、
うまく動かないため、ご教授いただければ幸いです。
【カタログクライアントスクリプト】
function onSubmit() {
var work_start = g_form.getValue('work_start');
var work_end = g_form.getValue('work_end');
var model = g_form.getValue('model');
var ajax = new GlideAjax('CheckDateTime');
ajax.addParam('sysparm_name', 'getModelAndDateTime');
ajax.addParam('sysparm_work_start',work_start);
ajax.addParam('sysparm_work_end', work_end);
ajax.addParam('sysparm_mode', model);
ajax.getXMLAnswer(function(answer) {
if (answer == false) {
g_form.addErrorMessage(getMessege('日時の重複等により、その期間は申請できません。違う期間で申請してください。'));
return false;
}
});
}
【スクリプトインクルード】
var CheckDateTime = Class.create();
CheckDateTime.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getModelAndDateTime: function() {
var work_start = new GlideDateTime(this.getParameter('sysparm_work_start'));
var work_end = new GlideDateTime(this.getParameter('sysparm_work_end'));
var model = this.getParameter('sysparm_model');
//貸与資産オーダーテーブルを参照
var gr = new GlideRecord('sn_hamp_loaner_asset_order');
//モデルが存在するかつ、作業開始日時または作業終了日時のどちらのデータが存在する場合
if (gr.get(model) && gr.get(work_start) || gr.get(work_end)) {
return false;
//モデルが存在するかつ、作業開始日時以降と作業終了日時以前(間)にデータが存在する場合
}else if(gr.get(model) && gr.get('work_start') <= work_start && gr.get('work_end') >= work_end){
return false;
//モデルが存在するかつ、作業終了日時だけデータが被っている場合
}else if(gr.get(model) && gr.get('work_start') >= work_start >= gr.get('work_end')){
return false;
}
return true;
},
type: 'CheckDateTime'
});
解決済! 解決策の投稿を見る。
1 件の受理された解決策

オプション
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
04-01-2022 02:08 AM
次ぎが原因かも知れません。.get()はレコードを取得するので1レコードに対して1回しか使いません。
複数の条件がある場合は.addQuery()を使います。なお、get()の引数は1つの場合はsys_idになります。
if文の条件をaddQuery()に移しました。
var gr = new GlideRecord('sn_hamp_loaner_asset_order');
//モデルが存在するかつ、作業開始日時データも存在する場合
gr.addQuery('model', model); // 列名が「model」の場合
gr.addQuery('work_start', work_start); // 列名が「work_start」の場合
gr.query();
if (gr.next()) {
return false;
}
return true;
5件の返信5
オプション
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
04-04-2022 12:56 AM
ご回答ありがとうございます。
ご教授いただいた、スクリプトインクルードをもとに修正してみましたが、
>「Unhandled exception in GlideAjax」
上記と同様のブラウザのコンソールエラーが発生してしまいます。
解決方法がございましたら、ご教授いただければ幸いです。