Setting field name via a Business Rule

RodHill11
Tera Contributor

Hi.

I was recently tasked with finding a way to populate a field on one form from another form.  After doing some research, I learned that setting up a business rule was the best way to achieve this.  On Form A, there is a tab named Audit that holds the Audit Engagement number.

 

Form A:

RodH58347840403_0-1749586513041.png

 

In the next section below, there's another tab named Remediation tasks.  The ask is this: when a user clicks the New button from the Remediation tasks, the Parent field from the Remediation task needs to be populated with the Audit engagement number.

 

RodH58347840403_1-1749587070002.png

 

I put together the following script but have not had any luck:

 

(function executeRule(current, previous /*null when async*/) {

    // Only run if the issue field is set and parent is not already set
    if (current.issue && !current.parent) {
        var issue = new GlideRecord('sn_grc_issue');
        if (issue.get(current.issue)) {
            // Set parent to the sys_id of the audit engagement referenced by the issue
            current.parent = current.issue.sn_audit_engagement;
			current.update();
        }
    }

})(current, previous);

 

When I run the script I get the following error:

Evaluator.evaluateString() problem: java.lang.RuntimeException: failed to coerce com.glide.script.fencing.ScopedGlideElement to desired type java.lang.String: com.glide.script.fencing.ScopedFunctionObjectTypeHandler.coerceFunctionArgument(ScopedFunctionObjectTypeHandler.java:180)
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:247)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:3081)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1721)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:907)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:137)
com.glide.caller.gen.sys_security_acl_4212039b1bb2e110b7b35284604bcbcd ➚.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:22)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:135)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:720)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:4501)
org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:151)
com.glide.script.ScriptCompiler.executeAndPublishMetric(ScriptCompiler.java:78)
com.glide.script.ScriptEvaluator.execute(ScriptEvaluator.java:464)
com.glide.script.ScriptEvaluator.evaluate(ScriptEvaluator.java:231)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:384)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:328)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScriptAsBoolean(GlideScopedEvaluator.java:482)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScriptAsBoolean(GlideScopedEvaluator.java:457)
com.glide.sys.security.AccessTerm.checkScriptWithoutInstrument(AccessTerm.java:865)
com.glide.sys.security.AccessTerm.checkScript0(AccessTerm.java:833)
com.glide.sys.security.AccessTerm.lambda$checkScript$0(AccessTerm.java:807)
com.glide.sys.security.data_filter.DataFilterDisableOnCurrentUtil.withDataFiltersOnRecordDisabled(DataFilterDisableOnCurrentUtil.java:40)
com.glide.sys.security.AccessTerm.checkScript(AccessTerm.java:806)
com.glide.sys.security.AccessTerm.evaluate0(AccessTerm.java:417)
com.glide.sys.security.AccessTerm.evaluate(AccessTerm.java:322)
com.glide.sys.security.AccessRule.processOr(AccessRule.java:321)
com.glide.sys.security.AccessRule.evaluate(AccessRule.java:200)
com.glide.sys.security.AccessRule.processSequential(AccessRule.java:332)
com.glide.sys.security.AccessRule.evaluate(AccessRule.java:203)
com.glide.sys.security.AccessRule.processAnd(AccessRule.java:306)
com.glide.sys.security.AccessRule.evaluate(AccessRule.java:197)
com.glide.sys.security.ACLAccessHandler.hasRightsToWithoutInstrument(ACLAccessHandler.java:84)
com.glide.sys.security.ACLAccessHandler.hasRightsTo(ACLAccessHandler.java:67)
com.glide.sys.security.ContextualSecurityManager.eval(ContextualSecurityManager.java:1306)
com.glide.sys.security.ContextualSecurityManager.hasRightsToImpl0(ContextualSecurityManager.java:1128)
com.glide.sys.security.ContextualSecurityManager.hasRightsToImpl(ContextualSecurityManager.java:1090)
com.glide.sys.security.ContextualSecurityManager.canAccess(ContextualSecurityManager.java:1065)
com.glide.sys.security.ContextualSecurityManager.canAccess(ContextualSecurityManager.java:1070)
com.glide.script.GlideElement.hasRightsTo(GlideElement.java:1280)
com.glide.script.GlideElement.checkRightsWithDerived(GlideElement.java:2978)
com.glide.script.GlideElement.canRead(GlideElement.java:1210)
com.glide.script.GlideRecordSimpleSerializer.canRead(GlideRecordSimpleSerializer.java:142)
com.glide.script.GlideRecordSimpleSerializer.serialize(GlideRecordSimpleSerializer.java:85)
com.glide.script.GlideRecordSimpleSerializer.serialize(GlideRecordSimpleSerializer.java:213)
com.glide.script.GlideRecordSimpleSerializer.serialize(GlideRecordSimpleSerializer.java:199)
com.glide.processors.xmlhttp.XMLGlideRecordSerializer.query(XMLGlideRecordSerializer.java:98)
com.glide.processors.xmlhttp.AJAXGlideRecord.query(AJAXGlideRecord.java:69)
com.glide.processors.xmlhttp.AJAXGlideRecord.process(AJAXGlideRecord.java:60)
com.glide.processors.xmlhttp.internal.XMLHttpRequestExecutor.process(XMLHttpRequestExecutor.java:110)
com.glide.processors.xmlhttp.internal.XMLHttpRequestExecutor.process(XMLHttpRequestExecutor.java:76)
com.glide.processors.xmlhttp.AJAXXMLHttpAggregator.process(AJAXXMLHttpAggregator.java:79)
com.glide.processors.XMLHttpProcessor.processJavaAJAX(XMLHttpProcessor.java:168)
com.glide.processors.XMLHttpProcessor.process(XMLHttpProcessor.java:121)
com.glide.processors.AProcessor.runProcessor(AProcessor.java:785)
com.glide.processors.AProcessor.processTransaction(AProcessor.java:328)
com.glide.processors.ProcessorRegistry.process0(ProcessorRegistry.java:187)
com.glide.processors.ProcessorRegistry.process(ProcessorRegistry.java:175)
com.glide.ui.GlideServletTransaction.process(GlideServletTransaction.java:58)
com.glide.sys.Transaction.run(Transaction.java:2998)
com.glide.ui.HTTPTransaction.run(HTTPTransaction.java:34)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
java.base/java.lang.Thread.run(Thread.java:840)

 

