com.waveset.adapter
Class SAPHRActiveSyncAdapter

java.lang.Object
  extended bycom.waveset.adapter.ResourceAdapterBase
      extended bycom.waveset.adapter.SAPResourceAdapter
          extended bycom.waveset.adapter.SAPHRActiveSyncAdapter
All Implemented Interfaces:
ActiveSync, ResourceAdapter

public class SAPHRActiveSyncAdapter
extends SAPResourceAdapter
implements ActiveSync

Title: SAPHRActiveSyncAdapter Description: ActiveSync adapter for SAP HR Copyright: Copyright (c) 2004 Company: Sun Microsystems Inc.

Version:
$Revision: 1.24 $ Overview This adapter fetches user attributes from SAP HR, and receives IDOCs sent by a scheduled process on the SAP server. SAP HR stores attributes in a series of infotypes and subtypes within those infotypes. Most of the data is available through an API called BAPI that takes an employee id and returns specific infotypes. Some data is only available via IDOC. IDOCs are sent to our listener when the employee record changes. Effective Dates SAP HR also stores multiple records when there are effective dates associated with the data. For example, email is stored as infotype 0105, subtype MAIL, attribute COMMTYPE. If the user changes his email, effective March 12, 2005, a second record is created with an effective date of 12.03.2005. So the two records look like: start_date end_date PERSID COMMTYPE ... (The rest of the record) 01.01.1800 11.03.2005 0000023 email_1 12.03.2005 31.12.9999 0000023 email_2 The incoming data (via IDOC or BAPI) is filtered. The current data is mapped through the schema map, the future data is segregated in a special attribute called futureData that can be used to trigger future user actions. Functions The BAPI functions to list the employee record data are listed in the method callEmployeeBapis. It is table driven and new bapis can be added. The attributes from the bapi calls are named from their infotype, subtype, and attribute name, and idoc definition, separated by underscores - this makes the right hand side of the schema map. If there is no subtype, there are just two underscores. BAPI calls are used to get the employee data in response to getUser calls, the account iterator, and when an idoc is received. IDOCs are sent from SAP to a Identity Manager listener asynchronously. The handling is done by the AdapterIDocServer class which then calls the adapter processIDOC method. The IDOC data is extracted into an IDOC_Segment which contain segments for each infotype/subtype. Effective dates are examined to know whether the segment contains future data or not. Resource Attributes RA_DATE_FORMAT - format to convert dates coming from SAP into Strings in in the attributes, then back from Strings to SAP dates RA_PROGID - The program ID that our IDOC server registers as with SAP. Must match the programID used when setting up the SAP server to generate IDOCs RA_WSNAME - Naming attribute. When a user is gotten via the account iterator, the name of the user object and ResourceInfo display name is set to this attribute. This attribute should be marked required in the schema. RA_PROCESS_RULE -Process name to run. Instead of using IAPIUser, use IAPIProcess and set the name to this. RA_DISCOVER_PATTERNS - Search patterns for discover. These are used to match Employees by LASTNAME_M when calling the BAPI_EMPLOYEE_GETDATA from the account iterator (only when discovering or reconciling users). * will get all at once but does not scale. A*, B*, C* .. Z* will get them 1/26th at a time. RA_IDOC_MESSAGE_TYPE - Restrict processing to only IDOCs of this message type. Defaults to "HRMD_A". RA_INFOTYPE_FILTER - Listed infotypes will be read from SAP HR, both through IDOC and BAPI. Infotypes not listed will be filtered if received in the IDOC. Infotypes must be four digit strings (like 0000 or 0105). Some attributes can cause security exceptions if read by our adapter, in particular infotype 8 has an attribute that is annual salary which can cause the adapter to stop with no exception. It is bizarre - the thread just goes away like the API code called exit() which it may do when it gets a security exception.

Nested Class Summary
protected  class SAPHRActiveSyncAdapter.AcctIter
          Iterator gets the list of SAP Employees using EmployeeAbstract.GetList (BAPI_EMPLOYEE_GETDATA), caches that list, then uses various BAPI calls to fetch the users one at a time.
 class SAPHRActiveSyncAdapter.AdapterIDocServer
          Class MyIDocServer is for receiving IDocs and function requests.
protected  class SAPHRActiveSyncAdapter.BapiCall
           
