EmployeeSupervisorLevelCache

Employee/Supervisor Relationship Level Table Cache

Minor Business Rule

Object Name: B0500380

Parent DLL: CFND

Location: Client/Server

Language: C

Functional Description

Purpose

The purpose of this function is to store all the information related to employee level in 
relationship to the employee's supervisor.


Setup Notes and Prerequisites

Records can be Read, Added, Deleted, or Updated to the cache, depending on Cache Action Code, CACTN, 
passed in. The following is a list of the modes used to select cache processing options:

Input

Processing TypeType

============                                  

Cache Get 1

Cache Add 2

Cache Update 3

Cache Delete 4

Cache Delete All 5

Cache Get Next 6

Cache Add/Update 7 (Do Not Use)

Cache End  8
Cache Close Cursor 9


Return errors through Error Message ID, DTAI.


The cache Key is as follows:

JobNumberA   (from next number server X0010)

szAddressNumber
nLevelInRelationToEmployee

cClearWorkfile (Always set to 1) 

  

The data can be accessed using the full key or a partial key using NumberKeys, NKEYS, to distinguish 
between a full or a partial fetch.  JobNumberA must always be part of the key. 


The Cache Cursor, GENLNG must be past to and from the BSFN.


When adding a record always attempt to Get the record first.  If no error is returned then the record 
already exists and it cannot be added.

Special Logic


Technical Specifications

include the header file b0500380.h
    

Declare Variable     

 IDnJDBReturn;
ID          idReturnValue= ER_SUCCESS;

char        szErrorID[11];           

int         iCacheActionCode;

      

Declare Data Structures

  DSD0500380A          dsCacheKey;
DSD0500380A          dsSaveData;  

Declare pointers

    HUSER               hUser                    = (HUSER) NULL;
HCACHE              hCacheHandle             = (HCACHE) NULL;

Check for NULL pointers, if there are null pointers set error '4363'


Begin Main Processing

 
Initialization Of DS Structure and Save of Workfields  


Initialize the Behavior

If an error occurs initializing the behavior and if cSuppressErrorMessage does not = '1' then 
set error.

  

   iCacheActionCode=atoi(lpDS->szCacheActionCode);


Initialize the Cache 

Call internal function I00500380_InitCache
If no error initializing cache then Process Action code


If iCacheActionCode past in = 1 (Get) then call internal function 

I0500380_CacheGet.
If iCacheActionCode past in = 2 (Add) then call internal function 

 I0500380_CacheAdd.

If iCacheActionCode past in = 3 (Update) then call internal function

I0500380_CacheUpdate.
If iCacheActionCode past in = 4 (Delete) then call internal function

I0500380_CacheDelete.
If iCacheActionCode past in = 5 (Delete All) then call internal function

I0500380_CacheDeleteAll.

If iCacheActionCode past in = 6 (Get Next) then call internal functionI0500380_CacheGetNext.

If iCacheActionCode past in = 7 (Add Update) then call internal function

I0500380_CacheAddUpdate.

If iCacheActionCode past in = 8 (End) then call JDE function

 JdeCacheTerminateAll.

If iCacheActionCode past in = 9 (Close Cursor) then call internal 

Function I0500380_CloseCursor.
If iCacheActionCode = anything else then Error.


Return value of saved fields after cache processing is completed

szErrorMessageID = szErrorID

cSuppressErrorMessage = cSuppressErrorMessage
    szCacheActionCode = dsSaveData.szCacheActionCode

    mnNumberKeys = mnNumberKeys);



Function Clean Up

Free the Behavior
If the pointer szErrorMessageID is not blank and cSuppressErrorMessage does not = '1' then set error.


Internal functions

Function:  I0500380_InitCache   
Initialize cache for Benefit Categories

Declare Variables

JDECM_RESULT       jdeCacheCode = JDECM_PASSED;
Declare structures
DSD0500380AdsCacheKey;
JDECMINDEXSTRUCTIndex[1]; 

Main Processing

Initialize output

SzErrorID = ""
Initialize the cache

