UI Policy on Widget in Service Portal

mattrom1
Giga Expert

I have imported a custom table and widget to use appointment scheduling. It has the ability to show Description field that will be placed on the catalog task once submitted. How do i get the description field to be mandatory on the widget within Service Portal.

 

find_real_file.png

1 ACCEPTED SOLUTION

mattrom1
Giga Expert

I was able to resolve this by using this script

 

			if(c.appntDescription != "") {
			
			
        c.server.get(obj).then(function(response) {
            if (response.data.timeSlotReturn) {
                c.timeSlotReturn = JSON.parse(response.data.timeSlotReturn);
                if (c.timeSlotReturn.sys_id) {
                    c.alertSuccess = true;
                    if (c.setReminder) {
                        c.setupReminder(c.selectedReminderTime.value.display_value);
                    }
                    c.getTimeSlots(selectedDate);
                    c.appntShortDescription = "";
                    c.appntDescription = "";
                    c.appntLocationSysid = "";
                    c.appntLocation = "";
                    $rootScope.$broadcast('appointmentCreated', '');
                }
            }
        });
		
		}	
			else 
			alert ("Please put in a description");
    };

View solution in original post

6 REPLIES 6

Sunil B N
ServiceNow Employee

Hi,
You need to edit the widget to make that field mandatory. 
If you could add widget code, we can give more specific answer here.
Cheers,
Sunil B N

Sanjay Bagri1
Tera Guru
Hi, I think this thread will help you please go through once. https://community.servicenow.com/community?id=community_question&sys_id=c71b83eddb5cdbc01dcaf3231f961944 Please mark as correct and helpful if it's worth for you . Thanks

mattrom1
Giga Expert

I have tried the link above but it is not working, here is the client script (I removed the information from the link provided)

 

function scheduleAppointment($rootScope, $timeout, $http, $scope) {
    var c = this;
    c.$onInit = function() {
        c.selectedSlot = "";
        c.timeSlotReturn = "";
        c.alertSuccess = false;
        c.setReminder = false;
        c.appntShortDescription = "";
        c.appntDescription = "";
        c.appntLocationSysid = "";
        c.selectedReminderTime = c.data.reminderTimes[0];
    }
		
		

    c.getTimeSlots = function(date) {
        c.dateFormatted = moment(date).format("dddd, MMMM D YYYY");
        c.server.get({ action: 'getTimeSlots', selectedDate: moment(date).format("YYYY-MM-DD") }).then(function(response) {
            if (response.data.timeSlots && response.data.timeSlots.length > 0) {
                c.timeSLots = JSON.parse(response.data.timeSlots);
                if (c.options.layout == 'Dropdown') { c.selectedSlot = c.timeSLots[0]; }
            }

        });
    };

    c.locationChosen = function(location) {
        c.appntLocation = location;
        c.appntLocationSysid = location.sys_id;
    }

    c.getLocations = function(val) {
        return $http.get('/api/now/table/cmn_location?sysparm_query=nameLIKE' + val + '^ORstreetLIKE' + val + '^ORcityLIKE' + val + '^ORstateLIKE' + val + '&sysparm_limit=5', {
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'X-UserToken': window.g_ck
            }
        }).then(function(response) {

            return response.data.result;
        });
    };

    c.setupReminder = function(reminderTime) {
        c.server.get({ action: 'setupReminder', selectedTime: reminderTime, taskSysid: c.timeSlotReturn.sys_id }).then(function(response) {
            c.reminderSetup = response.data.reminderReturn;
            $timeout(function() {
                c.alertSuccess = false;
                c.setReminder = false;
            }, 5000);
        });
    }



    function processTheTimes(appointments) {
        for (var i = 0; i < appointments.length; i++) {
            appointments[i].work_start = moment(appointments[i].work_start).fromNow();
            if (appointments[i].duration > 0) {
                appointments[i].duration = Math.floor(appointments[i].duration / 60);
            }
        }
        return appointments;
    }
    c.datePickerPopup = {
        opened: false
    };
    var today = new Date();

    if (!c.options.max_date) {
        c.options.max_date = 30;
    }
    c.dateOptions = {
        showWeeks: false,
        formatYear: 'yyyy',
        maxDate: today.setDate(today.getDate() + parseInt(c.options.max_date)),
        minDate: populateDate(),
        startingDay: 1
    };


    // Disable weekend selection
    c.disabled = function(date, mode) {
        return (mode === 'day' && (date.getDay() === 0 || date.getDay() === 6));
    }

    c.openDatePickerPopup = function() {
        c.datePickerPopup.opened = true;
    };

    c.submitTimeSlot = function(selectedDate, selectedSlot) {
        var obj = {
            'action': 'setTimeSlots',
            'meetingDate': selectedDate,
            'meetingTime': selectedSlot
        }
        if (c.appntLocation || c.appntDescription || c.appntShortDescription) {
            obj.additionalFields = {
                'short_description': c.appntShortDescription,
                'description': c.appntDescription,
                'location': c.appntLocationSysid
            }
        }

        c.server.get(obj).then(function(response) {
            if (response.data.timeSlotReturn) {
                c.timeSlotReturn = JSON.parse(response.data.timeSlotReturn);
                if (c.timeSlotReturn.sys_id) {
                    c.alertSuccess = true;
                    if (c.setReminder) {
                        c.setupReminder(c.selectedReminderTime.value.display_value);
                    }
                    c.getTimeSlots(selectedDate);
                    c.appntShortDescription = "";
                    c.appntDescription = "";
                    c.appntLocationSysid = "";
                    c.appntLocation = "";
                    $rootScope.$broadcast('appointmentCreated', '');
                }
            }
        });
    };


    function populateDate() {
        c.minDate = new Date();
        c.getTimeSlots(c.minDate);
        c.selectedDate = c.minDate;
        c.dateFormatted = moment(c.selectedDate).format("dddd, MMMM D YYYY");
        return c.minDate;
    }
	

	
}

Sunil B N
ServiceNow Employee

You can add check in submitTimeSlot to check if there is short description or not before calling c.server.get(obj) or in HTML code you can add mandatory="true" for input element.

Cheers,
Sunil B N