protected static class SAPHRActiveSyncAdapter.IDOC_Segment
           
 
Nested classes inherited from class com.waveset.adapter.SAPResourceAdapter
SAPResourceAdapter.Function, SAPResourceAdapter.ObjectType
 
Nested classes inherited from class com.waveset.adapter.ResourceAdapterBase
ResourceAdapterBase.SimpleAccountIterator
 
Nested classes inherited from class com.waveset.adapter.ResourceAdapter
ResourceAdapter.ActionResult, ResourceAdapter.Features
 
Field Summary
protected  com.sap.mw.idoc.IDoc.Repository _idocRepository
           
protected  com.sap.mw.jco.IRepository _jcoRepository
          Initialize the adapter, registering as an IDOC server.
protected  SAPHRActiveSyncAdapter.AdapterIDocServer _server
           
static java.lang.String code_id
           
static java.lang.String IDOC_DATE_FORMAT
           
protected static java.lang.String[] prototypeXmlAdditions
           
protected static java.lang.String RA_DATE_FORMAT
          Add the ActiveSync-specific attributes.
protected static java.lang.String RA_DISCOVER_PATTERNS
           
static java.lang.String RA_IDOC_MESSAGE_TYPE
           
static java.lang.String RA_INFOTYPE_FILTER
           
protected static java.lang.String RA_PROCESS_NAME
          Deprecated. As of IdM 5.5. Use RA_PROCESS_RULE instead.
static java.lang.String RA_PROGID
           
static java.lang.String RA_UNICODE
           
protected static java.lang.String RA_WSNAME
           
protected static java.lang.String[] resAttrAdditions
          Default schema for the adapter.
 
Fields inherited from class com.waveset.adapter.SAPResourceAdapter
_filteredAccounts, _poolKey, _serverConnection, _traceLevel, AA_ACTIVITY_GROUP_OBJECTS_MAPNAME, AA_ACTIVITY_GROUPS, AA_ACTIVITY_GROUPS_MAPNAME, AA_ACTIVITY_GROUPS_SHADOW, AA_BAPI_CUA_SYSTEMS, AA_BAPI_CUA_SYSTEMS_MAPNAME, AA_BAPI_CUA_SYSTEMS_SHADOW, AA_DIRECT_ACTIVITY_GROUPS_SHADOW, AA_DIRECT_LOCAL_ACTIVITYGROUPS, AA_DIRECT_LOCAL_PROFILES, AA_DIRECT_PROFILES_SHADOW, AA_LOCAL_ACTIVITYGROUPS, AA_LOCAL_PROFILES, AA_LOGONDATA_LTIME, AA_PROFILES, AA_PROFILES_MAPNAME, AA_PROFILES_SHADOW, ACTIVITY_GROUP_FROM_DATE, ACTIVITY_GROUP_NAME, ACTIVITY_GROUP_TO_DATE, DISPLAY_PASSWORD, DISPLAY_USER, jcoTrace, LOGIN_PASSWORD, LOGIN_USER, RA_BAPI_RETRY_COUNT, RA_CONNECT_RETRY_COUNT, RA_CONNECT_RETRY_WAIT_TIME, RA_FILTERED_ACCOUNTS, RA_GATEWAY, RA_GATEWAY_SERVICE, RA_HOST, RA_JCO_TRACE_LEVEL, RA_JCO_TRACE_PATH, RA_LANGUAGE, RA_NUMBER_OF_CONNECTIONS, RA_PASSWORD, RA_RETURN_SAP_TEMP_PWD, RA_SAP_CLIENT, RA_SYSTEM_NUMBER, RA_UPPER_CASE_PASSWORDS, RA_USE_CUA, RA_USE_SAP_TEMP_PWD, RA_USER, RA_USER_PWD_ON_CHG, RESOURCE_LOGIN_MODULE, RESOURCE_NAME, RESOURCE_USER_FORM, SAP_TIMEZONES, sapRepository, TEMP_PASSWORD_RESULT, WS_PASSWORD_EXPIRED, WS_RESET_FAILED_LOGIN_COUNT
 
