JDBC Provisioning Rule Sample

Since this is your first time working on a JDBC Provisioning Rule, I’ll guide you through integrating your stored procedure for account creation, deploying the rule to ISC, and attaching it to your JDBC source.

  1. Writing the JDBC Provisioning Rule

Here’s how to integrate your stored procedure’s:
Example:

import java.sql.Connection;
  import java.sql.CallableStatement;
  import java.sql.SQLException;
  import java.util.List;
  import sailpoint.object.ProvisioningPlan;
  import sailpoint.object.ProvisioningPlan.AccountRequest;
  import sailpoint.object.ProvisioningPlan.AttributeRequest;
  import sailpoint.object.ProvisioningResult;

  public String getAttributeRequestValue(AccountRequest acctReq, String attribute) {
    if (acctReq != null) {
      AttributeRequest attrReq = acctReq.getAttributeRequest(attribute);
      if (attrReq != null) {
        return attrReq.getValue();
      }
    }
    return null;
  }

  ProvisioningResult result = new ProvisioningResult();
  CallableStatement statement = null;

  if (plan != null) {
    List accounts = plan.getAccountRequests();
    if (accounts != null && accounts.size() > 0) {
      for (AccountRequest account : accounts) {
        try {
          if (AccountRequest.Operation.Create.equals(account.getOperation())) {
            // Prepare the stored procedure call
            String procCall = "{call AppSource.dbo.genericsCreateAccount(?,?,?,?,?)}";
            statement = connection.prepareCall(procCall);

            // Set parameters based on your stored procedure
            String nativeIdentity = (String) account.getNativeIdentity(); 
            statement.setString(1, "NAMCK\\" + nativeIdentity); // @loginID
            statement.setString(2, nativeIdentity); // @acctName
            statement.setString(3, getAttributeRequestValue(account, "email")); 
            statement.setString(4, getAttributeRequestValue(account, "firstName")); 
            statement.setString(5, getAttributeRequestValue(account, "lastName")); 

            // Execute the stored procedure
            statement.execute();

            // Mark the operation as successful
            result.setStatus(ProvisioningResult.STATUS_COMMITTED);
          } else if (AccountRequest.Operation.Modify.equals(account.getOperation())) {
            // for Modify logic
            log.debug("Modify operation not yet implemented for: " + account.getNativeIdentity());
          } else if (AccountRequest.Operation.Delete.equals(account.getOperation())) {
            // for Delete logic
            log.debug("Delete operation not yet implemented for: " + account.getNativeIdentity());
          } else {
            log.debug("Unsupported operation: " + account.getOperation());
          }
        } catch (SQLException e) {
          result.setStatus(ProvisioningResult.STATUS_FAILED);
          result.addError(e);
          log.error("Provisioning failed: " + e.getMessage());
        } finally {
          if(statement != null) {
            statement.close();
          }
        }
      }
    }
  }

 return result;

2: Deploying the Rule to ISC

refer Deploying Connector Rules.

3: Attaching the Rule to Your JDBC Source

refer Attaching the JDBCProvision Rule for more on patching sources.

Hope this helps!

1 Like