Using a Script Include, in a Widget

ericgilmore
Tera Guru

Trying to access a script include from within a widget. Here's what I'm doing.

[HTML]

<div class="panel panel-default">
  <div class="panel-body m-b-n">

    <div class="wrapper-md row no-margin">
      <form class="basic-form">
        
	<p>
          <!-- Name<br/> -->
          <input type="text" ng-model="c.data.user_name" id="user_name" name="user_name" size="25" placeholder = "Name"/>
        </p>

        <p>
          <!-- Email<br/> -->
          <input type="text" ng-model="c.data.user_email" id="user_email" name="user_email" size="25" placeholder = "Email"/>
        </p>
        <p>
          <!-- Phone Number<br/> -->
          <input type="text" ng-model="c.data.user_phone" id="user_phone" name="user_phone" size="25" placeholder = "Phone"/>
        </p>

        <p>
          <!-- Message<br/> -->
          <textarea name="user_message" ng-model="c.data.user_message" id="user_message" cols="40" rows="5" placeholder = "Message"></textarea>
        </p>

      </form>
      <div class="modal-footer">
        <button type="submit" class="btn btn-primary" id="submit_popup" name="submit_popup"
                ng-click="c.submitData(user_name, user_email, user_phone, user_message);">${Submit}</button>
      </div> <!-- button -->
    </div> <!-- wrapper-md row -->

  </div>
</div>

[Client]

function(spUtil, $window) {
	/* widget controller */
	var c = this;

	c.submitData = function(){
		var redir = 'https://MY-INSTANCE.service-now.com/sp?id=REDIR';
		
		c.data.action = "addData";
		
		c.server.update().then(function(){
						
			c.data.action = undefined;
			c.data.user_name = "";
			c.data.user_email = "";
			c.data.user_phone = "";			
			c.data.user_message = "";
			
			// spUtil.addInfoMessage("Thank you for your submission.");
		 
		handleRedirect('REDIR-PLACE', redir);

		});

	}

	function handleRedirect(redirectTo, redirectUrl) {
		if (redirectUrl) {
			$window.location.href = redirectUrl;
			return;
		}
}

}

[SERVER]

(function() {

	data.stuff = [];


	if (input) {

		if (input.action == "addData") {
			data.stuff = input.stuff;
			
			// MY SCRIPT INCLUDE
			var checkThings = new ValidateThings();
			var emailValid = data.checkThings.isValidEmail(input.user_email);
			var phoneValid = data.checkThings.isValidPhone(input.user_phone);
			
			if(!phoneValid) {
				data.phoneCheck = false;	
			} else {
			    var user_phone = input.user_phone;
			}

			if(!emailValid){
				data.emailCheck = false;
			} else {
			    var user_email = input.user_email;
			}

			var user_name = input.user_name;
			var user_location = input.user_location;
			var user_message = input.user_message;
			var assign_group = 'My Group';
			var incident_type = 'Bob';
			
			//Generate Problem description using variables combined into one variable
			var message_concat = 'Name: ' + user_name + '\n' + 'Email: ' + user_email + '\n' + 'Phone: ' + user_phone + '\n' +  'Message' + '\n' + '--------------------------------------------------------------' + '\n' + user_message;
			var short_descr = 'Submitted by ' + user_name;

			gs.log('MY MESSAGE: ' + message_concat);	
			
			var requestBody = {};
			
			requestBody.assignment_group = assign_group;
			requestBody.u_type = incident_type;
			requestBody.short_description = short_descr;
			requestBody.u_job_description = message_concat;
			requestBody.description = "hello there moto";


			//Encode as JSON
			var rBody = new global.JSON().encode(requestBody);
			gs.log("MY BODY: " + rBody);


			//REST API to Create incident		
			var request = new sn_ws.RESTMessageV2();
			request.setEndpoint('https://MY-INSTANCE.service-now.com/api/now/table/incident');
			request.setHttpMethod('POST');

			//Eg. UserName="UserName", Password="password" for this code sample.
			var user = 'SOMEUSER';
			var password = 'SOMEPASSWORD';

			request.setBasicAuth(user,password);
			request.setRequestHeader("Accept","application/json");
			request.setRequestHeader('Content-Type','application/json');
			request.setRequestBody(rBody);
			var response = request.execute();
			gs.log(response.getBody());

		}

	}


})();

When I'm back in the client context I want to pick up {data.phoneCheck, data.emailCheck} for some type of message on screen if validation fails. But I'm not sure the ValidateThings object is even being created on the server side.

So do I just to a: c.data.phoneCheck, c.data.emailCheck to grab my {true|false} on the client side, and a...

if(!c.data.phonecheck){
    spUtil.addInfoMessage('Please check your phone number formatting');
}

if(!c.data.emailcheck){
   spUtil.addInfoMessage('Please check your email formatting');
}

I can't seem to get this to click for me.

1 ACCEPTED SOLUTION

vkachineni
Kilo Sage
Kilo Sage
//Lines changed
//var emailValid = checkThings.isValidEmail(input.user_email);
//var phoneValid = checkThings.isValidPhone(input.user_phone);
//var user_phone;
//var user_email;
			