Fields inherited from class com.waveset.adapter.ResourceAdapterBase
_cache, _context, _excludedAccountsRule, _excludedAccountsRuleInited, _listAllObjectsAttrParse, _listAllObjectsAttrParseName, _listUserAttrParse, _listUserAttrParseName, _listUserGroupsAttrParse, _listUserGroupsAttrParseName, _resource, _thread, _trace, displayInfoCode, RA_BLOCKCOUNT, RA_LOGIN_ACTION, RA_LOGOFF_ACTION, RA_MULTI_VALUED_ATTRS, RA_TEST_MODE
 
Fields inherited from interface com.waveset.adapter.ActiveSync
ACTIVE_SYNC_EVENT_RES_ATTRS_XML, ACTIVE_SYNC_STD_RES_ATTRS_XML, ATTR_IS_DELETED, DATE_FORMAT, DATE_TIME_FORMAT, RA_APPLY_META_VIEW, RA_ASSIGN_SOURCE_ON_CREATE, RA_CONFIRMATION_RULE, RA_CORRELATION_RULE, RA_CREATE_UNMATCHED, RA_DELETE_RULE, RA_FORM, RA_ID, RA_IDM_NAME_RULE, RA_LEGACY_EVENT_GEN, RA_LOG_LEVEL, RA_LOG_PATH, RA_LOG_SIZE, RA_MAX_AGE_LENGTH, RA_MAX_AGE_UNIT, RA_MAX_ARCHIVES, RA_NAME, RA_PARAMETERIZED_INPUT_FORM, RA_POPULATE_GLOBAL, RA_POSTPOLL_WORKFLOW, RA_PREPOLL_WORKFLOW, RA_PROCESS_RULE, RA_PROXY_ADMINISTRATOR, RA_RESET_TO_TODAY, RA_RESOLVE_PROCESS_RULE, RA_SCHEDULE_INTERVAL, RA_SCHEDULE_INTERVAL_COUNT, RA_SCHEDULE_START_DATE, RA_SCHEDULE_START_TIME, RA_SYNC_CONFIG_MODE, RA_SYNC_POST_PROCESS_FORM, RA_UPDATE_IF_DELETE, RA_USE_INPUT_FORM, TIME_FORMAT, TRACE_LEVEL_DEBUG, TRACE_LEVEL_ERROR, TRACE_LEVEL_INFO, TRACE_LEVEL_NONE, TRACE_LEVEL_WARNING
 
Fields inherited from interface com.waveset.adapter.ResourceAdapter
CHANGE_PASSWORD_LOCATION, DISABLE, ENABLE, EXPIRE_PASSWORD, GUID, IGNORE_ATTR, NEW_ACCOUNT_ID, OP_DAYS_INACTIVE, OP_DISABLED, OP_DORMANT, OP_EXPIRED, OP_EXPIREDPWD, OP_INACTIVE, OP_LOCKED, OP_NO_PASSWORD_SET, OP_NOOWNERSHIP, OP_NOPASSWORDREQ, OP_NUMINACTIVEDAYS, OP_NUMPWDAYS, OP_PWNUMDAYS, RA_BASE_CTX, RA_DISPLAY_NAME_ATTR, RA_NEW_OBJECT_ID, RA_NEW_OBJECT_NAME, RA_OBJECT_ATTRIBUTES, RA_OBJECT_CLASS, RA_OBJECT_ID, RA_OBJECT_TYPE, RA_OP_TYPE, RA_RENAME_OP, RA_REQUESTOR, RA_SAVEAS_OP, RA_SEARCH_ATTRIBUTE_NAMES, RA_SEARCH_ATTRS_TO_GET, RA_SEARCH_CONTEXT, RA_SEARCH_FILTER, RA_SEARCH_RUN_AS_PASSWORD, RA_SEARCH_RUN_AS_USER, RA_SEARCH_SCOPE, RA_SEARCH_SCOPE_OBJECT, RA_SEARCH_SCOPE_ONE_LEVEL, RA_SEARCH_SCOPE_SUBTREE, RA_SEARCH_TIME_LIMIT, RESET_PASSWORD, SYSTEM_ATTRIBUTES, UNLOCK, WS_USER_PASSWORD
 
Constructor Summary
SAPHRActiveSyncAdapter()
           
 
Method Summary
protected  java.util.List bapiListUsers(java.lang.String matchString, boolean returnUsers)
          Return a List of WSUser via BAPI.
 void callCompleted(com.waveset.adapter.iapi.IAPI call)
          OBSOLETE An call generated by this resource adapter has completed.
