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
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