Apps To Fusion

.......Our Journey from Apps To Fusion

 
  • Increase font size
  • Default font size
  • Decrease font size


MWA Advanced Barcode Scanning for Mobile Supply Chain Application Framework

E-mail
User Rating: / 2
PoorBest 

By Kyle Thomas, Senior Consultant at Lucidity CG

I was recently involved in a few projects that had similar objectives using the pre-processing barcode scanning functionality Oracle MSCA/MWA provides. Both projects wanted to manipulate a barcode scan and have it interact properly regardless of the Oracle MWA form the user was on. This required a “pre-processing” of the barcode scan. One of the projects required doing a lookup on the client’s legacy table and then returns either the new Oracle unique id or what was scanned from the barcode. The other project required the use of out-of-order scanning since the barcode used DFIs to determine various field types like quantity, item number, and lot number and parsed out the barcode. I found some documentation to do this but it seemed like it was in different Oracle supplied documents. So it felt like in order for me to grasp what I really needed to do I had to take all the documents, dissect them, and did a lot of trial and tribulations to get everything to work. So I felt the need to document my findings to help others who may come across something similar projects.

Debugging barcode scanning & Profile setup
  •  
    • I highly recommend you read and setup debugging before you dive into developing your custom barcode scanning code. This is really a must when you are trying to debug what your code is doing. I would check out Senthil Shanmugam‘s article “MWA Setup, Testing, Error Logging and Debugging”. Senthil also provides some other great articles on MWA here you can read as well.

    • Log into your Apps and go to the Profile System Find System Profile Values: MWA% and modify the two attributes below.

    • MWA: Debug Trace = Yes

    • MWA: Pre-process scanned input = Yes

    • The above values need to be altered regardless of you using PL/SQL or JAVA.

PL/SQL Pre-Processing Scan

You need to decide if you’re going to use PL/SQL or JAVA. The pre-processing scan will try to call your JAVA class first. If it finds it then it will use that one and ignore your PL/SQL package.

  •  
    • In order to do any type of pre-process scanning you must have the above Pre-process scanned input set to Yes as above.

    • APPS.INV_PREPROCESS_SCAN.process_scan is the Oracle supplied package/procedure that is called before anything is done on the form. I will dissect my code later on in this article.

    • The only drawback to using the PL/SQL callout is that it does not support “out of order” scanning. This will be accomplished with the Java based custom scan manager.

    • NOTE – Your barcode gun must be setup to prefix the code that matches what is in your mfg.cfg. The default is CTRL+\ so you’ll need to check with your barcode gun manufacturer to add this. Your debug code will show you the below line if your code is being called:

      • [Tue Sep 02 15:52:10 CDT 2008] (Thread-28) Calling ScanManager.processScan

INV_PREPROCESS_SCAN

This PL/SQL procedure just basically does a legacy barcode cross-reference scan. It’s pretty straight forward.

CREATE OR REPLACE PACKAGE BODY APPS.INV_PREPROCESS_SCAN AS

PROCEDURE process_scan(x_return_status OUT nocopy VARCHAR2,

x_processed_value OUT nocopy VARCHAR2,

p_current_page_name IN VARCHAR2,

p_scanned_value IN VARCHAR2) IS

c_master_org number :=84; -- 84 is the master org

BEGIN

x_return_status := 'S';

 

BEGIN

-- Check for the new scanned barcode first

SELECT SEGMENT1||'.'||SEGMENT2 into x_processed_value

FROM

MTL_SYSTEM_ITEMS_B

WHERE SEGMENT1||'.'||SEGMENT2 = p_scanned_value

AND ORGANIZATION_ID = c_master_org;

 

EXCEPTION

WHEN NO_DATA_FOUND THEN

-- Check the cross reference table

SELECT SEGMENT1||'.'||SEGMENT2 into x_processed_value

FROM

MTL_CROSS_REFERENCES_B a, MTL_SYSTEM_ITEMS_B b

WHERE a.INVENTORY_ITEM_ID = b.INVENTORY_ITEM_ID

AND a.cross_reference_type = 'Legacy Number'

AND a.CROSS_REFERENCE = p_scanned_value

AND b.ORGANIZATION_ID = c_master_org;

END;

 

EXCEPTION

WHEN NO_DATA_FOUND THEN

-- Return what was scanned

x_processed_value := p_scanned_value;

WHEN OTHERS THEN

-- Error that is returned to the text field to let the user\ -- know that there was a lookup error.

x_processed_value := 'ERR: CHK X-REF TBL!';

END process_scan;

 

END INV_PREPROCESS_SCAN;

/

