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.
- 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;
- For details on inputs (connection, plan) and operations, see the JDBC Provisioning Rule documentation.
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!