Modify attributeRequest in a plan

Hi all,

I want to add the below attributeRequest if I encounter the attributerequest for “ZSCGEN:ABCD” in a Provisioning plan.

Example:
Plan:

<ProvisioningPlan nativeIdentity="brendainsull" targetIntegration="SAP-APP" trackingId="cd07c7c48aaaaa58db55476e9bc26b6">
  <AccountRequest application="SAP-APP" nativeIdentity="XXXX" op="Create">
    <AttributeRequest name="User Groups" op="Add" value="INTEGRATION"/>
    <AttributeRequest name="Roles" op="Add" value="ZSCGEN:ABCD"/>
    
I want to add the below attributes to the attributeRequest of "roles" in the above plan like the below:


<AttributeRequest name="Roles" op="Add" value="ZSCGEN:ABCD">
      <Attributes>
        <Map>
          <entry key="assignment" value="true"/>
          <entry key="endDate" value="2025-04-06"/>
        </Map>
      </Attributes>
    </AttributeRequest>

Hi @rishavghoshacc

Try out the below code:

  for (AccountRequest accountRequest : plan.getAccountRequests()) {
            for (AttributeRequest attributeRequest : accountRequest.getAttributeRequests()) {
                if ("Roles".equalsIgnoreCase(attributeRequest.getName()) && "ZSCGEN:ABCD".equals(attributeRequest.getValue())) {
                 
                    attributeRequest.setAssignment(true);
                    attributeRequest.setRemoveDate(Date.from(Instant.from(LocalDate.now().plusDays(1).atStartOfDay())));
                }
            }
        }
1 Like

@abartkowski This is giving removedate in the attribute. I need endDate

Do following:

for (ProvisioningPlan.AccountRequest accountRequest : plan.getAccountRequests()) {
            if ("SAP-APP".equals(accountRequest.getApplication())) {
                for (ProvisioningPlan.AttributeRequest attributeRequest : accountRequest.getAttributeRequests()) {
                    if ("Roles".equalsIgnoreCase(attributeRequest.getName()) && "ZSCGEN:ABCD".equals(attributeRequest.getValue())) {
                        Attributes<String, Object> attributes = new Attributes<>();
                        attributes.put("assignment", "true");
                        attributes.put("endDate", "2025-04-06");
                        attributeRequest.setArgs(attributes);
                    }
                }
            }
        }

Output:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE ProvisioningPlan PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<ProvisioningPlan>
  <AccountRequest application="SAP-APP" nativeIdentity="XXXX" op="Create">
    <AttributeRequest name="User Groups" op="Set" value="INTEGRATION"/>
    <AttributeRequest name="Roles" op="Set" value="ZSCGEN:ABCD">
      <Attributes>
        <Map>
          <entry key="assignment" value="true"/>
          <entry key="endDate" value="2025-04-06"/>
        </Map>
      </Attributes>
    </AttributeRequest>
  </AccountRequest>
</ProvisioningPlan>

1 Like

And if you need some extension - for testing purpose use the following code:

public void test() throws GeneralException {
        ProvisioningPlan plan = new ProvisioningPlan();

        ProvisioningPlan.AccountRequest accountRequest = new ProvisioningPlan.AccountRequest();
        accountRequest.setApplication("SAP-APP");
        accountRequest.setNativeIdentity("XXXX");
        accountRequest.setOperation(ProvisioningPlan.AccountRequest.Operation.Create);

        ProvisioningPlan.AttributeRequest groupAttributeRequest = new ProvisioningPlan.AttributeRequest();
        groupAttributeRequest.setName("User Groups");
        groupAttributeRequest.setOperation( ProvisioningPlan.Operation.Set);
        groupAttributeRequest.setValue("INTEGRATION");

        ProvisioningPlan.AttributeRequest roleAttributeRequest = new ProvisioningPlan.AttributeRequest();
        roleAttributeRequest.setName("Roles");
        roleAttributeRequest.setOperation( ProvisioningPlan.Operation.Set);
        roleAttributeRequest.setValue("ZSCGEN:ABCD");

        List<ProvisioningPlan.AttributeRequest> attributeRequests = new ArrayList<ProvisioningPlan.AttributeRequest>();
        attributeRequests.add(groupAttributeRequest);
        attributeRequests.add(roleAttributeRequest);
        accountRequest.setAttributeRequests(attributeRequests);

        plan.setAccountRequests(List.of(accountRequest));

        modifyAttributeRequests(plan);

        System.out.println(plan.toXml());
    }
    public static void modifyAttributeRequests(ProvisioningPlan plan) {
        
        for (ProvisioningPlan.AccountRequest accountRequest : plan.getAccountRequests()) {
            if ("SAP-APP".equals(accountRequest.getApplication())) {
                for (ProvisioningPlan.AttributeRequest attributeRequest : accountRequest.getAttributeRequests()) {
                    if ("Roles".equalsIgnoreCase(attributeRequest.getName()) && "ZSCGEN:ABCD".equals(attributeRequest.getValue())) {
                        Attributes<String, Object> attributes = new Attributes<>();
                        attributes.put("assignment", "true");
                        attributes.put("endDate", "2025-04-06");
                        attributeRequest.setArgs(attributes);
                    }
                }
            }
        }
    }
1 Like