Contributors
  • Register

HEADLINING: We will be launching Oracle trainings next month contact us for more details

User Rating: 5 / 5

Star activeStar activeStar activeStar activeStar active
 

MWA Advanced Barcode Scanning for Mobile Supply Chain Management

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.

CREATEORREPLACEPACKAGEBODY APPS.INV_PREPROCESS_SCANAS

PROCEDURE process_scan(x_return_status OUTnocopyVARCHAR2,

x_processed_value OUTnocopyVARCHAR2,

p_current_page_name INVARCHAR2,

p_scanned_value INVARCHAR2)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

WHENNO_DATA_FOUNDTHEN

-- Check the cross reference table

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

FROM

MTL_CROSS_REFERENCES_B a, MTL_SYSTEM_ITEMS_B b

WHEREa.INVENTORY_ITEM_ID = b.INVENTORY_ITEM_ID

ANDa.cross_reference_type ='Legacy Number'

ANDa.CROSS_REFERENCE = p_scanned_value

AND b.ORGANIZATION_ID = c_master_org;

END;

 

EXCEPTION

WHENNO_DATA_FOUNDTHEN

-- Return what was scanned

x_processed_value := p_scanned_value;

WHENOTHERSTHEN

-- 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;

 

ENDINV_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 at This email address is being protected from spambots. You need JavaScript enabled to view it.">This email address is being protected from spambots. You need JavaScript enabled to view it.. You can also visit us at www.luciditycg.com

 

Comments   

0 #1 Sravan 2009-01-22 03:53
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.

Regards m
Sravan.
Quote
0 #2 Kyle Thomas 2009-01-22 09:05
Hi Stravan,

Thank s 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
Quote
0 #3 sinipiiro 2009-03-11 13:37
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!!!
Quote
0 #4 Bugs 2009-06-17 16:53
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.

Than ks
Kaukab
Quote
0 #5 jarun 2009-11-04 14:53
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 CustomScanManag er
> .Java.The customization doesnt seem to be working eventhough the path
> where the customScanManag er.Class file is present is available in both
> CLASS_PATH as well as the AF_CLASSPATH.Th e trace file shows as
> xxx.custom.Cust omScanManager class not found, but
> OK.java.lang.Cl assNotFoundExce ption:
> xxx.custom.Cust omScanManager.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.
Quote
0 #6 Kyle T. 2009-11-05 08:12
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.
Quote
0 #7 Kyle T. 2009-11-05 08:16
Arun,

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

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

I have mine set to: $CUSTOM_DIRECTO RY/xxx/custom

So the $CUSTOM_DIRECTO RY is basically the $JAVA_TOP as well.

Please let me know if this resolves your issue.
Quote
0 #8 Kiran Gujjari 2010-03-19 08:15
Hi,
Where Can I locate oracle provided customScanManag er class under $JAVA_TOP?

Tha nks,
Kiran
Quote
0 #9 Kyle Thomas 2010-03-19 09:28
Kiran,

You will have to "create" the customScanManag er class. You'll notice in the "log" file if it locates it when you're processing on the form.
Quote
0 #10 Kiran Gujjari 2010-03-23 00:47
Hi Kyle,
Thanks for ur response,..
How does customscanmanag er 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
Quote
0 #11 Kyle Thomas 2010-03-23 11:33
Kiran,

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

USIN G 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 CustomScanManag er.class is created. Move this file to $CUSTOM_DIRECTO RY/xxx/custom and add $CUSTOM_DIRECTO RY to the classpath of your mobile server. $CUSTOM_DIRECTO RY, 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.
Quote
0 #12 Kiran Gujjari 2010-03-30 07:52
Hi Kyle
Thanks for sharing this infomration with me, it helped me a lot.

Regards,
Kiran
Quote
0 #13 Kiran Gujjari 2010-04-07 04:00
Hi Kyle,
I have developed CustomScanManag er.class and placed it under standard java top $JAVA_TOP/xxx/c ustom
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/jav a/jar/xxx/custo m
Also we have added the custom path to the $CLASSPATH

