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