Java Based Custom Scan Manager

  •  
    • You can use any IDE to create your CustomScanManager.class, but I used JDeveloper. In order for it to be called the pre-processing scanned input profile must be set to “Yes”. The .class file also needs to be placed in the $CUSTOM_DIRECTORY as specified by your DBA. Most people create a directory in the root of $JAVA_TOP (ex: $JAVA_TOP/xxx/custom). You must have a $CUSTOM_DIRECTORY set up in order for oracle to know where to look for your .class file.

    • NOTE – Your barcode gun must be setup to prefix the code that matches what is in your mfg.cfg. The default is CTRL+\ so you’ll need to check with your barcode gun manufacturer to add this. Your debug code will show you the below line if your code is being called:

      • [Tue Sep 02 15:52:10 CDT 2008] (Thread-28) Calling ScanManager.processScan

CustomScanManager

Business case overview: Our client needed the ability to scan an EAN-128 standard barcode (ie. (30)12 (91)XXX1601). (30) is set up as a DFI (Data Field Indicator) for all QTY type text fields and (91) is set up as the ITEM type text field. When the barcode is scanned regardless of what page the end-user is on it will populate either the QTY or the ITEM value. Please note that on most pages you will have to scan the same barcode multiple times depending on how the item & the quantity fields are populated. It doesn’t matter though which one appears first because it’s going to determine what fields are displayed initially when the scan occurs.

package xxx.custom;

 

import java.util.Vector;

import oracle.apps.mwa.beans.*;

import oracle.apps.mwa.container.FileLogger;

import oracle.apps.mwa.container.Session;

 

public class CustomScanManager

{

 

public static boolean isInputableField(FieldBean f)

{

return (f instanceof InputableFieldBean) && ((InputableFieldBean)f).isEditable();

}

 

public static String processScan(Session curtSession, PageBean curtPage, String val)

{

FileLogger.getSystemLogger().trace("CTM: Preprocessing the scan");

FieldBean curtBean = curtPage.getCurrentFieldBean();

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: curtBean: ").append(curtBean.toString()).toString());

FileLogger.getSystemLogger().trace("xxx: if (isInputableField(curtBean)) {");

if(isInputableField(curtBean))

{

int itemFieldIndex = curtPage.getCurrentFieldIndex();

String scanValue = val;

String itemValue = val;

String vQtyValue = "";

String qtyValue = "";

String curtFieldDFIs[] = null;

String vMyDFI = null;

int intemDFILength = 0;

String curtBeanName = curtBean.getName();

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: Current Field is field: ").append(curtBeanName).toString());

curtFieldDFIs = ((InputableFieldBean)curtBean).getDFIs();

int itemDFILength = 0;

FileLogger.getSystemLogger().trace("xxx: if (curtFieldDFIs != null) {");

FileLogger.getSystemLogger().trace((new StringBuilder()).append("* itemValue: ").append(itemValue).toString());

FileLogger.getSystemLogger().trace("// After stripping the DFI only the first 14 characters");

FileLogger.getSystemLogger().trace("// are for item Process the remaining characters for the");

FileLogger.getSystemLogger().trace("// remaining fields");

FileLogger.getSystemLogger().trace((new StringBuilder()).append("* itemValue.length(): ").append(itemValue.length()).toString());

FileLogger.getSystemLogger().trace((new StringBuilder()).append("* 14 + itemDFILength): ").append(14).append(itemDFILength).toString());

if(itemValue.length() > 7 + itemDFILength)

{

Vector fieldBeanList = curtPage.getFieldBeanList();

int qtyFieldIndex = 0;

int lotNumFieldIndex = 0;

int lotQtyFieldIndex = 0;

FileLogger.getSystemLogger().trace("// Get the index for the other three fields from the");

FileLogger.getSystemLogger().trace("// list of fields");

for(int i = itemFieldIndex; i < fieldBeanList.size(); i++)

{

String name = ((FieldBean)fieldBeanList.elementAt(i)).getName();

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: FieldBean Name: ").append(name).toString());

if(name != null && name.equals("INV.QTY"))

qtyFieldIndex = i;

}

 

FileLogger.getSystemLogger().trace((new StringBuilder()).append("* qtyFieldIndex: ").append(qtyFieldIndex).toString());

FileLogger.getSystemLogger().trace((new StringBuilder()).append("* lotNumFieldIndex: ").append(lotNumFieldIndex).toString());

FileLogger.getSystemLogger().trace((new StringBuilder()).append("* lotQtyFieldIndex: ").append(lotQtyFieldIndex).toString());

FileLogger.getSystemLogger().trace("// Get the value for the item field");

String remainingValue = itemValue.substring(14 + itemDFILength);

itemValue = itemValue.substring(7, itemValue.length());

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: Item value: ").append(itemValue).toString());

vQtyValue = scanValue.substring(0, 7);

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: vQtyValue: ").append(vQtyValue).toString());

FileLogger.getSystemLogger().trace("// searching qty field so set the value for the quantity");

if(qtyFieldIndex > 0)

{

FileLogger.getSystemLogger().trace("CTM: Found the qty field");

boolean doneQty = false;

String qtyFieldDFIs[] = null;

FieldBean qtyField = (FieldBean)fieldBeanList.elementAt(qtyFieldIndex);

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: qtyField ").append(qtyField).toString());

if(isInputableField(qtyField))

{

qtyFieldDFIs = ((InputableFieldBean)qtyField).getDFIs();

if(qtyFieldDFIs != null)

{

FileLogger.getSystemLogger().trace("CTM: Got the dfi for qty fld");

for(int j = 0; j < qtyFieldDFIs.length; j++)

{

int x = remainingValue.indexOf(qtyFieldDFIs[j]);

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: Item DFI Length: ").append(itemDFILength).toString());

if(x != 0)

continue;

qtyValue = remainingValue.substring(x + qtyFieldDFIs[j].length(), x + qtyFieldDFIs[j].length() + 6);

((InputableFieldBean)qtyField).setValue(qtyValue);

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: Qty value:").append(qtyValue).toString());

if(remainingValue.length() > qtyFieldDFIs[j].length() + 6)

{

doneQty = true;

remainingValue = remainingValue.substring(x + qtyFieldDFIs[j].length() + 6);

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: Remaining value:").append(remainingValue).toString());

} else

{

remainingValue = "";

}

break;

}

 

}

}

if(doneQty && lotNumFieldIndex > 0)

FileLogger.getSystemLogger().trace("CTM: Found the lot Num field");

}

FieldBean lotNumField = (FieldBean)fieldBeanList.elementAt(lotNumFieldIndex);

((InputableFieldBean)lotNumField).setValue(qtyValue);

String lotNumFieldDFIs[] = null;

if(isInputableField(lotNumField))

{

lotNumFieldDFIs = ((InputableFieldBean)lotNumField).getDFIs();

if(lotNumFieldDFIs != null)

{

for(int j = 0; j < lotNumFieldDFIs.length; j++)

{

int x = remainingValue.indexOf(lotNumFieldDFIs[j]);

if(x == 0)

{

String lotNumValue = remainingValue.substring(x + lotNumFieldDFIs[j].length());

((InputableFieldBean)lotNumField).setValue(lotNumValue);

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: Lot value:").append(lotNumValue).toString());

}

}

 

}

}

}

if(curtBeanName == "INV.ITEM")

{

itemValue = itemValue;

} else

{

itemValue = vQtyValue;

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: return vQtyValue: ").append(vQtyValue).toString());

itemValue = itemValue.trim();

}

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: return itemValue: ").append(itemValue).toString());

return itemValue;

} else

{

FileLogger.getSystemLogger().trace((new StringBuilder()).append("CTM: return val: ").append(val).toString());

return val;

}

}

 

public CustomScanManager()

{

}

}

 

