Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Roles required to Create attachment

abhiyadav2001
Giga Expert

Hi,

 

I have a 'script include' which creates a .docx file as an attachment. I can execute that script as I am an admin ( I can create attachment through script). However, When I try this through 'non-admin' user, its not working at all !

 

Do I need to make any changes in Roles ? I can not assign admin role to that user.

I tried to create a new role to 'sys_attachment' . I want to make user 'able to create attachment'.

 

What could be the possible ways to achieve that ?

 

Thanks

Abhijeet

1 ACCEPTED SOLUTION

using below script include :



var CreateAttachmentDocwithParam = Class.create();


CreateAttachmentDocwithParam.prototype = Object.extendsObject(AbstractAjaxProcessor,{


      _initialize: function() {


      },


     


      addAttachment: function () {


      //       var task = new GlideRecord('incident');


      //       task.setLimit(1);


      //       task.query();


      //       task.next(); //Here is a random task record


              var result = this.newItem("result");


     


              var rec = new GlideRecord('incident');


              rec.initialize();


              rec.short_description = 'Test Creation of Onbording candidate attachment cotract';


              rec.caller_id.setDisplayValue('Abhijeet Yadav');


             


              var a = GlideSysAttachment();


              var Pssn     = this.getParameter('sysparm_ssn');


              var text     = this.getParameter('sysparm_text');


              var formType = this.getParameter('sysparm_formType');


              var gdt = new GlideDateTime();


      //       gs.log(gdt.getValue());


              var fileName = formType + gdt.getValue() +'.docx' ;


              //gs.log(text);


              rec.insert();


              result.setAttribute("message", rec.number );


     


              gs.log(rec.number);


              a.write(rec, fileName, "application/vnd.openxmlformats-officedoc", text );


      },


      type: 'CreateAttachmentDocwithParam'


});



=============================================



Calling it on button click from UI page. below is the code :



function createDoc()


{


var ga = new GlideAjax('CreateAttachmentDocwithParam');


ga.addParam('sysparm_name', 'addAttachment');



var name = ${jvar_candidateName};


alert (name);


ga.addParam('sysparm_ssn', 'sample SSN 101010');


element = document.getElementById('contract');


var text = element.textContent || element.innerText;


ga.addParam('sysparm_text', text);


ga.addParam('sysparm_formType', '1099_');



ga.getXML(parseAnswer);



//element = document.getElementById('contract');


//var text = element.textContent || element.innerText;


}



function parseAnswer(response) {


//   var answer = response.responseXML.documentElement.getAttribute("incNo");


// alert ('Document is attached to incident   : ' + answer );



var result = response.responseXML.getElementsByTagName("result");


var message = result[0].getAttribute("message");


alert('Document is attached to incident : ' +message);


}


View solution in original post

9 REPLIES 9

Pradeep Sharma
ServiceNow Employee
ServiceNow Employee

Hi Abhijeet,



I had the same issue long back but i am not sure what exactly i did and it worked.


Can you please check if the user has the write access to the table on which the file is attached?



Thanks


Pradeep Sharma


I am creating an attachment on 'incident' table. Should I check ACL for incident / sys_attachment ? Is there any way to assign write / create role to the intended 'user group' ?


Can you please paste your code here so that I can try it on any demo instance.


I'm sorry I really dont remember at this point of time what I modified and it worked for me.



`Pradeep Sharma.


using below script include :



var CreateAttachmentDocwithParam = Class.create();


CreateAttachmentDocwithParam.prototype = Object.extendsObject(AbstractAjaxProcessor,{


      _initialize: function() {


      },


     


      addAttachment: function () {


      //       var task = new GlideRecord('incident');


      //       task.setLimit(1);


      //       task.query();


      //       task.next(); //Here is a random task record


              var result = this.newItem("result");


     


              var rec = new GlideRecord('incident');


              rec.initialize();


              rec.short_description = 'Test Creation of Onbording candidate attachment cotract';


              rec.caller_id.setDisplayValue('Abhijeet Yadav');


             


              var a = GlideSysAttachment();


              var Pssn     = this.getParameter('sysparm_ssn');


              var text     = this.getParameter('sysparm_text');


              var formType = this.getParameter('sysparm_formType');


              var gdt = new GlideDateTime();


      //       gs.log(gdt.getValue());


              var fileName = formType + gdt.getValue() +'.docx' ;


              //gs.log(text);


              rec.insert();


              result.setAttribute("message", rec.number );


     


              gs.log(rec.number);


              a.write(rec, fileName, "application/vnd.openxmlformats-officedoc", text );


      },


      type: 'CreateAttachmentDocwithParam'


});



=============================================



Calling it on button click from UI page. below is the code :



function createDoc()


{


var ga = new GlideAjax('CreateAttachmentDocwithParam');


ga.addParam('sysparm_name', 'addAttachment');



var name = ${jvar_candidateName};


alert (name);


ga.addParam('sysparm_ssn', 'sample SSN 101010');


element = document.getElementById('contract');


var text = element.textContent || element.innerText;


ga.addParam('sysparm_text', text);


ga.addParam('sysparm_formType', '1099_');



ga.getXML(parseAnswer);



//element = document.getElementById('contract');


//var text = element.textContent || element.innerText;


}



function parseAnswer(response) {


//   var answer = response.responseXML.documentElement.getAttribute("incNo");


// alert ('Document is attached to incident   : ' + answer );



var result = response.responseXML.getElementsByTagName("result");


var message = result[0].getAttribute("message");


alert('Document is attached to incident : ' +message);


}