(function() {

	data.stuff = [];


	if (input) {

		if (input.action == "addData") {
			data.stuff = input.stuff;
			
			// MY SCRIPT INCLUDE
			var checkThings = new ValidateThings();
			var emailValid = checkThings.isValidEmail(input.user_email);
			var phoneValid = checkThings.isValidPhone(input.user_phone);
			var user_phone;
			var user_email;
			
			if(!phoneValid) {
				data.phoneCheck = false;	
			} else {
			    user_phone = input.user_phone;
			}

			if(!emailValid){
				data.emailCheck = false;
			} else {
			    user_email = input.user_email;
			}

			var user_name = input.user_name;
			var user_location = input.user_location;
			var user_message = input.user_message;
			var assign_group = 'My Group';
			var incident_type = 'Bob';
			
			//Generate Problem description using variables combined into one variable
			var message_concat = 'Name: ' + user_name + '\n' + 'Email: ' + user_email + '\n' + 'Phone: ' + user_phone + '\n' +  'Message' + '\n' + '--------------------------------------------------------------' + '\n' + user_message;
			var short_descr = 'Submitted by ' + user_name;

			gs.log('MY MESSAGE: ' + message_concat);	
			
			var requestBody = {};
			
			requestBody.assignment_group = assign_group;
			requestBody.u_type = incident_type;
			requestBody.short_description = short_descr;
			requestBody.u_job_description = message_concat;
			requestBody.description = "hello there moto";


			//Encode as JSON
			var rBody = new global.JSON().encode(requestBody);
			gs.log("MY BODY: " + rBody);


			//REST API to Create incident		
			var request = new sn_ws.RESTMessageV2();
			request.setEndpoint('https://MY-INSTANCE.service-now.com/api/now/table/incident');
			request.setHttpMethod('POST');

			//Eg. UserName="UserName", Password="password" for this code sample.
			var user = 'SOMEUSER';
			var password = 'SOMEPASSWORD';

			request.setBasicAuth(user,password);
			request.setRequestHeader("Accept","application/json");
			request.setRequestHeader('Content-Type','application/json');
			request.setRequestBody(rBody);
			var response = request.execute();
			gs.log(response.getBody());

		}

	}


})();
Please mark Correct and click the Thumb up if my answer helps you resolve your issue. Thanks!
Vinod Kumar Kachineni
Community Rising Star 2022

View solution in original post

2 REPLIES 2

Matt Taylor - G
Giga Guru

You should use a GlideAjax to call a Script Include from the client side. Some documentation about GlideAjax can be found here. And there is another helpful link which can be found here.

 

Please mark helpful/correct if this answered your question.

vkachineni
Kilo Sage
Kilo Sage
//Lines changed
//var emailValid = checkThings.isValidEmail(input.user_email);
//var phoneValid = checkThings.isValidPhone(input.user_phone);
//var user_phone;
//var user_email;
			
(function() {

	data.stuff = [];


	if (input) {

		if (input.action == "addData") {
			data.stuff = input.stuff;
			
			// MY SCRIPT INCLUDE
			var checkThings = new ValidateThings();
			var emailValid = checkThings.isValidEmail(input.user_email);
			var phoneValid = checkThings.isValidPhone(input.user_phone);
			var user_phone;
			var user_email;
			
			if(!phoneValid) {
				data.phoneCheck = false;	
			} else {
			    user_phone = input.user_phone;
			}

			if(!emailValid){
				data.emailCheck = false;
			} else {
			    user_email = input.user_email;
			}

			var user_name = input.user_name;
			var user_location = input.user_location;
			var user_message = input.user_message;
			var assign_group = 'My Group';
			var incident_type = 'Bob';
			
			//Generate Problem description using variables combined into one variable
			var message_concat = 'Name: ' + user_name + '\n' + 'Email: ' + user_email + '\n' + 'Phone: ' + user_phone + '\n' +  'Message' + '\n' + '--------------------------------------------------------------' + '\n' + user_message;
			var short_descr = 'Submitted by ' + user_name;

			gs.log('MY MESSAGE: ' + message_concat);	
			
			var requestBody = {};
			
			requestBody.assignment_group = assign_group;
			requestBody.u_type = incident_type;
			requestBody.short_description = short_descr;
			requestBody.u_job_description = message_concat;
			requestBody.description = "hello there moto";


			//Encode as JSON
			var rBody = new global.JSON().encode(requestBody);
			gs.log("MY BODY: " + rBody);


			//REST API to Create incident		
			var request = new sn_ws.RESTMessageV2();
			request.setEndpoint('https://MY-INSTANCE.service-now.com/api/now/table/incident');
			request.setHttpMethod('POST');

			//Eg. UserName="UserName", Password="password" for this code sample.
			var user = 'SOMEUSER';
			var password = 'SOMEPASSWORD';

			request.setBasicAuth(user,password);
			request.setRequestHeader("Accept","application/json");
			request.setRequestHeader('Content-Type','application/json');
			request.setRequestBody(rBody);
			var response = request.execute();
			gs.log(response.getBody());

		}

	}


})();
Please mark Correct and click the Thumb up if my answer helps you resolve your issue. Thanks!
Vinod Kumar Kachineni
Community Rising Star 2022