Record Reservation Related Business Functions in EnterpriseOne

Purpose of Document

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:

 

Table F00095 Layout

AliasData ItemDescriptionUsed 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.


Business Functions that can be Called to Reserve a Record

CodesBSFNDescriptionUsed 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

 

NOTE:


Below are detail configuration of individual Business Functions.

N0000604 - ValidateApplicationId (Validate Application Id - Business Object Reservation Application Id Validation)

Parameter NameData ItemData TypeI/OPurpose
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

 

NOTE:

X00022 - GetNextUniqueKeyID (Get Next Unique Key ID) (Optional)

Parameter NameData ItemData TypeI/OPurpose
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

 

NOTE:

N0000602 - F00095ReserveObject (F00095 Reserve Object)

Parameter NameData ItemData TypeI/OPurpose
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
  • (Warning) 114Q - Warning - Reserved by szReserversApplication
  • (Error) 113C - Reserved by szReserversApplication


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,
  • evt_szReservedUser (F00095.USER)
  • szReserversApplication (F00095.PID)
Error
  • If user is not reserved user set error
  • If user the same but application different, set error
Error Code cSuppressErrorMessage is 1
  • (Warning) 114Q - Warning - Reserved by szReserversNameAlpha
  • (Error) 113C - Reserved by szReserversNameAlpha
szReserversNameAlpha = F0101.ALPH (where F0092.AN8 based on F00095.USER)

cSuppressErrorMessage is not 1 then call B0000603 - SetReservationError
Reserve
record
When F00095 does not contain data meet then insert data into F00095
  • (Input) BF szNameObject -> TK Object Name
  • (Input) BF szGenericKey -> TK Generic Key
  • (Input) BF szUserId -> TK User ID
  • (Input) BF szApplication -> TK Program ID
  • GetAuditInfo.(VA evt_jdDateUpdated_UPMJ) -> TK Date - Updated
  • GetAuditInfo.(VA evt_mnTimeUpdated_UPMT) -> TK Time - Last Updated
  • GetAuditInfo.(VA evt_mnWorkStation_JOBN) -> TK Work Station ID



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)
  • (Input) BF szNameObject -> TK Object Name
  • (New) szGenericKey -> TK Generic Key
  • (Input) BF szUserId -> TK User ID
  • (Input) BF szApplication -> TK Program ID
  • GetAuditInfo.(VA evt_jdDateUpdated_UPMJ) -> TK Date - Updated
  • GetAuditInfo.(VA evt_mnTimeUpdated_UPMT) -> TK Time - Last Updated
  • GetAuditInfo.(VA evt_mnWorkStation_JOBN) -> TK Work Station ID

 


 

B0000603 - SetReservationError (Set Object Reservation Text Substitution Error)

Parameter NameData ItemData TypeI/OPurpose
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)

 

NOTE:

 

N0000602 - F00095RemoveReservation (F00095 Remove Business Object Reservation)

Parameter NameData ItemData TypeI/OPurpose
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 :


 Other business functions which makes use of above functions

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  NameBusiness 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,
  • ReserveOperations:  1. If an operation ID is specified, then reserve it in F00095.  2. If no opertion ID is specified, then reserve all the operation records in Operation Header cache.
  • reserveVessels
  • SetBlendOpReservationError
  • RemoveReservationByProcessID
B31B0603 BlendDirectRecordsReservations To call either F00095ReserveObject or F00095RemoveReservation
B31B0604 Trial Blend Record Reservation To call either F00095ReserveObject or F00095RemoveReservation at,
  • P31B320 - Edit Trial Blend (both Delete and Edit button)
  • P31B30 - Operations Page 2 (Post Dialog is Initialized)
  • B31B4430 - Process Inbound Samples (called by R31BSPZ1)
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,
  • Validate it by calling ValidateApplicationId
  • ReserveRecordsByFRZName by calling F00095ReserveObject
  • Call SetReservationError
  • ReleaseRecordsByFRZName by calling F00095RemoveReservation
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.

 

Note: List above is in-exhaustible when a certain routine is required to reserve table to isolate a certain transaction

To discuss this information further with Oracle experts and industry peers, we encourage you to review, join or start a discussion in the Design Tools & Output Technologies - JDE1 Community.

To look at upcoming or archived Advisor Webcasts please see Advisor Webcast Details <Document 548764.1>.  If your topic is not currently scheduled please suggest it.