Following rule allow spliting one request with X entitlements to one per entitlement, this is done if target system API don't allow sending multi value for the entitlement attribute.



// import sailpoint.object.*;

 import sailpoint.object.Application;

            import java.util.Iterator;

            import java.util.ArrayList;

            import java.util.List;

            import sailpoint.object.ProvisioningPlan;

            import sailpoint.object.ProvisioningPlan.AccountRequest;

            import sailpoint.object.ProvisioningPlan.AccountRequest.Operation;

            import sailpoint.object.ProvisioningPlan.AttributeRequest;

            import sailpoint.object.Schema;


            appName= application.getName();

            //log.error("Sahar- ver 1.0.8 appName:"+appName);

                Application app = context.getObjectByName(Application.class,appName);

                Schema scheme =  app.getAccountSchema();

                List entitlementAttributeNames = scheme.getEntitlementAttributeNames();

                List allRequests = plan.getAccountRequests(appName);

                AccountRequest newCreateRequest = new AccountRequest();

                AccountRequest newModifyRequest = new AccountRequest();

               List attributeRequests = new ArrayList() ;

  

                  if(allRequests!=null)

                {

                        for (AccountRequest request : allRequests)

                        {

                                if(request.getOperation().equals(AccountRequest.Operation.Create))

                                {

                                        newCreateRequest = request.deepCopy(context);

                                         for(String attrName : entitlementAttributeNames)

                                        {

                                        //    log.error("Sahar- ent attrName:"+attrName);

                                            

                                            List aR  = new ArrayList() ;

                                            aR = request.getAttributeRequests(attrName);

                                            for(AttributeRequest a:aR){

                                               newModifyRequest.add(a);

                                            }

                                        //    log.error("Sahar- size #1:"+aR.size());

                                            attributeRequests.add(request.getAttributeRequest(attrName));

                                        }


                                        plan.remove(request);

                                       // break;

                                    //log.error("Sahar- size:"+attributeRequests.size());

                                    for(AttributeRequest attrRequest : attributeRequests)

                                    {

                                        newCreateRequest.remove(attrRequest);                        

                                    }    

                                    newModifyRequest.setApplication(newCreateRequest.getApplicationName());

                                    //log.error("Sahar-666");

                                    newModifyRequest.setOperation(AccountRequest.Operation.Modify);

                                    //log.error("sahar-777");

                                    //newModifyRequest.addAll(attributeRequests);

                                    //Check if needed following line 78 !!!!!!

                                    newModifyRequest.setNativeIdentity(newCreateRequest.getNativeIdentity());


                                    plan.add(newCreateRequest);

                                    plan.add(newModifyRequest);        

                                   // log.error("Sahar- printing req:");    

                                    String x =         newCreateRequest.toXml();                            

                                    String y =      newModifyRequest.toXml();

                                    //log.error("Sahar- create: "+ x);

                                    //log.error("Sahar- modify: "+ y);

                                }

                        }                                

                }