CLA SSPATH=$ZBRWMS_ TOP/java/jar:$C LASSPATH
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.Cust omScanManager
[ Wed Apr 07 02:19:48 CDT 2010] (Thread-15) xxx.custom.Cust omScanManager class not found, but OK.java.lang.Cl assNotFoundExce ption: xxx.custom.Cust omScanManager

Please suggest what changes to be done for path here.

Thanks,
Kiran
Quote
0 #14 Kyle Thomas 2010-04-12 15:17
Kiran,

It appears that your pre-process scanning cannot locate the CustomScanManag er.class file. Are you sure that your file is in $JAVA_TOP/xxx/custom/CustomScanManag er.class?
Quote
0 #15 Kiran Gujjari 2010-04-14 21:53
Hi Kyle,

Initiall y I have tested this under $JAVA_TOP/xxx/c ustom , it worked fine.

I have moved same file to $ZBRWMS_TOP/jav a/jar/xxx/custo m which is custom application top, I am getting ClassNotFoundEx ception error.

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

Tha nks,
Kiran
Quote
0 #16 Kyle Thomas 2010-04-15 07:24
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 CustomScanManag er.class file.

Good Luck!
Quote
0 #17 Kiran Gujjari 2010-05-10 02:57
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,
K iran Gujjari
Quote
0 #18 Kyle Thomas 2010-05-10 09:01
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 CustomScanManag er

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.
Quote
0 #19 amondikar 2010-07-24 11:45
It is really usefull post, I have a question ,can we use this process of customScanManag er to do the following

1)Pr int 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.
Quote
0 #20 Thomas Lee 2010-08-08 23:11
I have a problem in making the CustomScanManag er to be called.

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

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

Then I decompile ScanManager.cla ss 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 CustomScanManag er.processScan().

Million thanks!
Quote
0 #21 Moiz 2010-08-25 03:35
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 CustomScanManag er preprocessing functionality? Whether it can be achievable or not?
Quote
0 #22 Kyle Thomas 2010-08-25 08:58
amondikar,

You should be able to accomplish all of those items using the CustomScanManag er. It'll take some work, but you should be able to accomplish it. Sorry for the long delay I have been on a project.
Quote
0 #23 Kyle Thomas 2010-08-25 09:00
Thomas,

Someth ing is still not set up correctly in your $AF_CLASSPATH and $CLASSPATH. Please make sure your entire $CUSTOM_DIRECTO RY/xxx/custom is added to both classpaths. Also if autoconfig was run it may have wiped these out.
Quote
0 #24 Kyle Thomas 2010-08-25 09:06
Moiz,

The CustomScanManag er 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-sc anning and is what I had to accomplish on my forms as well with EAN-128 barcodes.

I hope this makes sense.
Quote
0 #25 Moiz 2010-08-28 01:49
Thank Thomas,

For your response. Let me check and i will get back to you soon.
Quote
0 #26 Sarah 2010-09-24 08:37
Hi All,

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

Regards,
Sarah
Quote
0 #27 Kyle Thomas 2010-09-24 09:02
Sarah,

You would want to use the: PPS.INV_PREPROC ESS_SCAN.proces s_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 CustomScanManag er class.

Good Luck!
Quote
0 #28 Sarah 2010-09-24 10:19
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
Quote
0 #29 Kyle Thomas 2010-09-24 11:06
If you need to know the exact field then you'll need to use the CustomScanManag er.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.
Quote
0 #30 Sarah 2010-09-24 12:41
Thanks a lot for your help Kyle...
Quote
0 #31 Sarah 2010-09-29 10:09
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/ja r.

Can any body help me on this.

Regards,
Sarah
Quote
0 #32 Moiz 2010-10-18 15:53
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.
Quote
0 #33 Kyle Thomas 2010-10-18 16:01
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.
Quote
0 #34 Moiz 2010-10-19 08:21
Hi Thomas,

