Query attachment from a Message record

Through the UI, I have created several Message records attached to a Support Ticket record, two of which have file attachments. I have been able to retrieve the ticket, and its related messages in Suitescript - which are correctly reporting hasAttachment as 'T' - but I cannot seem to access the attachments themselves. The documentation states that the attachments are a sublist called 'mediaitem' (or 'mediaitemlist', depending on where you look), but none of the sublist APIs have any success on those names.

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

The documentation and other online info is pretty sparse, so any help would be greatly appreciated.


Yeah, indeed there is a poor documentation. And mediaitem sublist did not help me either to give any meaningful result.

However, there is an alternate solution to it.

Create a saved search from UI on message record type.

Make sure you add a search column Attachments : Internal ID (ie using attachment fields...)

Once, this is done, run your search in suitescript as

var res = nlapiSearchRecord('message', 'YOUR_UI_SEARCH_ID', ARRAY_OF_ADDITIONAL_FITLTERS);
res[i].getValue('internalid', 'attachments')

This is how you can do it in Suitescript 2.0 . First search the message ids then search for the attachments related to those message ids. You can create the searches on the fly so no need for saved searches.

You can pass an array of internal ids of cases or messages if you want to save governance points depending on your scenario.

Note: The following code samples assumes that you loaded the search module as SEARCHMODULE.


Step 1 - This is how to get the message ids with attachments from a support case record (just change the type to support ticket):

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;
}

Then you just call the function like this:

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

Step 2 - Then you search the attachments using the message internal id with this function:

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;
}

Then you just call the function like this:

getAttachmentIdsFromMessage(messageInternalId); //Returns an array of attachment ids

UPDATE:

heard from NS after submitting a case. Appears this is not supported yet:

Hi Shane,

I hope you are doing well today.

Upon checking, the ability to access files attached to records are not yet supported in SuiteScript. You can check out SuiteScript Records Browser at SuiteAnswers ID 10511 for the full list of all available records in SuiteScripts and each's accessible sublist. Let me know if you have further questions.

Caleb Francisco | Customer Support NetSuite: Where Business is Going

Using search.createColumn with joins is the key it looks like. I ended up using quick code below this to get any $files (html) attached to $transaction (returnauthorization), which were in my case, supposed to be mediaitems on a return auth that I couldn't get via the record module in 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");
链接地址: http://www.djcxy.com/p/88518.html

上一篇: Oauth突然没有在iPhone上工作(只安装了FS应用程序)

下一篇: 从消息记录查询附件