我有一个客户端脚本执行GlideRecord查询以检查是否已存在具有相同名称的记录。
如果找到匹配的记录,我们需要停止提交表单。
我们在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;
}
}
答案 0 :(得分:1)
我们在赫尔辛基补丁5上,所以我们正在经历类似的成长痛苦。我们使用以下结构运气好。仍有Glide System资源可用服务器端,包括Glide Record。
您可以尝试将自己的提交操作包装在自定义事件处理程序中。
尝试:
客户方:
c.createGroup = function(groupName){
return c.server.get({
grpname : groupName
}.then(function(response){
if (response.data.result == true){
//don't submit
}
else{
//submit
}
}
服务器端
data.result = false
data.grpname = input.grpname
function checkGroupExists(data.grpname){
/*Check if group already exists*/
var rec = new GlideRecord('u_auth_group');
rec.addQuery('u_group_name', data.grpname);
rec.limit(1); //you only need to find one match
rec.query()
while (rec.next()){
data.result = true
}
}
然后,您可以将此事件处理程序绑定到UI中的某些操作。
答案 1 :(得分:0)
我能够通过使用滑动记录查询的asyc回调来解决这个问题。
function onSubmit() {
//If ServicePortal
if (!window) {
if (g_scratchpad.isFormValid) {
return true;
}
g_form.hideAllFieldMsgs("error");
var actionName = g_form.getActionName();
//Group Name contain letters numbers and dashes only
var group_name = g_form.getValue("u_group_name");
//Group name regular expression
var regGrpName = /^([A-Za-z0-9\-]+)$/;
//Check name against regular expression
validGroupName = regGrpName.test(group_name);
//Check if google group already exists
var gg = new GlideRecord("u_system_group");
gg.addQuery("u_group_name", group_name);
//Callback function to control stop submit asynchronously
gg.query(function() {
while (gg.next()) {
g_form.showFieldMsg("u_group_name","Group Name " + gg.u_group_name + " already exists! Please enter a different group name.", "error", true);
return false;
}
g_scratchpad.isFormValid = true;
g_form.submit(actionName);
});
return false;
}
}