Exception while executing getSkillConfigObj from extension point: ConversionError: The undefined value has no properties.

 

Any help someone can provide would be greatly appreciated. 

Thanks.

 

 

1 ACCEPTED SOLUTION

Hi @RodHill11 ,

I don't think this error is coming from the BR

check the scripts of ACLs with sysid ( 4212039b1bb2e110b7b35284604bcbcd, cfae0a0fc31302004e44dccdf3d3ae63)

 

is parent value populated? with BR

 

see if there is any issue with those scripts

 

Please mark my answer as helpful/correct if it resolves your query.

Regards,
Chaitanya

View solution in original post

8 REPLIES 8

folusho
Tera Guru

@RodHill11 

 

It seems your line with 

current.parent = current.issue.sn_audit_engagement;

is faulty.. You are trying to assign a GlideElement object and not its value.

 

Please try this below:

I would suggest you replace the GlideElement "issue" with "gr" or something else that is not a keyword.

(function executeRule(current, previous /*null when async*/) {

    // Only run if the issue field is set and parent is not already set
    if (current.issue && !current.parent) {
        var gr = new GlideRecord('sn_grc_issue');
        if (gr.get(current.issue.toString())) {
            if (gr.sn_audit_engagement) {
                current.parent = gr.sn_audit_engagement.toString();
            }
        }
    }

})(current, previous);

 

Thanks @folusho  for your reply.  I tried but that did not work.  Also, I wanted to give a little more information.  I have the rule set to run before and I have the Insert button checked:

RodH58347840403_0-1749590498168.png

 

 

@RodHill11 

 

Lets put some logs in the business rule.

I assume you are no longer getting the initial error you mentioned ?

 

(function executeRule(current, previous /*null when async*/) {

    gs.info('[BR] Checking if issue exists and parent is not set...');
    
    if (current.issue && !current.parent) {
        gs.info('[BR] Issue found: ' + current.issue);

        var gr = new GlideRecord('sn_grc_issue');
        if (gr.get(current.issue.toString())) {
            gs.info('[BR] Issue record retrieved. Sys ID: ' + gr.sys_id);

            if (gr.sn_audit_engagement) {
                gs.info('[BR] Audit engagement found: ' + gr.sn_audit_engagement);
                current.parent = gr.sn_audit_engagement.toString();
            } else {
                gs.info('[BR] No audit engagement found on issue.');
            }
        } else {
            gs.info('[BR] Could not retrieve issue record with sys_id: ' + current.issue);
        }
    } else {
        gs.info('[BR] Skipping — either no issue or parent is already set.');
    }

})(current, previous);

 

 

Same error as before.  I inserted the updated script, reran it and got the following messages followed by the same stack trace:

 

 

WarningException while executing getSkillConfigObj from extension point: ConversionError: The undefined value has no properties.

sn_wwna

InformationSlow ACL cfae0a0fc31302004e44dccdf3d3ae63 for the path record/sn_audit_engagement/delete , time was: 21AccessTerm
WarningException while executing getSkillConfigObj from extension point: ConversionError: The undefined value has no properties.sn_wwna

