The purpose of Record Reservation is to maintain higher integrity by preventing other users/processes from accessing a certain table simultaneously by recording data into the F00095 - Business Object Reservation table. By implementing this constraint, two different processes do not compete to update/delete a certain table at the same time.
This document is to explain how EnterpriseOne applications make use of user record reservation across the system.
If there is any application which has to update critical information, record reservation routine will take place. This routine comes in Update Mode of the entry point of a transaction or in an application which updates any transaction created by another application.
A simple rule is to determine the target table and get the primary key of it (or primary key of header file) along with the application ID (or UKID).
For further details, review how the table F00095 is structured and how each business function can be implemented in a certain update routine.
This document is for the EnterpriseOne developer and system administrator for the purpose of:
Alias | Data Item | Description | Used for |
---|---|---|---|
OBNM | NameObject | Object Name | This column contains the target table to reserve (e.g., F4211 - Sales Order Detail) |
GENKEY | GenericKey | Generic Key | The unique value against the target (Header) table. (e.g., concatenated value of Order Number, Order Type and Order Company as this is primary key of Sales Order Header File) |
USER | UserId | User ID | User ID who is working based on above generic key. This value will be used to show descriptive error message |
PID | ProgramId | Program ID | The program ID which reserves a record |
UPMJ | DateUpdated | Date - Updated | Date Last Update |
UPMT | TimeLastUpdated | Time - Last Updated | Time Last updated |
JOBN | WorkStationId | Work Station ID | Workstation ID where above user is working |
This table behaves like a work file, so the value inserted through the reservation will be removed at the end of the transaction. If needed, it may be necessary to truncate the table on a regular basis.
Codes | BSFN | Description | Used For |
---|---|---|---|
N0000604 | ValidateApplicationId | Validate Application Id | The routine to verify UDC 00/RR to determine whether to write a record into F00095 through F00095ReserveObject or not. Not all the record reservation routine calls this business function. Refer to <Document 625589.1> E1: 40: User Record Reservations |
X00022 | GetNextUniqueKeyID | Get Next Unique Key ID | In case Program ID has to be unique this function can be called to get F00022.UKID against RRESERVE or relevant object. Some applications may call this function to write Unique Application ID per user session. |
N0000602 | F00095ReserveObject | F00095 Reserve Object | Main function which writes record reservation data and validate user actions. |
B0000603 | SetReservationError | Set Object Reservation Text Substitution Error | To provide a more meaningful message on screen/work center with explanation why a certain transaction can't be performed. Refer to <Document 1137833.1> E1: FDA: 'Reserved By' Prompt Notice not Showing Address Book Number and/or Alpha Name |
N0000602 | F00095RemoveReservation | F00095 Remove Business Object Reservation | Process to delete a record from F00095 based on UserID, NameObject (Target Table) and ApplicationID |
Below are detail configuration of individual Business Functions.
Parameter Name | Data Item | Data Type | I/O | Purpose |
---|---|---|---|---|
szApplicationID_PID | PID | String | I | Hard Code application ID (e.g., P4210) |
cValidateApplication_ERR1 | ERR1 | Character | O | F0005.SPHD (Special Handling Code) against UDC 00/RR - Object In User Application ID. It returns 1 or 0 |
Parameter Name | Data Item | Data Type | I/O | Purpose |
---|---|---|---|---|
szObjectName | OBNM | String | I | To get unique identifier (meaningless). This value can be RRESERVE or a specific application ID (e.g., P4617, R4617) |
mnUniqueKeyID | UKID | Math Numeric | O | F00022.UKID value |
Parameter Name | Data Item | Data Type | I/O | Purpose |
---|---|---|---|---|
szNameObject | OBNM | String | I | (Required) Target Table to reserve record as defined in application which calling this Business Function |
szGenericKey | GENKEY | String | I | (Required) Index or primary key for target table or target header file |
szUserId | USER | String | I | (Required) SL UserID |
szApplication | PID | String | I | (Required) The application which is calling this business function either it is hard coded or UKID |
cSuppressErrorMessage | EV01 | Character | I | Whether to suppress detail error or not 1 - Suppress error message which returns szErrorMessageID 114Q or 113C 0 - Do not suppress error by calling BSFN B0000603 |
szErrorMessageID | DTAI | String | O | When cSuppressErrorMessage is 1 which returns, 114Q - Warning - Reserved by &1 113C - Reserved by &1 |
szReserversNameAlpha | ALPH | String | O | F0101.ALPH based on F0092.AN8 on Reserver's User ID from F00095 when a record is reserved by other process |
szReservesApplication | PID | String | O | When a record is reserved by a certain process this is the application which reserve that record |
cWarningError | EV01 | Character | I | 1 - Warning 2 - Error |
cModeOfProcessing | EV01 | Character | I | - Interactive applications 1 - The 1st UBE (calling) from 2 cycle process UBEs 2 - The 2nd UBE from 1st (called) from 2 cycle process UBEs 3 - Single cycle UBEs |
mnJobNumber | JOBS | Math Numeric | I | Only when a certain UBE is 2 cycle processes this value will be assigned to indicate Job Number |
szComputerID | CTID | String | I | Only when a certain UBE is 2 cycle processes this value will be assigned to indicate Machine ID |
Case (cModeOfProcessing = 2): This is record reservation for called report so F00095 has to be written in running 1st calling UBE for 2nd UBE. So this mode is checking whether the object is reserved by composite key based on Input szGenericKey with szJobNumber and szComputerID.
cModeOfProcessing = 2 | |
---|---|
Validation | Check F00095 based on szNameObject and szGenericKey szGenericKey = szGenericKey + szJobNumber + szComputerID (e.g., DOCO+DCTO+KCOO+JOBS+CTID) |
Return | szReserversApplication |
Error Code | When F00095 contains data meet above validation
|
Case (cModeOfProcessing = IN (1, 3, )): When N0000602 is called from interactive applications.
cModeOfProcessing = | |
---|---|
Validation | Check F00095 based on szNameObject and szGenericKey |
Returns | When F00095 is reserved return,
|
Error |
|
Error Code | cSuppressErrorMessage is 1
cSuppressErrorMessage is not 1 then call B0000603 - SetReservationError |
Reserve record |
When F00095 does not contain data meet then insert data into F00095
|
Case (cModeOfProcessing = 1 ): The 1st UBE (calling) from 2 cycle process UBEs which writes F00095 twice to secure transaction of calling and called UBE and 2nd insert will take place as below
cModeOfProcessing = 1 | |
---|---|
Reserve record | szGenericKey = szGenericKey + szJobNumber + szComputerID (e.g., DOCO+DCTO+KCOO+JOBS+CTID)
|
Parameter Name | Data Item | Data Type | I/O | Purpose |
---|---|---|---|---|
szReserversNameAlpha | ALPH | String | I | (Required) szReserversNameAlpha = F0101.ALPH (where F0092.AN8 based on F00095.USER) |
szGenericKey | GENKEY | String | Same GenericKey written in F00095 this value will be used to describe detail in error | |
szApplication | PID | String | Hard coded application ID or UKID | |
cWarningError | EV01 | Character | cWarningError 1 - Warning (114Q) 2 - Error (113C) |
Parameter Name | Data Item | Data Type | I/O | Purpose |
---|---|---|---|---|
szUserId | USER | String | I | (Required) SL UserID |
szNameObject | OBNM | String | I | Target table to reserve record |
szGenericKey | GENKEY | String | I | Primary Key of target table |
szApplication | PID | String | I | Either hard coded application value or UKID |
For actual implementation, review :
Since record reservation routine is written as event rule for a certain application. Commonly, reservation takes place at Post Dialog Is Initialized event and remove occurs at Post Commit event. In case power edit or additional routine takes place then below business functions can be called to isolate a certain transaction from extended function/application.
Though it has individual business function as below overall routine is more or less same with basic business function described above. This is natural based on the way Reserve and Remove functions get called from application.
Object Name | Business function (Description) | Others |
---|---|---|
B03B0142 | ReceiptsEntryReadCache (Receipts Entry Read Cache) | Application ID = P03B102, P03B602 to call F00095ReserveObject03B |
B03B0143 | ReceiptsEntryLoadInvoices (Receipts Entry Load Invoices) | Check F03B13A reservation by calling F00095CheckRecordExistence03B. If true then reserve F03B13C through F00095ReserveObject03B |
B03B0152 | F03B11LoadByStatementNumber (F03B11 Load By Statement Number) | Check F03B13A reservation by calling F00095CheckRecordExistence03B. If true, then reserve F03B13C through F00095ReserveObject03B |
B03B0158 | ReceiptsEntryCheckCache (Receipts Entry Check Cache) | same with B03B0152 |
B03B0169 | InvoiceMatchProcess (Invoice Match Process) | same with above |
B03B0172 | InvoiceSelectionCheckCache (Invoice Selection Check Cache) | same with B03B0142 |
B03B0260 | ARAPNettingRollback (AR/AP Netting Rollback) | To call F00095ReserveObject |
B03B0290 | ReceiptDetailRecordsLooping (Receipt Detail Records Looping) | same with B03B0152 |
B03B0291 | F00095 Business Object Reservation - 03B | To reserve and remove record reservation for AR |
B09E0025 | F00095ReserveObjThisSession_09E (F00095 Reserve Object This Session 09E) | To check record is reserved or not. If not, reserve it. |
B09E0095 | GetRecordReservationSetting (Get Record Reservation Setting) | Process EMS Record Reservation - GetRecordReservationSetting - ReserveExpenseReport - ReleaseExpenseReport |
B3103160 | ProcessCompletion (Process Completion) | UDC 00/RR is defined for P31114 and order is reserved by other users then set error by calling SetReservationError If Project Number (F4108.PRJM) is populated then reserve F4801 based on application ID B3103160. |
B31B0602 | Blend Management Record Reservation | This function is made up of,
|
B31B0603 | BlendDirectRecordsReservations | To call either F00095ReserveObject or F00095RemoveReservation |
B31B0604 | Trial Blend Record Reservation | To call either F00095ReserveObject or F00095RemoveReservation at,
|
B31P0060 | ETORecordReservationValidation | Checks the Locked Records and inserts them in F31PUI02 table Check for Reservation for the current Task Number Reserve F4801 when application ID is P31P001 by calling F00095ReserveObject and release it by calling F00095RemoveReservation |
B3400602 | Set Record Reservation Error for PMPN Orders | To Set Record Reservation Error for PMPN Orders through SetRecordReservationError based on input key Additionally RemoveReservationForAppID to remove reserved records |
B34A2550 | APSCreateWorkOrderHeader (APS Create Work Order Header) | To reserve F4801 through R34A900 by calling F00095ReserveObject and F00095RemoveReservation to release it. |
B34A4580 | VCPCreateWorkOrderHeader (VCP Create Work Order Header) | To reserve F4801 through R34A1560 by calling F00095ReserveObject and F00095RemoveReservation to release it. |
B3700620 | F00095 Reserve Test Definition | To resver QATEST by calling F00095ReserveObject and F00095RemoveReservation to remove it. |
B4004100 | create Commodity Code Catalog | This function will call the B4004100 business function to add the commodity to the commodity code cache (B4004000) |
B4004530 | reserve Commodity Codes | Same with above |
B4004550 | reserve Commodity Code Including Children | This is a recursive function that will retrieve all the child commodity code nodes and load it into the cache record. When a commodity code is passed into the function, the function will load the commodity code plus all of its children into the cache function. Then call F00095RemoveReservation is child is reserved. |
B40G00RR | GrowerRecordReservation (Grower Record Reservation) | (Input) cRRActionCode 1 - Reserve by calling F00095ReserveObject 2 - Remove by calling F00095RemoveReservation |
B40G0300 | Records Reservation By Frozen Estimate Name | This function is made up of,
|
B40G1210 | Harvest Record Reservation | Calling reservation BSFN against R40G0300 |
B4101720 | F4101 Record Reservation | (Input) cRRActionCode 1 - Reserve by calling F00095ReserveObject 2 - Remove by calling F00095RemoveReservation |
B4101750 | F4102RecordReservation (F4102 Record Reservation) | (Input) cRRActionCode 1 - Reserve by calling F00095ReserveObject 2 - Remove by calling F00095RemoveReservation |
B4103020 | Usage Entry | Reserve F4132 agasint P4131 application |
B4103030 | Usage Processing | Same with above |
B4204200 | Sales Order Integrations Wrapper | Reserve and remove against F4211 when this function gets called |
B4206010 | Process Sales Order for Demand Schedule | Reserve and remove against F4211 through B4206010 |
B4210010 | Create Sales Order Functions | Model function in MVC architecture can call Reserve and Remove which behavior same manner with event rule in P4210. For detail, refer to<Document 1212163.1> E1: 42: MVC Architecture (Powerform) and Sales Order Entry (P42101) |
B4210390 | Sales Order Model Common Functions | Same with above |
B4252210 | CheckForF00095RecordExistence (Check for F00095 Record Existence) | This function is to check whether F4211 is resevered or not from Allocation processing |
B4277712 | Allocation Commit Sales Order | F00095RemoveReservation can be called in handling F4211 got deleted |
B4277720 | Release from Allocation Processing | Call F00095RemoveReservation to release record reservation against F4211 |
B4277738 | Evaluate and Reserve Record | If it is not reserved yet, call F00095ReserveObject to reserve table F4211 |
B4277740 | WBCreateTPFailureMessage (WB Create Transaction Failure Message) | If Transaction got failed then call F00095RemoveReservation because commonly F00095RemoveReservation gets called at Post Commit Event |
B4277754 | Auto Fulfillment Release Reservation | To reserver and remove reservation against F4211 by calling F00095ReserveObject and F00095RemoveReservation |
B4277762 | Fulfillment Management Entry Processing | Same with above |
B4277790 | LoadBalanceAutoFulfillment (Load Balance Auto Fulfillment) | Same with above |
B4302190 | PurchaseOrderAcknowledgeNotify (Purchase Order Acknowledge Notify Inbound) | Validate data application ID P4310 and reserve against F4311 which is same cycle with P4310 |
B4302240 | XPI Purchase Order Receipt | Same with P4312 to reserve record against F4311 |
B4302280 | EditSelfServicePODetail (Edit Self Service PO Detail) | Same with above |
B4302300 | XPI Voucher Match | To implement routine in P4314 to reserve/remove table F4311 and F43121 |
B4302690 | PO Acknowledgement Edit Line Wrapper | Same implemenation with P4310 to resver record against F4311 |
B4302712 | Verify Records from Progress Payment | Same with P4310 to reserve F4311 |
B4302840 | UpdateOrderStatusAndShipmentInfo (Update order status and shipment information) | Same with above |
B4303020 | ReservedByUsage (Reserved By Usage) | Reserved By Usage |
B4304000 | Generate Automatic Voucher Match Cache | Same with P4314 to reserve F43121 |
B4305290 | Purchase Order Record Reservation | To enable record reservation against F4311 from external calling |
B4305320 | Purchase Order Controller | Ready for Model as implemented in P4310 to reserve record against F4311 |
B4305500 | ProcessProgressPaymentsfromCM (Process Progress Payments from CM) | To remove reservation from external calling. This can be happening when a certain routine has to be handled asynchronously. |
B43C2000 | Public Contract Functions and Constants | The Transaction ID will be used as the unique identifier for the instance of this application. Since the RR table (F00095) is keyed off the app name (PID) we need to convert the unique numeric value (TCID to a PID) to a string |
B43E4100 | FindCommodityCodeStructure (Find Commodity Code in Tree) | This function will call the B43E4100 business function to add the commodity to the commodity code cache (B4004000). |
B43Q2000 | Sourcing Processing | The Transaction ID will be used as the unique identifier for the instance of this application. Since the RR table (F00095) is keyed off the app name (PID) we need to convert the unique numeric value (TCID to a PID) to a string. The application id (PID) because the scenario where the user opens multiple instances of the application will not be caught. |
B46L0620 | EditLPNCommitmentOverride (EditLPNCommitmentOverride) | To reserve/remove F4611 |
B49T0025 | TransporationArrangedXMLParser (Transporation Arranged XML Parser) | To reserve/remove F49T90 |
B49T0300 | TableAndCacheFunction (Table and Cache Function) | Same with above |
B49T0500 | parseTransInboundTransmissions (parse Trans Planning Inbound Transmissions) | Same with above |
B5300030 | ProcessChangeRequestsfromCM (Process Change Requests from CM) | To reserve Contracts against F5311 |
B54HS000 | CommonFunctionsForIncident (Common Functions for Incident) | Same with P54HS00 |
B7400008 | ReleaseLegalInvoiceNN_74 (Release Legal Invoice NN in F7400001 - COMM - 74) | Reserve/Remove F7400001 |
B7400009 | ReleaseSignedInvoice_74 (Release Signed Invoice in F743011 - COMM - 74) | Reserve/Remove F743011 |
BCW57 | WorkOrderEclatement (WO Part List Split for Style Items) | Reserve/Remove F4801 |
BCW76 | Validation or Cancellation of Proposals | same with PCW29 |
N1702650 | Service Order Integration | To reserve/Remove F4801 |
N3101780 | Kanban Processing | To reserve/remoe F3016, F3016T and F30161 |
N4200860 | Backorder Release MBF | Reserve/Remove F4211 against R42118 |
N4302320 | F4311 Fetch Self Service Purchase Order Detail | Same with P4310 to reserve F4311 |
N4600440 | Warehouse Confirmation Master Business Function | To reserve/remove F4611 |
N4901330 | Reserve Orders for Transportation | To reserve/remove against F4211 and F4311 |
N90CD005 | PerformRecordLocking (Perform Record Locking) | To reserve/remove F1201 |
N90CD026 | WO Parts Control | To reserve/remove F4829 and F3111 |
N90CD031 | Work Order Labor Control Module | To reserve/remove F31172 |
XT4312Z1 | Purchase Order Receipts | For landed cost (F4311 is written at P4312) because landed cost can be called from multiple applications. |