protected  java.util.Map callEmployeeBapis(java.lang.String EmployeeId)
          Call the needed bapis to retrieve the Employee data.
 Resource createPrototypeResource()
           
protected  java.lang.String dateToString(java.util.Date in)
           
 AccountIterator getAccountIterator()
           
 java.lang.Object getAttributeValue(java.lang.String name)
          Get or set an attribute value for the ActiveSync.
 GenericObject getFeatures()
          Expose features supported by the Resource Adapter.
protected  java.util.List getSearchPatterns()
           
 WSUser getUser(WSUser inUser)
          Get attributes for the named user from SAP HR, build a WSUser object with the name = the naming attribute
protected  void idocsDone()
          Called when idoc processing is done (if processing is deferred, run now)
protected  void idocsStart()
          Called when IDOC processing starts
 void init()
          initialize yourself.
 java.util.ArrayList listAllObjects(java.lang.String resourceObjectType, java.util.Map options, java.lang.String runAsUser, EncryptedData runAsPassword)
          This method will return a list of object names of the specified object type.
protected  void logUpdate(int level, WavesetResult result)
          Log whatever we want to from an update.
protected  java.util.Map mapToSchema(java.util.Map in)
           
 int poll()
          The poll method.
protected  void processIDOC(SAPHRActiveSyncAdapter.IDOC_Segment seg, java.util.Map schemaMap)
          Called for each IDOC.
protected  void realCreate(WSUser user, WavesetResult result)
          Create a new user account on the resource This method is called by createAccounts (the multiuser create method).
protected  void realDelete(WSUser user, WavesetResult result)
          Needs to be overridden by subclass if default deleteAccounts() implementation is used.
 void realDisable(WSUser user, WavesetResult result)
          Disables a user, called within a connected context.
 void realEnable(WSUser user, WavesetResult result)
          Enables a user by setting adminLockout to false
protected  void realUpdate(WSUser user, WavesetResult result)
          Needs to be overridden by subclass if default updateAccounts() implementation is used.
 void setAttributeValue(java.lang.String name, java.lang.Object value)
           
 void shutdown()
          shutdown
 void startHRProcess()
          Starts the SAP HR report RHALEINI which will send the Person objects to the JCO.Server that is listening.
static Resource staticCreatePrototypeResource()
           
protected  java.util.Date stringToDate(java.lang.String in)
           
 boolean supportsAccountDisable()
          Indicates whether or not this resource supports account disable.
 WavesetResult testConfiguration()
          Default implementation of test method, calls check create.
 
Methods inherited from class com.waveset.adapter.SAPResourceAdapter
addAttrIfMapped, addAttrIfMapped, authenticate, booleanToString, callBAPIFunction, callBAPIFunction, changeUserPassword, checkCreateAccount, checkDeleteAccount, checkIfUserExists, checkUpdateAccount, connect, connect, convertAttrToList, createFunction, createFunction, disconnect, errorCheck, extractData, extractData, getActivityGroups, getActivityGroups, getHelpValues, getIdentity, getIntRequiredResAttrVal, getLocalActivityGroupsAndCUASystems, getLocalProfiles, getUserPassword, getWsAttrsString, init_internal, jcoErrorStructureCheck, jcoErrorStructureCheck, jcoErrorTableCheck, jcoErrorTableCheck, maintainLocalActivityGroups, maintainLocalProfiles, maintainSapActivityGroups, maintainSapProfiles, realGetUser, resetFailedLoginCount, reverseMapAttr, reverseMapAttr, reverseMapMultiAttr, sapSetValues, setResource, setupJCOTrace, setUserField, startConnection, startConnectionWrapper, stopConnection, stringToBoolean, unexpirePassword, unexpirePassword, unexpirePassword
 
