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);
}
}
}