Nano Hash - криптовалюты, майнинг, программирование

Невозможно загрузить файл (jpeg, png, pdf и т. Д.) В файловый кабинет / пользовательскую запись через онлайн-форму HTML в NetSuite

Проблема:

У меня возникла проблема при создании пользовательской записи онлайн-формы, которую я получаю из Shopify в NetSuite, и это происходит из-за того, что я не могу загрузить вложение или файл в картотечный шкаф.

Пробовал:

Я попытался преобразовать файл или вложение в base64, а также через blob, но не смог получить желаемый результат, потому что у Netsuite есть ограничения, заключающиеся в том, что он не может обрабатывать более 1000 символов, и это также не лучший обходной путь, поскольку у пользователя есть привилегия обновить изображение.

В коде:

Создал онлайн-форму HTML и сопоставил их поле со связанным полем и создал настраиваемую запись для каждой записи, и я успешно могу сопоставить все поля, кроме вложения (.png, .pdf, .png и т. Д.)

Есть ли способ получить результат, т.е. успешно создать настраиваемую запись с помощью онлайн-формы HTML или любого другого обходного пути для получения результата?


Ответы:


1

Ибо, теперь, что бы я ни проверял или искал в отношении загружаемого изображения, возможно, мы не сможем загрузить изображение в соответствующее поле до тех пор, пока не сохраним конкретный файл в картотеке.

Итак, я выбираю другой метод, который заключается в прохождении suitelet и затем POST той же формы после сохранения файла в картотеке в соответствующее поле.

Вот мой обходной код:

var dataBody = JSON.parse(request.getBody());
nlapiLogExecution("debug", "POST BLOCK", 'dataBody = ' + JSON.stringify(dataBody));
var file_folder = '2442342';
var contents = dataBody.imgdata;
var fileType = dataBody.fileType;
var date = new Date();
var newDate = date.getMilliseconds() + date.getTime();
var type = '';
var ext = '';
if ((fileType == 'plain') || (fileType == 'PLAIN')) {
    type = 'PLAINTEXT';
    ext = 'txt';
}
if ((fileType == 'pdf') || (fileType == 'PDF')) {
    type = 'PDF';
    ext = 'pdf';
}
if ((fileType == 'png') || (fileType == 'PNG')) {
    type = 'PNGIMAGE';
    ext = 'png';
}
if ((fileType == 'jpeg') || (fileType == 'JPEG')) {
    type = 'JPGIMAGE';
    ext = 'jpeg';
}
if ((fileType == 'jpg') || (fileType == 'JPG')) {
    type = 'JPGIMAGE';
    ext = 'jpg';
}

var name = newDate + '.' + ext;
nlapiLogExecution("debug", "POST BLOCK", 'File Type: ' + type);
try {
    if (type) {
        var uploadFile = nlapiCreateFile(name, type, contents);
        uploadFile.setFolder(file_folder);
        var FileId = nlapiSubmitFile(uploadFile);
        nlapiLogExecution("debug", "POST BLOCK", 'Image File ID: ' + FileId);
    }
    if (FileId) {
        warr.setFieldValue('custrecord_file_id', FileId);
    }
} catch (err) {
    nlapiLogExecution("debug", "POST BLOCK", 'Error: ' + err);
}

Надеюсь, это поможет другим. И еще одна вещь, которую вам нужно расшифровать при сохранении в файловом шкафу, но если вы полностью измените тип файла на изображение jpg, вам может не потребоваться его преобразование. Спасибо

23.08.2019

2
/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
define(['N/ui/serverWidget', 'N/record', 'N/runtime', 'N/file', 'N/log'],

function(serverWidget, record, runtime, file, log) {

    /**
     * Definition of the Suitelet script trigger point.
     *
     * @param {Object} context
     * @param {ServerRequest} context.request - Encapsulation of the incoming request
     * @param {ServerResponse} context.response - Encapsulation of the Suitelet response
     * @Since 2015.2
     */
    function onRequest(context) {
        if(context.request.method === 'GET'){
            var formObj = serverWidget.createForm({
                title: 'Attach Multiple Files'
            });

            var userId = runtime.getCurrentUser().id;

            //User Name
            var user = formObj.addField({
                id: 'custpage_suitelet_user',
                type: serverWidget.FieldType.SELECT,
                source: 'employee',
                value: userId,
                label: 'USER'
            });
            user.defaultValue = userId;

            //File fields
            formObj.addField({
                id: 'custpage_suitelet_file1',
                type: serverWidget.FieldType.FILE,
                label: 'File 1'
            });
            formObj.addField({
                id: 'custpage_suitelet_file2',
                type: serverWidget.FieldType.FILE,
                label: 'File 2'
            });
            formObj.addField({
                id: 'custpage_suitelet_file3',
                type: serverWidget.FieldType.FILE,
                label: 'File 3'
            });

            formObj.addSubmitButton({label: 'Submit'});
            formObj.addResetButton({label: 'Reset'});

            context.response.writePage(formObj);
        }
        else{
            var userId = runtime.getCurrentUser().id;

            var file1 = context.request.files['custpage_suitelet_file1'];
            var file2 = context.request.files['custpage_suitelet_file2'];
            var file3 = context.request.files['custpage_suitelet_file3'];

            file1.folder = 624; //folder internal ID
            file2.folder = 624; //folder internal ID
            file3.folder = 624; //folder internal ID

            var id1 = file1.save();
            var id2 = file2.save();
            var id3 = file3.save();

            record.attach({
                record: {
                    type: 'file',
                    id: id1
                },
                to: {
                    type: 'employee',
                    id: userId
                    }
            });
            record.attach({
                record: {
                    type: 'file',
                    id: id2
                },
                to: {
                    type: 'employee',
                    id: userId
                    }
            });
            record.attach({
                record: {
                    type: 'file',
                    id: id3
                },
                to: {
                    type: 'employee',
                    id: userId
                    }
            });

            var formObj = serverWidget.createForm({
                title: 'File/s attached!'
            });
            context.response.writePage(formObj);
        }
    }

    return {
        onRequest: onRequest
    };

});

Я получаю сценарий из SuiteAnswers . Это для 2-й версии скрипта NS. Люкслет можно использовать через iframe. Вы можете напрямую прикрепить файл к записи и / или заполнить custrecord_file_id. Это не лучшая практика, если у вас ограниченное пространство для хранения.

В моем случае для return/repair form, где покупатель должен загрузить видео или изображение поврежденного продукта. Я использовал "скрипт Google" для загрузки файла на диск Google и отправляю только URL-адрес в Netsuite через Suitelet.

29.08.2019

3

Насколько я могу судить, картотека недоступна для онлайн-форм.

В качестве обходного пути вы можете сделать так, чтобы Shopify «получил» файл, а затем закодировал его для отправки файла в NetSuite через настраиваемый плагин для захвата электронной почты.

Укажите правильные данные в строке темы, чтобы ваш сценарий захвата знал, куда поместить файл.

09.08.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..