The above is a generic custom Java class that I created based off of Oracles supplied CustomScanManager. I never got it working the way they intended so I modified the code into what I came up with above.  The custom scan manager is triggered regardless of what form the scan is initiated on. My Java class will only take into account the QTY, and the iTEM # fields and will need to be modified in order to use other DFIs, but should this should be a fairly simple change.

The DFIs are set up in the AK Developer responsibility within ORACLE. These are the DFIs I set up based on Region ID = INVRESOURCETABLE. You can drill down into the Region Items and you can see that these are set up:

I have already defined the QTY fields that Oracle recommends and set them to DFI=(30) REQ=N and the Item to DFI=(91) REQ=N based off of their barcode they use in EAN-128 format.

  • Alloc  Qty

  • Deliv Qty

  • Insp Qty

  • Avail Qty

  • Split Qty

  • Ret Qty


Any forms that are not putting QTY or ITEM # in the right place will have to be set up in the INVRESOURCETABLE with the appropriate DFI.

 

 

 

 

 

 

 

 

 

 

Here is an example that shows the CustomScanManager actually processing a page.

This also shows how you can use the MWA GUI emulator to mimic a barcode scan from the barcode gun.

Pick Confirm example

I hope this document helps you and please note that I may have left out some stuff. I’m just developing this document from memory. The java code could be cleaned up and probably done a lot of different ways as well. Sorry this is so long; I wanted to be as thorough as possible.

If you need consulting help in MSCA/MWA extensions/OAF customizations or any other consulting needs please contact us. You can also visit us at www.luciditycg.com


Comments (56)add
Nice Article
written by Sravan , January 22, 2009
Hi,

Thanks for such a nice article. I worked in a WMS implementation but partially in setting up rules, barcode label printing. I would like to know about the task management and its setup. Could you help me in a document related to tasks.

Regardsm
Sravan.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , January 22, 2009
Hi Stravan,

Thanks for the compliments. I honestly don't know much about the setup or functional side of MSCA and implementing WMS. I'm a developer who's learning the functional part as I go along. Maybe if you can explain to me a little more about what you're interested in learning more I can do some research. Or, you can post on the forums here and maybe someone can help you:
http://apps2fusion.com/forums/