Setup And Initialize Cache-Keys to Create Cache once
Set Memory, memset(Index, 0x00, sizeof(JDECMINDEXSTRUCT));


Set the number of segments of the key to = '4'

The first segment of the key is mnJobNumberA

Index->CacheKey[0].nOffset = offsetof(DSD0500380A, mnJobnumberA);

Index->CacheKey[1].nOffset = offsetof(DSD0500380A, mnAddressNumber); 

Index->CacheKey[2].nOffset = offsetof(DSD0500380A, LevelInRelationToEmployee);

Index->CacheKey[3].nOffset = offsetof(DSD0500380A, cClearWorkFile); 


Set lphCacheHandle = "B0500380", 

If there is an error szErrorID = ERR_INIT_CACHE



Function:
  I0500380_CacheGet   
Declare Variables

JDECM_RESULT       jdeCacheCode = JDECM_PASSED;
int   iNumberOfKeys;

    HJDECURSOR     hCursor        =  (HJDECURSOR) NULL;

   DSD0500380dsCacheData;

BOOLbChangedKey;

Main Processing

Initialize output

Set Memory
memset((void *) (lpdsCacheKey),0x00,sizeof(DSD0500380));
memset((void *) (&dsCacheData),0x00,sizeof(DSD0500380));

szErrorID = ""

Initialize Variables  

MathNumericToInt((LPMATH_NUMERIC) &lpDS-
>mnNumberKeys,(LPINT)&iNumberOfKeys);

Open the Cursor if error then szErrorID = "ERR_OPEN_CURSOR"

If no error Reset Cursor 

If iNumberOfKeys = '0' then Fetch the first record

Else fetch the record matching the keys

If there is an error with the fetch then szErrorID = ERR_FETCH_RECORD

if the Cursor does not = NULL then close the cursor



Function:  I0500380_CacheAdd 

Declare Variables

JDECM_RESULT       jdeCacheCode = JDECM_PASSED;
     int iNumberOfKeys;
HJDECURSOR        hCursor      = (HJDECURSOR) NULL;    
ID                idCacheCursor;                       

Main Processing

Initialize output
 
SzErrorID = ""

Set the cache with the number or keys = mnNumberKeys

Set the cursor = idCacheCursor

Copy the memory needed the size of DSD0500380


Add the record the size of DSD0500380

If Add fails then szErrorID = ERR_ADD_RECORD



Function:  I0500380_CacheUpdate   

Declare Variables 

int                iNumberOfKeys;
JDECM_RESULT       jdeCacheCode = JDECM_PASSED;
HJDECURSOR        hCursor      = (HJDECURSOR) NULL;  

   DSD0500380dsCacheData;

ID                idCacheCursor;                       
Main Processing

Initialize output

SzErrorID = ""
Set the cache with the number or keys = mnNumberKeys

Set the cursor = idCacheCursor

Set the memory needed the size of DSD0500380


Fetch the record, if record is found Update the record

If there is an error then szErrorID = ERR_UPDATE_RECORD


Close the Cursor



Function:  I0500380_CacheDelete   

Declare Variables

JDECM_RESULT       jdeCacheCode = JDECM_PASSED;
int   iNumberOfKeys;

HJDECURSOR       hCursor       = (HJDECURSOR) NULL;  

Main Processing

Initialize Variables

SzErrorID = ""
Set the cache with the number or keys = mnNumberKeys


If Number Of Keys = 0 Then call internal function I0500380_CacheDeleteAll

else

Initialize the cursor

Set the memory the size of DSD0500380

Fetch the record

If fetch is successful then delete the record

If there is an error deleting then szErrorID = ERR_DELETE_RECORD

If there is an error fetching then szErrorID = ERR_FETCH_RECORD


Close the cursor



Function:  I0500380_CacheDeleteAll   

Declare Variables

JDECM_RESULT       jdeCacheCode = JDECM_PASSED;

int   iNumberOfKeys;

HJDECURSOR       hCursor       = (HJDECURSOR) NULL;  


Main Processing

Initialize input and output

SzErrorID = ""
Copy the memory needed the size of DSD0500380

Set the cache with the number or keys = mnNumberKeys


