BeforeProvisioning Rule error

Hello experts,

I am getting below error on the rule execution. Not sure what is the issue. Appreciate your help here. Rule is not throwing any error for enable and disable operations but only for create and modify operations

import sailpoint.object.*;
import sailpoint.object.Identity;
import sailpoint.object.ProvisioningPlan;
import sailpoint.object.ProvisioningPlan.AccountRequest;
import sailpoint.object.ProvisioningPlan.AttributeRequest;
import sailpoint.object.ProvisioningPlan.Operation;
import sailpoint.tools.Util;


    if(plan != null){
        for(AccountRequest accountRequest : plan.getAccountRequests()){
            if(accountRequest != null){
                //Create Operation
                if (accountRequest.getOperation().equals(ProvisioningPlan.AccountRequest.Operation.Create)){
                    log.info("Create Operation is getting executed");
                    for(AttributeRequest attrRequest : accountRequest.getAttributeRequests()){
                        if(attrRequest.getName().equalsIgnoreCase("ProfileId")){
                             String ProfileIdName = (String) attrRequest.getValue();
                            if(ProfileIdName.equalsIgnoreCase("00e4600")){
                                log.info("Request is for admin role");
                                accountRequest.add(new AttributeRequest("PermissionSet", ProvisioningPlan.Operation.Set, "LightningConsole"));
                            }else{
                                log.info("Request is for non-admin role");
                                accountRequest.add(new AttributeRequest("PermissionSet", ProvisioningPlan.Operation.Set, "Lightning_Console"));
                            }
                        }
                    }
                    log.info("Exiting from create operation");
                }
                //Modify Operation
                else if(accountRequest.getOperation().equals(ProvisioningPlan.AccountRequest.Operation.Modify)){
                    boolean hasRemoveOperation = false;
                    log.info("Modify Operation is getting executed");
                    for(AttributeRequest attrRequest : accountRequest.getAttributeRequests()){
                        if(attrRequest != null){
                            ProvisioningPlan.Operation operation = attrRequest.getOperation();
                            if(operation.equals(ProvisioningPlan.Operation.Add) && attrRequest.getName().equalsIgnoreCase("ProfileId")){
                                log.info("Entering Modify Operation - Add attribute"); 
                                boolean isactive = idn.getAccountAttributeBool(accountRequest.getApplicationName(), accountRequest.getNativeIdentity(), "IsActive");
                                if(!isactive){
                                    accountRequest.add(new AttributeRequest("IsActive", ProvisioningPlan.Operation.Set, "true"));
                                }           
                                String valueExists = idn.getAccountAttribute(accountRequest.getApplicationName(), accountRequest.getNativeIdentity(), "ManagedPackage");
                                log.info("managedPackage value is" + valueExists);
                                if(valueExists == null || valueExists.isEmpty()){
                                    accountRequest.add(new AttributeRequest("ManagedPackage", ProvisioningPlan.Operation.Set, "0504600"));
                                }                     
                            }
                            else if((operation.equals(ProvisioningPlan.Operation.Remove) || operation.equals(ProvisioningPlan.Operation.Revoke)) && attrRequest.getName().equalsIgnoreCase("ProfileId")){
                                log.info("Entering Modify Operation - remove attribute");
                                hasRemoveOperation = true;
                                break;
                            }
                        }
                    }
                    if(hasRemoveOperation){
                        //Remove modify account request
                        plan.remove(accountRequest);
                    
                        //create and add a new disable request
                        //AccountRequest disableRequest = new AccountRequest();
                        //disableRequest.add(new AttributeRequest("ManagedPackage", ProvisioningPlan.Operation.Set, ""));
                        //disableRequest.setOperation(AccountRequest.Operation.Disable);
                        //disableRequest.setNativeIdentity(accountRequest.getNativeIdentity());
                        //plan.add(disableRequest);
                        accountRequest.add(new AttributeRequest("ManagedPackage", ProvisioningPlan.Operation.Set, ""));
                        accountRequest.setOperation(AccountRequest.Operation.Disable);
                    }

                }
                //Disable Operation
                else if(accountRequest.getOperation().equals(ProvisioningPlan.AccountRequest.Operation.Disable)){
                    log.info("Entering disable Operation");
                    accountRequest.add(new AttributeRequest("ManagedPackage", ProvisioningPlan.Operation.Set, ""));
                }
                //Enable Operation
                else if(accountRequest.getOperation().equals(ProvisioningPlan.AccountRequest.Operation.Enable)){
                    String valueExists = idn.getAccountAttribute(accountRequest.getApplicationName(), accountRequest.getNativeIdentity(), "ManagedPackage");
                    log.info("managedPackage value is" + valueExists);
                    if(valueExists == null || valueExists.isEmpty()){
                        accountRequest.add(new AttributeRequest("ManagedPackage", ProvisioningPlan.Operation.Set, "05046"));
                    }
                }
                else{
                    log.info("Other account request operation");
                }
            }
            else{
                log.error("AccountRequest is null");
            }
        }
    }
    else{
        log.error("ProvisioningPlan is null");
    }

Please print the plan object immediately after the import statements and share the output here. You can sanitize or replace any account-specific information before sharing.

For example, you may add a line like:

log.error("Provisioning Plan XML: " +plan.toXml());

This will capture the full plan details for troubleshooting.

Hi @ganesh-atikes ,

For this I need to deploy the rule again which will cost. I know this will give us more info.

@tyler_mairose @colin_mckibben Is this something that you can help?

You can print the plan by using connector rule too.

HI @suresh4iam , can you brief it? Means creating connector rule and patching it to source just to see the plan?

Also, why the rule is not throwing any error for ENABLE and DISABLE operations and working fine?