uable to update field with dynamic value as it is Choice field.

srinidhi
Tera Guru

Hello Team,

 

How to update choice field dynamically, when i try to use below syntax it is creating duplicate record.

 current.setValue(FieldName, displayName);

please suggest me here Thanks.

 

 

1 ACCEPTED SOLUTION

swathisarang98
Giga Sage
Giga Sage

Hi @srinidhi ,

 

You can not directly do this through set value, try to get values from Payload if that is not at all possible then as a workaround what you can do is store the state choice label inprogress or fetch that value in a variable and query sys_choice table and add table name in query and then set the state value .

 

example;

for testing i have a randon=m string field where i set value as In Progress and in before update business rule i gliderecord to sys_ choice table and got the value for label In progress and set the state value in incident,

 

BR:

swathisarang98_0-1711451282608.png

 

(function executeRule(current, previous /*null when async*/ ) {

   

    var choiceLabel = current.u_string_1;

	//gs.info('label: ' + choiceLabel);
    var gchoice = new GlideRecord('sys_choice');
    gchoice.addEncodedQuery('nameSTARTSWITHINCIDENT^element=state');
    gchoice.addQuery('label', choiceLabel); // here i have added dummy value stored in a string to check but what you can do is get the pay load value store it in a variable and use that to query
    gchoice.query();
    if (gchoice.next()) {
		//gs.info('value '+ gchoice.getValue('value'));
        current.setValue('state', gchoice.getValue('value'));
    }


})(current, previous);

 

 

Please mark this comment as Correct Answer/Helpful if it helped you.

Regards,

Swathi Sarang

View solution in original post

15 REPLIES 15

swathisarang98
Giga Sage
Giga Sage

Hi @srinidhi ,

 

You can not directly do this through set value, try to get values from Payload if that is not at all possible then as a workaround what you can do is store the state choice label inprogress or fetch that value in a variable and query sys_choice table and add table name in query and then set the state value .

 

example;

for testing i have a randon=m string field where i set value as In Progress and in before update business rule i gliderecord to sys_ choice table and got the value for label In progress and set the state value in incident,

 

BR:

swathisarang98_0-1711451282608.png

 

(function executeRule(current, previous /*null when async*/ ) {

   

    var choiceLabel = current.u_string_1;

	//gs.info('label: ' + choiceLabel);
    var gchoice = new GlideRecord('sys_choice');
    gchoice.addEncodedQuery('nameSTARTSWITHINCIDENT^element=state');
    gchoice.addQuery('label', choiceLabel); // here i have added dummy value stored in a string to check but what you can do is get the pay load value store it in a variable and use that to query
    gchoice.query();
    if (gchoice.next()) {
		//gs.info('value '+ gchoice.getValue('value'));
        current.setValue('state', gchoice.getValue('value'));
    }


})(current, previous);

 

 

Please mark this comment as Correct Answer/Helpful if it helped you.

Regards,

Swathi Sarang

@srinidhi ,Thanks for marking my answer as helpful. If it helped you in any way please accept the solution so that it will be beneficial to the future readers with the same query.

 

Thanks,

Swathi

Hello @swathisarang98  and @Sohail Khilji ,

 

Below is my sample script and its output. In the screen shot we can see that two Software value came.

 

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
    try {
        var requestBody = request.body.data;
        var caller = requestBody.caller;
        var category = requestBody.category;
		var shortdescription = requestBody.shortdescription;


        // Insert record into UserTable
        var gr = new GlideRecord('incident');
        gr.initialize();
        gr.setValue('caller_id', caller);
        gr.setValue('category', category);
		gr.setValue('short_description', shortdescription);
        gr.insert();
        response.setStatus(201); // 201 Created
        response.setBody({
            message: "Records created successfully in incident table"
        });
    } catch (ex) {
        response.setStatus(500); // 500 Internal Server Error
        response.setBody({
            error: "An error occurred while processing the request"
        });
    }
})(request, response);

 

srinidhi_0-1711477700146.png

 

@srinidhi  can you put some log (gs.info) and add requestBody.category in it and share the screenshot or paste the log here?

 

Thanks 

Swathi

Hello @swathisarang98 

Please find the gs.info log

 

srinidhi_0-1711522280775.png