
UserDetailsCallableObject.java
packagecom.examples.bckgco; importjava.util.Locale; importcom.sap.caf.eu.gp.co.api.GPCallableObjectFactory; importcom.sap.caf.eu.gp.co.api.GPStandardResourceAccessor; importcom.sap.caf.eu.gp.co.api.IGPBackgroundCallableObject; importcom.sap.caf.eu.gp.co.api.IGPCOResultStateInfo; importcom.sap.caf.eu.gp.co.api.IGPExceptionInfo; importcom.sap.caf.eu.gp.co.api.IGPExecutionContext; importcom.sap.caf.eu.gp.co.api.IGPTechnicalDescription; importcom.sap.caf.eu.gp.exception.api.GPEngineException; importcom.sap.caf.eu.gp.exception.api.GPInvocationException; importcom.sap.caf.eu.gp.exception.api.GPTechnicalCallableObjectException; importcom.sap.caf.eu.gp.structure.api.IGPAttributeInfo; importcom.sap.caf.eu.gp.structure.api.IGPStructure; importcom.sap.caf.eu.gp.structure.api.IGPStructureInfo; importcom.sap.security.api.IUser; importcom.sap.security.api.UMException; importcom.sap.security.api.UMFactory; importcom.sap.tc.logging.Category; importcom.sap.tc.logging.Location; importcom.sap.tc.logging.Severity; publicclass UserDetailsCallableObject implements IGPBackgroundCallableObject {public static Location logger = Location.getLocation(UserDetailsCallableObject.class); //initialize the resource accessor class with the resource bundle as a parameter GPStandardResourceAccessorresourceAccessor = new UserDetailsResourceAccessor("com.examples.bckgco.UserDetails");publicIGPTechnicalDescription getDescription(Locale originalLocale) { try {//create technical description instance IGPTechnicalDescription technicalDescription = GPCallableObjectFactory.createTechnicalDescription( "CO_NAME", "CO_DESCRIPTION", resourceAccessor, originalLocale); //get root structure for input parameters IGPStructureInfo input = technicalDescription.getInputStructureInfo(); //define attributes for input parameters IGPAttributeInfo userId = input.addAttribute("UserID", IGPAttributeInfo.BASE_STRING);userId.setMultiplicity(IGPAttributeInfo.MULITIPLICITY_1_1); //get root structure for output parameters IGPStructureInfo output = technicalDescription.getOutputStructureInfo(); //add a sub-structure for the output IGPStructureInfo user = output.addStructure("User");//define attributes in output sub-structure user.addAttribute("firstName", IGPAttributeInfo.BASE_STRING); user.addAttribute("lastName", IGPAttributeInfo.BASE_STRING); user.addAttribute("phone", IGPAttributeInfo.BASE_STRING); user.addAttribute("fax", IGPAttributeInfo.BASE_STRING);//add a result state for successful execution IGPCOResultStateInfo success = technicalDescription.addResultState("Success"); success.setDescriptionKey("Success_desc"); IGPExceptionInfo exception = technicalDescription.addProcessException("EXCEPTION_NO_USER_FOUND");return technicalDescription; } catch (GPInvocationException e) {logger.logT( Severity.ERROR, Category.APPLICATIONS, "Incorrect technical name"); logger.traceThrowableT( Severity.ERROR, "Exception while creating technical description: ", e); return null; } } publicvoid execute(IGPExecutionContext executionContext) throws GPTechnicalCallableObjectException {String userId = null; try {//retrieve the runtime representation of the input structure IGPStructure input = executionContext.getInputStructure(); //retrieve the value of the input parameter userId = (String) input.getAttributeAsString("UserID");//retrieve the runtime representation of the output structure IGPStructure output = executionContext.getOutputStructure(); IGPStructure user = output.addStructure("User"); try {//find user in user management IUser umeUser = UMFactory.getUserFactory().getUserByLogonID(userId); //set values to output parameters user.setAttributeValue("firstName", umeUser.getFirstName()); user.setAttributeValue("lastName", umeUser.getLastName()); user.setAttributeValue("phone",umeUser.getTelephone()); user.setAttributeValue("fax", umeUser.getFax());//set result state executionContext.setResultState("Success"); } catch (UMException e) {//set process exception if user is not found executionContext.setProcessException("EXCEPTION_NO_USER_FOUND");} //complete object execution executionContext.processingComplete(); } catch (GPInvocationException e) {throw new GPTechnicalCallableObjectException( logger, resourceAccessor, "ERROR_PARAMETERS", e); } catch (GPEngineException e) {throw new GPTechnicalCallableObjectException( logger, resourceAccessor, "INTERNAL_ERROR", e); } } } |