Open the Cursor

Delete all records

If there is an error on delete then szErrorID = ERR_DELETE_RECORD


 Close Cursor



Function:  I0500380_CacheGetNext   

Notes:Assumption is made this function will be performed until the

Cache Index is no longer equal to the input index. If this function is prematurely ended, the cursor 

will have to be closed using function I0500380_CloseCursor, or memory leaks will result from the 

cursor being left open.

 

Declare Variables

JDECM_RESULTjdeCacheCode = JDECM_PASSED;
intiNumberOfKeys;

BOOLbMatchKey=FALSE;

BOOLbChangedKey;

    HJDECURSOR     hCursor        = (HJDECURSOR) NULL;

    DSD0500380dsCacheData;

    ID                idCacheCursor;                       

Main Processing

Initialize output
 
SzErrorID = ""

Set the memory needed the size of DSD0500380

Initialize Variables  

Set the cache with the number or keys = mnNumberKeys

Set cursor for either initial fetch or subsequent fetches

If idCacheCursor = 0L then this is a subsequent search 

Open Cursor

Copy the memory needed the size of DSD0500380
Fetch the Next record

if hCursor does not = NULL then fetch the next record

If idCacheCursor <> 0L fetch the first record

If the fetch was successful 

If iNumberOfKeys > 0 then call I0500380_ChangedKey and check that the keys match
If the keys do not match then szErrorID = ERR_FETCH_RECORD

If hCursor does not = NULL then close the cursor

set idCacheCursor   = 0L



Function:  I0500380_CacheAddUpdate 

DO NOT USE THIS FUNCTION



Function:
  I0500380_CloseCursor   
Declare Variables    

HJDECURSOR         hCursor      = (HJDECURSOR) NULL;
Main Processing

If idCacheCursor does not equal 0L then close cursor 
Set idCacheCursor = 0L



Function:  I0500380_ChangedKey   

Test to see if the key matches the key in cache

If it has changed then bChangedKey = True

Else

bChangedKey = FALSE;


End of Internal functions



Data Structure

D0500380A - Employee/Supervisor Relationship Level Table Cache

Parameter NameData ItemData TypeReq/OptI/O/Both
mnJobnumberAJOBSMATH_NUMERICREQINPUT

The job number (work station ID) which executed the particular job.

mnAddressNumberAN8MATH_NUMERICOPTBOTH

A number that identifies an entry in the Address Book system, such as employee, applicant, participant, customer, supplier, tenant, or 
location.

nLevelInRelationToEmployeeLVELintegerOPTBOTH

The number of organizational levels between an employee and a higher level supervisor. An employee's direct supervisor would be a 
level 1 relationship.

cClearWorkFileCLWFcharOPTBOTH

A field that indicates whether the workfiles will be cleared before the system processes the current benefits enrollment.

mnSupervisorANPAMATH_NUMERICOPTBOTH

The address book number of the supervisor.

mnNumberKeysNKEYSMATH_NUMERICREQINPUT

The number of keys in an index that will be used to retrieve, delete, or update a record.

idCacheCursorGENLNGIDREQBOTH

General purpose ID variable.

szCacheActionCodeCACTNcharREQINPUT

A code that indicates the activity you want to perform. Valid codes:     o Get - Retrieve the cache element     o Add - Add a cache element     o 
Update - Update a cache element     o Delete - Delete a cache element     o Delete All - Delete all cache elements     o Get Next - Retrieve the 
next cache element     o Add/Update - Add a cache element if it does not exist; Update a cache element if it does exist     o Terminate - 
Terminate Cache

cSuppressErrorMessageSUPPScharOPTINPUT

A flag indicating whether or not runtime error messaging will occur when an error message is issued from a business function.        0 = allow 
runtime error message handling.        1 = suppress runtime error message handling.

szErrorMessageIDDTAIcharOPTOUTPUT

A code that identifies and defines a unit of information. It is an alphanumeric code up to 8 characters long that does not allow blanks or 
special characters such as %, &, or +. You create new data items using system codes 55-59. You cannot change the alias.

Related Functions

None

Related Tables

None