if you dont want to share your email id in public then just put a test mail to me i will send you lo files.

my email id is :-

Regards,
Moiz
Quote
0 #35 Kyle Thomas 2010-10-19 08:25
I sent you an email Moiz
Quote
0 #36 Moiz 2010-10-19 08:54
Hi Thomas,

Sent.

Regards,
Moiz
Quote
0 #37 Paras 2010-10-26 00:31
Hi All,

I have done create a xxx.custom.Cust omScanManager.c lass. However, while scanning from GUI client application is executing the InvScanManager. class instead of CustomScanManag er.class.

If any body has clue. Thanks in advance

Regard s,

Paras
Quote
0 #38 Siva Venkat 2010-12-09 01:36
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.
Th anks
Sivenkat
Quote
0 #39 Sunilglahoti 2010-12-09 10:37
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.

Than ks,
Quote
0 #40 Mrigank Sharma 2011-04-05 08:29
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.Cust omScanManager class not found, but
> OK.java.lang.Cl assNotFoundExce ption: £

But the problem is in the telnet session using CTRL + \ and then value is working fine.
Please help...: >:(
Quote
0 #41 Kyle Thomas 2011-04-05 09:00
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.
Quote
0 #42 Mrigank Sharma 2011-04-05 09:08
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.
Quote
0 #43 Kyle Thomas 2011-04-05 09:16
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.
Quote
0 #44 Mrigank Sharma 2011-04-05 10:11
Thanks Kyle..Thanks a lot for your help. I am able to get the value now on GUI itself now. :)
Quote
0 #45 Kyle Thomas 2011-04-05 10:17
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 ;)
Quote
0 #46 Jean Michel 2011-05-09 18:56
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.
Quote
0 #47 MKG 2011-05-23 08:31
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
Quote
0 #48 Phani 2011-06-03 04:18
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)
informati on 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 CustomScanManag er preprocessing functionality?w hether it can be achievable or not?

Thanks
Quote
0 #49 Dave Lesan 2011-06-06 10:48
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.

Exampl e barcode text: |ITM199503|LOT7 777|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?

Than ks in advance for your assistance,
Dav e Lesan
Quote
0 #50 Pathfinder 2011-09-02 04:14
Please note that for the customscanmanag er to work AF_CLASSPATH needs to include the custom directory.

Thi s has been mentioned on another blogpost and it works:
http://applikast.blogspot.com/2011/08/oracle-msca-bar-code-preprocessing.html
Quote
0 #51 Phu Tri Nguyen 2011-09-09 06:05
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_val ue 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
Quote
0 #52 Phu Tri Nguyen 2011-09-13 06:06
I created CustomScanManag er.java and successfully compiled it and CustomScanManag er.java file was created. The files are in standard directory (/d01/oracle/DE V1/apps/apps_st /comn/java/clas ses/xxx/custom) . But the system does not invoke processScan procedure at all.
I also modified APPS.INV_PREPRO CESS_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.
Quote
0 #53 Niks 2011-09-22 05:45
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
Quote
0 #54 Mothi 2012-06-14 15:57
Hi PhuTri
were you able to figure out what is the ctrl + \ for motorola symbol 9090?
please reply
thanks,
Mothi
Quote
0 #55 krsrasu 2012-10-14 23:56
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
Quote
0 #56 shailendrasingh 2013-05-10 10:00
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,
Sha ilendra
Quote
0 #57 satyaprakash 2014-02-19 02:06
Hi . In custom scan manger can we use the msca session / telnet session to access database without creating explicit connection..
Quote

Add comment


Security code
Refresh

DEMO INFORMATION

All content and images shown on this site is for demo, presentation purposes only. This site is intended to exemplify a live website and does not make any claim of any kind to the validity of non-Shape5 content, images or posts published. 

Photography is used for this demo only, and is not included with this template or any membership. You may not use these images for your own without purchase. Links to purchase from their copyright owners will be provided.