Data Source UI builder Post call

sapnasarkar
Tera Contributor

I am using data source fot making a post call when click on submit button. For that i am using data source there i have one Data Broker Server Script on Transform.
In Properties i have input parameters Like

[{
        "name": "Owner",
        "label": "Owner",
        "description": "Owner data to fetch",
        "readOnly": false,
        "fieldType": "string",
        "mandatory": true,
        "defaultValue": ""
    },
{
        "name": "'volume_type",
        "label": "volume_type",
        "description": "'volume_type data to fetch",
        "readOnly": false,
        "fieldType": "string",
        "mandatory": true,
        "defaultValue": ""
    }]

and in Script i have written 

function transform(input) {

    try {
        var r = new sn_ws.RESTMessageV2('hcm launchstack-post', 'POST');
        r.setStringParameterNoEscape('Owner', input.Owner);
        r.setStringParameterNoEscape('volume_type', input.volume_type);
        r.setStringParameterNoEscape('Support', input.Support);
        r.setStringParameterNoEscape('Application', input.Application);
        r.setStringParameterNoEscape('Description', input.Description);
        r.setStringParameterNoEscape('subnet_id', input.subnet_id);
        r.setStringParameterNoEscape('Stack_Name', input.Stack_Name);
        r.setStringParameterNoEscape('name', input.name);
        r.setStringParameterNoEscape('region', input.region);
        r.setStringParameterNoEscape('Environment', input.Environment);
        r.setStringParameterNoEscape('BU', input.BU);
        r.setStringParameterNoEscape('instance_type', input.instance_type);
        r.setStringParameterNoEscape('SubscriptionID', input.SubscriptionID);
        r.setStringParameterNoEscape('AvailabilityTime', input.AvailabilityTime);
        r.setStringParameterNoEscape('key_name', input.key_name);
        r.setStringParameterNoEscape('SharedCost', '');
        r.setStringParameterNoEscape('vpc_id', input.vpc_id);
        r.setStringParameterNoEscape('CostCenter', input.CostCenter);
        r.setStringParameterNoEscape('Cloud', input.Cloud);
        r.setStringParameterNoEscape('ami', input.ami);

        var response = r.execute();
        var responseBody = response.getBody();
        var httpStatus = response.getStatusCode();
    } catch (ex) {
        var message = ex.message;
    }
}

but its not working. Please provide solution for this.

3 REPLIES 3

Ravi Gaurav
Giga Sage
Giga Sage

Hi @sapnasarkar 

 

Revised Script :-

 

function transform(input) {
try {
// Create the REST message
var r = new sn_ws.RESTMessageV2('hcm launchstack-post', 'POST');

// Set parameters from input
r.setStringParameterNoEscape('Owner', input.Owner || '');
r.setStringParameterNoEscape('volume_type', input.volume_type || '');
r.setStringParameterNoEscape('Support', input.Support || '');
r.setStringParameterNoEscape('Application', input.Application || '');
r.setStringParameterNoEscape('Description', input.Description || '');
r.setStringParameterNoEscape('subnet_id', input.subnet_id || '');
r.setStringParameterNoEscape('Stack_Name', input.Stack_Name || '');
r.setStringParameterNoEscape('name', input.name || '');
r.setStringParameterNoEscape('region', input.region || '');
r.setStringParameterNoEscape('Environment', input.Environment || '');
r.setStringParameterNoEscape('BU', input.BU || '');
r.setStringParameterNoEscape('instance_type', input.instance_type || '');
r.setStringParameterNoEscape('SubscriptionID', input.SubscriptionID || '');
r.setStringParameterNoEscape('AvailabilityTime', input.AvailabilityTime || '');
r.setStringParameterNoEscape('key_name', input.key_name || '');
r.setStringParameterNoEscape('SharedCost', ''); // Assuming this is always empty
r.setStringParameterNoEscape('vpc_id', input.vpc_id || '');
r.setStringParameterNoEscape('CostCenter', input.CostCenter || '');
r.setStringParameterNoEscape('Cloud', input.Cloud || '');
r.setStringParameterNoEscape('ami', input.ami || '');

// Execute the REST call
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();

// Log the response for debugging
gs.info('HTTP Status: ' + httpStatus);
gs.info('Response Body: ' + responseBody);

// Return the response if needed
return {
status: httpStatus,
body: responseBody
};
} catch (ex) {
// Log error details
gs.error('Error occurred: ' + ex.message);
return {
status: 'error',
message: ex.message
};
}
}

--------------------------------------------------------------------------------------------------------------------------


If you found my response helpful, I would greatly appreciate it if you could mark it as "Accepted Solution" and "Helpful."
Your support not only benefits the community but also encourages me to continue assisting. Thank you so much!

Thanks and Regards
Ravi Gaurav | ServiceNow MVP 2025,2024 | ServiceNow Practice Lead | Solution Architect
CGI
M.Tech in Data Science & AI

 YouTube: https://www.youtube.com/@learnservicenowwithravi
 LinkedIn: https://www.linkedin.com/in/ravi-gaurav-a67542aa/

Not working and "errors": [
"unterminated string literal (sys_ux_data_broker_transform.64065e933b16de1057a74f0864e45abb; line 88)"
],
"status": 500,

IronPotato
Mega Sage

Hi @sapnasarkar ,

 

you defined only 2 properties but you are trying to access 19 of them via input.yourParameter

 

so to make it working, you only define first 2 parameters and rest must be empty string if you don't have that data at the time you are making the call. If you have all the data when you are making this call, I suggest that you convert your data into object and instead passing only owner and volume_type, you will pass whole objects here and adjust your code to work with that object so that you can pass the parameters dynamically.

 

var r = new sn_ws.RESTMessageV2('hcm launchstack-post', 'POST');
r.setStringParameterNoEscape('Owner', input.Owner);
r.setStringParameterNoEscape('volume_type', input.volume_type);
r.setStringParameterNoEscape('Support', "");
r.setStringParameterNoEscape('Application', "");
r.setStringParameterNoEscape('Description', "");
r.setStringParameterNoEscape('subnet_id', "");
r.setStringParameterNoEscape('Stack_Name', "");
r.setStringParameterNoEscape('name', "");
r.setStringParameterNoEscape('region', "");
r.setStringParameterNoEscape('Environment', "");
r.setStringParameterNoEscape('BU', "");
r.setStringParameterNoEscape('instance_type', "");
r.setStringParameterNoEscape('SubscriptionID', "");
r.setStringParameterNoEscape('AvailabilityTime', "");
r.setStringParameterNoEscape('key_name', "");
r.setStringParameterNoEscape('SharedCost', "");
r.setStringParameterNoEscape('vpc_id', "");
r.setStringParameterNoEscape('CostCenter', "");
r.setStringParameterNoEscape('Cloud', "");
r.setStringParameterNoEscape('ami', "");

 

If my answer helped you in any way, please then mark it as helpful or correct. This will help others finding a solution.