Show TOC Start of Content Area

Syntax documentation Extractor Method Implementation Example  Locate the document in its SAP Library structure

The following is an example of the SAP BW extractor method extractStudentAddress of the application service sap.com/caf.tests/University. This method returns an aggregated structure of the service Student together with the complex attribute Address (cardinality is 0…1).

The delta load mechanism is implemented in this example, where selection parameters support the data fields of the object Student. Delta load is not implemented for Address because it is an aggregated object of Student.

Example

public java.util.HashSet extractStudentAddress(java.util.Map selections) throws com.sap.caf.rt.exception.ServiceException {

      // logging

      java.lang.String user = sessionContext.getCallerPrincipal().getName();

      java.lang.String methodHeader = "extractStudentAddress()";     

      Object[] parameters = new Object[] {};

      CAFPublicLogger.entering(user, JARM_REQUEST, methodHeader, location, parameters);

 

      java.util.HashSet retValue;

      

      try {

//@@custom code start - extractStudentAddress()

  retValue = new java.util.HashSet();

  selections.remove("RECORDTYPE");// remove recordtype filter

 

  java.util.Date lowdate = null;

  java.util.Date highdate = null;

  // getting filter for delta-relevant field

  QueryFilter dateFilter = (QueryFilter) selections.get("lastChangedAt");

  QueryFilter newDataFilter = null;

  if(dateFilter != null) {

   if(dateFilter.condition == QueryFilter.CONDITION_GE) {

      lowdate  = dateFilter.dateValueLow;

   } else if(dateFilter.condition == QueryFilter.CONDITION_LE) {

      highdate = dateFilter.dateValueHigh;

   } else if(dateFilter.condition == QueryFilter.CONDITION_BETWEEN) {

      lowdate  = dateFilter.dateValueLow;

      highdate = dateFilter.dateValueHigh;

   }

         

     if(lowdate != null) {

      // also add GMT difference between J2EE server with CAF and BW system

      lowdate = new java.util.Date(lowdate.getTime() + CAFContext.CAF_BW_SYSTEMS_TIMEZONE_DIFFERENCE*3600000);

     }

     if(highdate != null) {

      // also add GMT difference between J2EE server with CAF and BW system

      highdate = new java.util.Date(highdate.getTime() + CAFContext.CAF_BW_SYSTEMS_TIMEZONE_DIFFERENCE*3600000);

     }

  }

  if(lowdate != null && highdate != null) {

     newDataFilter = new QueryFilter(new java.sql.Timestamp(((java.util.Date)lowdate).getTime()),

        new java.sql.Timestamp(((java.util.Date)highdate).getTime()));

  } else if(lowdate != null) {

     newDataFilter = new QueryFilter(new java.sql.Timestamp(((java.util.Date)lowdate).getTime()), QueryFilter.CONDITION_GE);

  } else if(highdate != null) {

     newDataFilter = new QueryFilter(new java.sql.Timestamp(((java.util.Date)highdate).getTime()), QueryFilter.CONDITION_LE);

  } else {

     newDataFilter = new QueryFilter("*");

  }        

  selections.put("lastChangedAt", newDataFilter);

  Iterator itStudents = getStudentService().findByMultipleParameters(selections, false,

   "findByMultipleParameters").iterator();

 

Student student;

Address address;

StudentAndAddress sa;

 

 for (int i=0; itStudents.hasNext(); i++) {

   student = (Student)itStudents.next();

   sa = new StudentAndAddress();

   sa.setStudentkey( student.getKey() );

   sa.setCreatedBy( student.getCreatedBy() );

   sa.setCreatedAt( student.getCreatedAt() );

   sa.setLastChangedBy( student.getLastChangedBy() );

   sa.setLastChangedAt( student.getLastChangedAt() );

   sa.setAverageGrade( student.getAverageGrade() );

   sa.setBirthDay( student.getBirthDay() );

   sa.setFirstName( student.getFirstName() );

   sa.setLastName( student.getLastName() );

   sa.setRewardPoints( student.getRewardPoints() );

   sa.setUserId( student.getUserId() );

   sa.setRECORDTYPE( 1 );

   

   address = student.getAddress();

   if ( address != null ) {

      sa.setBuilding( address.getBuilding() );

      sa.setCity( address.getCity() );

      sa.setCountry( address.getCountry() );

      sa.setRegion( address.getRegion() );

      sa.setStreet( address.getStreet() );

   }  

   retValue.add( sa );

  }

  if(lowdate != null || highdate != null) {

   try {

      // Use DeletedObjectsRegistrationService to get deleted instance's guids

     java.util.Collection deletedObjects = DeletedObjectsRegistrationService.findDeletedByObjectTypeAndDates(

       Student.OBJECT_NAME,

       lowdate, highdate );    

     for(Iterator delIt = deletedObjects.iterator(); delIt.hasNext();) {

      DeletedObject del = (DeletedObject) delIt.next();

      sa = new StudentAndAddress();

      sa.setStudentkey( del.getObjectKey() );

      sa.setLastChangedAt(del.getDeletedAt());

      sa.setRECORDTYPE(0);

      retValue.add( sa );

     }

   }

   catch ( com.sap.caf.rt.exception.DataAccessException ex )

   {

      Object[] args = { methodHeader };

      CAFPublicLogger.traceThrowableT( Severity.DEBUG, location, methodHeader, "APPSRV_DATA_ACCESS_ERROR", args, ex );

      location.throwing( methodHeader, ex );

      throw new com.sap.caf.rt.exception.ServiceException( ex );

   }      

  }

//@@custom code end - extractStudentAddress()

      } finally {

         CAFPublicLogger.exiting(user, JARM_REQUEST, methodHeader, location, parameters);

      }

      return retValue;

   }

End of Content Area