Methods inherited from class com.waveset.adapter.ResourceAdapterBase
checkForNoPasswordInSchema, checkSyntax, createAccount, createAccounts, createIdentity, createObject, deleteAccount, deleteAccount, deleteAccounts, deleteObject, disableAccount, disableAccounts, dnsEqual, dnsEqual, enableAccount, enableAccounts, executeResourceAttributeJavascriptAction, fillInResourceInfo, fillInResourceInfo, getAccountAttributes, getAccountIterator, getAccountIterator, getAction, getActionNotFoundErrorMessage, getActionNotFoundMessage, getActionRunAsPassword, getActionRunAsUser, getActionTimeout, getActionType, getAdapter, getAdapter, getAdapter, getAdapterProxy, getAdapterProxy, getAllAccounts, getAttrNameFromMapName, getAttrNameFromMapName, getAttrParse, getAttrTypeFromMapName, getAttrTypeFromMapName, getAUserName, getBaseContextAttrName, getBaseContextObject, getBaseContexts, getBlockSize, getContext, getExcludedAccountsRule, getListAllObjectsAttrParse, getListUserAttrParse, getListUserGroupsAttrParse, getObject, getOptionalBooleanResAttrVal, getOptionalBooleanResAttrVal, getOptionalEncryptedResAttrVal, getOptionalResAttrVal, getOptionalStringResAttrVal, getRequiredResAttr, getRequiredResAttr, getRequiredResAttrVal, getRequiredResAttrVal, getRequiredResAttrVals, getRequiredUserAttributeNames, getResAttrValActionOnUser, getResAttrVals, getResource, getResourceAccounts, getResourceInfo, getResourceObjectAttrValNameAttr, getResourceObjectClassAttr, getResourceObjectTypePrefix, getSchemaMap, getUser, getWSAttrByMapName, getWSAttrByMapName, getWSAttrFromMap, handleActionResult, handleJavascriptActionResult, isAccountAttributeSecret, isExcludedAccount, isExcludedAccount, isFeatureEnabled, isSupported, isTestMode, listAllObjects, listObjects, listObjects, listObjectsOfType, lookupAction, lookupAction, lookupActions, namesEqual, objectClassesMatchType, println, restoreResourceObjectClassAttr, run, run, runResourceAttributeJavascriptAction, scan, setCache, setContext, setDisabled, setFromResource, setResourceObjectClassAttr, setResourceOptionAttrs, supportsAccountActions, supportsActions, supportsCaseInsensitiveAccountIds, supportsContainerObjectTypes, supportsExcludedAccounts, supportsResourceAccount, supportsScanning, updateAccount, updateAccounts, updateObject, updateResourceAccount, updateResourceIdentity, vmStoreBoot, vmStoreGet, vmStoreInit, vmStoreLatch, vmStorePut
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

code_id

public static final java.lang.String code_id
See Also:
Constant Field Values

IDOC_DATE_FORMAT

public static final java.lang.String IDOC_DATE_FORMAT
See Also:
Constant Field Values

RA_DATE_FORMAT

protected static final java.lang.String RA_DATE_FORMAT
Add the ActiveSync-specific attributes.

See Also:
Constant Field Values

RA_PROGID

public static final java.lang.String RA_PROGID
See Also:
Constant Field Values

RA_WSNAME

protected static final java.lang.String RA_WSNAME
See Also:
Constant Field Values

RA_PROCESS_NAME

protected static final java.lang.String RA_PROCESS_NAME
Deprecated. As of IdM 5.5. Use RA_PROCESS_RULE instead.

See Also:
Constant Field Values

RA_DISCOVER_PATTERNS

protected static final java.lang.String RA_DISCOVER_PATTERNS
See Also:
Constant Field Values

RA_IDOC_MESSAGE_TYPE

public static final java.lang.String RA_IDOC_MESSAGE_TYPE
See Also:
Constant Field Values

RA_INFOTYPE_FILTER

public static final java.lang.String RA_INFOTYPE_FILTER
See Also:
Constant Field Values

RA_UNICODE

public static final java.lang.String RA_UNICODE
See Also:
Constant Field Values

prototypeXmlAdditions

protected static final java.lang.String[] prototypeXmlAdditions

resAttrAdditions

protected static final java.lang.String[] resAttrAdditions
Default schema for the adapter. The left hand side is a name that is designed to be readable. the right hand side is the infotype:subtype:[idoc-def[:attrName]] This is a huge but only partial list. There are many more attributes but these seem like the more common ones.


_jcoRepository

protected com.sap.mw.jco.IRepository _jcoRepository
Initialize the adapter, registering as an IDOC server. Throw exception if initialization failed


_idocRepository

protected com.sap.mw.idoc.IDoc.Repository _idocRepository

_server

protected SAPHRActiveSyncAdapter.AdapterIDocServer _server
Constructor Detail

SAPHRActiveSyncAdapter

public SAPHRActiveSyncAdapter()
Method Detail

getFeatures