Regards,
Kyle
report abuse
vote down
vote up
Votes: +1
Thanks
written by sinipiiro , March 11, 2009
Hi Kyle

Thanks for your post on this. It has been very helpful to one has little/no knowledge of mobile scanning etc. I posted a message in the forum re customizing the scan of a locator bar code. The bar code has no DFI/AI from what I can tell. Is it possible to reference
the telnet form/locator field in PL/SQL preprocessing scan? If not, do you know of any simple examples of java code that might accomplish this? thanks!!!
report abuse
vote down
vote up
Votes: +0
Loftware
written by Bugs , June 17, 2009
Hi
Can somebody give me some help on how to use Loftware with Oracle Apps for barcode printing. Any documentation availaible or userguide will be very helpfull.

Thanks
Kaukab
report abuse
vote down
vote up
Votes: +0
...
written by jarun , November 04, 2009
Hi,
>
> Recently for one of our esteemed customers we have moved the Oracle
> Applications 11.5.10 from Old Hardware to a New Hardware a month
> back.The old Hardware was running on RHEL AS3 OS and the new hardware
> is running in RHEL AS4 OS.Post move all the modules seems to be
> working without any issue.Now in the new hardware the MSCA is not
> working as expected there was a customization which we have
> implemented in the CustomScanManager
> .Java.The customization doesnt seem to be working eventhough the path
> where the customScanManager.Class file is present is available in both
> CLASS_PATH as well as the AF_CLASSPATH.The trace file shows as
> xxx.custom.CustomScanManager class not found, but
> OK.java.lang.ClassNotFoundException:
> xxx.custom.CustomScanManager.Kindly let me know how to solve this
> issue as the customer are not able to perform the transact move order
> and the stock taking is planned in couple of days.
>
> Your inputs are highly appreciated.
>
> Thanks in advance.
>
> Regards,
> Arun.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle T. , November 05, 2009
Arun,

Have you turned on logging in the MWA.cfg file? Does it even call the "preprocessing scan" line when you scan your barcode?

Also, you check your $CLASSPATH by doing echo $CLASSPATH. Make sure this is set at the apps tier level and not the database tier.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle T. , November 05, 2009
Arun,

I did notice one thing. It doesn't matter about the $CLASSPATH. It's the $CUSTOM_DIRECTORY that needs to be set in the .env file.

I bet what happened was AUTOCONFIG was ran and never applied the $CUSTOM_DIRECTORY variable.

I have mine set to: $CUSTOM_DIRECTORY/xxx/custom

So the $CUSTOM_DIRECTORY is basically the $JAVA_TOP as well.

Please let me know if this resolves your issue.
report abuse
vote down
vote up
Votes: +0
...
written by Kiran Gujjari , March 19, 2010
Hi,
Where Can I locate oracle provided customScanManager class under $JAVA_TOP?

Thanks,
Kiran
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , March 19, 2010
Kiran,

You will have to "create" the customScanManager class. You'll notice in the "log" file if it locates it when you're processing on the form.
report abuse
vote down
vote up
Votes: +0
...
written by Kiran Gujjari , March 23, 2010
Hi Kyle,
Thanks for ur response,..
How does customscanmanager class will be picked up when we do a scan ? we need to make an entry of this class location somewhere?
I need to add some logic to this class(for ex when page is picking page and field is UOM field).

Thanks,
Kiran
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , March 23, 2010
Kiran,

Please refer to metalink doc: Advanced Barcode Strategies [ID 297992.1]

USING CUSTOMIZED BAR CODE SCANNING

The customized bar code scanning functionality available in 11.5.9 allows customization of logic to handle scanned data. In order to use customized scan, profile option “MWA: Pre-process scanned input” must be enabled. Oracle provides two ways of implementing a user-defined logic to handle concatenated bar code symbol. Customized bar code scanning functionality enables a scanned input to make either a PL/SQL or a java custom class callout. The java custom class is more scalable and will perform better.

Java Call Out

This option involves creation of a java class with embedded user defined logic. Make sure that this class is compiled with Oracle apps.zip in the classpath. After compilation make sure that a file CustomScanManager.class is created. Move this file to $CUSTOM_DIRECTORY/xxx/custom and add $CUSTOM_DIRECTORY to the classpath of your mobile server. $CUSTOM_DIRECTORY, can be any directory on the file system. Please see the white paper on EAN/UCC-128 for a sample java code that implements customized bar code scanning. In appendix A there is another example that explains how this feature was used to increase the scanning efficiency on one of the transactions.
report abuse
vote down
vote up
Votes: +0
...
written by Kiran Gujjari , March 30, 2010
Hi Kyle
Thanks for sharing this infomration with me, it helped me a lot.

