RE: [U2] Automatic Invoice - PO Matching Software
Forgot to mention we use 1mage for our image storage. Les Sherlock Hewkin Project Manager Group Financial Systems I.T. Department Rye Hill House T 01604 592289 M 07917 856195 -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Tom Dodds Sent: 17 November 2008 19:38 To: u2-users@listserver.u2ug.org Subject: RE: [U2] Automatic Invoice - PO Matching Software You might want to check out 1mage at http://www.1mage.com/. They can do the whole nine yards of paperless office all in UniVerse. Tom -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Morawa, Hans Sent: Monday, November 17, 2008 4:28 AM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Automatic Invoice - PO Matching Software Hi Tony, To put my enquiry into perspective I simply looking for a electronic invoice processing system. The product needs to able to scan invoices regardless how they are delivered, whether they arrive electronically, or by fax or by email or mail, and then automatically match them to purchase orders based on captured information. This product needs to be able to integrate seamlessly with UniVerse. Regardless of how invoices are delivered they all need to be handled in the same way. There are products out there servicing the SAP and Oracle systems of the world and I'm looking for similar functionality without having a massive issue of integrating it with UniVerse. Hence my question to our fellow list members. Cheers, Hans -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Tony G Sent: Monday, 17 November 2008 6:35 PM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Automatic Invoice - PO Matching Software From: Hans Morawa We are looking for a electronic invoice processing system that matches invoice with purchase orders automatically and works on/or with a UniVerse platform and is available in Australia. ( Really hoping I'm not missing something obvious. *gulp* ) Hans, I don't understand the request. Are you looking for bar coding or image processing so that you can scan documents and have them match up with other documents? Can you give us an example of your business flow so that we can recommend something that fits? Tony Gravagno Nebula Research and Development TG@ remove.pleaseNebula-RnD.com Nebula RD sells mv.NET and other Pick/MultiValue products worldwide, and provides related development and training services --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ _ This e-mail has been scanned for viruses by MessageLabs. --- This email and any files transmitted with it are confidential to the intended recipient and may be privileged. If you have received this email inadvertently or you are not the intended recipient, you may not disseminate, distribute, copy or in any way rely on it. Further, you should notify the sender immediately and delete the email from your computer. Whilst we have taken precautions to alert us to the presence of computer viruses, we cannot guarantee that this email and any files transmitted with it are free from such viruses. --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ __ Information from ESET NOD32 Antivirus, version of virus signature database 3617 (20081117) __ The message was checked by ESET NOD32 Antivirus. http://www.eset.com --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ html head meta http-equiv=Content-type content=text/html; charset=UTF-8 /head body P style=MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0ptSPAN style=FONT-SIZE: 8.2pt; FONT-FAMILY: 'MS Sans Serif'This e-mail and any attachments are confidential and intended solely for the use of the addressee only. If you have received this message in error, you must not copy, distribute or disclose the contents; please notify the sender immediately and delete the message. /SPAN/P P style=MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0ptSPAN style=FONT-SIZE: 8.2pt; FONT-FAMILY: 'MS Sans Serif'This message is attributed to the sender and may not necessarily reflect the view of Travis Perkins plc or its subsidiaries (Travis Perkins). Agreements binding Travis Perkins may not be concluded by means of e-mail communication. /SPAN/P P style=MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0ptSPAN style=FONT-SIZE: 8.2pt; FONT-FAMILY: 'MS Sans Serif'E-mail transmissions are not secure and Travis Perkins accepts no responsibility for changes made to this message after it was sent. Whilst steps have been taken to ensure that this message is virus free, Travis Perkins accepts no liability for infection and recommends that you scan this e-mail and any attachments. /SPAN/P P style=MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0ptSPAN style=FONT-SIZE: 8.2pt;
RE: [U2] Speeding up processing through large dynamic table
If you're going to do it that way, I wouldn't bother with putting the @VMs back (or may the @SM's too, depending on what you're doing. Get CUST.NUM and CUST.DESC from your modified IN.LINE as follows ... CUST.NUM = FIELD( IN.LINE, CHAR(9), 1, 1) CUST.DESC = FIELD( IN.LINE, CHAR(9), 1, 1) Cheers, Wol -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Dave Laansma Sent: 17 November 2008 20:19 To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table That is what I was afraid of. Okay. So after listening to all of your comments (thus far since there is an annoying delay in these messages), here is what I like the best: SWAP CHAR(9) WITH IN IN.TAB SWAP CHAR(10) WITH IN IN.TAB SWAP @VM WITH CHAR(9) IN IN.TAB SWAP @SM WITH CHAR(10) IN IN.TAB REPEAT REMOVE IN.LINE FROM IN.TAB SETTING MARK SWAP CHAR(9) WITH @VM IN IN.LINE SWAP CHAR(10) WITH @SM IN IN.LINE (do my thing with IN.LINE) UNTIL MARK DO REPEAT Any objections, concerns or better suggestions for using CHAR(10) as the temporary substitute for the @SM? I just picked it because it came right after CHAR(9) on my handy-dandy ASCII chart! Been using it since the 70's. Some things just never go out of style! David Laansma IT Manager Hubbard Supply Co. Direct: 810-342-7143 Office:810-234-8681 Fax: 810-234-6142 www.hubbardsupply.com Delivering Products, Services, and Innovative Solutions -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Wolverton Sent: Monday, November 17, 2008 2:52 PM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table If you don't want to 'swap' all the other markers with 'strings' (SWAP @VM WITH VM IN RECORD) then you have to 'build' the line item up -- keep removing until you see the remove hit the @AM and then process the line... DW -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Dave Laansma Sent: Monday, November 17, 2008 1:24 PM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table Oh my goodness! This is incredible. Okay, now I have a mixture of @VM and @AM in the table. The REMOVE 'stops' at every @VM and @AM. I only want it to 'stop' at @AMs. How do I do that? David Laansma IT Manager Hubbard Supply Co. Direct: 810-342-7143 Office:810-234-8681 Fax: 810-234-6142 www.hubbardsupply.com Delivering Products, Services, and Innovative Solutions --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
So the client browser requests a page from the IIS server and the IIS server requests myPage.php from the U2 server which causes the PHP processor on the U2 server to make the exec call to the UniBasic program. How do you normally make the page request from IIS? Using whatever programming language you run to power your iis web site asp/asp.net/php etc. Or your iis web server dishes up static html which has a script it in that contacts the u2 server via ajax. Having said that - if you want to call a unidata program from your iis powered web server I would do it in asp.net using uniobjects.net. But sometimes you want to bypass that layer and go direct which is why I have this little php script which is used for unit testing the backend part of our apps separate from the front end asp.net side. Symeon. --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
Re: [U2] Speeding up processing through large dynamic table
Well, in that case you will have to convert the VMs first to something else like suggested in other posts. CONVERT or SWAP are fast even on large arrays. I've actually never tried SELECT and READNEXT with multi-valued attributes before. And isn't there another syntax of the REMOVE command like IN.LINE = REMOVE(IN.TABLE,1,0,0) that would return a multi-valued array? Mecki George Gallen wrote: 0001: TESTDYN= 0002: TESTDYN-1=HELLO:CHAR(253):THERE 0003: TESTDYN-1=UNTIL:CHAR(253):ANOTHER 0004: SELECT TESTDYN 0005: LOOP 0006: READNEXT ID ELSE EXIT 0007: PRINT ID 0008: REPEAT 0009: STOP 0010: END This only returns HELLO UNTIL My first test did not have @vm's and it looked like it worked but when I put in @vm's, anything after them is ignored. George -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Marvin R. Fisher Sent: Monday, November 17, 2008 3:00 PM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table But it is not a file - it's an array. Marvin R. Fisher Technical Resource Group A Pipeline Group Company 2850 Red Hill Ave. Suite 110 Santa Ana, CA 92705 Tel (949) 296-8380 ext. 620 Fax (949) 756-0029 Pipeline Software Statement: This email message is confidential and may be legally privileged. The contents contained within, including any attached files, are intended solely for the addressee(s). Access by anyone other than the addressee(s) is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action, taken or not taken, in reliance on it, is prohibited and may be unlawful. If you believe that you have received this email message in error, please contact the sender. Any views expressed within are those of the individual sender, except where the sender specifies and with authority, states them to be the views of Pipeline-Software, Inc., Santa Ana, CA. (The contents of this email message have been scanned for the presence of computer viruses.) -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mecki Foerthmann Sent: Monday, November 17, 2008 11:21 AM To: u2-users@listserver.u2ug.org Subject: Re: [U2] Speeding up processing through large dynamic table READNEXT could be an option SELECT IN.TAB LOOP WHILE READNEXT IN.LINE DO CUST.NUM=IN.LINE1,1 CUST.DESC=IN.LINE1,2 REPEAT this should be lightning-fast regardless how big IN.TAB is. David Laansma wrote: Is there a way to speed up spinning through a very large dynamic table? Here is a sample of my program: A11 = DCOUNT(IN.TAB,@AM) FOR A1 = 1 TO A11 IN.LINE = IN.TABA1 SWAP @VM WITH @AM IN IN.LINE CUST.NUM = IN.LINE1 CUST.DESC = IN.LINE2 NEXT A1 A11 is 85,000+ and as this loop goes on, this thing get really slow. Any tips on speeding this up? --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
Re: [U2] Speeding up processing through large dynamic table
This may have been offered but I didn't see it in the replies: If you have half an idea on the max num of atts, try using DIM X(30) or some large number and simply FOR.NEXT your way thru until you get to a logical end like a null value. I digest EDI records often in the neighborhood of 200,000 rows or more this way. Mark Johnson - Original Message - From: Colin Alfke [EMAIL PROTECTED] To: u2-users@listserver.u2ug.org Sent: Monday, November 17, 2008 4:24 PM Subject: RE: [U2] Speeding up processing through large dynamic table Oh my - I'm not sure with all that swapping that you'll come out much ahead. You're missing the point of remove. If your array is well built your code simply becomes: LOOP REMOVE CUST.NUM FROM IN.TAB SETTING MARK REMOVE CUST.DESC FROM IN.TAB SETTING MARK (do your thing) WHILE MARK DO REPEAT If you do have to worry about having more attributes or sub-values in the array then you need to test the MARK variable after each remove and keep removing until the line is exhausted. Here is how MARK (delimiter) is set: Delimiter Code Description ASCII Value* 0 array end 1 record mark 255 2 attribute mark 254 3 value mark 253 4 subvalue mark 252 5 text mark 251 6 not used; nonprinting 250 7 not used; nonprinting 249 Someone else sent an example of how to keep checking MARK so I won't bother. You could even throw it in a subroutine to keep your processing clean. Hth Colin Alfke Calgary, Canada -Original Message- From: Dave Laansma That is what I was afraid of. Okay. So after listening to all of your comments (thus far since there is an annoying delay in these messages), here is what I like the best: SWAP CHAR(9) WITH IN IN.TAB SWAP CHAR(10) WITH IN IN.TAB SWAP @VM WITH CHAR(9) IN IN.TAB SWAP @SM WITH CHAR(10) IN IN.TAB REPEAT REMOVE IN.LINE FROM IN.TAB SETTING MARK SWAP CHAR(9) WITH @VM IN IN.LINE SWAP CHAR(10) WITH @SM IN IN.LINE (do my thing with IN.LINE) UNTIL MARK DO REPEAT Any objections, concerns or better suggestions for using CHAR(10) as the temporary substitute for the @SM? I just picked it because it came right after CHAR(9) on my handy-dandy ASCII chart! Been using it since the 70's. Some things just never go out of style! David Laansma -Original Message- From: David Wolverton If you don't want to 'swap' all the other markers with 'strings' (SWAP @VM WITH VM IN RECORD) then you have to 'build' the line item up -- keep removing until you see the remove hit the @AM and then process the line... DW --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
Using whatever programming language you run to power your iis web site asp/asp.net/php etc. Or your iis web server dishes up static html which has a script it in that contacts the u2 server via ajax. . I appreciate your patience. I'm relatively new to AJAX. I am interested in finding a way to get to the U2 data more directly than we do currently, which is using a Java Bridge and Uniobjects for Java. I've done XMLHttpRequests from clients using JavaScript. In this case, the IIS server is doing an XMLHttpRequest to the U2 server, right? It takes the request response from the U2 server and incorporates it into a page that is returned to the client. Is this server side JavaScript, or is there a way to do an XMLHttpRequest from ASP/PHP? Charles Shaffer Senior Analyst NTN-Bower Corporation --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Speeding up processing through large dynamic table
Look at MATPARSE A11 = DCOUNT(IN.TAB,@AM) DIM RECS(A11) MATPARSE RECS FROM IN.TAB, @AM FOR A1 = 1 TO A11 CUST.NUM = RECS(A1)1,1 CUST.DESC = RECS(A1)1,2 NEXT A1 -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Laansma Sent: 17 November 2008 18:10 To: u2-users@listserver.u2ug.org Subject: [U2] Speeding up processing through large dynamic table Is there a way to speed up spinning through a very large dynamic table? Here is a sample of my program: A11 = DCOUNT(IN.TAB,@AM) FOR A1 = 1 TO A11 IN.LINE = IN.TABA1 SWAP @VM WITH @AM IN IN.LINE CUST.NUM = IN.LINE1 CUST.DESC = IN.LINE2 NEXT A1 A11 is 85,000+ and as this loop goes on, this thing get really slow. Any tips on speeding this up? --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ - ** The contents of this e-mail are subject to contract in all cases and William Hill PLC, its subsidiaries or affiliates make no contractual commitment save where confirmed by hard copy. The contents of this e-mail do not necessarily represent the views of William Hill PLC, its subsidiaries or affiliates. We accept no liability, including liability for negligence, in respect of any statement in this e-mail. This e-mail and any files transmitted with it are confidential, may be subject to legal privilege and intended solely for the use of the individual or entity to which they are addressed. If you are not the intended recipient, you are hereby notified that any use or dissemination of this communication is strictly prohibited. If you have received this e-mail in error, please notify us immediately, then delete this e-mail. Please note that William Hill can accept no responsibility for viruses and it is your responsibility to scan any emails and their attachments. This message was from William Hill PLC whose registered office is Greenside House, 50 Station Road, Wood Green, London N22 7TP. Company Registration Number: 4212563 England. * --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
Hi Any javascript will run in the browser and not on the server. What the javascript calls using XMLHttpRequest will exist on a server somewhere. XMLHttpRequest is the javascript DOM API that is the keystone of AJAX. You probably use that now to contact a webservice written in asp.net that then uses uniobjects to connect to u2. The same XMLHttpRequest call could also use my example php code to do a similar thing, but the php is fairly unsophisticated compared to uniobjects and will not work well if you have heavy load, no licences left etc + does not manage any pooling or device licencing. If you want to connect to a web page/service direct from within your asp.net - well here is a very simple example vb.net function to do just that - tho there are of course many ways to do this Private Function getWeb(ByVal url As String) As String Dim URI As Uri = New Uri(url) Dim webPage As String = String.Empty Dim WebRequest As HttpWebRequest = HttpWebRequest.Create(URI) WebRequest.Timeout = 8000 Try Dim WebResponse As WebResponse = WebRequest.GetResponse() Dim Stream As Stream = WebResponse.GetResponseStream() Dim StreamReader As StreamReader = New StreamReader(Stream) webPage = StreamReader.ReadToEnd Catch ex As WebException Err = ex.ToString End Try Return webPage End Function -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: 18 November 2008 14:46 To: u2-users@listserver.u2ug.org Subject: RE: [U2] Setting return code when a Universe process terminates Using whatever programming language you run to power your iis web site asp/asp.net/php etc. Or your iis web server dishes up static html which has a script it in that contacts the u2 server via ajax. . I appreciate your patience. I'm relatively new to AJAX. I am interested in finding a way to get to the U2 data more directly than we do currently, which is using a Java Bridge and Uniobjects for Java. I've done XMLHttpRequests from clients using JavaScript. In this case, the IIS server is doing an XMLHttpRequest to the U2 server, right? It takes the request response from the U2 server and incorporates it into a page that is returned to the client. Is this server side JavaScript, or is there a way to do an XMLHttpRequest from ASP/PHP? Charles Shaffer Senior Analyst NTN-Bower Corporation --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ No virus found in this incoming message. Checked by AVG - http://www.avg.com Version: 8.0.175 / Virus Database: 270.9.3/1786 - Release Date: 17/11/2008 17:24 No virus found in this outgoing message. Checked by AVG - http://www.avg.com Version: 8.0.175 / Virus Database: 270.9.3/1786 - Release Date: 17/11/2008 17:24 --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Speeding up processing through large dynamic table
As I recall, you will get IN.FIELD when MARK is set to '0' - showing it is the 'last item' in the group. You will want to add that on I think -- I don't have a way to confirm this -- but I thought if you got a 0 or 1, the 'remove' still had something in it to 'share' -- See my example from yesterday... I think you'll miss the last segment with this version of the logic -- you need to treat 0 or 1 the same as a 2, except knowing it's the last iteration... DW -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Dave Laansma Sent: Tuesday, November 18, 2008 10:04 AM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table All right! Well, after evaluating the overwhelming response to this seemingly simple question, I have experimented and decided on the following approach. Embracing the risk of opening myself up to scrutiny of fellow professionals with both greater and lesser wisdom than myself, this is the path I have chosen. Feel free to provide constructive criticism and/or blatant flaws in logic and reason, and I'll take it into consideration. First, write a subroutine (I supposed it could have been a FUNCTION) that performs the REMOVE for me. This subroutine looks like this: SUBROUTINE HUB.REMOVE (IN.TAB,OUT.LINE,MARK) OUT.LINE = MARK = LOOP REMOVE IN.FIELD FROM IN.TAB SETTING MARK BEGIN CASE CASE MARK = 0 EXIT CASE MARK = 2 ; * @AM OUT.LINE := IN.FIELD EXIT CASE MARK = 3 ; * @VM OUT.LINE := IN.FIELD : @VM CASE MARK = 4 ; * @SM OUT.LINE := IN.FIELD : @SM END CASE REPEAT RETURN END * IN.TAB is the whole table * OUT.LINE is the attribute with all VM and SM in tact * MARK = 0 is the flag to the CALLING program that we are finished. The calling program looks like this: LOOP CALL HUB.REMOVE (IN.TAB,IN.REC,MARK) IF MARK = 0 THEN EXIT (do my thing with IN.REC) REPEAT Conclusions I have arrived at: 1. LOOP/REMOVE/REPEAT is absolutely faster than FOR/NEXT loop, especially as the size of the table grows into the 10's of thousands 2. SWAP is a non-issue in regards to performance. 3. It appears as though nesting REMOVEs would be bad. 4. The 'pointer' the OS keeps track of is indeed maintained to and from the CALL to my subroutine. This is good. 5. This virtual users group is an EXCELLENT source for U2 Software Engineers to learn more about the toolbox provided by the UNIBASIC commands, theories and especially techniques for accomplishing specific, targeted objectives. 6. U2UG in Atlanta was very good. Still room for improvement, but that will come as it evolves. Thank you ALL for your input. It certainly has been an eye-opening exercise. There certainly are some 'interesting' ideas out there. So, have it folks! I'll be watching! David Laansma IT Manager Hubbard Supply Co. Direct: 810-342-7143 Office:810-234-8681 Fax: 810-234-6142 www.hubbardsupply.com Delivering Products, Services, and Innovative Solutions -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Laansma Sent: Monday, November 17, 2008 1:10 PM To: u2-users@listserver.u2ug.org Subject: [U2] Speeding up processing through large dynamic table Is there a way to speed up spinning through a very large dynamic table? Here is a sample of my program: A11 = DCOUNT(IN.TAB,@AM) FOR A1 = 1 TO A11 IN.LINE = IN.TABA1 SWAP @VM WITH @AM IN IN.LINE CUST.NUM = IN.LINE1 CUST.DESC = IN.LINE2 NEXT A1 A11 is 85,000+ and as this loop goes on, this thing get really slow. Any tips on speeding this up? --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Speeding up processing through large dynamic table
My 2 cents: I only use FOR/NEXT loops if I am dealing with data that I know is small. Technically, LOOP/REMOVE are faster, but for something small I just keep it simple. I would think the LOOP/REMOVE or basic SELECT would both be very fast. The SELECT has the advantage of not needing to test the delimiter, so it might actually be faster depending on what you are doing. In your snippet of code, I do not see it doing anything (I'm sure for simplicity sake), but based on the size of data you are dealing with, I would not want the overhead of an external subroutine. You will get better performance if you keep all the code in a single piece of code. I also thought about using DIM array (MATPARSE) as was previously mentioned. This takes extra time to set up, but will move fastest once it is set up. The more work you do with the data, the better it is to use DIM arrays. Again, because I do not know exactly what you are doing, I can only give loose advise. In this case, I would guess it would not be the way to go, but you might want to play with the following options to get the best results: LOOP/REMOVE SELECT DIM array Again, keep it all in one piece of code unless you want the overhead of passing huge data back and forth and the overhead of the 2nd subroutine. John Israel Sr. Programmer/Analyst Dayton Superior Corporation 721 Richard St. Dayton, OH 45342 937-866-0711 x44380 -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Dave Laansma Sent: Tuesday, November 18, 2008 11:04 AM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table All right! Well, after evaluating the overwhelming response to this seemingly simple question, I have experimented and decided on the following approach. Embracing the risk of opening myself up to scrutiny of fellow professionals with both greater and lesser wisdom than myself, this is the path I have chosen. Feel free to provide constructive criticism and/or blatant flaws in logic and reason, and I'll take it into consideration. First, write a subroutine (I supposed it could have been a FUNCTION) that performs the REMOVE for me. This subroutine looks like this: SUBROUTINE HUB.REMOVE (IN.TAB,OUT.LINE,MARK) OUT.LINE = MARK = LOOP REMOVE IN.FIELD FROM IN.TAB SETTING MARK BEGIN CASE CASE MARK = 0 EXIT CASE MARK = 2 ; * @AM OUT.LINE := IN.FIELD EXIT CASE MARK = 3 ; * @VM OUT.LINE := IN.FIELD : @VM CASE MARK = 4 ; * @SM OUT.LINE := IN.FIELD : @SM END CASE REPEAT RETURN END * IN.TAB is the whole table * OUT.LINE is the attribute with all VM and SM in tact * MARK = 0 is the flag to the CALLING program that we are finished. The calling program looks like this: LOOP CALL HUB.REMOVE (IN.TAB,IN.REC,MARK) IF MARK = 0 THEN EXIT (do my thing with IN.REC) REPEAT Conclusions I have arrived at: 1. LOOP/REMOVE/REPEAT is absolutely faster than FOR/NEXT loop, especially as the size of the table grows into the 10's of thousands 2. SWAP is a non-issue in regards to performance. 3. It appears as though nesting REMOVEs would be bad. 4. The 'pointer' the OS keeps track of is indeed maintained to and from the CALL to my subroutine. This is good. 5. This virtual users group is an EXCELLENT source for U2 Software Engineers to learn more about the toolbox provided by the UNIBASIC commands, theories and especially techniques for accomplishing specific, targeted objectives. 6. U2UG in Atlanta was very good. Still room for improvement, but that will come as it evolves. Thank you ALL for your input. It certainly has been an eye-opening exercise. There certainly are some 'interesting' ideas out there. So, have it folks! I'll be watching! David Laansma IT Manager Hubbard Supply Co. Direct: 810-342-7143 Office:810-234-8681 Fax: 810-234-6142 www.hubbardsupply.com Delivering Products, Services, and Innovative Solutions -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Laansma Sent: Monday, November 17, 2008 1:10 PM To: u2-users@listserver.u2ug.org Subject: [U2] Speeding up processing through large dynamic table Is there a way to speed up spinning through a very large dynamic table? Here is a sample of my program: A11 = DCOUNT(IN.TAB,@AM) FOR A1 = 1 TO A11 IN.LINE = IN.TABA1 SWAP @VM WITH @AM IN IN.LINE CUST.NUM = IN.LINE1 CUST.DESC = IN.LINE2 NEXT A1 A11 is 85,000+ and as this loop goes on, this thing get really slow. Any tips on speeding this up? --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
Symeon, Thanks. I'll check it out. Charles Shaffer Senior Analyst NTN-Bower Corporation --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Speeding up processing through large dynamic table
But is it much faster than what you had to start with? Since both methods work, one might not be any better than the other. Although if your planning on using the HUB.REMOVE from multiple programs, then that course if most likely the best for your need. George -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Dave Laansma Sent: Tuesday, November 18, 2008 11:04 AM To: u2-users@listserver.u2ug.org Subject: RE: [U2] Speeding up processing through large dynamic table All right! Well, after evaluating the overwhelming response to this seemingly simple question, I have experimented and decided on the following approach. Embracing the risk of opening myself up to scrutiny of fellow professionals with both greater and lesser wisdom than myself, this is the path I have chosen. Feel free to provide constructive criticism and/or blatant flaws in logic and reason, and I'll take it into consideration. First, write a subroutine (I supposed it could have been a FUNCTION) that performs the REMOVE for me. This subroutine looks like this: SUBROUTINE HUB.REMOVE (IN.TAB,OUT.LINE,MARK) OUT.LINE = MARK = LOOP REMOVE IN.FIELD FROM IN.TAB SETTING MARK BEGIN CASE CASE MARK = 0 EXIT CASE MARK = 2 ; * @AM OUT.LINE := IN.FIELD EXIT CASE MARK = 3 ; * @VM OUT.LINE := IN.FIELD : @VM CASE MARK = 4 ; * @SM OUT.LINE := IN.FIELD : @SM END CASE REPEAT RETURN END * IN.TAB is the whole table * OUT.LINE is the attribute with all VM and SM in tact * MARK = 0 is the flag to the CALLING program that we are finished. The calling program looks like this: LOOP CALL HUB.REMOVE (IN.TAB,IN.REC,MARK) IF MARK = 0 THEN EXIT (do my thing with IN.REC) REPEAT Conclusions I have arrived at: 1. LOOP/REMOVE/REPEAT is absolutely faster than FOR/NEXT loop, especially as the size of the table grows into the 10's of thousands 2. SWAP is a non-issue in regards to performance. 3. It appears as though nesting REMOVEs would be bad. 4. The 'pointer' the OS keeps track of is indeed maintained to and from the CALL to my subroutine. This is good. 5. This virtual users group is an EXCELLENT source for U2 Software Engineers to learn more about the toolbox provided by the UNIBASIC commands, theories and especially techniques for accomplishing specific, targeted objectives. 6. U2UG in Atlanta was very good. Still room for improvement, but that will come as it evolves. Thank you ALL for your input. It certainly has been an eye-opening exercise. There certainly are some 'interesting' ideas out there. So, have it folks! I'll be watching! David Laansma IT Manager Hubbard Supply Co. Direct: 810-342-7143 Office:810-234-8681 Fax: 810-234-6142 www.hubbardsupply.com Delivering Products, Services, and Innovative Solutions -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Laansma Sent: Monday, November 17, 2008 1:10 PM To: u2-users@listserver.u2ug.org Subject: [U2] Speeding up processing through large dynamic table Is there a way to speed up spinning through a very large dynamic table? Here is a sample of my program: A11 = DCOUNT(IN.TAB,@AM) FOR A1 = 1 TO A11 IN.LINE = IN.TABA1 SWAP @VM WITH @AM IN IN.LINE CUST.NUM = IN.LINE1 CUST.DESC = IN.LINE2 NEXT A1 A11 is 85,000+ and as this loop goes on, this thing get really slow. Any tips on speeding this up? --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
That is similar to what we are doing now, wxcept the web server is Linux so I use XMLHttpRequests to call a PHP module that calls a Java routine that uses Uniobjects for Java to get the results from Unidata. An open source product called JavaBridge is used to allow php to call Java. Works well, but pretty complex to setup. Thanks for the info. Charles Shaffer Senior Analyst NTN-Bower Corporation --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
From: Charles_Shaffer I am interested in finding a way to get to the U2 data more directly than we do currently, which is using a Java Bridge and Uniobjects for Java. Charles, you may be interested in mvExec. It will execute any command or program on any MV system from anywhere in your network. In your case, you don't need to be concerned about connectivity. All exchanges with Universe are done by executing a local command and reading local files that contain the results. This can be used by any language or tools that you choose and there is no need to learn any new language or protocol. Example: DOS Command: mvexec mvreaditem Uses configuration file mvreaditem.mv0 in a local windows directory to read a customer record from a production server account. Results are stored in \temp. Config file has 4 lines written at runtime: productionserver--- name any server here EXEC.GET.ITEM --- call your own program here |CUSTOMERS|12345--- data for the program c:\temp\mvreaditem.mv1 --- store results here Software download and full documentation with code samples is on our Freeware page: remove.pleaseNebula-RnD.com/freeware mvExec is completely free and can be used by anyone who already has mv.NET installed. [AD] If you don't have mv.NET you can purchase a single license from Nebula RD or any other mv.NET reseller. Once you have an inexpensive license it can be used for many other purposes. HTH Tony Gravagno Nebula Research and Development TG@ remove.pleaseNebula-RnD.com Nebula RD sells mv.NET and other Pick/MultiValue products worldwide, and provides related development and training services --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Speeding up processing through large dynamic table
I still like the SELECT approach. It can be used on dynamic arrays and doesn't even need to wait to finish to make elements available. I tried using dynamic arrays one time and the speed was awful. Ever since, I use SELECT lists whenever possible. A MAT array might be faster since it is more like a traditional array, but SELECT is easy and fast. Here is the first part of the UniBasic HELP. * Help Information For: UNIBASIC SELECT Page: 1/7 SELECT Syntax SELECT file.var [TO {list.num.expr | list.var.expr}] [ON ERROR statements] SELECT dyn.array [TO {list.num.expr | list.var.expr}] [ON ERROR statements] Description The UniBasic SELECT command creates an active select list of all record IDs in a file. Records appear in the list in the order in which they are stored in the file. You can access the select list with a READNEXT statement. The UniBasic SELECT command differs from EXECUTE SELECT ..., which executes the UniQuery SELECT command. The UniBasic SELECT command immediately makes available to READNEXT one group of IDs at a time. The program does not have to wait for the entire ID list to be constructed. . . .*** Charles Shaffer Senior Analyst NTN-Bower Corporation --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
[U2] Speeding up processing through large dynamic table [ U2U comment]
Dave: You wrote: U2UG in Atlanta was very good. Still room for improvement, but that will come as it evolves. 1) I trust you provided detailed feedback to the U2 marketing folks so we can make the right improvements for next year. If not - I'm happy to forward your thoughts along. 2) I am aware of at least 2 sessions at U2U that included a dramatic example of how the use of REMOVE can boost your application performance and reduce cpu time. I know it was not possible to attend all sessions. :-( Cheers Wally Terhune U2 Support Architect IBM Information Management Software Tel: (303) 773-7969 T/L 656-7969 Mobile: (303) 807-6222 Email: [EMAIL PROTECTED] http://www.ibm.com/software/data/u2/support --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Setting return code when a Universe process terminates
Thanks Tony. I'll check it out. Charles Shaffer Senior Analyst NTN-Bower Corporation --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
Re: [U2] Pentaho/ETL Tools
I saw a fairly impressive webinar from Kore Technologies the other day, but they port UniVerse to Microsoft SQL, so I don't know if you'd be interested in them. It seemed like they had a pretty clean interface. http://www.koretech.com/kore_integrator.asp [EMAIL PROTECTED] We also use MITS, but it is not designed as a data warehouse. It could be configured as such, but there are currently some built-in limitations, such as a maximum of 16 identifiers that you can use to drill-down into the data (e.g. customer, salesman, product, etc.). You could construct additional hypercubes to take care of additional identifiers, but like I said, it isn't designed as a data warehouse. I think it could be, and should be, but that's for the development team to tackle. -- Louie In Seattle (caveat: former MITS employee, current MITS Discover and MITS Report user) --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
[U2] {UD} SAVEDLISTS list expansion
Is there any way to expand the number of items stored in a SAVEDLISTS list? We've hit our system's limit on savedlists size. The limits of 1000 sublist files and 34,815 bytes per sublist are not enough to hold some of our savedlists. Is there any way to expand the sublist file range from 3 to 4 digits to have 10,000 sublist files, or allow more bytes in each sublist file? 34,815 is an interesting number for a limit, it being one less than 34k. I don't see anything in the configuration for it. I was unable to find anything related to this in the UniData docs, nor in the U2 Knowledge bases. UniData: 7.1.10 HP-UX 11.11 Dean Armbruster System Analyst Wolseley North American Division * 12500 Jefferson Avenue * Newport News * VA * 23602-4314 USA T: +1(757) 989-2839 * F: +1(757)989-2801 * E: [EMAIL PROTECTED] www.wolseley.com blocked::http://www.wolseley.com/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Speeding up processing through large dynamic table
That behaviour could be fixed by converting VM to SM which select/readnext leaves alone... Still pretty quick. I just did a test using the code below on an 85000 att array and it took .086 seconds on a low spec dev machine. convert @vm to @sm in IN.TAB select IN.TAB loop while readnext IN.LINE do CUST.NUM = IN.LINE1,1,1 CUST.DESC = IN.LINE1,1,2 repeat Stuart Boydell -Original Message- My first test did not have @vm's and it looked like it worked but when I put in @vm's, anything after them is ignored. READNEXT could be an option ** This email message and any files transmitted with it are confidential and intended solely for the use of addressed recipient(s). If you have received this communication in error, please reply to this e-mail to notify the sender of its incorrect delivery and then delete it and your reply. It is your responsibility to check this email and any attachments for viruses and defects before opening or sending them on. Spotless collects information about you to provide and market our services. For information about use, disclosure and access, see our privacy policy at http://www.spotless.com.au Please consider our environment before printing this email. ** --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
RE: [U2] Unix nfiles phantoms
Phantoms (and also Connection Pool licenses) are still concurrent UniVerse sessions - so in calculating any system-wide parameters for the Operating System you should account for all processes including PHANTOM and CP usage. If you use VERY large numbers of PHANTOMS this is something you need to be very aware of indeed. On per-user parameters of course the same does not apply. Regards JayJay --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
[U2] Counting records
I am trying to remember a Universe function that returns the number of records in a file. Something like this. OPEN 'SOMEFILE' TO SOMEFILE ELSE STOP 201,SOMEFILE NUM.OF.RECORDS = UNKNOWNFUNCTION(SOMEFILE) -- View this message in context: http://www.nabble.com/Counting-records-tp20569376p20569376.html Sent from the U2 - Users mailing list archive at Nabble.com. --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/
Re: [U2] {UD} SAVEDLISTS list expansion
hmm... per the readme - the following should have been fixed at 7.1.3. Testcase?? Issue 8594 - Problem Description UniData -- When the SAVE.LIST command created an item in the. _SAVEDLISTS_ directory that contained more than 10,000 parts, for example list001, list002, and so forth, a GET.LIST command to retrieve that list only returned the first 9,999 parts. This problem has been resolved. Wally Terhune U2 Support Architect IBM Information Management Software Tel: (303) 773-7969 T/L 656-7969 Mobile: (303) 807-6222 Email: [EMAIL PROTECTED] http://www.ibm.com/software/data/u2/support From: [EMAIL PROTECTED] To: u2-users@listserver.u2ug.org Date: 11/18/2008 02:58 PM Subject:[U2] {UD} SAVEDLISTS list expansion Is there any way to expand the number of items stored in a SAVEDLISTS list? We've hit our system's limit on savedlists size. The limits of 1000 sublist files and 34,815 bytes per sublist are not enough to hold some of our savedlists. Is there any way to expand the sublist file range from 3 to 4 digits to have 10,000 sublist files, or allow more bytes in each sublist file? 34,815 is an interesting number for a limit, it being one less than 34k. I don't see anything in the configuration for it. I was unable to find anything related to this in the UniData docs, nor in the U2 Knowledge bases. UniData: 7.1.10 HP-UX 11.11 Dean Armbruster System Analyst Wolseley North American Division * 12500 Jefferson Avenue * Newport News * VA * 23602-4314 USA T: +1(757) 989-2839 * F: +1(757)989-2801 * E: [EMAIL PROTECTED] www.wolseley.com blocked::http://www.wolseley.com/ --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ [demime 1.01d removed an attachment of type image/gif which had a name of graycol.gif] [demime 1.01d removed an attachment of type image/gif which had a name of ecblank.gif] --- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/