Skip to Content
0
Former Member
Jan 29, 2009 at 07:07 PM

MDM Java API - Record.GetCheckoutStatus

43 Views

Hi all, the code in this thread is used to CheckIn records that the user passes to the java app. The code checks if the records are checked out first by using the function getCheckoutStatus. The issue is that altough the record is checkedOut, the function is returning 0, meaning the record is not checked out.

I am using the Inquera sample repository for this test...

I think this is a bug, but want to check with all you first.

import com.sap.mdm.commands.AuthenticateUserSessionCommand;
import com.sap.mdm.commands.CommandException;
import com.sap.mdm.commands.CreateUserSessionCommand;
import com.sap.mdm.commands.DestroySessionCommand;
import com.sap.mdm.commands.GetRepositoryRegionListCommand;
import com.sap.mdm.data.Record;
import com.sap.mdm.data.RecordResultSet;
import com.sap.mdm.data.RegionProperties;
import com.sap.mdm.data.ResultDefinition;
import com.sap.mdm.data.commands.CheckinRecordsCommand;
import com.sap.mdm.data.commands.RetrieveRecordsByValueCommand;
import com.sap.mdm.ids.RecordId;
import com.sap.mdm.ids.TableId;
import com.sap.mdm.net.ConnectionException;
import com.sap.mdm.net.ConnectionPool;
import com.sap.mdm.net.ConnectionPoolFactory;
import com.sap.mdm.schema.FieldProperties;
import com.sap.mdm.schema.TableProperties;
import com.sap.mdm.schema.commands.GetFieldListCommand;
import com.sap.mdm.schema.commands.GetTableListCommand;
import com.sap.mdm.server.DBMSType;
import com.sap.mdm.server.RepositoryIdentifier;
import com.sap.mdm.valuetypes.StringValue;

/**
 * 
 */

/**
 * @author I041263
 *
 */
public class mdm_check_in {

	/**
	 * @param args
	 */
    static ConnectionPool connections = null;
    static RepositoryIdentifier reposId = null;
	static CreateUserSessionCommand sessionCommand =  null;
	static String sessionId = null;
	static AuthenticateUserSessionCommand authCommand = null;
	static GetRepositoryRegionListCommand regionListCommand;
	static Boolean execute = false;
	
	public static void connect() {
		// create connection pool to a MDM server
	    String serverName = "LOCALHOST";

	    try {
	        connections = ConnectionPoolFactory.getInstance(serverName);
	    } catch (ConnectionException e) {
	        e.printStackTrace();
	        return;
	    }
	
	    // specify the repository to use
	    // alternatively, a repository identifier can be obtain from the GetMountedRepositoryListCommand
	    String repositoryName = "Inquera";
	    String dbmsName = "LOCALHOST";
	    reposId = new RepositoryIdentifier(repositoryName, dbmsName, DBMSType.MS_SQL);
	    
	    regionListCommand = new GetRepositoryRegionListCommand(connections);
        regionListCommand.setRepositoryIdentifier(reposId);
        try {
            regionListCommand.execute();
        } catch (CommandException e) {
            e.printStackTrace();
            return;
        }
        RegionProperties[] regions = regionListCommand.getRegions();

	    
	    // create a repository session
	    sessionCommand = new CreateUserSessionCommand(connections);
	    sessionCommand.setRepositoryIdentifier(reposId );
        sessionCommand.setDataRegion(regions[0]); // use the first region
	    
	    try {
	        sessionCommand.execute();
	    } catch (CommandException e) {
	        e.printStackTrace();
	        return;
	    }        
	    sessionId = sessionCommand.getUserSession();
	    
	    // authenticate the repository session
	    String userName = "admin";
	    String userPassword = "";
	    
	    authCommand = new AuthenticateUserSessionCommand(connections); 
	    authCommand.setSession(sessionId);
	    authCommand.setUserName(userName);
	    authCommand.setUserPassword(userPassword);
	    try {
	        authCommand.execute();
	    } catch (CommandException e) {
	        e.printStackTrace();
	        return;
	    }  

	}
	
	public static void disconnect() {
        // finally destroy the session
        DestroySessionCommand destroySessionCommand = new DestroySessionCommand(connections);
        destroySessionCommand.setSession(sessionId);
        try {
            destroySessionCommand.execute();
        } catch (CommandException e) {
            e.printStackTrace();
            return;
        }
		
		
		
		authCommand = null;
		sessionCommand = null;
		reposId = null;
		connections.freeUnused();
		connections = null;
	}
	

	
	public static void main(String[] args) {
		connect();
		
        GetTableListCommand tableListCommand = new GetTableListCommand(connections);
        tableListCommand.setSession(sessionId);
        try {
            tableListCommand.execute();
        } catch (CommandException e) {
            e.printStackTrace();
            return;
        }                

        TableId mainTable = null;
        TableProperties[] tables = tableListCommand.getTables();
        for (int i = 0; i < tables.length; i++) {
            if (tables<i>.getType() == TableProperties.MAIN)
                mainTable = tables<i>.getId();
        }
		
        // retrieve the list of fields from the main table
        // this is useful for resolving conflicting field names the new field might create
        GetFieldListCommand getFieldListCommand = new GetFieldListCommand(connections);
        getFieldListCommand.setSession(sessionId);
        getFieldListCommand.setTableId(mainTable);
        try {
            getFieldListCommand.execute();
        } catch (CommandException e) {
            e.printStackTrace();
            return;
        }
        
        // set up the field to create
        FieldProperties pnField = null;
        FieldProperties[] fields = getFieldListCommand.getFields(); 
        
        for (int i = 0; i < fields.length; i++) {
        	if (fields<i>.getCode().contentEquals("Part_Number")) {
        		pnField = fields<i>;
        	}        		
        }
        
        RetrieveRecordsByValueCommand rrbv = new RetrieveRecordsByValueCommand(connections);
		rrbv.setSession(sessionId);


		StringValue[] strVals = new StringValue[args.length];
		
		for (int i = 0; i < args.length; i++) {
			strVals<i> = new StringValue(args<i>.toString()); 
		}
		
        ResultDefinition rd = new ResultDefinition(mainTable);
        
		rrbv.setFieldId(pnField.getId());
		rrbv.setFieldValues(strVals);
		rrbv.setResultDefinition(rd);
		try {
			rrbv.execute();
		} catch (CommandException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		RecordResultSet recordResults = rrbv.getRecords();
		Record[] records = recordResults.getRecords();
		RecordId[] recID = new RecordId[records.length];
		
		for (int i = 0; i < records.length; i++) {
			if (records<i>.getCheckoutStatus() != Record.CheckoutStatus.NONE && records<i>.getCheckoutStatus() != Record.CheckoutStatus.UNDEFINED) {
				recID<i> = new RecordId(records<i>.getId());
				execute = true;
			}
				
		}
		
		if (execute) {
			CheckinRecordsCommand checkIn = new CheckinRecordsCommand(connections);
			checkIn.setSession(sessionId);
			checkIn.setTableId(mainTable);

			checkIn.setRecordIds(recID);
		
			try {
				checkIn.execute();
			} catch (CommandException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		disconnect();
		

	}

}