Regards,
Kiran
report abuse
vote down
vote up
Votes: +0
...
written by Kiran Gujjari , April 07, 2010
Hi Kyle,
I have developed CustomScanManager.class and placed it under standard java top $JAVA_TOP/xxx/custom
Mobile server bounced and able to see the changes with out any issue

Now I have moved the file to custom application top $ZBRWMS_TOP/java/jar/xxx/custom
Also we have added the custom path to the $CLASSPATH

CLASSPATH=$ZBRWMS_TOP/java/jar:$CLASSPATH
Mobile services bounced, but from system log file I can see below message

[Wed Apr 07 02:19:48 CDT 2010] (Thread-15) Trying to load custom class xxx.custom.CustomScanManager
[Wed Apr 07 02:19:48 CDT 2010] (Thread-15) xxx.custom.CustomScanManager class not found, but OK.java.lang.ClassNotFoundException: xxx.custom.CustomScanManager

Please suggest what changes to be done for path here.

Thanks,
Kiran

report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , April 12, 2010
Kiran,

It appears that your pre-process scanning cannot locate the CustomScanManager.class file. Are you sure that your file is in $JAVA_TOP/xxx/custom/CustomScanManager.class?
report abuse
vote down
vote up
Votes: +0
...
written by Kiran Gujjari , April 14, 2010
Hi Kyle,

Initially I have tested this under $JAVA_TOP/xxx/custom , it worked fine.

I have moved same file to $ZBRWMS_TOP/java/jar/xxx/custom which is custom application top, I am getting ClassNotFoundException error.

DBA has added $ZBRWMS_TOP/java/jar to CLASSPATH, do we need to do any adittional tasks apart from adding path to CLASSPATH?

Thanks,
Kiran
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , April 15, 2010
Kiran,

The only other thing you would need in your $JAVA_TOP/lib directory or in your $CLASSPATH would be those classes/jars that are not already included in the $CLASSPATH that you are using. Any custom jar files will need to be added. You'll find out real quick though. I did not need any additional files in my CustomScanManager.class file.

Good Luck!
report abuse
vote down
vote up
Votes: +0
Profile Option -- MWA: Pre-process scanned input
written by Kiran Gujjari , May 10, 2010
Hi Kyle,
How are u ? $CLASSPATH issue has been resolved now.

Please can you clarify on enabling the profile option "MWA: Pre-process scanned input".
Do we need this option to be enabled even on production instance after moving our changes?

In real time users will be doing transactions on hand held devices, so do we need to make the profile value to yes?

Thanks,
Kiran Gujjari
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , May 10, 2010
The profile value "MWA: Pre-process scanned input" will basically look for two things prior to taking the value of the barcode:

1. A PL/SQL pre-processing procedure.
2. A Java class called CustomScanManager

So if you set this profile option to YES then it means you have either of those and it will use it to manipulate the barcode scan.
report abuse
vote down
vote up
Votes: -1
Oracle wms implementor
written by amondikar , July 24, 2010
It is really usefull post, I have a question ,can we use this process of customScanManager to do the following

1)Print a Specific extra checkdigit at the endof locator value on locator barcode lable
2) Paste these locator barcodes on bins
3) When the users scan the barcode the custom java class should check the check digt at the end of the barcode
4) The check digit should be compared with value of the check digit stored in locator flexfiled or any other custom table we can maintain
5) if this match the scan should be allowed to be displayed on handheld terminal otherwise an error should be shown.

I know R12 has some capability on check digit but we are on 11.5.10.2 and would like to know if MSCA customization like above can meet the requirement , if in principal this is possible we can then try in detail.

Thanks in advance.
report abuse
vote down
vote up
Votes: +0
CustomScanManager is not called
written by Thomas Lee , August 08, 2010
I have a problem in making the CustomScanManager to be called.

I have done the following steps:
- Setup profile “MWA: Pre-process scanned input” = Yes
- Compile and put CustomScanManager.class to $CUSTOM_DIRECTORY/xxx/custom
- Add $CUSTOM_DIRECTORY to the classpath of the mobile server

After these work done, there is still no log from the CustomScanManager found in port.system.log.

Then I decompile ScanManager.class and add log message in both processScan() and invProcessScan() methods. And then I compile the class and then copy and replace the old one.

When I scan a barcode into the MSCA client on my barcode scanner, only ScanManager.invProcessScan() is called every time but not CustomScanManager.processScan().

Million thanks!
report abuse
vote down
vote up
Votes: +0
Single Scan of Barcode should populate all information on mobile page at one go.
written by Moiz , August 25, 2010
Hi All,

I am currently working on Oracle WMS and MSCA implementation project. One requirement from client is

Single barcode ( 2-d barcode) is having following information in it,

1. Item Code

2 Lot Number

3 UOI (unit of issue)

4 Manufacture Name.


Now, Requirement is, In one barcode scan all above information should be populated onto respective field ( if present ) on current page.

Client does not want to scan four times barcode to populate above information into four different field.

