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.

How to get the length of the string field auto populated on another field and shown in list view without saving the form?

tyagisu
Mega Expert

Hi,

I need the list of managed document records where the length of the filename equals exactly 100 characters. So, I created a field "Length of file" on Revision table and captured the length of the file name in this field which is working fine as I used onload Client script. But I don't want to open each record and save it in order to appear on the list view.

I tried using fix script and before query business rule but none of them is working as expected.

Here is the code I used for Fix script

var gr = new GlideRecord("dms_document_revision");
var qry = 'attachment.file_nameISNOTEMPTY';
gr.addEncodedQuery(qry);
gr.query();
while (gr.next()) {
var field = gr.getDisplayValue('file_name').length;
if(field > 10)
{
  gr.setValue("u_length_of_file", field);
}
gr.updateMultiple();
}

find_real_file.png

1 ACCEPTED SOLUTION

Try this...

var gr = new GlideRecord("dms_document_revision");
gr.addEncodedQuery('attachment.file_nameISNOTEMPTY');
gr.query();
while (gr.next()) {
    var fieldLength = gr.attachment.getValue('file_name').length;
    if (fieldLength > 10) {
        gr.u_length_of_file = fieldLength;
    }
    gr.setWorkflow(false); // Do not run business rules
    gr.autoSysFields(false); // Do not update system fields
    gr.update();
}

View solution in original post

15 REPLIES 15

Mark Stanger
Giga Sage

You're close, but I think something like this might work better.

var gr = new GlideRecord("dms_document_revision");
gr.addEncodedQuery('attachment.file_nameISNOTEMPTY');
gr.query();
while (gr.next()) {
    var fieldLength = gr.attachment.file_name.length;
    if (fieldLength > 10) {
        gr.u_length_of_file = fieldLength;
    }
    gr.setWorkflow(false); // Do not run business rules
    gr.autoSysFields(false); // Do not update system fields
    gr.update();
}

Hi Mark,

 

Thanks for your quick reply. This is fix script didn't work though. I tried both gr.update() and gr.update Mutliple(), none of them actually worked.

var gr = new GlideRecord("dms_document_revision");
gr.addEncodedQuery('attachment.file_nameISNOTEMPTY');
gr.query();
while (gr.next()) {
var fieldLength = gr.attachment.file_name.length;
if (fieldLength > 10) {
gr.u_length_of_file = fieldLength;
}
gr.setWorkflow(false); // Do not run business rules
gr.autoSysFields(false); // Do not update system fields
gr.updateMultiple();
}

 

Thanks,

Su

Try this...

var gr = new GlideRecord("dms_document_revision");
gr.addEncodedQuery('attachment.file_nameISNOTEMPTY');
gr.query();
while (gr.next()) {
    var fieldLength = gr.attachment.getValue('file_name').length;
    if (fieldLength > 10) {
        gr.u_length_of_file = fieldLength;
    }
    gr.setWorkflow(false); // Do not run business rules
    gr.autoSysFields(false); // Do not update system fields
    gr.update();
}

Hi Mark,

Surprisingly, it worked for some of the records only. Most of them were not updated at all. That means we are close 🙂

 

Thanks again!

Su