Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Attachment to Base64 Conversion in Scoped App

supriya pratapa
Tera Guru

I want to transfer attachment from ServiceNow to third part in Base64 format in scoped application. Below is my script and the error is "Scope does not have read access to table sys_attachment". I am trying this in custom action(flow designer)

(function execute(inputs, outputs) {

    outputs.invoicecase_number = '';
    outputs.file_name = '';
    outputs.file_type = '';
    outputs.base64_output = '';

    // Get the AP Case record
    var caseGR = new GlideRecord('sn_ap_cm_ap_case');
    if (caseGR.get(inputs.invoice_number_sysid)) {

        outputs.invoicecase_number = caseGR.getValue('number');

        // Use GlideSysAttachment ONLY (no sys_attachment table query)
        var gsa = new GlideSysAttachment();
        var att = gsa.getAttachment('sn_ap_cm_ap_case', inputs.invoice_number_sysid);

        // Fetch the first attachment
        if (att.next()) {
            outputs.file_name = att.getFileName();
            outputs.file_type = att.getContentType();

            // Get bytes from attachment using sys_id
            var bytes = gsa.getBytes(att.getSysID());
            outputs.base64_output = GlideStringUtil.base64Encode(bytes);
        }
    }

})(inputs, outputs);

 

 

@Ankur Bawiskar  Please help with this

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron

@supriya pratapa 

2 approaches

1) create custom flow action in global scope and call it from your flow in scoped app

OR

2) ensure you add Cross Scope Privilege record so that sys_attachment table can be allowed to READ from your scope. you need to create this record in your custom scope

55.png

Also for scoped app this is small code to get base64

Your script won't work in scoped app as getBytes() is not supported

var gr = new GlideRecord('sys_attachment');
gr.get('3fd6017407d3dc50540bf2508c1ed027');

var sysAtt = new GlideSysAttachment();

var base64Data = sysAtt.getContentBase64(gr);

gs.info(base64Data);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

1 REPLY 1

Ankur Bawiskar
Tera Patron

@supriya pratapa 

2 approaches

1) create custom flow action in global scope and call it from your flow in scoped app

OR

2) ensure you add Cross Scope Privilege record so that sys_attachment table can be allowed to READ from your scope. you need to create this record in your custom scope

55.png

Also for scoped app this is small code to get base64

Your script won't work in scoped app as getBytes() is not supported

var gr = new GlideRecord('sys_attachment');
gr.get('3fd6017407d3dc50540bf2508c1ed027');

var sysAtt = new GlideSysAttachment();

var base64Data = sysAtt.getContentBase64(gr);

gs.info(base64Data);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader