- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-23-2017 03:58 AM
Hi,
I'm writing a function in a script include that exports me some data and adds it as an Attachment to a record.
Example Code is like this
var data = "Name;Firstname;Phone";
data += "\n";
data += "Bauer;Sven;+492408xxx";
data += "\n";
data += "Meier;Karl-Heinz;+492408xxx";
data += "\n";
data += "Müller;Joachim;+492408xxx";
var company = new GlideRecord('core_company');
company.get('ee4fab735f6512006d8ddb765a069c99');
var attachment = new GlideSysAttachment();
var newFile = attachment.write(company, 'Telefonliste.csv', 'text/csv', data);
My Problem now is that the Attachment is encoded in UTF-8 but without BOM.
This makes the Umlaut 'ü' to not be shown correctly in Excel.
Any Ideas how to change the Enocoding to ANSI or add the bom-Marker?
Sven
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-12-2018 10:57 PM
Hi Sven,
I just had the same issue. Unfortunately UTF-8 hates all special characters, even if this encoding should happily display them.
I have tried encoded/decoding into UTF-8 characters, without success.
But I have some good news, and this may be a little hacky but it works for me:
Add "\uFEFF" right at the start of the content.
This is the character encoding for BOM.
So in your case:
var data = "\uFEFFName;Firstname;Phone";
data += "\n";
data += "Bauer;Sven;+492408xxx";
data += "\n";
data += "Meier;Karl-Heinz;+492408xxx";
data += "\n";
data += "Müller;Joachim;+492408xxx";
var company = new GlideRecord('core_company');
company.get('ee4fab735f6512006d8ddb765a069c99');
var attachment = new GlideSysAttachment();
var newFile = attachment.write(company, 'Telefonliste.csv', 'text/csv', data);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-22-2022 03:18 AM
This works like charm! Thanks for the great solution, helped a lot!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-08-2018 07:35 AM
Hello all,
Does anyone mind sharing what version of ServiceNow they are running? I am trying to accomplish something similar but I am receiving the following error:
Can't find method com.glide.ui.SysAttachment.write
I thought maybe I had typed something incorrectly so I copied the code above, changed the record sys_id, and it still gives the same error:
Javascript compiler exception: Can't find method com.glide.ui.SysAttachment.write(string,string,string,org.mozilla.javascript.ConsString). (null.null.script; line 12) in: var data = "\uFEFFName;Firstname;Phone"; data += "\n"; data += "Bauer;Sven;+492408xxx"; data += "\n"; data += "Meier;Karl-Heinz;+492408xxx"; data += "\n"; data += "Müller;Joachim;+492408xxx"; var company = "a8b7f3880ff013000da306bce1050e01"; var attachment = new GlideSysAttachment(); var newFile = attachment.write(company, 'Telefonliste.csv', 'text/csv', data);
I am running Jakarta Patch 6. Has anyone seen this error? Any ideas why it's failing?
Thanks,
Sarah
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-08-2018 07:48 AM
Hi Sarah,
I'm running Jakarta Patch 6 as well and get the same Error while running in Scope.
SysAttachment.write is only available in global scope. You need to run your script in global Scope.
Maybe a little tricky to run global Scripts out of scoped activities...
Regards
Sven
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-08-2018 07:58 AM
Sven,
Thanks for the quick reply! I read the doc article and saw where it mentioned Scoped a few times. I was actually trying to write the contents to a requested item, which is global. I couldn't make sense of why it wasn't working globally if the API was defined by ServiceNow themselves.
To start with, I changed as little as I could in the example code to try an eliminate my own lack of knowledge. Looks like I still caused my own issue... I change the sys_id value to match what was provided and then entered the sys_id in the get statement and that WORKED! Here's what I used and the attachment was created and added to the requested item.
var emailStr = '';
emailStr += 'To: \n';
emailStr += 'Subject: \n';
emailStr += 'From: \n';
emailStr += 'abcdefghijklmnopqrstuvwxyz';
gs.print('\n\n**emailStr**\n' + emailStr + '\n**emailStr**\n');
var ritm = new GlideRecord('sc_req_item');
ritm.get('a8b7f3880ff013000da306bce1050e01'); //RITM0010069
var attachment = new GlideSysAttachment();
var newFile = attachment.write(ritm, 'email.txt', 'text/plain', emailStr);
I looked at this all day yesterday and was stuck! Thanks for the input 🙂
Sarah