How to Convert CSV file any format to UTF-8 in Business Rule?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2024 09:26 PM
Hi All,
I have a requirement like if the user attached csv file (any format) for catalog item in service portal I need to convert into UTF-8 format. Here, basically after attaching CSV file I'm fetching the content and splitting and storing some content in a string variable (hash_attachment) using Business Rule here
without convert into UTF-8 the content is storing in string variable like this : �T�0�F�m�B�A�E�A�H�A�A�A�A�A�o�A�S�Q�d�h�S�g�A�A�C�g�C�d�B�2�F�K�m�q�L�Q�L�e�Q�C�C�Q�U..
Business Rule(Async) :
Is it possible to convert into UTF-8 any modification required in the above business rule or any other approach need to follow kindly help me.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2024 09:38 PM
Interesting scenario-
Can you try this once-
(function executeRule(current, previous /*null when async*/ ) {
var hash = "";
var attach = new GlideRecord("sys_attachment");
attach.addQuery("table_sys_id", current.sys_id);
attach.query();
if (attach.next()) {
var bytesContent = new GlideSysAttachment().getBytes(attach);
var decoder = new TextDecoder("utf-8");
var strData = decoder.decode(bytesContent);
try {
hash = strData.split("\n")[1].split(",")[2];
hash = hash.substring(0, hash.length() - 1);
} catch (e) {
// Handle error
}
}
current.variables.hash_attachment = hash;
current.setWorkflow(false);
current.update();
})(current, previous);
https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder/TextDecoder
https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB1118085
Regards,
Amit
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2024 11:00 PM
Hi Amit,
Thanks for the response I tried your modified code but didn't work it is storing as empty value in the variable
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2024 09:10 AM
Can you try this in background script and share the output so that I can debug it?
Regards,
Amit
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2024 09:54 PM
Give a try to below code:
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var hash = "";
// var source = "dbarker";
var attach = new GlideRecord("sys_attachment");
// attach.addQuery("table_name", "sc_req_item");
attach.addQuery("table_sys_id", current.sys_id); // current.sys_id gives sys_id of RITM
attach.query();
if (attach.next()) {
// gs.log("Has attachment", source);
var bytesContent = new GlideSysAttachment().getBytes(attach);
var strData = new GlideStringUtil().getString(bytesContent, "UTF-8"); // Convert bytes to string using UTF-8 encoding
try {
hash = strData.split("\n")[1].split(",")[2];
hash = hash.substring(0, hash.length() - 1);
} catch (e) {
// gs.log("Caught error", source);
}
}
current.variables.hash_attachment = hash;
current.setWorkflow(false);
current.update();
})(current, previous);
Please Mark ✅Correct if this solves your query and also mark 👍Helpful if you find my response worthy based on the impact.
Thanks