FileApiService загрузка документа в файлы и примечания CRM системы

Доброго времени суток, есть вопрос следующего характера
У меня есть расширяющий модуль для FileDetailV2
Внутри него я получаю контент PDF документа (контент строкой)
Каким образом мне этот контент передать на FileApiService модуль в метод Upload что бы загрузить этот файл?
Если я загружаю руками документ то получаю в консоли POST запрос на

https://testDomain.bpmonline.com/0/rest/FileApiService/Upload?fileapi14996709535744&totalFileLength=47386&fileId=file_id&mimeType=application%2Fpdf&columnName=Data&fileName=20846491.pdf&parentColumnName=Document&parentColumnValue=parent_document_value&entitySchemaName=DocumentFile

И также интересно как в JS получить текущий entitySchemaName?

Нравится

6 комментариев

Сформируйте аналогичный запрос со значениями колонок в url, и с данными файла в теле запроса средствами js.
Ответ на второй вопрос:

"Максим Шевченко" написал:file_id

Спаибо за Ваш ответ
Но в url есть значение file_id откуда мне его взять если файл еще не создан?

"Nickstery" написал:Но в url есть значение file_id откуда мне его взять если файл еще не создан?

Это просто новый рандомный гуид по которому далее файл можно будет получить, создать новый гуид можно следующим образом:
https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascri…

"Максим Шевченко" написал:
Nickstery пишет:

Но в url есть значение file_id откуда мне его взять если файл еще не создан?

Это просто новый рандомный гуид по которому далее файл можно будет получить, создать новый гуид можно следующим образом:
https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript

С формированием параметра понятно
Каким образом отправлять контент файла в теле запроса, это form-data по ключу определенному или передаеться как binary data?
Если я формирую запрос в Postman (приложение для отправки запросов) как приведено ниже

http://joxi.ru/V2VKJBwuxeDROA

Я получаю следующий ответ:

http://joxi.ru/L21bq0kh8Jx3dA

Есть где-то дока какой ендпоинт/модуль какие есть методы, и какие поля нужно отправлять что бы загрузить документ?
Не совсем понятно каким образом проиходит передача самого документа

Я набросал кусок кода, который получает контент файла, формирует BLOB и пытаеться отправить его на FilApiService Только я получаю ту же ошибку

window.console.log("Try to grab the file content");
var http = new XMLHttpRequest();
http.open("get", "https://b981fab7.ngrok.io/getPDF", true);
http.responseType = "arraybuffer";
http.onload = function(e) {
    if (this.status === 200) {
        var uInt8Array = new Uint8Array(this.response);
        var i = uInt8Array.length;
        var binaryString = new Array(i);
        while (i--)
        {
             binaryString[i] = String.fromCharCode(uInt8Array[i]);
         }
        var data = binaryString.join("");
 
        var http2 = new XMLHttpRequest();
        http2.open("post", "/0/rest/FileApiService/Upload?fileapi14998570381414&totalFileLength=47386&" +
        "fileId=*****&mimeType=application/pdf&columnName=Data" +
        "&fileName=20846491.pdf&parentColumnName=Document" +
        "&parentColumnValue=***&entitySchemaName=DocumentFile", true);
        http2.onload = function(e) {
             window.console.log("UPLOAD FILE OPERATION DONE");
             window.console.log(e);
        };
        http2.send(new Blob([data]));
 
        }
    };
http.send();

Разобрался:
Суть в том что при расширении FileDatailV2 (логично) мы унаследуем и методы оринильного модуля.
Можно не использовать FileApiService и не генерировать 100500 параметров а просто обойтись готовым решением, как это делает аплоад документа юзер, который находится в CRM.
Достаточно использовать FileDetailV2 -> onFileSelect метод и из строчного контента сгенерировать window.File
Пример как я это реализовал ниже:

window.console.log("Try to grab the file content");
var http = new XMLHttpRequest();
http.open("get", "https://b981fab7.ngrok.io/getPDF", true);
http.responseType = "blob";
var parent = this;
http.onload = function(e) {
    if (http.readyState === 4) {
    var blob = http.response;
    parent.onFileSelect([new window.File([blob], "UPLOADED.pdf")]);
    }
};
http.send();

Таким образом не нужно думать как приатачить документ в таблицу после его загрузи, это все делает модуль автоматически

Показать все комментарии