我有一個客戶端腳本執行GlideRecord查詢來檢查一個記錄是否已經存在具有相同的名稱。ServiceNow客戶端腳本異步查詢停止提交onSubmit在新的服務門戶
如果找到匹配記錄,我們需要停止提交表單。
我們在CMS門戶上可以正常工作。
但是,新的服務門戶不支持同步GlideRecord查詢。
所以我不能使用gr.query()我需要使用回調,如gr.query(回調)。
問題是,由於回調是異步的,它實際上並不會停止提交表單!
g_form.submitted = false;不工作。這是因爲腳本在回調有機會檢索值之前繼續提交表單。
如何根據異步回調返回的值來停止提交表單?由於相同的原因,我們不能使用GlideAjax,不再支持getXMLWait()。
這是我試圖在新的服務門戶中工作的客戶端腳本。
function onSubmit() {
var group_name = g_form.getValue('u_group_name');
g_form.hideAllFieldMsgs('error');
/*Check if group already exists*/
var rec = new GlideRecord('u_auth_group');
rec.addQuery('u_group_name', u_group_name);
rec.query(getAccountResponse);
}
function getAccountResponse(rec) {
while (rec.next()) {
g_form.showFieldMsg('u_group_name', " Group Name exists already, please select another group name",'error');
g_form.submitted = false; //DOES NOT STOP THE FORM FROM BEING SUBMITTED
return false;
}
}
以下是在CMS門戶中工作的現有腳本。
function onSubmit() {
var group_name = g_form.getValue('u_group_name');
g_form.hideAllFieldMsgs('error');
/*Check if group already exists*/
var rec = new GlideRecord('u_auth_group');
rec.addQuery('u_group_name', u_group_name);
rec.query(getAccountResponse);
while (rec.next()) {
g_form.showFieldMsg('u_group_name', " Group Name exists already, please select another group name",'error');
g_form.submitted = false; //Stops the form from being submitted if a result is returned
return false;
}
}
非常感謝John。你能描述一下關於如何「將事件處理程序綁定到UI中的某個動作」的最後一點嗎?我們只需要驗證表單onSubmit,以便它將成爲目錄項目或記錄製作者上的提交按鈕。謝謝! – pengz
有幾種不同的方法可以在門戶網站的sc_cat_item頁面上執行此操作。您可以在HTML部分的第30行上修改提交按鈕上的ng-click綁定。或者您可以覆蓋客戶端代碼中的$ scope.triggerOnSubmit方法來添加您的邏輯。這真的取決於你的設計要求。 –