Monday, July 20, 2015

MSCA/MWA Framework - Custom Development and Extension - Part 2

Technical Overview of MSCA/MWA Framework Continues...


Event Listener Model


MWAEvent
  • Event object passed to the listener methods in the handlers at the field, page, or app level. 
  • public class MWAEvent extends java.util.EventObject
  • Frequently used properties and their getters and setters inherited from EventObject
    • public Object getSource()
    • public String toString()
  • Stores action property (private java.lang.String m_action)
    • public java.lang.String getAction()
  • Stores session property (private oracle.apps.mwa.container.Session m_session)
    • public Session getSession()
MWAEvent Listeners:

Listeners are utilised for validations, dynamic rendering of the fields, update the values etc. Following are the key Listeners:
  1. oracle.apps.mwa.eventmodel.MWAListener
    • Parent class for all MWA Listeners.
    • public interface MWAListener extends java.util.EventListener
    • Direct subinterfaces - MWAAppListener, MWAPageListener, MWAFieldListener
    • We don't implement this interface directly.
  1. oracle.apps.mwa.eventmodel.MWAAppListener
    • Application Level Event Listener
    • public interface MWAAppListener extends MWAListener
    • Methods - 
      • void appEntered(MWAEvent e) throws AbortHandlerExceptionInterruptedHandlerExceptionDefaultOnlyHandlerException
      • void appExited(MWAEvent e) throws AbortHandlerExceptionInterruptedHandlerExceptionDefaultOnlyHandlerException
    • This interface is& typically implemented by our custom application's menu item bean.
    • oracle.apps.mwa.eventmodel.MWAPageListener
      • Page Level Event Listener
      • public interface MWAPageListener extends MWAListener
      • Methods - 
        • void pageEntered (MWAEvent e) throws AbortHandlerException, InterruptedHandlerException, DefaultOnlyHandlerException
        • void pageExited(MWAEvent e) throws AbortHandlerExceptionInterruptedHandlerExceptionDefaultOnlyHandlerException
        • void specialKeyPressed(MWAEvent e) throws AbortHandlerExceptionInterruptedHandlerExceptionDefaultOnlyHandlerException
          • Ex. Generating Barcodes, Navigating to Main menu etc.
      • This interface is typically implemented by our custom application's page bean.
      • oracle.apps.mwa.eventmodel.MWAFieldListener
        • Field Level Event Listener
        • public interface 
          MWAFieldListener
           extends MWAListener
        • Methods - 
          • void fieldEntered(MWAEvent e) throws AbortHandlerExceptionInterruptedHandlerExceptionDefaultOnlyHandlerException
          • void fieldExited(MWAEvent e) throws AbortHandlerExceptionInterruptedHandlerExceptionDefaultOnlyHandlerException
        • Probably most important class in terms of the custom code that we need to write in this.
        • This interface is typically implemented in a standalone class.
        • The standalone field listener class is instantiated and referenced inside page bean, where we associate it with every field on the page.
        • Field Listener will typically have a constructor where session is passed from page and stored in a class variable.
        • Following are few important code snippet typically used in this field listeners:
          • To get the source of the event:
            • String fieldName = ((FieldBean)mwaEvent.getSource()).getName();
          • To check if it is a submit event:
            • if (mwaEvent.getAction().equals("MWA_SUBMIT"))
          • To get the current page details
            • session.getCurrentPage();
          • To show message in status bar:
            • this.ses.setStatusMessage("Qty Should be > 0");
            • this.ses.setStatusMessage("Trx Successful");
          • To set next field for user entry:
            • session.setNextFieldName();
          • To refresh the screen:
            • session.setRefreshScreen();
          • To throw exceptions:
            • throw new AbortHandlerException("Qty Should be > 0");
          • To signal end of transaction
            • setNextPageName("|END_OF_TRANSACTION|")
        • Most of the above code is from session, we'll see session details in coming section.


      Other Important Classes - MWA Session Classes

      • oracle.apps.mwa.container.Session
        • public class Session extends oracle.apps.mwa.container.BaseSession
        • BaseSession is base class for user session and telnet session.
        • Key methods inherited from BaseSession
          • public java.sql.Connection getConnection()
          • public java.sql.Connection getConnectionFromSession()
          • public void returnConnection()
          • public java.lang.String getCurrentPageName()
        • Key methods in Session class
          • public PageBean getCurrentPage()
            • Returns the current page bean in the page bean list
          • public void setStatusMessage(java.lang.String msg)
            • Displays the argument string on the status bar.
          • public java.lang.String getStatusMessage()
          • public void setRefreshScreen(boolean RefreshScreenFlag)
            • This method set the refresh screen variable Whenever developer change the UI property of the page, e.g. hidden, value, creation of new field, etc, he/she needs to call this method with parameter true so that server will know and refresh the screen
          • public boolean isRefreshScreen()
          • public FieldBean getFieldFromCurrentPage(java.lang.String fieldName)
          • public void setNextFieldName(java.lang.String fName)
            • To set the cursor to some other field.
          • public java.lang.String getNextFieldName()
          • public Logger getLogger()


      Application Flow


      Coding Hints:

      A. Ctrl + X shortcut key for About This Page is a good start for customizing existing functionality.

      B. We typically create following 4 files:
      1. XXABCTransactFunction.java
        • public class XXABCTransactFunction extends MenuItemBean implements MWAAppListener
        • With following two lines in constructor:
          • setFirstPageName("xxabc.oracle.apps.xxabc.applpkg.module.server.XXABCTransactPage");
          • addListener(this);
        • It'll have appEntered() and appExited() methods.
      2. XXABCTransactPage.java
        • public class XXABCTransactPage extends PageBean implements MWAPageListener
        • Typically it'll have following Member variables:
          • For all field beans
          • For session
          • For FieldListener for all fields
        • Constructor will initialize FieldListener bean (Explained Next)
        • Constructor will initialize all fields, associate field listener and add them to page hierarchy.
        • It'll have pageEntered(), pageExited() and specialKeyPressed() methods.
        • It'll have methods for business transactions typically calling PLSQL procedures.
      3. XXABCTransactFListener.java
        • public class XXABCTransactFListener implements MWAFieldListener
        • Typically it'll have following Member variables:
          • session
        • Paramterized Constructor with session variable will initialize member session variable.
        • Rarely we need to write code in fieldEntered() method.
        • FieldExited() will have bulk of the coding based on current page and field exited:
          • String fieldName = ((FieldBean)mwaEvent.getSource()).getName();
            • To identify the field exited.
          • this.ses.getCurrentPage();
            • To identify the current page
        • For transaction logic, it'll have a call to the pageBean's transaction method.
      4. XXABCFieldLOV.java
        • public class XXABCFieldLOV extends LOVFieldBean implements MWAFieldListener
        • Since LOVs are shared components, for easy of use/reuse we usually create them as separate Java files.
        • It'll have member variables, their getters and setters for the return values of the selected LOV record.
        • It'll have constructor will following api calls:
          • setName(), setRequired(), setPrompt(), setValidateFromLOV(), setlovStatement(), setInputParameterTypes(), setSubfieldPrompts(), setSubfieldDisplays(), addListener(this).
        • It'll have fieldEntered() method (usually empty).
        • It'll have fieldExited() method (usually we set all the return values from selected LOV record to member variables).

      Sample Code for all Files:

      Standard Oracle MWA code provides good insight in how to write code. If still any help is needed, please reach me.

      Steps to test the code:

      • Deploy it on the server.
      • Restart the server.
      • Testing on desktop telnet client.
      • View the log for debugging.

      Debugging:

      • Steps to enable logging are in document 338291.1
        • Log files are located in $INST_TOP/logs
        • Logging Levels are Fatal, Error, Warning, Debug and Trace.
        • All Log files start with telnet port number as prefix.
      • In java code following method is used to write log statement:
        • oracle.apps.inv.utilities.server.UtilFns.trace() 
      • In java code to check if trace is enabled:
        • if (UtilFns.isTraceOn)
      • In PLSQL, following code will be used
      • Use Mirroring
      • Check Mobile Services are up and Runing:
        • ps -ef |grep mwa
        • ./ $INST_TOP/admin/scripts/mwactl.sh status
      • Check MWA user sessions
        • netstat -a |grep <MWA PORT> | wc -l
        • netstat -an | grep <MWA PORT>
      • Find port Number of Mobile Services :
        • grep mwa $CONTEXT_FILE
      • Connect to Mobile Services :
        • telnet hostname.domainname portnumber(mobile application service port_number)
      • MWA Troubleshooting Tips for Release 12 (Doc ID 782162.1)

      Reference and Further Reading:

      Note 578667.1 - Customization of Oracle Mobile Supply Chain Applications and Oracle Warehouse Management System
      Note 959087.1 - How To Download The MSCA/WMS JAVADOCS Files For Doing Customization?
      Note 338291.1 - How to Enable WMS / MSCA Logging
      Note 297992.1 - Advanced Barcode Strategies – Custom Scan Framework & profile option "MWA: Custom Scan"
      For Multi-lingual Support and DFI (Data Field Identifier) - Integration with AK repository is needed.

      Previous Read: MSCA/MWA Framework - Custom Development and Extension - Part 1
      Previous Read: Oracle MSCA/MWA Framework - Introduction

      MSCA/MWA Framework - Mobile Personalization

      Mobile Personalization:

      Mobile personalization enables you to customize Oracle Warehouse Management pages without making code changes. Personalization support is present in R12.1.X onwards. Personalization metadata is stored in database level similar to OAF personalization. Following are typical examples of personalizations:
      • Hide fields and buttons
      • Provide default field values
      • Copy the value of a field to another field
      • Set editable fields as read only
      • Set non-required fields as required.

      Personalization Level:
      Similar to OAF Personalization, Following are various levels of personalization for Mobile Pages:
      • Function
      • Responsibility
      • Organization (Inventory Org)
      • User
      Personalization Support in Pages:
      There are around 40 pages (No. of pages vary from release to release) that support personalization. Customers can raise request for new pages to allow personalization. Following are some example:
      1. Assembly Completion by LPN
      2. GME Mobile Backflush
      3. GME Mobile Complete Product
      4. GME Mobile Create Pending Lot
      5. GME Mobile Issue Ingredients
      6. Lot Attributes Page - PO Receipt
      7. Mobile ASN Receipt
      8. Mobile Alias Issue
      9. Mobile Alias Receipt
      10. Mobile Cycle Count
      11. Mobile Inspect LPN
      12. Mobile Item Inquiry
      13. Mobile LPN Inquiry
      14. Mobile LPN Ship
      15. Mobile LPN Ship - Ship Confirm
      16. Mobile Move Order Replenishment
      17. Mobile Org Transfer
      18. Mobile PO Receipt
      19. Mobile PO Receipt Information
      20. Mobile Physical Count
      21. Mobile Pick Drop - Mobile WMS Drop Loaded LPNs
      22. Mobile Pick Load - Mobile WMS Manual Picking
      23. Mobile Replenish Kanban
      24. Mobile Sub Transfer
      25. Mobile WMS Inbound Manual Load
      26. Mobile WMS Inbound Manual Load - Select Contents
      27. Mobile WMS LPN Split
      28. Mobile WMS Manual Picking
      29. Mobile WMS Move Any LPN
      30. Mobile WMS Move Any LPN (Select Item)
      31. Mobile WMS Pack
      32. Mobile WMS Unpack
      33. Mobile WMS Update LPN
      Pre-requisite and Setups needed:
      • WMS Setup should  be completed
      • Set profile option "MWA: Enable Personalization" to Yes.
      • Set profile option "MWA: Cache Personalized Metadata" to No. If this profile option value is set to Yes, then bounce will be required after personalization. Setting the profile option to Yes, results in better performance for personalized pages.
      Steps To Personalize:
      1. Navigate to "Warehouse Manager > Setup > MWA Personalization Framework".
      2. Select the mobile page/function.
      3. Click Personalize
      4. Edit the field to personalize
        • Update the Prompt/Default Value/Rendered/Read Only/Required etc properties.
      5. Click on Activate/Deactivate Personalizations to activate/deactivate personalizations on that page.
      DFF on Mobile Screen:
      1. If DFF is present on mobile screen, it can also be personalized. Example - LPN DFF.
      2. DFF can be in-line - DFF fields are displayed along with other fields on page. If DFF is not in-line, pressing Ctrl + F will open the DFF window.

      Reference:
      Note 469339.1 - Oracle WMS Personalization Framework
      Note 1600812.1 - Mobile Supply Chain Applications (MSCA) Personalization - Webinar
      Note 470011.1 - What WMS Patchset Is Required In Order To Personalize MWA Per Note 469339.1?
      Note 961198.1 - Mobile Personalization White Paper

      MSCA/MWA Framework - Custom Development and Extension - Part 1

      MWA Responsibilities, Menu and Functions

      • The way we create responsibilities, menus and functions is similar to other oracle applications.
      Responsibilities:
      • Responsibilities should have "Oracle Mobile Applications" selected in "Available From".

      Menu:
      • Menu are normally created with menu type "Standard".
      Function:
      • Function should be created with type "Mobile Applications".

      • HTML Call of the function should point to java class full name for menu item bean (We'll discuss more on this in coming section.


      Technical Overview of MSCA/MWA Framework

      In technical overview of the MSCA/MWA Framework, we need to understand Mobile Application Beans (Mobile Application Screen UI Construction) and Event Listener Model (Event Handling like Page Enter, Field Exit, Button click etc):

      Mobile Application Beans

      Following are key Mobile Application Beans:
      1. oracle.apps.mwa.beans.MWABean
        • public class MWABean extends java.lang.Object implements java.io.Serializable
        • Base class for all UI beans.
        • MenuItemBean, PageBean, FieldBean, FlexfieldBean all extend from this class.
        • Maintains a list of MWA event listeners (protected java.util.Vector m_listeners).
          • public void addListener(MWAListener Listener)
          • public void removeListener(MWAListener Listener)
          • public java.util.Vector getListeners()
        • We don't use this bean directly in our coding.
        1. oracle.apps.mwa.beans.MenuItemBean
          • public class MenuItemBean extends MWABean
          • Connects FND Menu Structure to Mobile Application. FND Form function for the Mobile Application points to a MenuItemBean.
          • As per naming convention, MenuItemBean ends with suffix "Function".
          • It stores the key name of the first page of the mobile application (protected java.lang.String m_firstPageName).
            • public java.lang.String getFirstPageName()
            • public void setFirstPageName(java.lang.String FirstPageName)
            • Example - Following statement is typically written in the Constructor:
            • setFirstPageName("xxabc.oracle.apps.abc.xyz.inv.invtxn.server.MyFirstCustomPage");
            • FirstCustomPage is custom PageBean.
            • Other functions it provides are to set/get the menu confirmation message:
              • public void setMenuConfirmMessage(java.lang.String msg)
              • public java.lang.String getMenuConfirmMessage()
          1. oracle.apps.mwa.beans.PageBean
            • public class PageBean extends MWABean
            • Base class for all user developed page level beans.
            • Contains the page prompt which is displayed to the end user as the title of the page (protected java.lang.String m_prompt)
              • public void setPrompt(java.lang.String Prompt)
              • public java.lang.String getPrompt()
            • Maintains list of field beans which are part of this page (protected java.util.Vector m_fieldBeans) and current field indicator (protected int m_curtField):
              • public void addFieldBean(FieldBean FB)
              • public void addFieldBean(int index, FieldBean FB)
              • public void removeFieldBean(FieldBean FB)
              • public void removeAllFieldBeans()
              • public int getCurrentFieldIndex()
              • public int getFieldIndex(java.lang.String key)
              • public FieldBean getCurrentFieldBean()
              • public java.util.Vector getFieldBeanList()
              • public void setFieldBeanList(java.util.Vector BeanList)
            • Contains Session for the page (protected Session m_session) Session Handling methods:
              • public Session getSession()
              • public void setSession(Session sessionObject)
            • Other key methods:
              • To return the full name of the pagebean: public java.lang.String getName()
              • To mark if a page bean is to be instantiated upon each visit during runtime: public boolean isMultipleInstance(), public void setMultipleInstance(boolean MultipleInstance)
            • Typically as first step, we declare the FieldBeans in pageBean class's declaration section, and generate getters and setters for the fieldbeans. In Constructor to add field beans, modify fieldbean properties, change the order of the fieldbeans, associate field Listener to field beans (Details on FieldListener will be covered later).
              • For code examples - please refer FieldBean.
          1. oracle.apps.mwa.beans.FieldBean
            • public class FieldBean extends MWABean
            • Base class for all field level beans.
            • Important Subclasses - ButtonFieldBean, HeadingFieldBean, InputableFieldBean (With Subclasses - LOVFieldBean, MultiListFieldBean, TextFieldBean), ListFieldBean, MessageFieldBean.
            • Maintains name property of the field (protected java.lang.String m_name)
              • public java.lang.String getName()
              • public void setName(java.lang.String Name)
            • Maintains prompt property of the field (protected java.lang.String m_prompt)
              • public java.lang.String getPrompt()
              • public void setPrompt(java.lang.String Prompt)
            • Maintains hidden property of the field (protected boolean m_hidden)
              • public boolean isHidden()
              • public void setHidden(boolean Hidden)
            • Maintains type of field (protected short m_type):
              • default is INPUTTEXT.
              • public int getType()
              • Possible Values include:
                • public static short TEXT
                • public static short LOV
                • public static short MULTILIST
                • public static short LIST
                • public static short BUTTON
                • public static short CHECKBOX
                • public static short RADIO
                • public static short HEADING1
                • public static short HEADING2
                • public static short LINESEPARATOR
                • public static short SPACESEPARATOR
                • public static short MENUITEM
                • public static short RESPONSIBILITYITEM
                • public static short LOVRUNTIMEITEM
                • public static short MULTILISTRUNTIMEITEM
                • public static short DESCFLEX
                • public static short KEYFLEX
                • public static short SEGMENTLOV
                • public static short SEGMENTTEXT
          1. oracle.apps.mwa.beans.FlexFieldBean
            • public class FlexfieldBean extends MWABean implements oracle.apps.fnd.flexj.event.FlexfieldListener
            • It represents the flexfield in the Mobile Applications
            • Constructor - public FlexfieldBean(oracle.apps.fnd.flexj.Flexfield flexfield, oracle.apps.mwa.container.Session session)
            • Maintains boolean variables and getters and setters for readonly, hidden and required (private boolean m_readonly, m_hidden, m_required):
              • public boolean isRequired()
              • public void setRequired(boolean requiredFlag)
              • public void setHidden(boolean hiddenFlag)
              • public void setReadonly(boolean readOnlyFlag)
              • public boolean isReadonly()
            • Important Flexfield related APIs:
              • public Flexfield getFlexfield()
              • protected boolean addSegmentBean(Segment Seg)
              • protected void removeSegmentBean(Segment Seg)

          Following are three most frequently used beans on Mobile Application Pages:
          1. oracle.apps.mwa.beans.TextFieldBean
            • public class TextFieldBean extends InputableFieldBean
            • Constructor: public TextFieldBean()
            • Frequently used properties and their getters and setters inherited from FieldBean:
              • name, prompt, hidden
            • Frequently used properties and their getters and setters inherited from InputableFieldBean:
              • editable (protected boolean m_editable)
              • required (protected boolean m_required)
              • display length (protected int m_length)
              • value (protected java.lang.String m_value)
              • value type (protected java.lang.String m_valueType)
                • Possible values are: S - String, N - Number, D - Date, C - Calculation, R - Range
            • Maintains password property (protected boolean m_password)
              • public boolean isPassword()
              • public void setIsPassword(boolean IsPassword)
            • Maintains navigation to next page property (protected java.lang.String m_nextPageName)
              • public java.lang.String getNextPageName()
              • public void setNextPageName(java.lang.String NextPageName)
          2. oracle.apps.mwa.beans.LOVFieldBean
            • public class LOVFieldBean extends InputableFieldBean
            • Constructor: public LOVFieldBean()
            • Frequently used properties and their getters and setters inherited from FieldBean:
              • name, prompt, hidden
            • Frequently used properties and their getters and setters inherited from InputableFieldBean:
              • editable, required, display length (length), value, value type
            • Maintains navigation to next page property (protected java.lang.String m_nextPageName)
              • public java.lang.String getNextPageName()
              • public void setNextPageName(java.lang.String NextPageName)
            • Maintains LOV Statement (protected java.lang.String m_lovStatement)
              • This is mandatory to be set.
              • Store SQL query or PL/SQL procedure with a reference cursor output parameter.
              • public void setlovStatement(java.lang.String LovStatement)
              • public java.lang.String getlovStatement()
            • Maintains key names, prompt, types, rendered property of the subfields of the Lov page,  (protected java.lang.String[] m_subfieldNames, protected java.lang.String[] m_subfieldPrompts, protected java.lang.String[] m_subfieldTypes, protected boolean[] m_subfieldDisplays ).
              • The size of these arrays should be same.
              • public java.lang.String[] getSubfieldNames()
              • public void setSubfieldNames(java.lang.String[] SubfieldNames)
              • public java.lang.String[] getSubfieldPrompts()
              • public void setSubfieldPrompts(java.lang.String[] SubfieldPrompts)
              • public java.lang.String[] getSubfieldTypes()
              • public void setSubfieldTypes(java.lang.String[] SubfieldTypes)
              • public boolean[] getSubfieldDisplays()
              • public void setSubfieldDisplays(boolean[] SubfieldDisplays)
            • Maintains key names of the input parameters and parameter types (protected java.lang.String[] m_inputParameters, protected java.lang.String[] m_inputParameterTypes)
              • public java.lang.String[] getInputParameterTypes()
              • public void setInputParameterTypes(java.lang.String[] InputParameterTypes)
              • public java.lang.String[] getInputParameters()
              • public void setInputParameters(java.lang.String[] InputParameters)
            • Maintains values returned from LOV or selectec values (protected java.util.Vector m_selectedValues)
              • public java.util.Vector getSelectedValues()
              • public boolean isPopulated()
            • Maintains lov validation required property (protected boolean m_validateFromLOV)
              • Specifies if user has to always go through LOV page - if false, value in the field is accepted without validation.
              • Default is True.
              • public void setValidateFromLOV(boolean validateFromLOV)
              • public boolean isValidateFromLOV()
          3. oracle.apps.mwa.beans.ButtonFieldBean
            • public class 
              ButtonFieldBean
               extends FieldBean
            • Constructor: public 
              ButtonFieldBean
              ()
            • Frequently used properties and their getters and setters inherited from FieldBean:
              • name, hidden (behavior of prompt is different for buttons as it includes accelerator keys)
            • Maintains button prompt property with accelerator key (protected java.lang.String m_prompt):
              • public void setPrompt(java.lang.String s)
              • public void setPrompt(java.lang.String s)
              • If we call setPrompt("&Done"), getPrompt() will return "Done".
                • 'D' will be the hot key for "Done" button
            • Maintains navigation to next page property (protected java.lang.String m_nextPageName)
              • public java.lang.String getNextPageName()
              • public void setNextPageName(java.lang.String NextPageName)
            • Maintains accelerator key enable/disable property (protected boolean m_enableAcceleratorKey)
              • public void setEnableAcceleratorKey(boolean b)
              • public boolean isAcceleratorKeyEnabled()

          Oracle MSCA/MWA Framework - Introduction

          MSCA

          • Stands for Mobile Supply Chain Application.
          • MSCA is for staff in warehouse, shop floor, most of whom are always on the move.
          • MSCA trasactions are carried out from hand-held devices.
          • To efficiently operate and infuse visibility in the system - RFID (Radio Frequency Identification) readers are used by warehouse/shop floor staff to read barcodes and use them in transactions.
          • Items, Locators, Sub-Inventories etc are barcoded and these barcodes are not entered manually but scanned with the handheld devices while performing transactions thus providing efficiency, speed as well as accuracy.

          MWA

          • Stands for Mobile Web Application.
          • MWA is telnet based application that runs on internet (WIFI and GPRS) based wireless devices.
          • Telnet client is configured on the handheld device, for testing it is used on desktop.
          • MWA Applications are based on Java.
          • MWA is part of WMS (Warehouse Management System).

          MWA Architecture:




          Fortunate enough to get a chance to closely observe and experience warehouse transactions using handheld devices. Typical work on MWA Applications:
          • Development of custom screens for handheld devices.
          • Extend the existing MWA screens.
          • Personalize existing MWA screens.

          Technical Skills Required:
          • Java
          • PLSQL 
          • XML
          Softwares Required:
          • JDK to be installed in system.
          • Mobile Wireless Applications (MWA) J2ME Telnet GUI Client. 

          Navigation

          Navigation on mobile device uses "Enter" key.
          "Enter" key will fire fieldExited event.
          Whenever we scan a barcode, barcode will populate the value and there is an associated "Enter" key for navigation to next field.

          Key Mappings
          • Key mappings are visible on mobile help screen on pressing "F1" (Standard key for Help).
          Following are standard key mappings:

          Shortcut Key Purpose
          F1 Help
          F2 Menu
          F3 Back
          F4 Forward
          Ctrl K Clear
          Ctrl L LOV
          Ctrl M Responsibility Menu
          Ctrl B Long Description of status message
          Ctrl Z Toggle between options in a list field
          Ctrl A Show Current Field on page
          ESC For Hot Keys
          Ctrl Z Toggle between options in a list field
          Ctrl D Page Up
          Ctrl C Page Down
          Ctrl G Generate (Generate Serial Number etc)
          Ctrl S Skip Task on Task Page
          Ctrl X About Page
          Ctrl F Open Flexfield Window


          MWA Configuration

          • $INST_TOP/admin/install/mwa.cfg stores the MWA configuration.
          • Following are the key configuration variables in this file:
            • mwa.DbcFolder
            • mwa.DbcFile
            • mwa.logdir
            • mwa.LogLevel
            • mwa.SystemLog
            • mwa.EnableLogRotation
            • mwa.MaxLogFileSize
            • mwa.SubmenuChangeOrgResp
          • Refer to MSCA Implementation Guide> MWA Server Setup > MWA Configuration File for more details.
          • Key mappings can be modified for a particular device ($INST_TOP/admin/install/Device IP.ini) or all devices ($INST_TOP/admin/install/default_key.ini). (Refer to MSCA Implementation Guide> MWA Server Setup > Key Mappings).  
          Steps to Configure MWA Client:
          • MWA Client needs to confirmed 
          • Search for "Mobile Wireless Applications (MWA) J2ME Telnet GUI Client" or "Latest MWA GUI Client" etc on oracle support. Latest patch that I found and tried was 12780257. Patch "Read me" file contains details on patch installation.
          • https://support.oracle.com/epmos/main/downloadattachmentprocessor?parent=DOCUMENT&sourceId=294670.1&attachid=294670.1:1&clickstream=yes

            MWA Administrator

            • Standard MWA responsibility for MWA for Mirroring and Sending message to another mobile device for communication.
            Mirroring Mobile Session
            • MWA Administrator > Telnet Session Monitor can be used to mirror an active session of another user.
            • Both users must be on the same MWA Server.
            • This can greatly help in debugging and supporting MWA Applications.
            Send Message
            • MWA Administrator > Send Message can be used to send a brief message to another user.
            • Both users must be on the same MWA Server.
            • User will see the message on any key press.
            • After pressing OK, user can continue with their transaction.

            Starting/Shutting MWA Server

            • Location of Scripts - cd $INST_TOP/admin/scripts
            • Start Command - mwactl.sh start [port number]
              • Ex. mwactl.sh start 6060
            • Shutdown Command - mwactl.sh-login xxx/yyy stop/stop_force [port number]
              • mwactl.sh -login cbaker/welcome stop 6060
              • mwactl.sh -login cbaker/welcome stop_force 6060

            Hardware devices typically used:

            • Barcode Printer
            • Ribbon for barcode printing
            • Rugged/Semi-rugged mobile devices
            • lamination labels

            Please proceed to MSCA/MWA Framework - Custom Development and Extension - Part 1 to read more on custmization in MSCA/MWA Framework.

            Please proceed to MSCA/MWA Framework - Mobile Personalization to read more on Personalizing standard MSCA/MWA Screens.