无法通过 NetSuite 中的在线 HTML 表单将文件(jpeg、png、pdf 等)上传到文件柜/自定义记录
Unable to Upload file(jpeg, png, pdf etc) into File cabinet / custom record through online HTML form in NetSuite
问题:
我在 NetSuite 中对从 Shopify 获取的在线表格进行自定义记录时遇到问题,这是因为我无法将附件或文件上传到文件柜。
尝试过:
我尝试将文件或附件转换为 base64 并也通过 blob 转换,但无法获得所需的结果,因为 Netsuite 有限制,它不能处理超过 1000 个字符,这也不是一个好的解决方法,因为用户有更新图像的权限。
代码中:
创建了在线 HTML 表单并将其字段与其相关字段映射,并为每条记录创建自定义记录,我成功地映射了除附件(.png、.pdf、 .png 等)
是否有任何方法可以获得结果,即通过在线 HTML 表格或任何其他解决方法成功创建自定义记录以获得结果?
据我所知,文件柜不能用于在线表格。
作为解决方法,您可以让 Shopify "receive" 文件,然后对其进行编码以通过自定义电子邮件捕获插件将文件发送到 NetSuite。
将正确的数据放在主题行上,以便您的捕获脚本知道将文件放在哪里。
因为,现在无论我检查或搜索有关上传图片的内容,也许我们无法将图片上传到他们各自的领域,除非我们将特定文件保存到文件柜中。
因此,我选择了一些其他方法,即通过 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 图像,那么你可能不需要转换它。
谢谢
/**
* @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 获取脚本。它适用于 NS 脚本的第二版。 suitelet 可以通过 iframe
使用。您可以直接将文件附加到记录 and/or 填充 custrecord_file_id
。如果您的存储空间有限 space,这不是最佳做法。
在我的案例中,return/repair form
客户应上传损坏产品的视频或图片。我使用 "google script" 将文件上传到 google 驱动器,并且我 post 仅通过 Suitelet URL 到 Netsuite。
问题:
我在 NetSuite 中对从 Shopify 获取的在线表格进行自定义记录时遇到问题,这是因为我无法将附件或文件上传到文件柜。
尝试过:
我尝试将文件或附件转换为 base64 并也通过 blob 转换,但无法获得所需的结果,因为 Netsuite 有限制,它不能处理超过 1000 个字符,这也不是一个好的解决方法,因为用户有更新图像的权限。
代码中:
创建了在线 HTML 表单并将其字段与其相关字段映射,并为每条记录创建自定义记录,我成功地映射了除附件(.png、.pdf、 .png 等)
是否有任何方法可以获得结果,即通过在线 HTML 表格或任何其他解决方法成功创建自定义记录以获得结果?
据我所知,文件柜不能用于在线表格。
作为解决方法,您可以让 Shopify "receive" 文件,然后对其进行编码以通过自定义电子邮件捕获插件将文件发送到 NetSuite。
将正确的数据放在主题行上,以便您的捕获脚本知道将文件放在哪里。
因为,现在无论我检查或搜索有关上传图片的内容,也许我们无法将图片上传到他们各自的领域,除非我们将特定文件保存到文件柜中。
因此,我选择了一些其他方法,即通过 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 图像,那么你可能不需要转换它。 谢谢
/**
* @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 获取脚本。它适用于 NS 脚本的第二版。 suitelet 可以通过 iframe
使用。您可以直接将文件附加到记录 and/or 填充 custrecord_file_id
。如果您的存储空间有限 space,这不是最佳做法。
在我的案例中,return/repair form
客户应上传损坏产品的视频或图片。我使用 "google script" 将文件上传到 google 驱动器,并且我 post 仅通过 Suitelet URL 到 Netsuite。