- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2019 04:31 AM
****I want to download selected files from incident instead of all could you please help with the script***
Solved! Go to Solution.
- Labels:
-
Incident Management
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-25-2019 07:44 AM
Hi Krishna,
So here is the updated UI page code which shows checkbox besides every file; you need to click the checkbox for which file to be downloaded
then click on the download attachments and it will download
UI Page Code:
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<g:evaluate jelly="true" object="true" var="jvar_jsonObj">
var recordSysId = RP.getWindowProperties().get('sysparm_sysID');
var arr = [];
var gr = new GlideRecord('sys_attachment');
gr.addQuery('table_sys_id', recordSysId);
gr.query();
while(gr.next()){
var jsonObj = {};
jsonObj.name = gr.getValue('file_name');
jsonObj.path = '/sys_attachment.do?sys_id=' + gr.getValue('sys_id');
arr.push(jsonObj);
}
arr;
</g:evaluate>
<j:choose>
<j:when test="${arr.length > 0}">
<table cellspacing="0" cellpadding="0" width="100%">
<th>File Name</th>
<th>Download Yes/No</th>
<j:forEach items="${jvar_jsonObj}" var="jvar_json">
<tr><td>${jvar_json.name}</td><td><input class="checkbox" type="checkbox" name="type" id="${jvar_json.path}"></input></td></tr>
<!-- <a href="${jvar_json.path}">Click here to download this file</a> -->
</j:forEach>
</table>
<button type="submit" value="download_attachments" onclick="downloadFiles()">Download Specific Attachments</button>
</j:when>
<j:otherwise>
<p>No attachments to display</p>
</j:otherwise>
</j:choose>
</j:jelly>
Client Script Code:
function downloadFiles(){
var selected = [];
$j("input:checkbox[name=type]:checked").each(function() {
selected.push($j(this).attr('id'));
});
for(var i=0;i<selected.length;i++){
var url = selected[i];
window.open(url);
}
}
Mark ✅ Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2019 09:27 AM
Hi Krishna,
So have the below approach
1) create a UI action which is client side
2) create an UI page and call this from UI action
3) send the record sys_id to the UI page
4) there create a html tabular structure with 2 columns
Name, File Name, Link
so user can download the attachments individually by clicking on that link
Mark ✅ Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-22-2019 11:31 PM
Hi Ankur,
Thanks for the rply.Could you please help with the script,So that i can try to achive my requirement.
Thanks,
Phani
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-23-2019 07:38 AM
Hi Krishna,
Here are the steps
1) create an UI action on incident table
Name: Show all Attachments & Download
Form button: true
Client: true
Onclick: openPage()
Script below:
function openPage(){
var gDialog = new GlideDialogWindow("show_attachments");
gDialog.setTitle("Display & Download Attachments");
gDialog.setSize(800,800); //Set the dialog size
gDialog.setPreference('sysparm_sysID', g_form.getUniqueValue());
gDialog.render();
}
screenshot below
2) Create an UI page
Name: show_attachments
HTML:
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<g:evaluate jelly="true" object="true" var="jvar_jsonObj">
var recordSysId = RP.getWindowProperties().get('sysparm_sysID');
var arr = [];
var gr = new GlideRecord('sys_attachment');
gr.addQuery('table_sys_id', recordSysId);
gr.query();
while(gr.next()){
var jsonObj = {};
jsonObj.name = gr.getValue('file_name');
jsonObj.path = '/sys_attachment.do?sys_id=' + gr.getValue('sys_id');
arr.push(jsonObj);
}
arr;
</g:evaluate>
<j:choose>
<j:when test="${arr.length > 0}">
<table cellspacing="0" cellpadding="0" width="100%">
<th>File Name</th>
<th>Path</th>
<j:forEach items="${jvar_jsonObj}" var="jvar_json">
<tr><td>${jvar_json.name}</td><td><a href="${jvar_json.path}">Click here to download this file</a></td></tr>
</j:forEach>
</table>
</j:when>
<j:otherwise>
<p>No attachments to display</p>
</j:otherwise>
</j:choose>
</j:jelly>
Testing: once user clicks on the UI Action; user sees the list of attachments and the link; they can then download whichever attachment they want one by one
1) when attachments are nor present
screenshot below
2) when incidents have attachments:
screenshot below
Mark ✅ Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-24-2019 01:09 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-24-2019 01:14 AM
Hi Krishna,
As part of this approach we are giving users the capability to download attachments 1 by 1
if you want something like below then you need to enhance the code further
1) have checkbox besides every attachment
2) have a button like download attachments
3) iterate over the attachments which are having checkbox as true
4) download only those one by one by opening the url
Mark ✅ Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader