JDBC Provisioining Rule for create operation

Hi,

How can we get AccountID in the provisioningPlan JDBC Provisioining Rule for create operation. Below is my code. “ID” has been used as AccountID of the source. I cant read that value using getAttributeRequestValue

   import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.PreparedStatement;
  import java.sql.SQLException;
  import java.sql.Types;
  import java.util.List;
  import sailpoint.api.SailPointContext;
  import sailpoint.connector.JDBCConnector;
  import sailpoint.object.Application;
  import sailpoint.object.ProvisioningPlan;
  import sailpoint.object.ProvisioningPlan.AccountRequest;
  import sailpoint.object.ProvisioningPlan.AttributeRequest;
  import sailpoint.object.ProvisioningPlan.PermissionRequest;
  import sailpoint.object.ProvisioningResult;
  import sailpoint.object.Schema;
  
  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();
  PreparedStatement statement;

  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() ) ) {
        
            statement = connection.prepareStatement("insert into LDAPUsers (ID,Email,FirstName,LastName,CreatedDate) values (?,?,?,?,CURRENT_TIMESTAMP)" );
			statement.setString ( 1, getAttributeRequestValue(account,"ID") );
            statement.setString ( 2, getAttributeRequestValue(account,"Email") );
            statement.setString ( 3, getAttributeRequestValue(account,"FirstName") );
            statement.setString ( 4, getAttributeRequestValue(account,"LastName") );
            statement.executeUpdate();


            result.setStatus( ProvisioningResult.STATUS_COMMITTED );

          }  
        }
        catch( SQLException e ) {
          result.setStatus( ProvisioningResult.STATUS_FAILED );
          result.addError( e );
        }
        finally {
          if(statement != null) {
            statement.close();
          }
        }
      }
    }
  }

  return result;

Hi Majula,

Can you please try like below

import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.PreparedStatement;
  import java.sql.SQLException;
  import java.sql.Types;
  import java.util.List;
  import sailpoint.api.SailPointContext;
  import sailpoint.connector.JDBCConnector;
  import sailpoint.object.Application;
  import sailpoint.object.ProvisioningPlan;
  import sailpoint.object.ProvisioningPlan.AccountRequest;
  import sailpoint.object.ProvisioningPlan.AttributeRequest;
  import sailpoint.object.ProvisioningPlan.PermissionRequest;
  import sailpoint.object.ProvisioningResult;
  import sailpoint.object.Schema;
  
  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();
  PreparedStatement statement;

  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() ) ) {
        
            statement = connection.prepareStatement("insert into LDAPUsers (ID,Email,FirstName,LastName,CreatedDate) values (?,?,?,?,CURRENT_TIMESTAMP)" );
	    **statement.setString ( 1, account.getNativeIdentity() );**
            statement.setString ( 2, getAttributeRequestValue(account,"Email") );
            statement.setString ( 3, getAttributeRequestValue(account,"FirstName") );
            statement.setString ( 4, getAttributeRequestValue(account,"LastName") );
            statement.executeUpdate();


            result.setStatus( ProvisioningResult.STATUS_COMMITTED );

          }  
        }
        catch( SQLException e ) {
          result.setStatus( ProvisioningResult.STATUS_FAILED );
          result.addError( e );
        }
        finally {
          if(statement != null) {
            statement.close();
          }
        }
      }
    }
  }

  return result;

You may need to wrap the method account.getNativeIdentity() with (String ) depending upon your table schema.

Please let me know if that helps.

Thank You.
Regards
Vikas.

2 Likes

Thanks Vikas… Working!!

1 Like