Evaluator.evaluateString() problem: java.lang.RuntimeException: failed to coerce com.glide.script.fencing.ScopedGlideElement to desired type java.lang.String: com.glide.script.fencing.ScopedFunctionObjectTypeHandler.coerceFunctionArgument(ScopedFunctionObjectTypeHandler.java:180)
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:247)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:3081)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1721)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:907)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:137)
com.glide.caller.gen.sys_security_acl_4212039b1bb2e110b7b35284604bcbcd ➚.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:22)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:135)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:720)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:4501)
org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:151)
com.glide.script.ScriptCompiler.executeAndPublishMetric(ScriptCompiler.java:78)
com.glide.script.ScriptEvaluator.execute(ScriptEvaluator.java:464)
com.glide.script.ScriptEvaluator.evaluate(ScriptEvaluator.java:231)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:384)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:328)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScriptAsBoolean(GlideScopedEvaluator.java:482)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScriptAsBoolean(GlideScopedEvaluator.java:457)
com.glide.sys.security.AccessTerm.checkScriptWithoutInstrument(AccessTerm.java:865)
com.glide.sys.security.AccessTerm.checkScript0(AccessTerm.java:833)
com.glide.sys.security.AccessTerm.lambda$checkScript$0(AccessTerm.java:807)
com.glide.sys.security.data_filter.DataFilterDisableOnCurrentUtil.withDataFiltersOnRecordDisabled(DataFilterDisableOnCurrentUtil.java:40)
com.glide.sys.security.AccessTerm.checkScript(AccessTerm.java:806)
com.glide.sys.security.AccessTerm.evaluate0(AccessTerm.java:417)
com.glide.sys.security.AccessTerm.evaluate(AccessTerm.java:322)
com.glide.sys.security.AccessRule.processOr(AccessRule.java:321)
com.glide.sys.security.AccessRule.evaluate(AccessRule.java:200)
com.glide.sys.security.AccessRule.processSequential(AccessRule.java:332)
com.glide.sys.security.AccessRule.evaluate(AccessRule.java:203)
com.glide.sys.security.AccessRule.processAnd(AccessRule.java:306)
com.glide.sys.security.AccessRule.evaluate(AccessRule.java:197)
com.glide.sys.security.ACLAccessHandler.hasRightsToWithoutInstrument(ACLAccessHandler.java:84)
com.glide.sys.security.ACLAccessHandler.hasRightsTo(ACLAccessHandler.java:67)
com.glide.sys.security.ContextualSecurityManager.eval(ContextualSecurityManager.java:1306)
com.glide.sys.security.ContextualSecurityManager.hasRightsToImpl0(ContextualSecurityManager.java:1128)
com.glide.sys.security.ContextualSecurityManager.hasRightsToImpl(ContextualSecurityManager.java:1090)
com.glide.sys.security.ContextualSecurityManager.canAccess(ContextualSecurityManager.java:1065)
com.glide.sys.security.ContextualSecurityManager.canAccess(ContextualSecurityManager.java:1070)
com.glide.script.GlideElement.hasRightsTo(GlideElement.java:1280)
com.glide.script.GlideElement.checkRightsWithDerived(GlideElement.java:2978)
com.glide.script.GlideElement.canRead(GlideElement.java:1210)
com.glide.script.GlideRecordSimpleSerializer.canRead(GlideRecordSimpleSerializer.java:142)
com.glide.script.GlideRecordSimpleSerializer.serialize(GlideRecordSimpleSerializer.java:85)
com.glide.script.GlideRecordSimpleSerializer.serialize(GlideRecordSimpleSerializer.java:213)
com.glide.script.GlideRecordSimpleSerializer.serialize(GlideRecordSimpleSerializer.java:199)
com.glide.processors.xmlhttp.XMLGlideRecordSerializer.query(XMLGlideRecordSerializer.java:98)
com.glide.processors.xmlhttp.AJAXGlideRecord.query(AJAXGlideRecord.java:69)
com.glide.processors.xmlhttp.AJAXGlideRecord.process(AJAXGlideRecord.java:60)
com.glide.processors.xmlhttp.internal.XMLHttpRequestExecutor.process(XMLHttpRequestExecutor.java:110)
com.glide.processors.xmlhttp.internal.XMLHttpRequestExecutor.process(XMLHttpRequestExecutor.java:76)
com.glide.processors.xmlhttp.AJAXXMLHttpAggregator.process(AJAXXMLHttpAggregator.java:79)
com.glide.processors.XMLHttpProcessor.processJavaAJAX(XMLHttpProcessor.java:168)
com.glide.processors.XMLHttpProcessor.process(XMLHttpProcessor.java:121)
com.glide.processors.AProcessor.runProcessor(AProcessor.java:785)
com.glide.processors.AProcessor.processTransaction(AProcessor.java:328)
com.glide.processors.ProcessorRegistry.process0(ProcessorRegistry.java:187)
com.glide.processors.ProcessorRegistry.process(ProcessorRegistry.java:175)
com.glide.ui.GlideServletTransaction.process(GlideServletTransaction.java:58)
com.glide.sys.Transaction.run(Transaction.java:2998)
com.glide.ui.HTTPTransaction.run(HTTPTransaction.java:34)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
java.base/java.lang.Thread.run(Thread.java:840)