Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Envio de Arquivos - GLPI

BRUNO BANDEIRA
Tera Guru

Pessoal, boa tarde!

 

Estou com um problema para enviar anexos da plataforma ServiceNow para a plataforma GLPI. Pelo POSTMAN tudo funciona as mil maracilhas, mas quando tento fazer de forma interna no ServiceNow, o arquivo até chega do outro lado, mas, sempre está corrompido, ou ainda com o conteúdo escrito UNDEFINED.

 

Se alguém puder me dar uma mão seria de grande ajuda. Envio abaixo o meu script e as telas do POSTMAN.

 

var token = '{{token}}';
var record = '{{record}}';
var endpoint = '{{endpoint}}';
var appToken = '{{apptoken}}';
var ticket = '{{ticket}}';

// CARREGA o anexo do registro
var attachmentGR = new GlideRecord('sys_attachment');
attachmentGR.addQuery('table_sys_id', record);
attachmentGR.query();
if(attachmentGR.next()) {
var attachmentName = attachmentGR.file_name.toString();
var attachmentType = attachmentGR.content_type;
}

 // CONVERTE conteúdo para binário
var grAttachment = new GlideSysAttachment();
var bytes = grAttachment.getBytes(attachmentGR);

// MONTA o payload multipart
var boundary = "----" + gs.generateGUID().substring(0, 16);
var CRLF = "\r\n";

var payload = "";
payload += "--" + boundary + CRLF;
payload += 'Content-Disposition: form-data; name="uploadManifest"' + CRLF + CRLF;
payload += JSON.stringify({
    input: {
        name: attachmentName,
        _filename: [attachmentName]
    }
}) + CRLF;

payload += "--" + boundary + CRLF;
payload += 'Content-Disposition: form-data; name="filename"; filename="' + attachmentName + '"' + CRLF;
payload += "Content-Type: " + attachmentType + CRLF;
payload += bytes;

payload += "--" + boundary + "--" + CRLF;

var request = new sn_ws.RESTMessageV2();
request.setEndpoint(endpoint + '/apirest.php/Document/');
request.setHttpMethod('POST');
request.setRequestHeader("App-Token", appToken);
request.setRequestHeader("Session-Token", token);
request.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
request.setLogLevel('all');
request.setRequestBody(payload);

var sentBody = request.getRequestBody();
var response = request.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();

// Se o erro for de TOKEN, tenta de novo    
if (responseBody.includes('SESSION_TOKEN_INVALID')) {
     response = request.execute();
      httpStatus = response.getStatusCode();
       responseBody = response.getBody();
}

var docJSON = JSON.parse(responseBody);
var docID = docJSON.id; // Captura o documento (DOCUMENT ID)

gs.info('RESPONSE BODY: ' + responseBody);
gs.info('HTTP STATUS: ' + httpStatus);
gs.info('DOCUMENT ID: ' + docID);
 
Por vezes também recebo esta mensagem de erro e, nesse caso, na aé adicionado à plataforma.
{"id":11057,"message":"Item adicionado com sucesso: notepad.txt","upload_result":{"filename":[{"name":"681bb8f71971e2.23658968notepad.txt","size":0,"type":"","error":"O arquivo enviado foi parcialmente enviado","prefix":"681bb8f71971e2.23658968","display":"notepad.txt","filesize":"0 B","id":"docfilename1027737742"}]}}

 

0 REPLIES 0