<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://sugarclub.sugarcrm.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>How to do a validation that requires an API call</title><link>https://sugarclub.sugarcrm.com/dev-club/f/questions-answers/2033/how-to-do-a-validation-that-requires-an-api-call</link><description>I want to add a validation to make sure the email address added to a record is unique. This, of course, requires an API call to go check the current email address to all the others. The problem is, in my validation function, by the time the API call returns</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: How to do a validation that requires an API call</title><link>https://sugarclub.sugarcrm.com/thread/7471?ContentTypeID=1</link><pubDate>Tue, 25 Feb 2020 14:19:08 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:56cf2306-b7bb-4e7e-8781-65303967786e</guid><dc:creator>Jeroen Somhorst</dc:creator><description>&lt;p&gt;consider the following example. In this example we add a validation task that checks a certain account number field. In the success/error callbacks we execute the callback that we initialy received from the validation method.&amp;nbsp;&lt;/p&gt;&lt;pre class="language-javascript line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;// initialize method of the create/record.js&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;model&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;addValidationTask&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;check_accountnumber&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;_&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;bind&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;_doValidateAccountNumber&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// the actual validation method: &lt;/span&gt;&lt;br /&gt;_doValidateAccountNumber&lt;span class="punctuation token"&gt;:&lt;/span&gt; &lt;span class="keyword token"&gt;function&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;fields&lt;span class="punctuation token"&gt;,&lt;/span&gt; errors&lt;span class="punctuation token"&gt;,&lt;/span&gt; callback&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;console&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;log&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;validate account number&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;let&lt;/span&gt; acnumber &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;model&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="keyword token"&gt;get&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;accountnumber_c&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="operator token"&gt;!&lt;/span&gt;_&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;isEmpty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;acnumber&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;_&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;isUndefined&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;acnumber&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;let&lt;/span&gt; options &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;span class="keyword token"&gt;async&lt;/span&gt;&lt;span class="punctuation token"&gt;:&lt;/span&gt; &lt;span class="keyword token"&gt;false&lt;/span&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;let&lt;/span&gt; url &lt;span class="operator token"&gt;=&lt;/span&gt; app&lt;span class="punctuation token"&gt;.&lt;/span&gt;api&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;buildURL&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;accounts&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;number/&amp;#39;&lt;/span&gt;&lt;span class="operator token"&gt;+&lt;/span&gt;acnumber&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app&lt;span class="punctuation token"&gt;.&lt;/span&gt;api&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;call&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;read&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;url&lt;span class="punctuation token"&gt;,&lt;/span&gt;options&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; success&lt;span class="punctuation token"&gt;:&lt;/span&gt; _&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;bind&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;onValidAccountNumber&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;fields&lt;span class="punctuation token"&gt;,&lt;/span&gt;errors&lt;span class="punctuation token"&gt;,&lt;/span&gt;callback&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error&lt;span class="punctuation token"&gt;:&lt;/span&gt; _&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;bind&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;onInvalidAccountNumber&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;fields&lt;span class="punctuation token"&gt;,&lt;/span&gt;errors&lt;span class="punctuation token"&gt;,&lt;/span&gt;callback&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="keyword token"&gt;else&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;callback&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;null&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; fields&lt;span class="punctuation token"&gt;,&lt;/span&gt; errors&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;onValidAccountNumber&lt;span class="punctuation token"&gt;:&lt;/span&gt; &lt;span class="keyword token"&gt;function&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;fields&lt;span class="punctuation token"&gt;,&lt;/span&gt;errors&lt;span class="punctuation token"&gt;,&lt;/span&gt;callback&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;callback&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;null&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; fields&lt;span class="punctuation token"&gt;,&lt;/span&gt; errors&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;onInvalidAccountNumber&lt;span class="punctuation token"&gt;:&lt;/span&gt; &lt;span class="keyword token"&gt;function&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;fields&lt;span class="punctuation token"&gt;,&lt;/span&gt;errors&lt;span class="punctuation token"&gt;,&lt;/span&gt;callback&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; errors&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'accountnumber_c'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; errors&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'accountnumber_c'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;||&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; errors&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'accountnumber_c'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;account_number_duplicate_msg &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;span class="token function"&gt;callback&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;null&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; fields&lt;span class="punctuation token"&gt;,&lt;/span&gt; errors&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to do a validation that requires an API call</title><link>https://sugarclub.sugarcrm.com/thread/7470?ContentTypeID=1</link><pubDate>Mon, 24 Feb 2020 02:28:19 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:048ea9af-b627-4ba5-a1b1-9aeacd6e2773</guid><dc:creator>Hatim Alam</dc:creator><description>&lt;p&gt;Hi&amp;nbsp;&lt;a href="https://sugarclub.sugarcrm.com/members/kennethbrill_2d00_wallencreeksoftware"&gt;Kenneth Brill&lt;/a&gt;,&lt;/p&gt;&lt;p&gt;Why don&amp;#39;t you use this.model.addValidationTask and write your validation script under that?&lt;/p&gt;&lt;p&gt;This way, you can wait for your API to come back with response and then return the callback.&lt;/p&gt;&lt;pre class="language-javascript line-numbers"&gt;&lt;code&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;model&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;addValidationTask&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;validate_email&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; _&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;bind&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;_doValidateEmailAddress&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="keyword token"&gt;this&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let us know if this helps.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>