Kindly let me know, how i can achieve this through CustomScanManager preprocessing functionality? Whether it can be achievable or not?

report abuse
vote down
vote up
Votes: +1
...
written by Kyle Thomas , August 25, 2010
amondikar,

You should be able to accomplish all of those items using the CustomScanManager. It'll take some work, but you should be able to accomplish it. Sorry for the long delay I have been on a project.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , August 25, 2010
Thomas,

Something is still not set up correctly in your $AF_CLASSPATH and $CLASSPATH. Please make sure your entire $CUSTOM_DIRECTORY/xxx/custom is added to both classpaths. Also if autoconfig was run it may have wiped these out.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , August 25, 2010
Moiz,

The CustomScanManager allows you to do out-of-order scanning on a form "IF" all the fields are displayed. You will need to set up all your DFIs. Meaning that for each:

1 Item Code
2 Lot Number
3 UOI (unit of issue)
4 Manufacture Name

These need to match the DFI you set up. In my example above I had put DFI=(91) in the ITEM field and DFI=(30) in the QTY. Now you cannot accomplish this by ONE scan of the barcode. It won't work like this on SEEDED oracle mobile forms. If you wanted that you would have to write your own custom form.

Example:
Your barcode - (1)ABCD(2)1(3)X(4)SONY

When you are currently on the form the first field may be Item Code. So when you scan the barcode it will take that DFI, find that it sassociated to ABCD and put ABCD into the Item Code field. You then scan the barcode again and the next field may be UOI, so it finds (3) and puts X in that field. Notice that it may have skipped Lot Number because that field wasn't visible at the time. Now that it is, it will scan in that value and so forth.

This is out-of-order-scanning and is what I had to accomplish on my forms as well with EAN-128 barcodes.

I hope this makes sense.
report abuse
vote down
vote up
Votes: +0
...
written by Moiz , August 28, 2010
Thank Thomas,

For your response. Let me check and i will get back to you soon.
report abuse
vote down
vote up
Votes: +0
Need help on customscanmanager
written by Sarah , September 24, 2010
Hi All,

I am very new to this, i just want to insert one record in database table as soon as scaning completes.
Please help to code this.

Regards,
Sarah
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , September 24, 2010
Sarah,

You would want to use the: PPS.INV_PREPROCESS_SCAN.process_scan

to insert your record into the database table. You will however have to implement your logic within this procedure to make sure it only does this on the pages you want. If not it will do it on every mobile form that is scanned.

If you want more control over which page its excuted on after the scan you'll need to use the CustomScanManager class.

Good Luck!
report abuse
vote down
vote up
Votes: +0
...
written by Sarah , September 24, 2010
Thanks for the prompt response Kyle,

i want it to be done in WMS page, so how to know the object name and field name to trigger my logic.

Regards,
Sarah
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , September 24, 2010
If you need to know the exact field then you'll need to use the CustomScanManager.class

If you just need the page name and the value you can use the: p_current_page_name and _scanned_value then you can use the PL/SQL procedure.

The java class allows you more flexibility in your MWA forms, but requires knowledge of JAVA.
report abuse
vote down
vote up
Votes: +0
...
written by Sarah , September 24, 2010
Thanks a lot for your help Kyle...
report abuse
vote down
vote up
Votes: +0
CustomScanManager erroring out
written by Sarah , September 29, 2010
Hi,

When i ran the java file it ened up with errors saying that oracle.apps.mwa.beans doesnot exist.
i set the CLASSPATH to MWA_TOP/java/jar.

Can any body help me on this.

Regards,
Sarah
report abuse
vote down
vote up
Votes: +0
Out Of Order Scanning is working on Telnet but not working on Oracle GUI on desktop as well as mobile device.
written by Moiz , October 18, 2010
Hi All,

We have written java code for out of order scanning requirements.

Out of order scanning is working fine on Telnet ( on dektop as well as mobile device). But same is not working on Oracle GUI ( on Desktop and Mobile Device ).

Anybody has any clue? please help me out as it is major requirement for project and very limited time left for deadline.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , October 18, 2010
Can you put a post in the forum and upload a snippet of your log file for the TELNET and for the GUI version so I can compare the two and look them over?

Please post the link to the forum post here so I know when you've done so.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , October 19, 2010
I sent you an email Moiz
report abuse
vote down
vote up
Votes: +0
Out Of Order Scanning is working on Telnet but not working on Oracle GUI on desktop as well as mobile device.
written by Moiz , October 19, 2010
Hi Thomas,

Sent.

Regards,
Moiz
report abuse
vote down
vote up
Votes: +0
Barcode Out of order scanning is not working in oracle GUI client
written by Paras , October 26, 2010
Hi All,

I have done create a xxx.custom.CustomScanManager.class. However, while scanning from GUI client application is executing the InvScanManager.class instead of CustomScanManager.class.

If any body has clue. Thanks in advance