public GenericObject getFeatures()
Expose features supported by the Resource Adapter. Note: ActiveSync is considered a facet, not a feature.

Specified by:
getFeatures in interface ResourceAdapter
Overrides:
getFeatures in class SAPResourceAdapter
Returns:
GenericObject containing Features, as both key and value, which are supported by this resource adapter.
See Also:
ResourceAdapter.Features

supportsAccountDisable

public boolean supportsAccountDisable()
Description copied from interface: ResourceAdapter
Indicates whether or not this resource supports account disable. If it does not, the provisioning engine will attempt to simulate disable by generating random passwords. If we end up with more of these "can you do this" methods, we might want to generalize it into a more extensible way to describe features and levels of support.

Specified by:
supportsAccountDisable in interface ResourceAdapter
Overrides:
supportsAccountDisable in class SAPResourceAdapter

staticCreatePrototypeResource

public static Resource staticCreatePrototypeResource()
                                              throws WavesetException
Throws:
WavesetException

createPrototypeResource

public Resource createPrototypeResource()
                                 throws WavesetException
Specified by:
createPrototypeResource in interface ResourceAdapter
Overrides:
createPrototypeResource in class SAPResourceAdapter
Throws:
WavesetException

getAccountIterator

public AccountIterator getAccountIterator()
                                   throws WavesetException
Specified by:
getAccountIterator in interface ResourceAdapter
Overrides:
getAccountIterator in class SAPResourceAdapter
Throws:
WavesetException

getUser

public WSUser getUser(WSUser inUser)
               throws WavesetException
Get attributes for the named user from SAP HR, build a WSUser object with the name = the naming attribute

Specified by:
getUser in interface ResourceAdapter
Overrides:
getUser in class SAPResourceAdapter
Throws:
WavesetException

bapiListUsers

protected java.util.List bapiListUsers(java.lang.String matchString,
                                       boolean returnUsers)
                                throws WavesetException
Return a List of WSUser via BAPI. Called repeatedly with A*, B*, this will return all of the users in SAP. If called with * it will return them all at once which does not scale. I am not 100% sure that this will match all names in a Unicode environment but I think that there is an ascii representation of the names that is used for searching.

Parameters:
matchString - match names with this string (e.g. Smi*)
returnUsers - return WSUsers if true, String (name) if false
Throws:
WavesetException

getSearchPatterns

protected java.util.List getSearchPatterns()
                                    throws WavesetException
Throws:
WavesetException

listAllObjects

public java.util.ArrayList listAllObjects(java.lang.String resourceObjectType,
                                          java.util.Map options,
                                          java.lang.String runAsUser,
                                          EncryptedData runAsPassword)
                                   throws WavesetException
Description copied from interface: ResourceAdapter
This method will return a list of object names of the specified object type. If you need to be able to specify which attrs to return, use listObjects instead

Specified by:
listAllObjects in interface ResourceAdapter
Overrides:
listAllObjects in class SAPResourceAdapter
Throws:
WavesetException

testConfiguration

public WavesetResult testConfiguration()
                                throws WavesetException
Description copied from class: ResourceAdapterBase
Default implementation of test method, calls check create. It is strongly preferred that this is overrided by derived classes so that a real test can be done without burdening the checkCreate method with a large overhead. On errors, an exception can be thrown or the error can be returned in the WavesetResult. Errors in the result will generate a test failure message, messages will appear for success or failure.

Specified by:
testConfiguration in interface ResourceAdapter
Overrides:
testConfiguration in class ResourceAdapterBase
Throws:
WavesetException

startHRProcess

public void startHRProcess()
                    throws WavesetException
Starts the SAP HR report RHALEINI which will send the Person objects to the JCO.Server that is listening.

Throws:
WavesetException

getAttributeValue

public java.lang.Object getAttributeValue(java.lang.String name)
                                   throws WavesetException
Description copied from interface: ActiveSync
Get or set an attribute value for the ActiveSync. Setting an attribute value only changes the in-memory copy of the attribute, not the persistent value. Set is typically only used for status or scheduling updates.

Specified by:
getAttributeValue in interface ActiveSync
Throws:
WavesetException

setAttributeValue

public void setAttributeValue(java.lang.String name,
                              java.lang.Object value)
                       throws WavesetException
Specified by:
setAttributeValue in interface ActiveSync
Throws:
WavesetException

