Oracle® Retail Warehouse Management System Implementation Guide Release 15.0 E68108-01 |
|
![]() Previous |
![]() Next |
The Activity Monitor is an embedded part of the Enhanced Navigation (EN) web application.
Figure 4-1 shows the different components of the solution within the context of a three tiered platform and applications architecture.
The solution implements on a dual tiered polling approach to refreshing user displays and the ADF DVT components within them. These are labelled in Figure 4-2 with labels (a) through (d) which can be categorized as:
Main Poll Process (a) and (b)
Figure 4-2 illustrates this process in more detail.
A Timer event triggers a worker class to call a Poller object's run()method. This event is generated by a timer thread that is maintained at the context of the entire web application and therefore facilitates the process to execute independently of user sessions.
After synchronizing the server timestamps with the database, a sequence of function calls are invoked to the database Dashboard Helper packaged functions which respond with summary count records that update a shared Java object graph. The object graph maintains tasks counts that are shared across user sessions and used to refresh views dynamically.
Summaries of historical records are also processed in the same call sequence. They are all read on the initial poll, but filtered to return and process just the current day's records in subsequent poll cycles.
Automatic Browser Refresh using ADF Faces Poll Operations (c)
The normal ADF rendering life cycle produces the appropriate views for the Dashboard in a supported web browser. The browser refreshes these views using client side AJAX poll operations that call the shared object model for data from the server's managed beans using ADF binding references on the various view objects like graphs and tables.
There is no direct interaction required from the view layer components with the database to render summary pies, graphs and tables with the appropriate data. Instead, the managed beans transform the counts held by object instances in the memory model to the appropriate formats and classes required by each type of widget on each page.
The shared object model therefore supports much better scaling without placing additional load on the server because the main poll cycle is delegated to a single background thread.
Collectively, flows (a) through (c) form the overall polling process that keeps the views in the Dashboards in sync across all user sessions.
User Drill Down Interactions (d)
When users click on a summary graph or table for additional details for export tables, the following sequence on interactions occurs between the various component actors in the different layers of the solution.
This is out of the box behavior that uses ADF request/response actions with dynamic components and is covered in depth in the Fusion development guides for JSF components. The sequence can be summarized as follows:
A mouse click is propagated to the appropriate backing bean of the page fragment through a JavaScript event and a PPR action is queued for the server.
The backing bean invokes the appropriate handler code to call an Iterator Binding in the page definition of the fragment.
This in turn. Invokes the underlying VO instance that calls the appropriate Helper function within its query body. The WHERE and ORDER BY clauses in the VO query handle the parameterisation of the specific entity data that was clicked filtering the required result set.
The Iterator binding is updated which in turn updates the component model of the export table and sends the response back to the client browser.
The client updates the Document Object Model (DOM) child elements and then renders the output.
The Activity Monitor is an embedded part of the Enhanced Navigation (EN) web application and therefore inherits various elements from it. This section summarizes what is inherited and outlines Dashboard specific parts of the configuration.
Inherited Features
The following items are inherited from the EN deployment:
Environment Setup and Technical Stack
Security including roles and privileges
Localization features
Configuration Settings - with the addition of settings for poll frequencies covered in the following section
Specific Configurations for Activity Monitor Polling
The following are the application.properties file values to control the operation of the server and client poll cycles:
The dashboard.poll property determines the frequency that the Timer thread uses to drive the main poll process for the shared object model in milliseconds. Values less than 10 seconds are ignored and default to 40 seconds. The timer generates events after the completion of the last poll process and is therefore independent of the data set sizes returned.
The ajax.poll property is bound to JSF Poll operation components that use AJAX to sequence PPR requests to refresh pages. Again, values less than 10000 milliseconds default back 20 seconds.
Unlike the standardized formats for result sets used by the Polling engine, the View Objects for drill downs are specific to the structure of the export tables in each of the Dashboard views.
Customers can implement their own underlying queries in the Database Helper functions to meet their own requirements as long as the column formats and naming conventions are adhered to.
All API functions are streamlined to use output column name formats outlined below. These reflect the underlying Sql data types:
output_valueNN for VARCHAR2 values where NN can be in the range 01..10
output_numberNN for NUMBER values where NN can be in the range 01..10
output_dateNN for DATE values where NN can be in the range 01..10
The TD operates by executing queries against functions maintained by the Helper package to both collect summary data by the main server polling process, and to support user specific export data based on the user mouse selections.
Summary Data Functions - used to update the shared memory model that is in turn used to render the dynamic JSF components in user views. The query wrappers perform the correct ordering and filtering of values with the appropriate ORDER BY clauses to optimize parsing for the shared model updates.
For example the following SQL code snippet is used to collect all summary data for active tasks for Transport, Cycle Counts and Picks:
All wrapper queries are embedded in the compiled ADF WebApp distribution and are invisible to customized Dashboard Helper implementations.
Drill Down Data Functions - used by ADF VOs to populate exportable output tables. VOs are view specific and defined for each export table.
The drill down functions of the API that provide view specific detailed outputs do not require any input parameter values in the call. Each related VO query provides the appropriate parameterization for the call based on what is being clicked by the user.
For example, the following SQL code snippet is defined as the query for the DailyApptSummaryView VO that is used to populate the daily appointments export table when a user clicks the summary graph on the same page.
Table 4-1 describes the individual functions supported by the Dashboard Helper API.
Table 4-1 Functions Supported by Dashboard Helper API
Function Type | Function Name | Returned data |
---|---|---|
Summary |
get_active_tasks_data() |
Summary task counts for Transport, Cycle Counts and all Pick types |
get_daily_appt_data() |
Summary data for the daily appointments |
|
get_sched_appt_data() |
Summary scheduled appointments |
|
get_unsched_po_data() |
Summary of unscheduled PO |
|
get_open_trailer_data() |
Summary of open trailers |
|
get_task_duration_data() |
Summary of task durations |
|
get_appt_hist_data() |
Summary of historical appointment data |
|
get_asn_out_hist_data() |
Summary of ASN history records |
|
get_task_hist_data() |
Summary of historical records for Transport, Cycle Counts and all Pick types |
|
Detailed |
get_active_tasks_detail_data() |
Detailed task data for Transport, Cycle Counts and all Pick types |
get_task_hist_detail_data() |
Task details for historical records for Transport, Cycle Counts and all Pick types |
|
get_daily_appt_detail_data() |
Task details for daily appointments |
|
get_sched_appt_detail_data() |
Task details for scheduled appointments |
|
get_unsched_po_detail_data() |
Task details for unscheduled PO |
|
get_appt_hist_detail_data() |
Task details for historical appointment data |
|
get_outbound_hist_detail_data() |
Task details for ASN history records |
|
get_open_trailer_detail_data() |
Task details for open trailers |
Table 4-2 shows the standardized structure for summary data function outputs:
Table 4-2 Standardized Structure for Summary Data Function Outputs
Query clause and SQL Type | GROUP BY as VARCHAR2 | Counts as NUMBER(INT) | ||||||
---|---|---|---|---|---|---|---|---|
TD Model Attribute Names | FACILITY | LABEL | STATE | ACTIVITY | TOTAL | PALLETS | CARTONS | UNITS |
Output Columns | output_value01 | output_value02 | output_value03 | output_value04 | output_number01 | output_number02 | output_number03 | output_number04 |
Function Name | ||||||||
get_active_tasks_data() |
Facility ID |
Value for grouped views For example, Zones names or Wave numbers. Null wave values should output 'ROP' |
CO, IP or NS |
Activity codes for Transport, Cycle Counts and Picks |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
get_daily_appt_data() |
Facility ID |
Grouped by value of APPT_STATUS value to support categorization of PRINTED values in the Dashboard |
CO, IP or NS |
Activity codes for Appointments |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
get_sched_appt_data() |
Facility ID |
Appt. timestamp value formatted as YYYY-MM-DD |
CO, IP or NS |
Activity codes for Appointments (excluding BLIND activities) |
Total tasks |
0 |
Total appointed container count |
Total appointed unit count |
get_unsched_po_data() |
Facility ID |
Not before date value formatted as YYYY-MM-DD |
CO, IP or NS |
Activity code PO_VOL |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
get_open_trailer_data() |
Facility ID |
TRAILER_ID values |
CO, IP or NS |
Activity code OPEN_TRAILERS |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
get_task_duration_data() |
Facility ID |
Time bucket in hours. Currently set to 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20, 24, 48, 72 , >72 |
CO |
Activity codes for Transport, Cycle Counts and Picks (See Table 3) |
Total task count per time bucket |
0 |
0 |
0 |
get_appt_hist_data() |
Facility ID |
End timestamp using format YYYY-MM-DD |
CO |
Activity codes for Appointments |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
get_asn_out_hist_data() |
Facility ID |
End timestamp using format YYYY-MM-DD |
CO |
Activity code ASN_OUT |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
get_task_hist_data() |
Facility ID |
End timestamp using format YYYY-MM-DD |
CO |
Activity codes for Transport, Cycle Counts and Picks (See Table 3) |
Total tasks |
Total Pallets |
Total Cartons (Cases) |
Total Units |
Table 4-3 shows the structure of detail data function outputs.
Table 4-3 Structure of Detail Data Function Outputs
Function | get_active_tasks_detail_data() | get_task_hist_detail_data() | get_daily_appt_detail_data() | get_sched_appt_detail_data() | get_unsched_po_detail_data() | get_appt_hist_detail_data() | get_outbound_hist_detail_data() | get_open_trailer_detail_data() |
---|---|---|---|---|---|---|---|---|
Column | ||||||||
output_value01 |
FACILITY |
FACILITY |
FACILITY |
FACILITY |
FACILITY |
FACILITY |
FACILITY |
FACILITY |
output_value02 |
TASK |
TASK |
DOOR_ID |
DOOR_ID |
TRAILER |
DOOR_ID |
TRAILER |
TRAILER_ID |
output_value03 |
ACTIVITY |
ACTIVITY |
APPT_STATUS |
APPT_STATUS |
SHIPPED |
CREATED |
SHIPPED |
CONTAINER_ID |
output_value04 |
STATE |
STATE |
LABELED_RECEIVING |
LABELED_RECEIVING |
DESTINATION |
APPT_START_TS |
DESTINATION |
LOCATION_ID |
output_value05 |
CREATED |
CREATED |
TRAILER_ID |
TRAILER_ID |
DOOR |
APPT_END_TS |
DOOR |
LOAD_TS |
output_value06 |
STARTED |
STARTED |
DELIVERY_MODE |
DELIVERY_MODE |
BOL_NBR |
ACTUAL_START_TS |
BOL_NBR |
CONTAINER_STATUS |
output_value07 |
ENDED |
ENDED |
CARRIER_CODE |
CARRIER_CODE |
ASN_NBR |
ACTUAL_END_TS |
ASN_NBR |
DESTINATION |
output_value08 |
ZONE |
ZONE |
LOAD_TYPE |
LOAD_TYPE |
EST_ARR_DATE |
STARTED |
EST_ARR_DATE |
FINAL_LOCATION_ID |
output_value09 |
WAVE |
WAVE |
APPT_TYPE |
APPT_TYPE |
CARRIER |
ENDED |
CARRIER |
CARRIER_CODE |
output_value10 |
DESTINATION |
DESTINATION |
USER_ID |
USER_ID |
CONTAINERS |
APPT_STATUS |
CONTAINERS |
SERVICE_CODE |
output_value11 |
ATTRIBUTE (User) |
ATTRIBUTE (User) |
PO_NBR |
PO_NBR |
UNITS |
LABELED_RECEIVING |
UNITS |
ROUTE |
output_value12 |
LOCATION |
LOCATION |
ITEM_ID |
ITEM_ID |
PALLETS |
TRAILER_ID |
PALLETS |
TRAILER_STATUS |
output_value13 |
BULK_FLAG |
DELIVERY_MODE |
MASTER_CONTAINER_ID |
|||||
output_value14 |
STATE |
STATE |
CARRIER_CODE |
|||||
output_value15 |
ACTIVITY |
ACTIVITY |
LOAD_TYPE |
|||||
output_value16 |
APPT_NBR |
APPT_TYPE |
||||||
output_value17 |
WAVE_NBR |
USER_ID |
||||||
output_value18 |
SCHD_NBR |
PO_NBR |
||||||
output_value19 |
CASEPACK |
ITEM_ID |
||||||
output_value20 |
APPTD_CONTAINER_QTY |
STATE |
||||||
output_value21 |
APPTD_UNIT_QTY |
ACTIVITY |
||||||
output_number01 |
PALLETS |
PALLETS |
RCVD_CONTAINER_QTY |
APPT_NBR |
APPT_NBR |
|||
output_number02 |
CARTONS |
CARTONS |
RCVD_UNIT_QTY |
WAVE_NBR |
WAVE_NBR |
|||
output_number03 |
UNITS |
UNITS |
RECEIPT_WEIGHT |
SCHD_NBR |
SCHD_NBR |
|||
output_number04 |
CASEPACK |
CASEPACK |
||||||
output_number05 |
APPTD_CONTAINER_QTY |
APPTD_CONTAINER_QTY |
||||||
output_number06 |
APPTD_UNIT_QTY |
APPTD_UNIT_QTY |
||||||
output_number07 |
RCVD_CONTAINER_QTY |
RCVD_CONTAINER_QTY |
||||||
output_number08 |
RCVD_UNIT_QTY |
RCVD_UNIT_QTY |
||||||
output_number09 |
RECEIPT_WEIGHT |
RECEIPT_WEIGHT |
||||||
output_date01 |
CREATED |
CREATION_TS |
||||||
output_date02 |
APPT_START_TS |
APPT_START_TS |
||||||
output_date03 |
APPT_END_TS |
APPT_END_TS |
||||||
output_date04 |
ACTUAL_START_TS and STARTED |
|||||||
output_date05 |
ACTUAL_END_TS and ENDED |
Table 4-4 shows valid task activity codes in result sets from helper API.
Table 4-4 Valid Task Activity Codes in Result Sets from Helper API
Tabs | Internal Subcategory Codes | Valid Activity Codes | Activity Description |
---|---|---|---|
Inbound |
APPOINTMENTS |
ASN |
ASN Appointments |
PO |
Purchase Orders |
||
NSC |
NSC Appointments |
||
FPR_WDET |
FPR (Detailed) Appointments |
||
FPR_WODET |
FPR (No Details) Appointments |
||
BLIND |
Blind Appointments |
||
PO VOLUME |
PO_VOL |
Future PO Volumes |
|
Transport |
MOVES |
C_MOVE |
Case Moves |
P_MOVE |
Pallet Moves |
||
PUTAWAYS |
C_PUTAWAY |
Case Putaways |
|
P_PUTAWAY |
Pallet Putaways |
||
Cycle Counts |
CYCLE_COUNTS |
AC |
Audit Counted |
MM |
Manually Marked |
||
SS |
System Selected |
||
Picks |
UNIT |
U_PICK |
Less than Case Picks |
UP_PICK |
UP Picks |
||
U_PICK_3RD |
3rd Party Picks |
||
U_REPLEN |
U Replenishments |
||
UP_REPLEN |
UP Replenishments |
||
U_REPLEN_3RD |
3rd Party Replenishments |
||
PTS_UNIT |
Unit PTS |
||
CASE |
C_PICK |
Case Picks |
|
CD_REPLEN |
CD Replen. |
||
CP_REPLEN |
CP Replen. |
||
CR_REPLEN |
CR Replen. |
||
CT_REPLEN_R |
CT Replen. |
||
PTS_CASE |
Case PTS |
||
FORWARD_CASE |
CF_PICK |
CF Picks |
|
CB_PICK |
CB Picks |
||
CE_REPLEN |
CE Replen. |
||
CL_REPLEN |
CL Replen. |
||
CO_REPLEN |
CO Replen. |
||
CS_REPLEN |
CS Replen. |
||
CT_REPLEN_F |
CT Replen. |
||
C3_REPLEN |
C3 Replen. |
||
BULK |
B_PICK |
Bulk Picks |
|
BD_REPLEN |
BD Replen. |
||
BP_REPLEN |
BP Replen. |
||
BR_REPLEN |
BR Replen. |
||
BT_REPLEN |
BT Replen. |
||
PR_REPLEN |
PR Replen. |
||
PL_REPLEN |
PL Replen. |
||
PT_REPLEN |
PT Replen. |
||
Outbound |
PAST THROUGHPUT |
THROUGHPUT |
ASN History |
OPEN TRAILERS |
OPEN_TRAILERS |
Open Trailer counts |
Table 4-5 shows valid state codes in result sets from helper API.