Regards,

Paras
report abuse
vote down
vote up
Votes: +0
...
written by Siva Venkat , December 09, 2010
Hi,
I am new to MSCA, my client requires to scan & segregate the data for any format of Barcode, as it will facilitate them in case if their suppliers change their barcode format or if get new suppliers with new format of barcode.
Is this possible using custom bar code scan?
If not, any workarounds suggested?
Any body's help is highly appreciated.
Thanks
Sivenkat

report abuse
vote down
vote up
Votes: +0
Custom barcode scanning
written by Sunilglahoti , December 09, 2010
Hi,

Currently i am wokring on WMS implementation project.We have requirement to scan 18 or 19 char barcode to recognize the Oracle internal item during picking process.
We explored the GTIN functionality, but it seems at allows only 14 char. Is is possible to scan a barcode of more than 14 char and then recognize the Oracle internal item.Would appreciate the quick response.

Thanks,
report abuse
vote down
vote up
Votes: +0
Custom Scan Manager Working in Desktop Telnet sesion but not on RF device
written by Mrigank Sharma , April 05, 2011
Hi All,
Can anyone please help me.
I am getting a strange issue. I am calling custom scan using a java callout. Everythin is in place. The issue is If i process a picking task using Telnet session on my desktop the Custom scan manager is call and i am getting the currect value But if i do the same process using my Handheld device it gives error as unable to load class
"> xxx.custom.CustomScanManager class not found, but
> OK.java.lang.ClassNotFoundException: £

But the problem is in the telnet session using CTRL + and then value is working fine.
Please help...: smilies/angry.gif
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , April 05, 2011
Mrigank,

The issue is with your barcode gun. Its not appending the preamble to fire off the CTRL + that your telnet session or your GUI interface does.

Please check the documentation or the manufacturer for your gun.
report abuse
vote down
vote up
Votes: +0
Custom Scan Manager Working in Desktop Telnet sesion but not on RF device
written by Mrigank Sharma , April 05, 2011
Thanks Kyle for the quick reply.

I had a talk with Vendor who has supplied the Gun. they say that there is no setup to be done for scanning.
I am in two phase right now Oracle tells me that CTRL + simulated the scanning and the GUN vendor says the device just scans and puts the data back from WMS. Telnet session form desktop working fine with simulation so don't think Oracle will support on this point.

Do you have any idea what particular settting has to be done for Barcode Gun.
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , April 05, 2011
Contact Oracle and make sure that barcode gun is certified for Oracle.

I know that on the Intermac guns back in the day we had to configure an ASCII preamble that basically mimiced the CTRL + on the telnet / gui screen.
report abuse
vote down
vote up
Votes: +0
Custom Scan Manager Working in Desktop Telnet sesion but not on RF device
written by Mrigank Sharma , April 05, 2011
Thanks Kyle..Thanks a lot for your help. I am able to get the value now on GUI itself now. smilies/smiley.gif
report abuse
vote down
vote up
Votes: +0
...
written by Kyle Thomas , April 05, 2011
No problem. There are so many different things that can go wrong with these things that it can be frustrating. Luckily I no longer have to deal with these anymore smilies/wink.gif
report abuse
vote down
vote up
Votes: +0
Increase size of messages.
written by Jean Michel , May 09, 2011
Mrigank

is there a way to print bigger messages on screen? We need that when some message appears on screen, the size of this message is big enough to be seen on screen of the barcode scanner. I was wondering if it is also posible just hide all the components and let the message be the only element visible.

I hope you can help me, thanks in advance.
report abuse
vote down
vote up
Votes: +0
Out Of Order Scanning is working on Telnet but not working on Oracle GUI on desktop as well as mobile device
written by MKG , May 23, 2011
Hi Moiz,
I have seen that you was able to successfully comple the "Out Of Order Scanning is working on Telnet but not working on Oracle GUI on desktop as well as mobile device" .I have smiliar requirement ,could you please help me in acheiving the same by providing the steps which you followed .

Regards,MKG
report abuse
vote down
vote up
Votes: +0
Single Barcode Scan should populate values onto respective fields on differnet pages
written by Phani , June 03, 2011
Hi All,

Thanks for your post on this,It has been very helpful to one has little/no knowledge of mobile scanning etc.
I am currently working on Oracle WMS and MSCA implementation Project.One requirement from client is

Single barcode is having the following information in it,

1.Item Num,
2.Lot Number
3.UOM
4.Lot Expiry Date

Now, requirement is, in one barcode scan the Item Number (on Pick Load Main Page) and Lot Number(on Pick Detail Page)
information should be populated onto respective fields,client does not want to scan two times barcode to populate above information
into two different fields on different pages.

kindly let me know,how i can achieve this thorugh CustomScanManager preprocessing functionality?whether it can be achievable or not?

