Make an condition to skip Provisioning Form

Version 8.4

I would like to ask about the behavior of the Provisioning Form. Currently, I’m working on creating an update form for one of my entitlements called Support Group, which requires certain data before creation.

However, I’ve noticed that the form always appears whenever I perform an account update, such as removing an entitlement or submitting an access request for a different entitlement.

Is there a way to conditionally skip this form in certain scenarios? For example, is there a variable or configuration setting that allows bypassing the form under specific conditions?

We have attribute as required or review required. Did you try unchecking those variable and gave a try??

1 Like

Hi @naveenkumar3 , yes it is, I tried to uncheck the field, and now it’s bypass even I want to show it on adding support group casae

you can add a condition rule to your provisioning form, to skip. Something like this below?? can you try

<Form name="YourProvisioningForm">
    <Section>
        <Field displayName="Field1">
            <Attributes>
                <Map>
                    <entry key="hidden">
                        <value>
                            <Script>
                                // Check if it's a remove operation
                                return "Remove".equals(op);
                            </Script>
                        </value>
                    </entry>
                </Map>
            </Attributes>
        </Field>
    </Section>
</Form>

1 Like

Hi @naveenkumar3 , I tried and I got this error

Caused by: org.apache.bsf.BSFException: BeanShell script error: bsh.EvalError: Sourced file: inline evaluation of: ``return "Remove".equals(op);'' : Undefined argument: op  : at Line: 1 : in file: inline evaluation of: ``return "Remove".equals(op);'' : ( op )

I just gave an example to you. don’t use it like that. Give me your form code/xml, I will make the changes, and share it to you.

Hi @naveenkumar3 , Sorry for my misunderstand, this is my example field, I don’t know how can I use any variable or how to code to get the operation that we are doing right now, If I know how to check it maybe I can go to the next step

        <Field displayName="Name" dynamic="true" multi="true" name="name" postBack="true" required="true" type="string">
          <Attributes>
            <Map>
              <entry key="hidden"/>
              <entry key="readOnly" value="true"/>
            </Map>
          </Attributes>
  </Field>

can you use the below code and try it.

<Field displayName="Name" dynamic="true" multi="true" name="name" postBack="true" required="true" type="string">
    <Attributes>
        <Map>
            <entry key="hidden">
                <value>
                    <Script>
                        import sailpoint.object.ProvisioningPlan;
                        import sailpoint.object.ProvisioningPlan.AccountRequest;
                        
                        if (plan != null) {
                            for (AccountRequest accReq : plan.getAccountRequests()) {
                                if (ProvisioningPlan.AccountRequest.Operation.Remove.equals(accReq.getOperation())) {
                                    return true;
                                }
                            }
                        }
                        return false;
                    </Script>
                </value>
            </entry>
            <entry key="readOnly" value="true"/>
        </Map>
    </Attributes>
</Field>

Hi @naveenkumar3 , I tried your code, but still got this error, the error told me plan is undefined variable

Caused by: org.apache.bsf.BSFException: BeanShell script error: bsh.EvalError: Sourced file: inline evaluation of: ``import sailpoint.object.ProvisioningPlan;                         import sailpoi . . . '' : Attempt to resolve method: getAccountRequests() on undefined variable or class name: plan : at Line: 5 : in file: inline evaluation of: ``import sailpoint.object.ProvisioningPlan;                         import sailpoi . . . '' : plan .getAccountRequests ( )
 BSF info: script at line: 0 column: columnNo
        at bsh.util.BeanShellBSFEngine.eval(BeanShellBSFEngine.java:202) ~[bsh-2.1.8.jar:2.1.8 2018-10-02 08:36:04]
        at org.apache.bsf.BSFManager$5.run(BSFManager.java:445) ~[bsf.jar:?]
        at java.security.AccessController.doPrivileged(AccessController.java:569) ~[?:?]
        ... 90 more
2025-10-15T14:29:34,860 ERROR http-nio-0.0.0.0-8080-exec-6 rest.ui.jaxrs.GeneralExceptionMapper:29 - Uncaught JAX-RS exception.
sailpoint.tools.GeneralException: Attempt to resolve method: getAccountRequests() on undefined variable or class name: plan : at Line: 5

@fewthiraphat

Add an empty check also when checking for null. And before that, try to print the plan in loggers and check how the plan looks.

The error is due to , beacuse plan is not directly available or is not a ProvisioningPlan object in the form field context. Let’s try this by accessing it through the project .

Can you try this one, try to add loggers as well,.

<Field displayName="Name" dynamic="true" multi="true" name="name" postBack="true" required="true" type="string">
    <Attributes>
        <Map>
            <entry key="hidden">
                <value>
                    <Script>
                        import sailpoint.object.ProvisioningPlan;
                        import sailpoint.object.ProvisioningPlan.AccountRequest;
                        
                        if (project != null && project.getMasterPlan() != null) {
                            ProvisioningPlan masterPlan = project.getMasterPlan();
                            if (masterPlan.getAccountRequests() != null) {
                                for (AccountRequest accReq : masterPlan.getAccountRequests()) {
                                    if (ProvisioningPlan.AccountRequest.Operation.Remove.equals(accReq.getOperation())) {
                                        return true;
                                    }
                                }
                            }
                        }
                        return false;
                    </Script>
                </value>
            </entry>
            <entry key="readOnly" value="true"/>
        </Map>
    </Attributes>
</Field>

Hi @naveenkumar3 , I tried and still got the error, I tried to log and found the project variable also be null :cry:

can you share me the logger, what it is printing?? I want to see it, if I know what is is printing, it’s very easy to put it in the code.

I think the issue is that it is not able to find project or plan variable which is causing the issue and is throwing error. I will suggest the 2 solutions 2 you , use it and tell me which one worked.

<Field displayName="Test Show" multi="true" name="testShow" postBack="true" required="true" type="string">
<Attributes>
<Map>
<entry key="hidden" value="false"/>
<entry key="readOnly" value="true"/>
</Map>
</Attributes>
</Field>

2nd one is below in the workflow before your form step

<Step name="Check Operation">
<Script>
<Source>
import sailpoint.object.ProvisioningPlan;

    boolean skipForm = false;
    if (plan != null && plan.getAccountRequests() != null) {
        for (AccountRequest req : plan.getAccountRequests()) {
            if ("Remove".equals(req.getOperation().toString())) {
                skipForm = true;
                break;
            }
        }
    }
    workflow.put("skipProvisioningForm", skipForm);
</Source>
``` ```

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.