init

public void init()
          throws java.lang.Exception
Description copied from interface: ActiveSync
initialize yourself. throw exception if initialization failed

Specified by:
init in interface ActiveSync
Throws:
java.lang.Exception

shutdown

public void shutdown()
Description copied from interface: ActiveSync
shutdown

Specified by:
shutdown in interface ActiveSync

poll

public int poll()
Description copied from interface: ActiveSync
The poll method. Called at a configurable interval, this
  1. polls the remote resource for changes,
  2. converts them to IAPI calls, and
  3. posts them back to the server.

Specified by:
poll in interface ActiveSync
Returns:
0 if no work done, n if n calls processed.

idocsStart

protected void idocsStart()
Called when IDOC processing starts


mapToSchema

protected java.util.Map mapToSchema(java.util.Map in)
Parameters:
in - Map of attributes, named by "right hand side of the schema"
Returns:
Map of attributes named by left hand side. null if empty.

processIDOC

protected void processIDOC(SAPHRActiveSyncAdapter.IDOC_Segment seg,
                           java.util.Map schemaMap)
                    throws WavesetException,
                           com.waveset.adapter.iapi.IAPIException
Called for each IDOC. Fetch the user map from SAP HR, merge in the data received from IDOC, create an IAPIUser, submit it.

Parameters:
seg - the generic object that represents the IDoc.Segment
schemaMap - schema map from this resource
Throws:
WavesetException
com.waveset.adapter.iapi.IAPIException

idocsDone

protected void idocsDone()
Called when idoc processing is done (if processing is deferred, run now)


callCompleted

public void callCompleted(com.waveset.adapter.iapi.IAPI call)
OBSOLETE An call generated by this resource adapter has completed. Check the result of the call, propogate the result back to the source (like updating a column in a database), and delete it if we are done.

If this does not delete the call, there must be something else that deletes it - or it will just go away when it expires.

Parameters:
call - - the event that has changed.
See Also:


callEmployeeBapis

protected java.util.Map callEmployeeBapis(java.lang.String EmployeeId)
                                   throws WavesetException
Call the needed bapis to retrieve the Employee data. Table driven, takes the return data from each call and merges them into a Map. Naming in the map is infotype:subtype:attributeName. So for email, this is 0105:MAIL:E2P0105001:ID. Personal data does not have a subtype so it is 0002::E2P0002001:MIDDLENAME (note the double colon).

Throws:
WavesetException

stringToDate

protected java.util.Date stringToDate(java.lang.String in)
                               throws WavesetException
Overrides:
stringToDate in class SAPResourceAdapter
Throws:
WavesetException

dateToString

protected java.lang.String dateToString(java.util.Date in)
                                 throws WavesetException
Overrides:
dateToString in class SAPResourceAdapter
Throws:
WavesetException

realDisable

public void realDisable(WSUser user,
                        WavesetResult result)
                 throws WavesetException
Disables a user, called within a connected context.

Overrides:
realDisable in class SAPResourceAdapter
Throws:
WavesetException

realEnable

public void realEnable(WSUser user,
                       WavesetResult result)
                throws WavesetException
Enables a user by setting adminLockout to false

Overrides:
realEnable in class SAPResourceAdapter
Throws:
WavesetException

realCreate

protected void realCreate(WSUser user,
                          WavesetResult result)
                   throws WavesetException
Create a new user account on the resource This method is called by createAccounts (the multiuser create method). CreateAccounts will open a connection, call realCreate for each user being created, then close the connection.

Overrides:
realCreate in class SAPResourceAdapter
Throws:
WavesetException

realUpdate

protected void realUpdate(WSUser user,
                          WavesetResult result)
                   throws WavesetException
Description copied from class: ResourceAdapterBase
Needs to be overridden by subclass if default updateAccounts() implementation is used.

Overrides:
realUpdate in class SAPResourceAdapter
Throws:
WavesetException

realDelete

protected void realDelete(WSUser user,
                          WavesetResult result)
                   throws WavesetException
Description copied from class: ResourceAdapterBase
Needs to be overridden by subclass if default deleteAccounts() implementation is used.

Overrides:
realDelete in class SAPResourceAdapter
Throws:
WavesetException

logUpdate

protected void logUpdate(int level,
                         WavesetResult result)
Log whatever we want to from an update.