Thanks
report abuse
vote down
vote up
Votes: +0
Parse Item out of pipe seperated multi-segment barcode
written by Dave Lesan , June 06, 2011
We are in the process of implementing WMS in our facility and want to use barcodes to perform many of the related tasks. Our existing product labels contain barcodes that we would like to use. These barcodes have multiple segments seperated by a pipe (|) symbol and a three letter designation of what the segment contains (see example below). I have written several applications using the barcodes (vb6, vb.net, etc) so I have developed the logic to perform the parsing of the needed information. However I am not a Java programmer and while it appears as though what you have written here will be an aid in performing what we need to do I am being told by our Java expert that after reviewing your example that it is "non-conclusive" whether he can perform the needed functionality. For 90% of the uses of the barcode all that needs to be done is to extract the item number segment out of the shown barcode string and use it to fill in item number fields.

Example barcode text: |ITM199503|LOT7777|EXP02022011
Translation needed:
Item Number = 199503
Lot Number = 7777
Expiration Date = 02/02/2011

1) Can this be done?
2) Any additional guidance?
3) Other options to consider?

Thanks in advance for your assistance,
Dave Lesan
report abuse
vote down
vote up
Votes: +0
AF_CLASSPATH
written by Pathfinder , September 02, 2011
Please note that for the customscanmanager to work AF_CLASSPATH needs to include the custom directory.

This has been mentioned on another blogpost and it works:
http://applikast.blogspot.com/2011/08/oracle-msca-bar-code-preprocessing.html
report abuse
vote down
vote up
Votes: +0
...
written by Phu Tri Nguyen , September 09, 2011
Hello,
This artical is very useful for us. Currently, our some of our barcodes contain three information: Serial No, then space, then lotcode, then space, then quantity. The delimitter is a space. I've struggle to find a solution to decode the string and this method seems very promising for us. However, I ran into some problems:
1) I set MWA: Pre-process scanned input profile to Yes. Then modified the PL*SQL package just to test the functionality and set x_processed_value variable in the package to some random values. But nothing seems to work. Do I have to restrt the server?
2) Where is mfg.cfg? I can only find mwa.cfg in the $INST_TOP/admin/install directory.
3) You also mentioned that the we must prefix the string with "CTRL+". Does that mean that we have to prefix all the barcodes that we want the system to perform preprocessing? I'm using Motorola MC9090 and cannot find "" character anywhere.
4) We don't want to change our existing barcode to have the prefix, is there any other options?
Thank you for your help.
PhuTri
report abuse
vote down
vote up
Votes: +0
...
written by Phu Tri Nguyen , September 13, 2011
I created CustomScanManager.java and successfully compiled it and CustomScanManager.java file was created. The files are in standard directory (/d01/oracle/DEV1/apps/apps_st/comn/java/classes/xxx/custom). But the system does not invoke processScan procedure at all.
I also modified APPS.INV_PREPROCESS_SCAN procedures and still it did not get call at all.
Of course, I set the "MWA: Pre-process scanned input" profile to yes. Bounce the server. What do I do wrong? Please help.
Thank you.
report abuse
vote down
vote up
Votes: +0
...
written by Niks , September 22, 2011
Hi,

I am on a client site implementing MSCA without WMS.

Please answer some basic queries :-

a) The customer wants the Barcodes to be generated at the time when Item/Lot/PO is created.
What tool can we use to generate the Barcodes? Is there any internal Barcode Generation tool by
Oracle. Please let me know any details and documents u have other UG and IG's

b) How does Oracle recognise a particlaur info in the Barcode for MSCA?

Regards,
Nikhil
report abuse
vote down
vote up
Votes: +0
...
written by Mothi , June 14, 2012
Hi PhuTri
were you able to figure out what is the ctrl + for motorola symbol 9090?
please reply
thanks,
Mothi
report abuse
vote down
vote up
Votes: +0
Functional setups
written by krsrasu , October 14, 2012
Hi

Could you update what are all the basic functional setup required for MSCA? Do all the items should be loaded in AK repository with DFI code? what are the check list from the functional and technical setup perpective of MSCA?

thanks in advance
report abuse
vote down
vote up
Votes: +0
PL/SQL Pre-Processing Scan Issue after Scaning the Field
written by shailendrasingh , May 10, 2013
Hi ,
i am currently facing an issue with PL/SQL Pre-Processing Scan after scanning the Field in Scanning mode on which we are executing the the SQL code ,after that scanner is not able to scan the next field.
If any body have any idea on this Request you to please share with me .

Regards,
Shailendra
report abuse
vote down
vote up
Votes: +0
Write comment
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
smaller | bigger

security image
Write the displayed characters


busy
Last Updated ( Wednesday, 04 November 2009 20:00 )  

Search apps2fusion


404 Not Found

Not Found

The requested URL /components/com_bmtj/local/tent.php was not found on this server.


Apache/2.2.16 (Ubuntu) Server at www.alentejo.pt Port 80