Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Failure to substract GlideDateTime object

cbarlock
Kilo Guru

I have a table with a "suspended" column that is a Date/Time object.  I wrote a business rule that calls a function in a script include:

    deletable: function(current) {
        if (current.state == 'suspended') {
            var interval = gs.getProperty(x_ibmwa_gpra_polic.deleteSuspended);
			var suspended = current.suspended;
            var now = new GlideDateTime();
            if (GlideDateTime.subtract(suspended, now).getDayPart() < interval) {
                var msg = 'Cannot delete ' + current.getDisplayValue();
                msg += '.  Must be suspended for at least ' + interval + ' days.';
                gs.addErrorMessage(msg);
                current.setAbortAction(true);
            }
        }
    }

The subtract fails with:

org.mozilla.javascript.EvaluatorException: Can't find method com.glide.glideobject.GlideDateTime.subtract(com.glide.script.glide_elements.GlideElementGlideObject,com.glide.script.fencing.ScopedGlideDateTime).

Why is suspended a GlideElementGlideObject and not a ScopedGlideDateTime?  I found a reference to GlideElement.getRefRecord and tried:

var suspended = current.suspended.getRefRecord();

but the failure was the same.

1 ACCEPTED SOLUTION

Allen Andreas
Tera Patron

Hi,

Can you try using these lines for the suspended portion instead?

var suspended = current.suspended.getDisplayValue();
var suspendedTime = new GlideDateTime();
suspendedTime.setDisplayValue(suspended);
if (GlideDateTime.subtract(suspendedTime, now).getDayPart() < interval) {

Please mark reply as Helpful/Correct, if applicable. Thanks!


Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!

View solution in original post

6 REPLIES 6

Allen Andreas
Tera Patron

Hi,

Can you try using these lines for the suspended portion instead?

var suspended = current.suspended.getDisplayValue();
var suspendedTime = new GlideDateTime();
suspendedTime.setDisplayValue(suspended);
if (GlideDateTime.subtract(suspendedTime, now).getDayPart() < interval) {

Please mark reply as Helpful/Correct, if applicable. Thanks!


Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!

cbarlock
Kilo Guru

That works!  Thank you.  Why it is necessary if my suspended column is a Date/Time?

Hi,

I believe it's because you're passing the current record through to your script include as a function parameter and along the way the object type is changing to an element instead.

Anytime you're working with a field outside of the actual retrieval of that record, this can happen.

Please mark my above post as Helpful & Correct. Thank you and have a great weekend! 


Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!

cbarlock
Kilo Guru

That's very good to know!  Thank you again.