Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

trying to create a record using UI Page but its not working

Sunpreetk
Tera Contributor

I have created a custom table u_change_contractor_manager 

Inside this there are fields

u_contractor_name, u_new_manager , u_status , u_requested_by, u_appproval_status (appproval is like this- i know wrong spellings)

I am trying to fetch the 2 values from ui page and putting them on table . i need only these 2 values u_contractor_name, u_new_manager, so i am taking help of glide ajax. 

HTML SECTION

<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide">
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: flex-start;
height: 100vh;
margin: 80px;
padding: 80px;
background-color: #F4F4F4;
}
.container {
width: 700px;
background: white;
padding: 40px;
border-radius: 8px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.1);
margin-top: 20px;
}
h2 {
text-align: center;
color: #333;
font-size: 28px;
margin-bottom: 30px;
}
form {
display: flex;
flex-direction: column;
}
label {
font-weight: bold;
display: block;
margin: 15px 0 8px;
}
input, select {
width: 100%;
padding: 12px;
margin-bottom: 20px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
button.submit-btn {
width: 100%;
padding: 12px;
background-color: #007BFF;
color: white;
border: none;
border-radius: 4px;
font-size: 18px;
cursor: pointer;
margin-top: 20px;
}
button.submit-btn:hover {
background-color: #0056B3;
}
</style>
<!-- <script>

</script> -->

<div class="container">
<h2>Change Contractor Manager Request</h2>
<form id="changeContractorForm">
<!-- Contractor Name -->
<label for="contractor_name_display">Contractor Name</label>
<input type="text" id="contractor_name_display" value="${gs.getUser().getDisplayName()}" readonly="readonly" />
<input type="hidden" id="contractor_sys_id" value="${gs.getUserID()}" />

<!-- New Manager -->
<label for="new_manager">New Manager Name</label>
<g:macro_invoke macro="ui_reference"
id="new_manager"
name="new_manager"
table="sys_user"
show_popup="true"
query="active=true"
display_field="name"
value_field="sys_id"
onchange="updateSysId();" />
<input type="hidden" id="new_manager_sys_id" name="new_manager_sys_id" />

<button type="button" class="submit-btn" onclick="onSubmit()">Submit</button>
</form>
</div>
</j:jelly>
Client Script Section
function onSubmit() {
console.log("Submit button clicked!");
var contractorSysId = document.getElementById("contractor_sys_id").value;
var newManagerSysId = g_form.getValue('new_manager'); // Get sys_id from GlideForm
console.log("Contractor ID:", contractorSysId);
console.log("New Manager sys_id:", newManagerSysId);

if (!newManagerSysId) {
alert("Please select a valid new manager.");
return;
}

var ga = new GlideAjax('ChangeContractorManagerHandler');
ga.addParam('sysparm_name', 'createRequest');
ga.addParam('contractor', contractorSysId);
ga.addParam('newManager', newManagerSysId);
ga.getXML(function(response) {
console.log("Server Response:", response);
if (response === "success") {
alert("Manager change request submitted. Waiting for approval.");
location.reload();
} else {
alert("Failed: " + response);
}
});
}

// Update sys_id when a manager is selected
function updateSysId() {
var sysId = g_form.getValue('new_manager');
document.getElementById("new_manager_sys_id").value = sysId;
}

Script include
var ChangeContractorManagerHandler = Class.create();
ChangeContractorManagerHandler.prototype = {
initialize: function() {},

createRequest: function(contractor, newManager) {
try {
var gr = new GlideRecord('u_change_contractor_manager');
gr.initialize();
gr.u_contractor_name = contractor;
gr.u_new_manager = newManager;
gr.u_status = 'Pending';
gr.u_requested_by = gs.getUserID();
gr.u_appproval_status = 'Pending Approval'; // Fixed typo

var budgetOwner = this.getBudgetOwner(contractor);
if (budgetOwner) {
gr.u_budget_owner = budgetOwner;
} else {
gs.error("Budget owner not found for contractor: " + contractor);
return "Budget owner could not be found.";
}

var sysId = gr.insert();
if (sysId) {
gs.info("Request created: " + sysId);
return "success";
} else {
gs.error("Failed to create request for contractor: " + contractor);
return "Failed to create the request.";
}
} catch (e) {
gs.error("Error in createRequest: " + e.message);
return "Error: " + e.message;
}
},

getBudgetOwner: function(contractorID) {
var userGR = new GlideRecord('sys_user');
if (userGR.get(contractorID)) {
// Replace "u_budget_owner" with your actual field name
var budgetOwner = userGR.u_budget_owner.sys_id; // Use sys_id
return budgetOwner;
} else {
gs.error("Contractor not found: " + contractorID);
return null;
}
},

type: 'ChangeContractorManagerHandler'
};

What could be the problem that record is not inserted, Also earlier i was having error userID is null then it corrected.
Remember:
UI PAGE FIELDS
1) CONTRACTOR NAME : AUTOPOPULATED USING GS.GETDISPLAY VALUE
2) NEW MANAGER : REFERENCE FIELD TO USER TABLE 
these are successfully set on the ui page still unable to get passed to the server
1 REPLY 1

Selva Arun
Mega Sage

Hi,

 

Use getXMLAnswer() extracts the actual return value from the Script Include

ga.getXMLAnswer(function(response) { console.log("Server Response:", response); if (response === "success") { alert("Manager change request submitted. Waiting for approval."); location.reload(); } else { alert("Failed: " + response); } });

 

Ensure the parameter names start with sysparm_ to be correctly parsed in the Script Include:

 

ga.addParam('sysparm_name', 'createRequest'); ga.addParam('sysparm_contractor', contractorSysId); ga.addParam('sysparm_newManager', newManagerSysId);

 

please try with below script include:

 

var ChangeContractorManagerHandler = Class.create();
ChangeContractorManagerHandler.prototype = {
initialize: function() {},

createRequest: function() {
var contractor = this.getParameter('sysparm_contractor');
var newManager = this.getParameter('sysparm_newManager');

if (!contractor || !newManager) {
gs.error("Missing required parameters");
return "Error: Missing required parameters";
}

var gr = new GlideRecord('u_change_contractor_manager');
gr.initialize();
gr.u_contractor_name = contractor;
gr.u_new_manager = newManager;
gr.u_status = 'Pending';
gr.u_requested_by = gs.getUserID();
gr.u_appproval_status = 'Pending Approval';

var budgetOwner = this.getBudgetOwner(contractor);
if (budgetOwner) {
gr.u_budget_owner = budgetOwner;
} else {
gs.error("Budget owner not found for contractor: " + contractor);
return "Error: Budget owner could not be found.";
}

var sysId = gr.insert();
if (sysId) {
gs.info("Request created: " + sysId);
return "success";
} else {
gs.error("Failed to create request for contractor: " + contractor);
return "Error: Failed to create the request.";
}
},

getBudgetOwner: function(contractorID) {
var userGR = new GlideRecord('sys_user');
if (userGR.get(contractorID)) {
return userGR.u_budget_owner.sys_id || null;
} else {
gs.error("Contractor not found: " + contractorID);
return null;
}
},

type: 'ChangeContractorManagerHandler'
};

 

If you believe the solution provided has adequately addressed your query, could you please **mark it as 'Helpful'** and **'Accept it as a Solution'**? This will help other community members who might have the same question find the answer more easily.

 

Thank you for your consideration.


Selva Arun