7

通过 UI,我创建了多个附加到支持票证记录的消息记录,其中两个具有文件附件。我已经能够在 Suitescript 中检索票证及其相关消息——这些消息正确地将 hasAttachment 报告为“T”——但我似乎无法访问附件本身。文档指出附件是一个名为“mediaitem”(或“mediaitemlist”,具体取决于您查看的位置)的子列表,但没有一个子列表 API 对这些名称有任何成功。

    var record = nlapiLoadRecord('message', 1092823, {recordmode: 'dynamic'});
    var itemCount = record.getLineItemCount('mediaitem');
    // returns -1

文档和其他在线信息非常稀少,因此我们将不胜感激。

4

3 回答 3

5

是的,确实有一个糟糕的文档。并且 mediaitem 子列表也没有帮助我给出任何有意义的结果。

但是,有一个替代解决方案。

根据消息记录类型从 UI 创建保存的搜索。

确保添加搜索列附件:内部 ID(即使用附件字段...)

一旦完成,在suitescript中运行您的搜索

var res = nlapiSearchRecord('message', 'YOUR_UI_SEARCH_ID', ARRAY_OF_ADDITIONAL_FITLTERS);
res[i].getValue('internalid', 'attachments')
于 2015-10-24T19:18:00.910 回答
0

这就是您可以在Suitescript 2.0中执行此操作的方式。首先搜索邮件 ID,然后搜索与这些邮件 ID 相关的附件。您可以即时创建搜索,因此无需保存搜索。

如果您想根据您的场景保存治理点,您可以传递案例或消息的内部 ID 数组。

注意:以下代码示例假定您将搜索模块加载为 SEARCHMODULE。


第 1 步 - 这是如何从支持案例记录中获取带有附件的消息 ID(只需将类型更改为支持票证):

function getMessageIdsFromCase(supportCaseId){
    var supportcaseSearchObj = SEARCHMODULE.create({
       type: "supportcase", //Change if you  need to
       filters: [
          ["internalid","anyof",supportCaseId], 
          "AND", 
          ["messages.hasattachment","is","T"]
       ],
       columns: [
          SEARCHMODULE.createColumn({
             name: "internalid",
             join: "messages"
          })
       ]
    });

    var resultsSet = supportcaseSearchObj.run();
    var results = resultsSet.getRange(0, 999);

    var messages = [];
    for (var i in results) {
        var result = results[i];
        var message = result.getValue(result.columns[0]);
        messages.push(message);
    }
    return messages;
}

然后你只需像这样调用函数:

getMessageIdsFromCase(caseInternalId); //Returns an array of message ids

第 2 步 - 然后使用带有此功能的消息内部 id 搜索附件:

function getAttachmentIdsFromMessage(messageInternalId){
    var messageSearchObj = SEARCHMODULE.create({
       type: "message",
       filters: [
          ["internalid","anyof",messageInternalId]
       ],
       columns: [
          SEARCHMODULE.createColumn({
             name: "internalid",
             join: "attachments"
          })
       ]
    });
    var resultsSet = messageSearchObj.run();
    var results = resultsSet.getRange(0, 999);

    var attachments = [];
    for (var i in results) {
        var result = results[i];
        var attachment = result.getValue(result.columns[0]);
        attachments.push(attachment);
    }

    return attachments;
}

然后你只需像这样调用函数:

getAttachmentIdsFromMessage(messageInternalId); //Returns an array of attachment ids
于 2017-01-21T01:07:50.087 回答
-1

更新:

提交案例后收到 NS 的回复。似乎尚不支持此功能:

嗨,谢恩,

我希望你今天过得很好。

经检查,SuiteScript 尚不支持访问附加到记录的文件的功能。您可以在 SuiteAnswers ID 10511 上查看 SuiteScript 记录浏览器,以获取 SuiteScripts 中所有可用记录的完整列表以及每个可访问的子列表。如果您还有其他问题,请告诉我。

迦勒弗朗西斯科 | 客户支持 NetSuite:业务发展方向

使用带有连接的 search.createColumn 是它看起来的关键。我最终使用下面的快速代码来获取附加到 $transaction (returnauthorization) 的任何 $files (html),在我的情况下,这应该是我无法通过 ss2 中的记录模块获得的返回身份验证的媒体项.0

var getHtmlFilesOnReturnAuth = function (return_auth_id, file_type) {
    var filters = [
        search.createFilter({name: "internalid", operator: "is", values: [return_auth_id]}),
        search.createFilter({name: "filetype", join: "file", operator: "is", values: [file_type]}),
    ];
    var images = [];
    search.create({
        type: "returnauthorization",
        filters: filters,
        columns: [
            search.createColumn({name: "internalid", summary: "group"}),
            search.createColumn({name: "internalid", join: "file", summary: "group"}),
            search.createColumn({name: "filetype", join: "file", summary: "group"}),
            search.createColumn({name: "name", join: "file", summary: "group"}),
        ]
    }).run().each(function (result) {
        if (result) {
            images.push({
                id: result.getValue({name: "internalid", join: "file", summary: "group"}),
                file_name: result.getValue({name: "name", join: "file", summary: "group"}),
                file_type: result.getValue({name: "filetype", join: "file", summary: "group"}),
            });
        }
        return true;
    });

    return images;
};

var images = getHtmlFilesOnReturnAuth("2134404", "HTMLDOC");
于 2017-01-24T19:11:53.237 回答