亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

How to fix onSubmit data validation once and for a

發布時間:2020-06-19 21:00:24 來源:網絡 閱讀:506 作者:ServiceNow 欄目:開發技術

How to fix onSubmit data validation once and for all in Scoped Applica

So a little background. I have a Scope Application which has a catalog item. I wanted the ability to verify a file was attached prior to submission. The problem is, most all solutions proposed do not work in scoped applications...

 

Here are the current solutions you could use if you were not in a scoped application:

 

1) You could use GlideAjax and do a getXMLWait(), then check the answer and return false, example:

var ga = new GlideAjax('MyAttachmentUtils');  
ga.addParam('sysparm_name', 'hasAttachment');  
ga.addParam('sysparm_data', g_form.getValue('sysparm_item_guid')); // you can't use getUniqueValue, it doesn't map to what is in the attachment table  
ga.getXMLWait();  
if (ga.getAnswer() == 'false') {  
    g_form.addErrorMessage('You must attach something');  
    return false;  
}

All fine and dandy (if you are ok with using getXMLWait)...but, of course, getXMLWait is NOT available in scoped applications (makes sense, they don't want apps locking up the browser...

So...on to option 2

 

2) You could move your code from your script include directly into the client script...Then use GlideRecord and do the search in the client script!

var gr = new GlideRecord('sys_attachment');  
gr.addQuery('table', 'my_table');  
gr.addQuery('table_sys_id', g_form.getValue('sysparm_item_guid'));  
gr.query();  
if (!gr.next) {  
   g_form.addErrorMessage('You must attach something');  
   return false;  
}

All fine and dandy (if you are fine with calling server side code in a client...yuck!)...But, of course, GlideRecord is NOT available in a scoped application client script! Adding global. doesn't fix it either. But wait, there is a workaround for this.. option 2a...

 

2a) Take the above script and move it to the 'global' application, then it works. The major downside is that this is NOT included in your application and won't promote properly. You'll have to install a global update set with the scoped app...this kinda breaks the whole idea of having a scoped app....so not a good solution, but it technically works...there has to be something better....

 

So how do we do it?

 

I love async calls and I love using script includes to handle server code. So I decided to always return false on the onSubmit. Then, in the ajax callback function, I submit the form again if the validation is successful. However, this is easier said than done...

 

First, g_form.submit() doesn't work on catalog items (too easy, darn it!). It'll give you an error saying use g_form.orderNow()...which doesn't work either!

Second, use good old DOM manipulation (even though SN doesn't recommend it) document.getElementById('submit_button').submit() ...oops, Scoped Apps don't allow access to the DOM! Thwarted again!

 

Now what? Well, it can be done, here's how:

 

1) Create a variable on your form called 'submitted', I just made it a single line text with '' by default. This will prevent recursion.

2) Hide that variable using a ui policy

3) Create your onSubmit client script, but instead of the normal ways mentioned above, get the HTMLElement and use .click()...

function onSubmit() {  
  if (g_form.getValue('submitted') == 'yes') // this prevents recursion  
    return true;  
  
  var ga = new GlideAjax('MyAttachmentUtils');  
  ga.addParam('sysparm_name', 'hasAttachment');  
  ga.addParam('sysparm_table', 'x_your_scoped_table_name');  
  ga.addParam('sysparm_id', g_form.getValue('sysparm_item_guid')); //don't use getUniqueValue, it's bogus if there is an attachment and this hasn't been submitted  
  ga.getXMLAnswer(function(response) {  
    g_form.clearMessages();  
    if (response == 'false')   
      g_form.addErrorMessage('You must attach a Statement of Work'); // no need to do anything else, false was already returned  
    else {  
      g_form.setValue('submitted', 'yes'); // set the hidden value to prevent recursion  
      if(g_form.getControl('submit_button')){
          g_form.getControl('submit_button').click(); // use HTMLElement to grab the button, then use click()  
       }else{
           g_form.submit();   //portal submit form
       }      
    }  
  });  
  
  return false;  
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金昌市| 花垣县| 额尔古纳市| 双柏县| 商都县| 胶州市| 麻城市| 四川省| 永丰县| 津南区| 台东县| 灵山县| 乾安县| 绵阳市| 白山市| 德阳市| 顺义区| 新化县| 库尔勒市| 南召县| 横山县| 海宁市| 衡山县| 金平| 泊头市| 辽宁省| 廉江市| 新邵县| 武冈市| 平原县| 法库县| 崇文区| 错那县| 普格县| 萍乡市| 扬州市| 报价| 白水县| 南华县| 兴山县| 司法|