g_form is the primary client-side API for interacting with forms. It provides methods to get/set values, control field behavior, display messages, and manipulate form elements.
g_form is heavily tested in CSA and CAD exams. Master getValue(), setValue(), setMandatory(), setDisplay(), addInfoMessage(), and clearValue().
// Get field value
var priority = g_form.getValue('priority');
var state = g_form.getValue('state');
// Get display value (for reference fields)
var assignedToName = g_form.getDisplayValue('assigned_to');
var groupName = g_form.getDisplayValue('assignment_group');
// Set field value
g_form.setValue('priority', '1');
g_form.setValue('short_description', 'Email server down');
// Set reference field (pass sys_id)
g_form.setValue('assigned_to', 'user_sys_id_here');
g_form.setValue('assignment_group', 'group_sys_id_here');
// Set value with display value
g_form.setValue('assigned_to', 'user_sys_id', 'John Doe');
// Clear field value
g_form.clearValue('assignment_group');
g_form.clearValue('assigned_to');
// Example: Copy caller to assigned user
var caller = g_form.getValue('caller_id');
if (caller) {
g_form.setValue('assigned_to', caller);
}
// Hide field
g_form.setDisplay('assigned_to', false);
// Show field
g_form.setDisplay('assignment_group', true);
// Hide multiple fields
g_form.setDisplay('caller_id', false);
g_form.setDisplay('contact_type', false);
// Show/hide section
g_form.setSectionDisplay('resolution_info', true);
g_form.setSectionDisplay('closure_information', false);
// Example: Show resolution fields only when resolved
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || isTemplate) return;
if (newValue == '6') { // Resolved
g_form.setSectionDisplay('resolution_info', true);
g_form.setMandatory('close_notes', true);
} else {
g_form.setSectionDisplay('resolution_info', false);
g_form.setMandatory('close_notes', false);
}
}
// Make field mandatory
g_form.setMandatory('assignment_group', true);
// Remove mandatory requirement
g_form.setMandatory('assigned_to', false);
// Check if field is mandatory
var isMandatory = g_form.isMandatory('priority');
// Make field read-only
g_form.setReadOnly('number', true);
// Make field editable
g_form.setReadOnly('short_description', false);
// Disable field (similar to read-only)
g_form.setDisabled('state', true);
// Enable field
g_form.setDisabled('priority', false);
// Example: Critical incidents require assignment
if (g_form.getValue('priority') == '1') {
g_form.setMandatory('assignment_group', true);
g_form.setMandatory('assigned_to', true);
} else {
g_form.setMandatory('assignment_group', false);
g_form.setMandatory('assigned_to', false);
}
// Info message (blue banner)
g_form.addInfoMessage('Record updated successfully');
// Error message (red banner)
g_form.addErrorMessage('Please fill in all required fields');
// Warning message (yellow banner)
g_form.addWarningMessage('This action cannot be undone');
// Clear all messages
g_form.clearMessages();
// Field-specific message
g_form.showFieldMsg('priority', 'Critical priority requires immediate attention', 'info');
g_form.showFieldMsg('assignment_group', 'Required for P1 incidents', 'error');
g_form.showFieldMsg('assigned_to', 'Assign to available team member', 'warning');
// Hide field message
g_form.hideFieldMsg('priority');
g_form.hideFieldMsg('assignment_group', false); // Don't clear other messages
// Example: Validation with messages
function onSubmit() {
if (g_form.getValue('priority') == '1' &&
g_form.getValue('assignment_group') == '') {
g_form.addErrorMessage('Critical incidents must have an assignment group');
g_form.showFieldMsg('assignment_group', 'This field is required', 'error');
return false;
}
return true;
}
// Submit form
g_form.submit();
// Submit form with action name
g_form.submit('insert_and_stay');
g_form.submit('update');
// Disable form submit button
g_form.disableButton('submit');
g_form.disableButton('insert');
// Enable form submit button
g_form.enableButton('submit');
// Example: Validate and submit
function validateAndSubmit() {
if (g_form.getValue('short_description') == '') {
g_form.addErrorMessage('Description is required');
return;
}
g_form.submit();
}
// Save form (same as submit but returns to list)
g_form.save();
// Get reference sys_id
var assignedToID = g_form.getValue('assigned_to');
// Get reference display value
var assignedToName = g_form.getDisplayValue('assigned_to');
// Get reference field object
var refField = g_form.getReference('assigned_to', function(ref) {
if (ref) {
var email = ref.email;
var phone = ref.phone;
alert('User: ' + ref.name + ', Email: ' + email);
}
});
// Add filter to reference field
g_form.addFilter('assigned_to', 'active', true);
g_form.addFilter('assignment_group', 'type', 'support');
// Example: Filter users by selected group
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || isTemplate) return;
// Clear assigned user when group changes
g_form.clearValue('assigned_to');
// Filter assigned_to by selected group
if (newValue) {
g_form.addFilter('assigned_to', 'member_of', newValue);
}
}
// Check if form is new
var isNew = g_form.isNewRecord();
// Get form's sys_id
var sysID = g_form.getUniqueValue();
// Get table name
var tableName = g_form.getTableName();
// Get section names
var sections = g_form.getSections();
// Flash field (highlight briefly)
g_form.flash('priority', '#FF0000', 0); // Red flash
// Add option to choice list
g_form.addOption('state', '10', 'Custom State');
// Clear options from choice list
g_form.clearOptions('category');
// Remove option from choice list
g_form.removeOption('priority', '5');
// Hide all field messages
g_form.hideAllFieldMsgs();
// Hide related lists
g_form.hideRelatedList('incident_task');
// Show related lists
g_form.showRelatedList('incident_task');
// Example: New record setup
function onLoad() {
if (g_form.isNewRecord()) {
g_form.setValue('caller_id', g_user.userID);
g_form.setValue('opened_by', g_user.userID);
g_form.addInfoMessage('Creating new incident for ' + g_user.firstName);
}
}
g_user provides information about the currently logged-in user in client scripts. It's a client-side object containing user properties.
// User properties
var userID = g_user.userID; // sys_id
var userName = g_user.userName; // username (e.g., 'john.doe')
var firstName = g_user.firstName; // First name
var lastName = g_user.lastName; // Last name
var fullName = g_user.firstName + ' ' + g_user.lastName;
// Check if user has role
var hasAdmin = g_user.hasRole('admin');
var hasITIL = g_user.hasRole('itil');
// Check multiple roles (OR logic)
var hasCriticalRole = g_user.hasRole('admin,itil');
// Client data (custom user properties)
var clientData = g_user.getClientData('custom_property');
// Example: Auto-assign new records to current user
function onLoad() {
if (g_form.isNewRecord()) {
g_form.setValue('opened_by', g_user.userID);
g_form.setValue('caller_id', g_user.userID);
if (g_user.hasRole('itil')) {
g_form.setValue('contact_type', 'self-service');
}
}
}
// Example: Role-based field control
function onLoad() {
if (!g_user.hasRole('admin')) {
g_form.setReadOnly('state', true);
g_form.setReadOnly('priority', true);
}
}
// Pattern 1: Conditional mandatory fields
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || isTemplate) return;
if (newValue == '1') { // Critical priority
g_form.setMandatory('assignment_group', true);
g_form.setMandatory('assigned_to', true);
g_form.showFieldMsg('priority', 'Immediate response required', 'error');
} else {
g_form.setMandatory('assignment_group', false);
g_form.setMandatory('assigned_to', false);
g_form.hideFieldMsg('priority');
}
}
// Pattern 2: Cascading field updates
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || isTemplate) return;
// Clear dependent field
g_form.clearValue('subcategory');
// Add filter for dependent field
if (newValue) {
g_form.addFilter('subcategory', 'parent', newValue);
}
}
// Pattern 3: Form validation
function onSubmit() {
var priority = g_form.getValue('priority');
var group = g_form.getValue('assignment_group');
if (priority == '1' && group == '') {
g_form.addErrorMessage('Critical incidents require an assignment group');
g_form.showFieldMsg('assignment_group', 'Required', 'error');
return false;
}
return true;
}
// Pattern 4: Dynamic field visibility
function onLoad() {
var state = g_form.getValue('state');
if (state == '6' || state == '7') { // Resolved or Closed
g_form.setSectionDisplay('resolution_info', true);
g_form.setMandatory('close_notes', true);
} else {
g_form.setSectionDisplay('resolution_info', false);
}
}
// Pattern 5: User-specific defaults
function onLoad() {
if (g_form.isNewRecord()) {
g_form.setValue('opened_by', g_user.userID);
g_form.setValue('caller_id', g_user.userID);
if (g_user.hasRole('vip')) {
g_form.setValue('priority', '2');
g_form.addInfoMessage('VIP user - High priority assigned');
}
}
}
getValue('field')setValue('field', value)getDisplayValue('field')setMandatory('field', bool)setDisplay('field', bool)setReadOnly('field', bool)addErrorMessage(text)clearValue('field')submit()isNewRecord()g_user.userIDg_user.userNameg_user.firstNameg_user.hasRole('role')