Dynamic SOAP message
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-25-2025 11:11 PM
Hello Friends,
Need your help, below code is not working dynamic, any mistake in request body. Creating the record in external system but caller and short_description is not dynamic it is inserting ${sd}, ${caller_id}.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 weeks ago
Thank you for marking my response as helpful.
💡 If my response helped, please mark it as correct ✅ and close the thread 🔒— this helps future readers find the solution faster! 🙏
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 weeks ago
// Configurazione centralizzata
var config = {
endpoint: 'https://xxxxxx.service-now.com/incident.do?SOAP',
soapAction: 'http://www.service-now.com/incident/insert',
username: 'inc.integration',
password: 'xxxxxxxxxxxxxx'
};
// Funzione per costruire il body SOAP dinamicamente
function buildSOAPBody(params) {
var body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:inc="http://www.service-now.com/incident">' +
'<soapenv:Header/>' +
'<soapenv:Body>' +
'<inc:insert>';
// Aggiungi dinamicamente tutti i parametri
for (var key in params) {
if (params.hasOwnProperty(key) && params[key]) {
body += '<' + key + '>' + GlideStringUtil.escapeForHomePage(params[key]) + '</' + key + '>';
}
}
body += '</inc:insert>' +
'</soapenv:Body>' +
'</soapenv:Envelope>';
return body;
}
// Funzione principale per creare l'incident
function createIncidentSOAP(incidentData) {
try {
var sp = new sn_ws.SOAPMessageV2();
sp.setEndpoint(config.endpoint);
sp.setSOAPAction(config.soapAction);
sp.setBasicAuth(config.username, config.password);
// Costruisci il body SOAP dinamicamente
var soapBody = buildSOAPBody(incidentData);
sp.setRequestBody(soapBody);
// Esegui la richiesta
var response = sp.execute();
var httpStatus = response.getStatusCode();
if (httpStatus != 200) {
gs.error('SOAP Request failed with status: ' + httpStatus);
return null;
}
// Parse della risposta
var responseBody = response.getBody();
var xmlDoc = new XMLDocument2();
xmlDoc.parseXML(responseBody);
var result = {
sys_id: xmlDoc.getNodeText('//sys_id'),
number: xmlDoc.getNodeText('//number')
};
// Log dei risultati
if (result.sys_id && result.number) {
gs.addInfoMessage('Incident creato con successo');
gs.addInfoMessage('Sys ID: ' + result.sys_id);
gs.addInfoMessage('Number: ' + result.number);
} else {
gs.error('Risposta SOAP non valida');
}
return result;
} catch (ex) {
gs.error('Errore durante la chiamata SOAP: ' + ex.message);
return null;
}
}
// Esempio di utilizzo con dati dinamici
var incidentData = {
caller_id: current.caller_id.toString(),
short_description: current.short_description.toString(),
// Aggiungi altri campi dinamicamente secondo necessità
// urgency: current.urgency.toString(),
// impact: current.impact.toString(),
// category: current.category.toString()
};
// Esegui la chiamata
var result = createIncidentSOAP(incidentData);
Modifiche effettuate
- Configurazione centralizzata - parametri facilmente modificabili
- Costruzione dinamica del body SOAP - accetta qualsiasi numero di campi
- Gestione errori robusta - try/catch e controllo status HTTP
- Escape automatico dei dati - prevenzione di injection XML
- Funzioni riutilizzabili - codice più manutenibile
- Logging migliorato - messaggi di errore e successo più chiari
