Serial numbers in oracle forms 6i
Dear all,
I have developed a form that display list of items. I would like the items to appear with numbers, serial numbers that increment by 1. How to achieve that in forms 6i. Note that i would like to generate the numbers when a form runs.
Kind regards,
Steve Dollongo
How you do this will depend on exactly what kind of sequencing your need. In other words, are the numbers that you defined as serial numbers, actually like "serial numbers", where they can never be repeated? Or are you just trying to add something similar to line numbering to a list, but not store these numbers permanently?
If the numbers are to act like real serial numbers and cannot be repeated, consider using the db SEQUENCE function.
http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/pseudocolumns002.htm#i1006157
Similar Messages
-
I am trying to purchase Creative Cloud Complete for $29.99, as I have previously purchased Illustrator, Photoshop, and InDesign CS3, and have the serial numbers. However, when I entered the serial numbers on the form to order Creative Cloud, it said I was not eligible, but had no explanation why.
Rave wrote:
Hi mccalel,
CS3 is a very very old software and is not a qualifying version for upgrade.
Not sure I follow.
The discounted promotional deal (for the first 12 months) for existing owners of CS3-CS6 suites is what the OP is trying to take advantage of.
https://creative.adobe.com/plans -
Addrow problem in "Define Serial Numbers" form
I have an item which is maintained by series nos at all transactions. i have to create series nos for that item for all documents. I have developed a specific logic for series nos for populating the nos in the "Define Serial Numbers" form matrix. When i am adding a row to the matrix it shows me a row id of 0 due to which even when i update the series nos only the first row is saved . Please provide a solution. i am using 2004.2b pl:40 SAP B1.
HI,
To update serial nos to delivery use the following FM L_SER_WS_DELIVERY_UPDATE.
Use as follows
CALL FUNCTION 'SERIAL_INTTAB_REFRESH'
EXPORTING
objects_status_refresh = 'E'.
CALL FUNCTION 'L_SER_WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = y_wa_vbkok
synchron = 'X'
commit = ' '
delivery = y_p_vbel
nicht_sperren = 'X'
if_get_delivery_buffered = ' '
if_error_messages_send_0 = 'X'
it_sernr_update = y_li_sernr
EXCEPTIONS
error_message = 1
OTHERS = 2.
CASE sy-subrc.
WHEN 0.
COMMIT WORK.
WHEN OTHERS.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDCASE.
Regards,
Ankur Parab -
I am new to RFID technology. My question is: Can 1 RFID tag be designed to capture and transmit 5 non-consecutive serial numbers contained in 1 container box?
If you can tell me if this is possible with minimum effort or much effort, please let me know.
Then, if you also know Oracle's e-Business Suite (EBS), let me know if it's possible to have the scanning of such an RFID tag with 5 non-consecutive serial numbers populate the Serial Numbers form in EBS like on a shipping transaction.Thanks, Sam.
The EBS modules would be Inventory and Shipping. We do not use WMS.
Uh, I do not know 'edge'. We do not use RFID currently and our volumes are small.
Here's the business issue, whether the solution is RFID or not: Our company makes lasers for fiber optics. Originally, we just made high-end lasers (low volume, high dollar) that were placed into individual container boxes with a barcode label with its single serial number on the outside. All of these lasers were serialized as finished goods in Oracle. Whenever we ship such a laser, we have someone scan the picked lasers manually with a barcode reader one container box at a time. This has not been an issue, since volumes are small.
But now we sell low-end lasers (higher volume, lower dollar), which often are sold in containers of 5. Each of the 5 small lasers have an individual, non-consecutive serial number. Our business areas want these items serialized in Oracle EBS as well, even though it makes more sense to me to track these items by LOT NUMBERS, not individual SERIAL NUMBERS.
The dilemma is: When we ship, let's say, 1000 of these small lasers by picking 200 multi-pack containers, how do we have the shipping guy scan in the 1000 serial numbers?
One way is to print 5 small individual S/N barcode labels on the multi-pack container, then have the poor guy scan in 1000 S/N's into the Oracle Shipping form from the 200 containers.
That's why I was asking if there could be an easy RFID solution. Perhaps log the 5 S/N's in the multi-pack container onto 1 RFID tag. Then have the guy scan the RFID tag and have it insert the 5 S/N's onto the Shipping S/N form, one S/N at a time with a tab entry to go to the next S/N line. That way, the guy only scans 200 RFID tags. Is this crazy (not possible)? -
Call a web services from oracle forms 10
I have to call a web services from oracle forms.
The version of the database is oracle 11gr2. the version of the forms is 10.1.2.0.2.
I allready did the proxy creation and the import class within forms.
I have 2 questions:
1.
I created the following procedure:
PROCEDURE call_WS IS
vobject1 ORA_JAVA.JOBJECT;
vobject2 ORA_JAVA.JOBJECT;
BEGIN
vobject1 := WSEvaluarReglaCondicionComerci.new();
vobject2 := WSEvaluarReglaCondicionComerci.listarValoresAtributoEvento(vobject1, 702, 2217, null, null, null);
END;
the function I calling:
FUNCTION listarValoresAtributoEvento(
obj ORA_JAVA.JOBJECT,
a0 ORA_JAVA.JOBJECT,
a1 ORA_JAVA.JOBJECT,
a2 ORA_JAVA.JOBJECT,
a3 VARCHAR2,
a4 ORA_JAVA.JOBJECT) RETURN ORA_JAVA.JOBJECT;
Note that the parameters is ORA_JAVA_JOBJECT and I need to send numbers. I understand that when I import the classes, because in the WS those parameters are defined as BigDecimal, Forms understand them as java object but when I compile it reports the error: "numero o tipo de argumento erroneo al llamar..." type error.
So the question is, how Cast the numbers to Java Object to send them.
I have read in a web page that one option is to change in the web service the type of the parameters but that is not an option.
2.
The WS returns a super big XML as answer, so how I can parse the result into an Object type?...
The object structure is:
TYPE opciones_obj AS OBJECT
(strindice VARCHAR2 (4000),
nombrecompleto VARCHAR2 (4000),
nombre VARCHAR2 (4000),
strtipodato VARCHAR2 (4000),
codigoopcion NUMBER,
floatval FLOAT,
strtipo VARCHAR2 (4000),
strval VARCHAR2 (4000));
and the tags to extract is:
COLUMNS strindice VARCHAR2 (4000)
PATH 'ns2:mapEntry[ns2:key="strIndice"]/ns2:value',
nombrecompleto VARCHAR2 (4000)
PATH 'ns2:mapEntry[ns2:key="nombreCompleto"]/ns2:value',
nombre VARCHAR2 (4000)
PATH 'ns2:mapEntry[ns2:key="nombre"]/ns2:value',
strtipodato VARCHAR2 (4000)
PATH 'ns2:mapEntry[ns2:key="strTipoDato"]/ns2:value',
codigoopcion NUMBER
PATH 'ns2:mapEntry[ns2:key="codigoOpcion"]/ns2:value',
floatval FLOAT
PATH 'ns2:mapEntry[ns2:key="floatVal"]/ns2:value',
strtipo VARCHAR2 (4000)
PATH 'ns2:mapEntry[ns2:key="strTipo"]/ns2:value',
strval VARCHAR2 (4000)
PATH 'ns2:mapEntry[ns2:key="strVal"]/ns2:value') x;
xquery / xmltype aparently is not an option because the xml is too big.
I will appreciate your answers.
Thanks.
Edited by: user13058213 on 26-ene-2012 16:02i created jar file to call it from forms
Could you be a little bit less vague about what you exactly did?
Anyway; see here http://bit.ly/10VVoMR
cheers -
OLE Containers in Oracle Forms 6i
Hello,
We have an Oracle Forms 6i application which stores a large number of documents in LONG RAW columns in Oracle 10g using serialized OLE Container objects. Is there a way to automate the extraction of those documents (PDF and DOC) from the database to the file system?
Edited by: rpetrk1 on Jul 11, 2012 5:03 PMIf all you want to do is extract the documents from the Long Raw columns, you can use UTL_FILE to extract the binary content to the file system. You would have to loop through the records in your table to extract each file. Take a look at article Export BLOB Contents Using UTL_FILE that I googled. Granted, this article discusses exporting a BLOB not a Long Raw, but the concept is the same and you should be able to modify the code sample in the article to work with your Long Raw columns.
Hope this helps,
Craig B-)
If someone's response is helpful or correct, please mark it accordingly. -
Displaying TIFF images in Oracle Forms 6i
Hello, friends!
I am working in Oracle Forms 6.0.8 (that ancient tool) and encounter a problem with displaying TIFF images.
I have a number of scanned images and some of them are displayed and some are not. I've tried both extracting them from the database or from the file system (using READ_IMAGE_FILE). Sometimes I am getting just blank field in my image item and sometimes (after using READ_IMAGE_FILE) I get the error FRM-47100 (cannot read image file). Of course I've checked that all the files are displayed using standard tools for displaying TIFFs.
Basically the question is what kind of TIFF is considered valid and readable by Oracle Forms.
Analyzing TIFF tags actually gave me nothing: I have a pair of files with tags different only in image width/length and a number of rows/strip (but even those values are close), and one of the file is displayed correctly while the other is not. The thing I noticed is that invalid files are using compression type of CCITT Group 4.
Possibly Oracle Forms follows TIFF specification only to certain extent and does not support all the extensions, while sometimes the problems are not visible to user.
As a result of my work I need some automatic tool that converts undisplayable TIFF files to displayable ones but firstly I am to determine where the problem is. And it would be very good to have a prooflink that approves my decision.
Looking forward to any help! Thanks in advance.Thanks to everybody, but I'm afraid my files don't contain any EXIF tags (although TIFF seems to support them). The file doesn't contain any tags with IDs greater than 0x7FFF but only core TIFF tags (with IDs of lower numbers). Moreover I have a file with exactly the same set of tags (but the values are a bit different) which is displayed properly.
I've shared the issued file (nondisplayable) on the following link: [https://rapidshare.com/files/3137807470/2.tif]
If anyone could tell me why isn't it displayed in Forms I would be very grateful. -
Serial Numbers in third party system
Hi All,
How to mange serial number in the third party sales scenario.In standard sales process we manage serial numbers at delivery level.
But for Third party delivery will be done from vendor's place.But our client wants to keep
a track of serial numbers.Kindly share some inputs
Would apprecite a quick response.
Regards
Neelhello,
do u want serial nos for tracking purpose?
one way out is to maintain them at sales order level and have the same no in purchase order sent to the vendor in the form of text.
ask the vendor to print this no in his delivery document as well.
from the sales order, you can pick this no for invoice print as well.
i hope this is a way out. dont know if something is available in standard.
rgs,
ak -
Serial Numbers and Delivery not automated.
"The serial number field on the delivery is only a text field and requires user input. The actual serial numbers shipped on the delivery are not put in this field automatically by the system as you know. This is how it works. The serial number data is stored in different tables, OSRI and SRI1 and linked to the delivery document."
We have been manually typing the S/N into the delivery form so that we can have it print packing lists and invoices. Once we select the S/N for the delivery it should automatically update the delivery form.
The Delivery form does not automatically fill in the S/N once we select a s/n. Here is a scenario
1.)Select a Sales Order that has an item that requires a s/n.
2.) Copy SO to Delivery
3.) Click Add or put the cursor in the proper row of the s/n column and hit enter. A new window showing available S/N should appear.
4.) Select the S/N, assign to this SO and click Update then OK.
5.) Repeat if more then 1 item requires a s/n.
6) When done, click ADD and a new Delivery ticket is created. Note at this time the S/N are not showing in the Delivery Form.
7) You can now click Print Preview and it will show the Packing List along with a page for serial numbers. Also a Crystal Report Packing list is generated, but the s/nu2019s are not listed.
The only way we can get s/nu2019s to show on the Delivery form and in Crystal .Reports is to MANUALLY type the s/n into the Delivery form. We want to avoid typing the data, potential for typou2019s. This should be something the software does for us.We're wondering the same thing. Would a bar code scanner work? The data would have to be displayed on a PC or something where it could be recorded.
Yes and no.
We have a small Bluetooth barcode scanner. Works well if the bar codes were printed better. I mean, the bar codes for switches/routers are "readable" but for wireless access points, you would need several attempts to get it to read.
Alternatively, you can read the bar codes from the box. I only use this as a "last resort" because I have seen, in two occasions, that the codes in the box and the the ones from the appliance don't match. -
How to avoid Duplicate values in Oracle forms
Hello Everyone,
I am new to Oracle forms, working on Oracle Applications : 12.1.2,
Here I have a form Receiving Transactions,
in that I have Lot_Number and quantity columns.
The purchased items need to be stored in Lot number.
If 100 quantities purchased then 100 quantities can be stored in single lot number
i.e
Lot_Number Qty
001 100or 100 quantities can be stored in different lot numbers.
i.e
Lot_Number Qty
001 50
002 50(The qty may differ)but not like the following,
Lot_Number Qty
001 50
001 50.For second line,If they selected same lot number as First lot number,
The error message has to be shown as "Lot number duplicated,Select Different Lot number or update the full qty in original line".
Can anyone help me to solve this.
Thank you.
Regards,
GurujothiHi François Degrelle,
I added the following Plsql in the 'When-validate-Item' block,
declare
l_current_number varchar2(80);
begin
l_current_number := :lot_entry.lot_number;
first_record;
loop
if l_current_number = :lot_entry.lot_number then
message ('Duplicate');
end if;
next_record;
end loop;Its started to check from First record itself and giving the message 'Duplicate',
How to check from second record?
when the first record is entered it should not check when the second record is entered it should compare with the First record value and if it is same then it should give message as 'Duplicate'.
Thank you. -
How to Use Com ports on oracle forms
Hai,
how we can use com port to communicate to the device like Pole Display(output device) or fixed scaneer (input device) having serial port(Input device) in oracle forms.
Thanks & regardsFor web forms you will probably need to create a PJC and/or use webutil and make calls to the device's API.
-
Attach Forms With Comm Port in Oracle Forms
I am trying to make connection of Oracle forms Builder with my device using comm port but i dnt know the complete procedure to attach the comm with oracle forms also i have no idea to convert asquii data to normal form.Please any one help me to attach comm port with my oracle forms and also convert asqui code which is showing on hyper terminal into normal data.Also I am using oracle forms 6i
Make a java component (PJC) and use a rxtx library (http://rxtx.qbang.org/wiki/index.php/Examples) ...
I have made a PJC to use a RS232 port from oracle forms for Hypercom POS terminal..
Here is my code (in short i will post a component on PJC site (here I can't post a complete code because of 30000 char limit ;) )..
If you look in method "public void init(IHandler handler) " I make a download of rxtxSerial.dll from my forms server and then I call System.loadLibrary("rxtxSerial");"
In other way you must put the dll in windows/system32 path.. This dll is native library for rs232 communication.
If you look at the method "public void doTransaction" you can see the initialization of comm port...
With inputStream and OutputStream you read and write datas to/from your rs232 port..
p.s: the code is not complete but you can see how I made the rs232 communication (also the code is not final ;) )
====================================================
public class PosTerminalPjc extends VBean {
private static final long serialVersionUID = -8814623494538014849L;
Properties res = new Properties();
SerialPort serialPort;
OutputStream os;
InputStream is;
CommPortIdentifier portId;
Enumeration portList;
IHandler mHandler;
Random randomGenerator = new Random();
char STX = 2;
char ETX = 3;
char EOT = 4;
char ACK = 6;
char NAK = 15;
char FS = 28;
private static final ID COMPORT = ID.registerProperty("COMPORT"); // serial port (COM1,COM2,COM3,...)
private static final ID AMOUNT = ID.registerProperty("AMOUNT"); // amount of the transaction (12)
private static final ID TRANSACTIONTYPE = ID.registerProperty("TRANSACTIONTYPE"); // SALE, REFUND
private static final ID EXECUTE = ID.registerProperty("EXECUTE"); // invoke doTransaction();
//Output parameters to form
private static final ID TRANSACTIONPROCESSED = ID.registerProperty("TRANSACTIONPROCESSED");
private static final ID TRANSACTIONFLAG = ID.registerProperty("TRANSACTIONFLAG");
private static final ID TRANSACTIONNUMBER = ID.registerProperty("TRANSACTIONNUMBER");
private static final ID BATCHNUMBER = ID.registerProperty("BATCHNUMBER");
private static final ID TRANSACTIONDATE = ID.registerProperty("TRANSACTIONDATE");
private static final ID TRANSACTIONTIME = ID.registerProperty("TRANSACTIONTIME");
private static final ID TRANSACTIONAMOUNT = ID.registerProperty("TRANSACTIONAMOUNT");
private static final ID CARDDATASOURCE = ID.registerProperty("CARDDATASOURCE");
private static final ID NUMBERCUSTOMERCARD = ID.registerProperty("NUMBERCUSTOMERCARD");
private static final ID EXPIRATIONDATE = ID.registerProperty("EXPIRATIONDATE");
private static final ID TERMINALID = ID.registerProperty("TERMINALID");
private static final ID MERCHANTID = ID.registerProperty("MERCHANTID");
private static final ID COMPANYNAME = ID.registerProperty("COMPANYNAME");
private static final ID SEQUENTIALNUMBER = ID.registerProperty("SEQUENTIALNUMBER");
private static final ID ERRORDESC = ID.registerProperty("ERRORDESC");
//Events
private static final ID EVT_OK = ID.registerProperty("EVT_OK"); //custom event if all ok
private static final ID EVT_ERR = ID.registerProperty("EVT_ERR"); //custom event if error occured
// state machine variables
long l_timeout;
long l_wait_for = 5000; // pos terminal wait for command (5 seconds)
long l_wait_for_transaction = 62000 * 2; // pos terminal timeout
long l_second = 1000; // one second
byte b_retry = 0;
String dataValue = "";
byte[] readBuffer = new byte[2000]; //2000 bytes buffer to read rs232 stream
String comPort = ""; // local variable to store com port name
// (COM1,COM2,...)
String transactionType = "SALE"; // type of transaction to be executed (SALE
// or REFUND) default SALE
String amount = "0"; // default amount value is set to 0
//output paramerers
String transactionProcessed = "";
String transactionFlag = "";
String transactionNumber = "";
String batchNumber = "";
String transactionDate = "";
String transactionTime = "";
String transactionAmount = "";
String cardDataSource = "";
String numberCustomerCard = "";
String expirationDate = "";
String terminalId = "";
String merchandId = "";
String companyName = "";
String sequentialNumber ="";
String errorDescription;
public PosTerminalPjc() {
super();
System.out.println("============================");
System.out.println("== State machine POS v1.0 ==");
System.out.println("== Peter Valencic (c) ==");
System.out.println("== 03.04.2012 ==");
System.out.println("============================");
System.out.println("java.library.path: "+System.getProperty("java.library.path"));
try {
res.load(this.getClass().getResourceAsStream("/res/language.properties")); // load language file
} catch (Exception ex) {
System.err.println("Err loading language.properties file: "
+ ex.toString());
public void init(IHandler handler)
super.init(handler);
this.mHandler = handler;
System.out.println("init handler ok");
System.out.println("code base: "+handler.getCodeBase());
//load dll from codeBase URL
try
String mylibName = "rxtxSerial.dll";
String URLpath = "http://dekani:7777/forms/java/";
System.out.println("URL: "+ URLpath + mylibName);
URL libUrl = new URL(URLpath+mylibName);
System.out.println("libUrlgetFile: " + libUrl.getFile());
File file = new File(mylibName);
System.out.println(file);
if (!file.exists())
file.createNewFile();
URLConnection urlc = libUrl.openConnection();
InputStream in = urlc.getInputStream();
FileOutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[1048];
int read;
while ((read = in.read(buffer)) != -1){
out.write(buffer, 0, read); // write
out.close();
in.close();
System.loadLibrary("rxtxSerial");
catch(Exception exc)
System.err.println("Exception SystemLoadLibrary: " + exc.toString());
this.showError(res.getProperty("s_dlg_err_title"),res.getProperty("s_lib"));
private void doTransaction() throws Exception {
String sequentialNumber = ""+getRandomInteger(1000,9000,randomGenerator);
String phase = null; // initial null value for state machine phase
long l_ack_timeout = 0; //initial value for acknowledge timeout
// com port check
if (getComPort().trim().equalsIgnoreCase("")) {
this.showError(res.getProperty("s_dlg_err_title"),
res.getProperty("s_com_invalid"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_com_invalid"));
dispatchCustomEvent(ce);
return;
// transaction type chek
System.out.println(this.getTransactionType());
if (!getTransactionType().equalsIgnoreCase("REFUND")
& !getTransactionType().equalsIgnoreCase("SALE")
& !getTransactionType().equalsIgnoreCase("TICKET")
& !getTransactionType().equalsIgnoreCase("VOID")
this.showError(res.getProperty("s_dlg_err_title"),res.getProperty("s_tran_invalid_type"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_tran_invalid_type"));
dispatchCustomEvent(ce);
return;
portList = portId.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
System.out.println(portId.getName());
if (portId.getName().equalsIgnoreCase(this.getComPort())) {
System.out.println("Port is used : "
+ portId.isCurrentlyOwned());
serialPort = (SerialPort) portId.open("ComDriver", 2000);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_7,
SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
serialPort.notifyOnDataAvailable(true);
serialPort.notifyOnOutputEmpty(true);
os = serialPort.getOutputStream();
is = serialPort.getInputStream();
break;
if (portId == null) {
this.showError(res.getProperty("s_dlg_err_title"),res.getProperty("s_com_not_found"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_com_not_found"));
dispatchCustomEvent(ce);
return;
else if (portId.getName().equalsIgnoreCase(this.getComPort()) == false)
this.showError(res.getProperty("s_dlg_err_title"),res.getProperty("s_com_not_found"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_com_not_found"));
dispatchCustomEvent(ce);
return;
// state machine infinite loop
while (true)
// SEND DATA TO POS TERMINAL
if (phase == null)
System.out.println("start phase");
byte[] req = null;
//verify transaction type to be SALE or REFUND
//if REFUND then transaction number must be specified
if (getTransactionType().equalsIgnoreCase("SALE")) {
System.out.println("--> SALE send message to the pos terminal");
System.out.println("--> amount: " + amount);
req = protocolStream("000000"+sequentialNumber+"01100" + FS + amount + FS
+ FS + "+0" + FS + "978" + FS + FS + FS + FS + FS
+ FS + FS + ETX);
else if (getTransactionType().equalsIgnoreCase("REFUND")) {
System.out.println("--> REFUND send message to the pos terminal");
System.out.println("--> amount: " + amount);
System.out.println("--> transaction number: " + getTransactionNumber());
req = protocolStream("000000123405100" + getTransactionNumber() + FS + amount
+ FS + FS + "+0" + FS + "978" + FS + FS + FS + FS
+ FS + FS + FS + ETX);
else if (getTransactionType().equalsIgnoreCase("VOID")) {
System.out.println("--> VOID transaction");
System.out.println("--> amount: " + amount);
System.out.println("--> transaction number: " + getTransactionNumber());
req = protocolStream("000000123410100" + getTransactionNumber() + FS + FS + FS + "+0" + FS + "978" + FS + FS + FS + FS
+ FS + FS + FS + ETX);
else if (getTransactionType().equalsIgnoreCase("TICKET")) {
System.out.println("--> TICKET duplicate");
req = protocolStream("000000123413100" + getTransactionNumber() + FS + FS + FS + "+0" + FS + "978" + FS + FS + FS + FS
+ FS + FS + FS + ETX);
else {
//nothing ;)
os.write(req);
os.flush();
l_ack_timeout = System.currentTimeMillis() + 1500;
//wait for half second
Thread.sleep(500);
l_timeout = System.currentTimeMillis() + l_wait_for; //add some time for timeout
phase = "TO_POS_ACK";
System.out.println("phase: " + phase);
}//phase null
//CHECK IF THE TIMEOUT OCCURED
if (phase.equalsIgnoreCase("TO_POS_ACK") & (l_timeout < System.currentTimeMillis()) & (b_retry < 4))
b_retry += 1;
System.out.println("TIMEOUT: " + b_retry);
l_timeout = System.currentTimeMillis() + l_wait_for;
if (b_retry >= 4) {
System.out.println("Timeout occured");
closePort();
this.showError(res.getProperty("s_dlg_err_title"),res.getProperty("s_timeout"));
break;
//CHECK FOR THE ACKNOWLEDGE (FIRST RESPONSE FROM POS TERMINAL)
if (phase.equalsIgnoreCase("TO_POS_ACK") &
(l_ack_timeout < System.currentTimeMillis())) {
try {
int numBytes = 0;
dataValue = "";
while ((numBytes = is.read(readBuffer)) > 0) {
dataValue += new String(readBuffer, 0, numBytes, "ASCII");
if (dataValue.getBytes().length > 0) {
System.out.println("->first byte: " +
dataValue.getBytes()[0]);
System.out.println("total length: " +
dataValue.getBytes().length);
//check for ack byte
if (dataValue.getBytes()[0] == 6) {
System.out.println(
"<--ACKNOWLEDGE received from pos terminal");
phase = "WAIT_FOR_TRANSACTION";
l_timeout = System.currentTimeMillis() + l_wait_for_transaction;
System.out.println("-> wait for transaction response");
} catch (IOException ev) {
//WAIT FOR TIMEOUT ON MESSAGE (watch dog timer)
if (phase.equalsIgnoreCase("WAIT_FOR_TRANSACTION") &
(l_timeout < System.currentTimeMillis())) {
System.out.println(
"Error receiving response from pos terminal!!!");
closePort();
this.showError(res.getProperty("s_dlg_err_title"),
res.getProperty("s_response_error"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_response_error"));
dispatchCustomEvent(ce);
break;
//WAIT FOR SOME DATA TO COME FROM POS TERMINAL OVER RS232
if (phase.equalsIgnoreCase("WAIT_FOR_TRANSACTION")) {
try {
int numBytes = 0;
dataValue = "";
Thread.sleep(500);
while ((numBytes = is.read(readBuffer)) > 0) {
dataValue += new String(readBuffer, 0, numBytes, "ASCII");
if (dataValue.getBytes().length > 0) {
System.out.println("->first byte: " +
dataValue.getBytes()[0] + "|" +
dataValue.getBytes()[1]);
System.out.println("->ascii: " + dataValue);
System.out.println("total length: " +
dataValue.getBytes().length);
if (dataValue.indexOf("PREKINIL UPORABNIK") != -1) {
System.out.println(
"Uporabnik je prekinil povezavo!");
closePort();
//transaction cancelled by user s_user_cancel
this.showError(res.getProperty("s_dlg_err_title"),
res.getProperty("s_user_cancel"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_user_cancel"));
dispatchCustomEvent(ce);
break;
if (dataValue.indexOf("NAPACEN VNOS") != -1) {
System.out.println("Napačen vnos");
closePort();
//invalid user entry
this.showError(res.getProperty("s_dlg_err_title"),
res.getProperty("s_user_invalid_entry"));
if (this.mHandler != null)
CustomEvent ce = new CustomEvent(this.mHandler, EVT_ERR);
this.setErrorDescription(res.getProperty("s_user_invalid_entry"));
dispatchCustomEvent(ce);
break;
if (dataValue.indexOf("PROSIM POCAKAJ") != -1) {
System.out.println("<-- PROSIM POCAKAJ");
continue;
//preberemo podatke iz stringe terminala
if (dataValue.indexOf("SPREJETO") != -1) {
closePort();
System.out.println("<-- TRANSAKCIJA SPREJETA");
System.out.println(dataValue);
StringTokenizer st = new StringTokenizer(dataValue, "\034" );
String dv = st.nextToken();
sequentialNumber = dv.substring(6,10);
transactionProcessed = dv.substring(1, 3);
transactionFlag = dv.substring(13,15);
transactionNumber = dv.substring(15,21);
batchNumber = dv.substring(21,25);
transactionDate = dv.substring(25,31);
transactionTime = dv.substring(31,37);
transactionAmount = st.nextToken();
st.nextToken(); //Amount exponent
st.nextToken(); //Amount currency
cardDataSource = st.nextToken();
numberCustomerCard = st.nextToken();
expirationDate = st.nextToken();
st.nextToken(); // authorization code
terminalId = st.nextToken();
merchandId = st.nextToken();
companyName = st.nextToken();
System.out.println("================");
System.out.println(transactionProcessed);
System.out.println(transactionFlag);
System.out.println(transactionNumber);
System.out.println(batchNumber);
System.out.println(transactionDate);
System.out.println(transactionTime);
System.out.println(transactionAmount);
System.out.println(cardDataSource);
System.out.println(numberCustomerCard);
System.out.println(expirationDate);
System.out.println(terminalId);
System.out.println(merchandId);
System.out.println(companyName);
if (this.mHandler != null)
System.out.println("dispatch custom event");
CustomEvent ce = new CustomEvent(this.mHandler, EVT_OK);
dispatchCustomEvent(ce);
return;
} catch (IOException ev) {
System.err.println("Exception sm: " + ev.toString());
System.out.print('*');
Thread.sleep(200);
}//end state machine loop
* protocolStream prepare the stream to be send over RS232 to POS terminal
* with LRC cheksum control
* @param data
* @return byte[]
private byte[] protocolStream(String data) {
char STX = (char) 0x02;
String tmp = "" + STX + STX + data + "" + getLRC(data);
System.out.println("PStream: " + tmp);
for (int i = 0; i < tmp.getBytes().length; i++) {
System.out.print(tmp.getBytes() + ":");
return tmp.getBytes();
* close port and stream
private void closePort()
try {
serialPort.close();
is.close();
os.close();
} catch (Exception ee) {
* Longitudinal Redundancy Check (LRC)
* @param packet
* @return String
private String getLRC(String packet) {
char[] splitPacket = packet.toCharArray();
char lrc = 0x00;
for (int x = 0; x < splitPacket.length; x++) {
lrc = (char) (lrc ^ splitPacket[x]);
return "" + (char) lrc;
private String paddingString(String s, int n, char c, boolean paddingLeft) {
if (s == null) {
return s;
int add = n - s.length(); // may overflow int size... should not be a
if (add <= 0) {
return s;
StringBuffer str = new StringBuffer(s);
char[] ch = new char[add];
Arrays.fill(ch, c);
if (paddingLeft) {
str.insert(0, ch);
} else {
str.append(ch);
return str.toString();
public boolean setProperty(ID id, Object value)
if (id.toString().equalsIgnoreCase("COMPORT")) {
setComPort((String)value);
System.out.println("RS232 com port: " + getComPort());
return false;
if (id.toString().equalsIgnoreCase("AMOUNT")) {
this.setAmount((String)value);
System.out.println("Amount value: " + getAmount());
return false;
if (id.toString().equalsIgnoreCase("TRANSACTIONTYPE")) {
this.setTransactionType((String)value);
System.out.println("Transaction Type value: " + this.getTransactionType());
return false;
if (id.toString().equalsIgnoreCase("EXECUTE")) {
System.out.println("Invoke pos terminal");
try
doTransaction();
catch(Exception ex)
System.err.println("Execute Exception>> " + ex.toString());
this.showError(res.getProperty("s_dlg_err_title"),res.getProperty("s_gen_exception"));
return false;
return false;
* Display error message inside oracle form
* @param title
* @param exceptionString
private void showError(String title, String exceptionString) {
JOptionPane.showMessageDialog(this, exceptionString, title, 0);
Edited by: peterv6i.blogspot.com on May 8, 2012 10:18 AM
Edited by: peterv6i.blogspot.com on May 8, 2012 10:20 AM
Edited by: peterv6i.blogspot.com on May 8, 2012 10:21 AM -
Hi,
I'm having trouble getting the correct serial numbers via SQL.
From PHP I run the following query to get the Delivery Notes:
select ODLN.DocEntry,ODLN.CardCode,ODLN.CardName,ODLN.DocDueDate,ODLN.DocDate,ODLN.NumAtCard,NNM1.SeriesName,ODLN.DocNum,ODLN.SlpCode,ODLN.CANCELED,ODLN.DocStatus,DLN1.ItemCode,DLN1.Dscription,DLN1.Quantity,DLN1.ShipDate,DLN1.LineStatus,ODLN.NumAtCard,ODLN.U_CodSit,ODLN.DocTotal,ODLN.DocCur,ODLN.CreateDate,ODLN.TrackNo,DLN1.SerialNum from ODLN INNER JOIN NNM1 ON (ODLN.Series = NNM1.Series) INNER JOIN OCRD ON (ODLN.CardCode = OCRD.CardCode AND OCRD.CardCode = '".$_POST["sapcode"]."' AND OCRD.Password = '".$_POST["sappwd"]."') INNER JOIN DLN1 ON ODLN.DocEntry = DLN1.DocEntry ORDER BY ODLN.CreateDate DESC,ODLN.DocEntry ASC
While I loop through the results I then try to grab the serial numbers. I tried this:
SELECT OSRI.IntrSerial FROM OSRI INNER JOIN SRI1 ON ( (SRI1.SysSerial = OSRI.SysSerial) AND (SRI1.BaseNum = ".$row['DocNum'].") ) INNER JOIN DLN1 ON (DLN1.DocEntry = SRI1.BaseEntry) WHERE ( (DLN1.DocEntry = ".$row['DocEntry'].") AND (DLN1.ItemCode = OSRI.ItemCode) AND (DLN1.ItemCode = '".$row['ItemCode']."') ) ORDER BY OSRI.IntrSerial
but it gives me incoherent results compared to what appears in the SAP b1 client. For ex., some serial numbers are fine but in other cases I get more serial numbers than accounted for (article quantity = 1 but get 2 serial numbers; in SAP B1 client only one of the two serial numbers appears, as expected).
So I then modified the query and added a check for the CardCode:
SELECT OSRI.IntrSerial FROM OSRI INNER JOIN SRI1 ON ( (SRI1.SysSerial = OSRI.SysSerial) AND (SRI1.BaseNum = ".$row['DocNum'].") AND (SRI1.CardCode = '".$_POST["sapcode"]."') ) INNER JOIN DLN1 ON (DLN1.DocEntry = SRI1.BaseEntry) WHERE ( (OSRI.CardCode = '".$_POST["sapcode"]."') AND (DLN1.DocEntry = ".$row['DocEntry'].") AND (DLN1.ItemCode = OSRI.ItemCode) AND (DLN1.ItemCode = '".$row['ItemCode']."') ) ORDER BY OSRI.IntrSerial
This query is slightly better in the sense that at least I don't get serial numbers that are not supposed to be there (eg. if quantity=1 I will not get 2 serial numbers as in the previous query). However, in some cases it works as expected and in other delivery notes it doesn't because it simply doesn't list the serial numbers (which where found in the first query).
It might be because the CardCode field isn't always thoroughly set?
If so, is it just a "user problem" so I should tell my company to review the way they fill SAP data?
Or am I doing the wrong query?
(The SDK doc regarding OSRI is confusing as it doesn't even point to SRI1 and I don't fully understand the relationships)
Regards,
VieriVieri,
you can catch (using MS SQL Profiler) the query which is executed by SBO once you click on serial nambers report from Delivery Note form.
this is one of the ways to get a solution quickly. -
We want to read data from weigh bridge and display in oracle forms & store
Sir/Madam,
in our organisation we had one requirement. i.e is reading data from weigh bridge using serial port, displying that data in oracle forms and when ever user click save button we store that into my oracle database. we are using oracle 8i and forms 6i and windows OS environment. we don't know reading data from serial port and placing that into form items. please help me as early as possible if there is any property available in d2k regarding this requirement .
thank you,
vishnuThere's no property in Forms that makes you read serial ports, but as far as I know you need to know the API of the machine which you want to read data from (it should come with machine's manual) and then it will be easy to store it in forms item.
Tony -
As of Contract Management 13, serial numbers are no longer used.
Hello Primavera users,
We are currently using Contract Manager v12 on a major program here in the UAE and looking to upgrade soon to v13.
Regarding this knowledge base posting (below), does v13 still support concurrent user licenses, and if so what are Oracle's plans moving forward in terms of Contract Manager?
I would love to hear the views of the Primavera community, especially in relation to these changes with serial numbers etc...
Thanks & Regards,
John
Solution ID: prim83632
How To: Adding (new) serial numbers in Contract Management 13
Status: Reviewed
Version(s): 13.0
Problem: How To: Adding (new) serial numbers in Contract Management 13
Problem: Where do I add new serial numbers in Contract Management 13?
Problem: Where are serial numbers stored?
Fix: As of Contract Management 13, serial numbers are no longer used.Well, it's just a simple pipe afterall, a tool to give you brief information upon which you decide what to do. Also, there's a minor annoyance, it should go like this:
stat -c '%x %n' /usr/bin/* | sort
I mixed long and short options for a moment there, that gets rid of the '=' in front of every line.
Maybe you are looking for
-
When small letters or emails are downloaded on thunderbird from our Yahoo email address, They download just fine. but when it comes to downloading messages with attachments of a large size, like 500kbs or bigger, then it will stop downloading any oth
-
Full outer join --- bug? Urgent
Hi, I have a simple mapping using 2 source tables and doing an full outer join. While executing the mapping it is throwing me out with an error -- Starting Execution LOAD_SAP Starting Task LOAD_SAP ORA-01790: expression must have same datatype as cor
-
Stop managed server without node manager and admin server
What are the commonly used ways to stop managed Weblogic server without node manager running and without administration server running? (I have only one solution: on the managed server startup dump process ID to a file, and then when I want to stop i
-
What is the latest iOS for iPhone 3GS and will there be another update
What is the latest iOS for iPhone 3GS and will there be another update or is it iOS 6.1.3 and no more
-
Exception while trying to create an article in Web Page Composer
Hi Experts, I'm new to Web Page Composer. When I try to create an article in the folder 'Cross-Site-Content', a pop-up opens up and the following error is thrown: Portal Runtime Error An exception occurred while processing a request for : iView : N/A