× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



We published an article a few years ago that talks about SQL/XML vs the
XML Extender Support. Some of the observations in that article will also
apply to CGIDEV2 and possibly other 3rd party solutions.
http://db2fori.blogspot.com/2013/02/integrating-xml-past-present-and-future.html

The advantage to CGIDEV2 is that it's been around longer, and many IBM i
developers are comfortable with it...The SQL/XML support takes a while to
get the hang of and we all can appreciate that just because something is
newer does not always mean something is better. If someone is NOT building
an XML document from relational data stored in DB2 and is NOT familiar
with SQL - then perhaps another approach such as CGIDEV2 is a simpler
choice.

Then again, new technology doesn't get built into DB2 for i unless it
offers potential benefits. In this case, the SQL and SQL/XML support has
a lot of advantages for the kinds of things that you are doing.

The comments I would add to Birgitta's remarks are:

1) Creating the XML document within an SQL query means that the data types
are automatically converted to the W3C standard when the XML document is
serialized. (Date and Time formats tend to be a problem when other
approaches are used, not sure what happens with CGIDEV2. Characters such
as '<' in text data is another example of something that gets properly
escaped by SQL/XML when the XML document is serialized)

2) Building an XML document with SQL/XML means that you're running an SQL
query...The DB2 optimizer will consider indexes and come up with an
efficient plan for accessing the data. If you try to implement a native
solution, (or aquire a tool that does this for you), then you may end up
accessing the data in a less efficient mannar, and/or may spend a lot of
effort trying to optimize later. Using an SQL query to get the data, and
then building the document in RPG code (using the result set) usually
means a lot of effort designing the SQL query, traversing the result set,
and doing your own data conversion as the document is built.

3) SQL/XML syntax is not especially easy to read. From an acemidac point
of view, a relational data model is being mapped to a hierarchical model.
This turns out to be a non-trivial thing to do, not matter which method is
used to accomplish it. There are several SQL/XML functions that produce
the same results as combinations of the other SQL/XML functions
(XMLFOREST, XMLROW, and XMLGROUP are examples). Using these where it makes
sense can help make things more readable. Views and CTEs also can be
helpful when it makes sense, and I find using comments and indenting in my
SQL statement to also be very helpful.

4) SQL/XML is a standard in the industry, which should make it easier to
develop portable solutions - and find education and skill. It also means
that its not likely to go away in the forseeable future.


The DB2 for i Center of Excellence occasionally offers an Advanced SQL
Workshop in Rochester, MN. This might be something to consider if you are
having difficulties and need education.
http://www-03.ibm.com/systems/power/software/i/db2/education/advanced-sql.html


Nick Lawrence
DB2 for IBM i


Yesterday we pioneered for today; today, we are pioneering for tomorrow.
- Thomas J. Watson, Sr.






From: rpg400-l-request@xxxxxxxxxxxx
To: rpg400-l@xxxxxxxxxxxx
Date: 08/21/2014 08:01 PM
Subject: RPG400-L Digest, Vol 13, Issue 354
Sent by: "RPG400-L" <rpg400-l-bounces@xxxxxxxxxxxx>



Send RPG400-L mailing list submissions to
rpg400-l@xxxxxxxxxxxx

To subscribe or unsubscribe via the World Wide Web, visit
http://lists.midrange.com/mailman/listinfo/rpg400-l
or, via email, send a message with subject or body 'help' to
rpg400-l-request@xxxxxxxxxxxx

You can reach the person managing the list at
rpg400-l-owner@xxxxxxxxxxxx

When replying, please edit your Subject line so it is more specific
than "Re: Contents of RPG400-L digest..."


*** NOTE: When replying to this digest message, PLEASE remove all text
unrelated to your reply and change the subject line so it is meaningful.

Today's Topics:

1. Re: Writing XML with RPGLE V7R1M0 (Jon Paris)
2. Re: Writing XML from RPGLE (Vernon Hamberg)


----------------------------------------------------------------------

message: 1
date: Thu, 21 Aug 2014 11:53:44 -0400
from: Jon Paris <jon.paris@xxxxxxxxxxxxxx>
subject: Re: Writing XML with RPGLE V7R1M0

I don't disagree that if you build in pieces Birgitta it is not as bad.
Assuming of course that you already competent with CTEs and other SQL
features.

But I do think it dangerously comes close to being write-only code. I have
been looking at your example for quite a while now and I still can't just
"read" it. I can work it out slowly - but I can't just understand it.

With the powerExt approach or with CGIDEV2 or other templating systems
what is happening is far more obvious and readable.

By the way, I still can't see how you omit elements completely using SQL -
it may be in your example but I'm darned if I can see it. The logic that
can be applied to the build is also limited. SQL gets very lumpy very
quickly when anything beyond a simple Case needs to be used.

As I see it, it is a case of using the appropriate tool for the job. I can
see using SQL for a simple table dump similar to your original example.
Once it gets as complex as this example I want something easier to read
and maintain. Right tool for the job - and in my opinion SQL is not the
right tool at this level of complexity. Maybe I'll change my mind as I
become more familiar with it.



On 2014-08-21, at 1:29 AM, Birgitta Hauser <Hauser@xxxxxxxxxxxxxxx> wrote:

Jon, Vern,

It's only the way you are used to do it.

The SQL syntax is really powerful.
Using CTEs allow you to the complex structure into sub-structures. Those
sub-structures can be tested and put together.
You start with the lowest level, build the XML string add join fields
and
test the result. Build the next level join with the lower level, test it
again etc.
And at the end the complete XML document is created.

In RPG I'd use the same practice. Writing sub-procedures, testing those
sub-procedures, calling the sub-procedures from other procedures etc.

In real live I create and use SQL views may be in composition with
global
variables and reduce my RPG or whatever (embedded SQL) Code to a
minimum:
Exec SQL Set GblVaStart = :HostStartDate;
Exec SQL Set GblVarIncoTerms = :HostIncoTerms;
... set other Global Variables
Exec SELECT XMLDoc into :IFSFile From SQLView;

BTW in my classes I have them both, those guys who prefer the pure
RPG/Cobol
(in composition with CGIDEV2) solution and others who prefer the pure
SQL
version.

Mit freundlichen Gr??en / Best regards

Birgitta Hauser

"Shoot for the moon, even if you miss, you'll land among the stars."
(Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
"What is worse than training your staff and losing them? Not training
them
and keeping them!"

-----Urspr?ngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Im Auftrag von
Vernon
Hamberg
Gesendet: Wednesday, 20.8 2014 21:22
An: RPG programming on the IBM i (AS/400 and iSeries)
Betreff: Re: Writing XML with RPGLE V7R1M0

Jon

I had a similar response when I first tried to write some XML here - the
SQL
approach was ghastly as to syntax, and CGIDEV2 was devilishly trivial.

I just don't have the time to dig so deeply into the SQL syntax - i
think
it's tremendously powerful - but this is one area I don't really want to
use
a "black-box" approach - I want to see better what I'm doing.

Maintainability and speed are key for me.

Cheers
Vern

On 8/20/2014 11:48 AM, Jon Paris wrote:
Thanks for that - I think it has convinced me that I don't want to
build
XML this way <grin> but I will study it further.

I'd probably get on better if I could get past my thorough dislike for
SQL's ghastly syntax.


On 2014-08-20, at 11:54 AM, Birgitta Hauser <Hauser@xxxxxxxxxxxxxxx>
wrote:

Jon,

I only used this simple SQL statement because I wanted to show how to
write into the IFS with embedded SQL.
But iIf you want to have a more complex SQL statement that generates
an XML document that is written with a single SQL-Statement into the
IFS here is a more complex one:
Joining Address Master, Order Header, Order Detail and Item master
tables:

With -- 1. Address information:
-- <Customer


CustNo="xx"><Name></Name><Street></Street><ZipCode></ZipCode><City></City>
-- </Customer>
Address as (Select CustNo, XMLElement(Name "Customer",
XMLAttributes(Trim(CustNo) as
"CustNo"),
XMLConcat(XMLElement(Name "Name",
Trim(Trim(CustName1) concat ' ' concat Trim(CustName2))),
XMLForest(Trim(Street)
as "Street",
Trim(ZipCode)
as "ZipCode",
Trim(City) as
"City"))) CustXML
From Addressx),

-- 2. Order Header Information:
-- <Mandant></Mandant><OrderNo></OrderNo>
--
<DeliveryDate><DeliveryDate><OrderType></OrderType><DeliveryTerms></D
elivery
Terms>
Header as (Select Company, OrderNo, CustNo,
XMLForest(Company as "Mandant",
OrderNo as "OrderNo") OrderNoXML,
XMLConcat(XMLElement(Name "DeliveryDate",
Char(DelDate, ISO)),
XMLElement(Name "OrderType",
Case When OrderType =
'DO'
Then 'Domestic'
When OrderType =
'EX'
Then 'Export'
When OrderType =
'UO'
Then 'Express'
else '???' End),
XMLElement(Name "DeliveryTerms",
Case When DelTerms =
'CPT'
Then 'Delivered Free'
When DelTerms =
'EXW'
Then 'Ex Works'
Else '???' End))
HdrAddXML
From OrderHdrX
Where DelDate between '2009-12-01' and
'2009-12-31'),

-- 3. Joining Order Header and Address Information (CTE No. 1 and
2)
HdrAddr as (Select Company, OrderNo, XMLConcat(OrderNoXML,
CustXML,
HdrAddXML) OrderXML
from Header Join Address Using(CustNo)),

-- 4. Item Information
-- <Item
ItemNo=""><ItemDescription><ItemDescription><PricePerUnit
Currency=""></PricePerUnig>
-- </Item>
Item as (Select i.*,
XMLElement(Name "Item" ,
XMLAttributes(Trim(ItemNo) as "ItemNo"),
XMLConcat(XMLElement(Name
"ItemDescription", Trim(Descript)),
XMLElement(Name "PricePerUnit",

XMLAttributes('EUR' as "Currency"),
Price))) ItemXML
from ItemMastX i),

-- 5. Order Detail Information
-- <Position PosNo=""><Item Information from CTE No. 4=Item>
--
<DeliveryQuantity></DeliveryQuantity><DeliveryValue
Currency""></DeliveryValue>
-- </Position>
Position as (Select Company, OrderNo,
XMLElement(Name "Position",
XMLAttributes(OrderPos as "PosNo"),
XMLConcat(ItemXML,
XMLElement(Name
"DeliveryQuantity", DelQty),
XMLElement(Name
"DeliveryValue",

XMLAttributes('EUR' as "Currency"),
DelQty *
Price))) PosXML
From OrderDetX join Item using (Company, ItemNo)
Where DelQty > 0),

-- 6. Concatenating Order Details per Order
-- <Positions><Order Position Information - CTE No. 5>
-- </Positions>
AllPos as (Select Company, OrderNo,
XMLElement(Name "Positions",
XMLAGG(PosXML)) PosOrderNoXML
from Position
Group By Company, OrderNo),

-- 7. Joining Order Header / Address / Order Position and Item
information
-- <Order><OrderHeader and Address information - CTE No. 3>
-- <Order Positions and Item information - CTE No. 5>
-- </Order>
Order as (Select XMLElement(Name "Order",
XMLConcat(OrderXML,
PosOrderNoXML)) OrdersXML
from HdrAddr join AllPos using (Company,
OrderNo))

-- Final Select Statement
-- Concatenating Order Informationen No. 7 and generating an XML
Document

Select xmldocument(xmlElement(Name "Orders", XMLAGG(OrdersXML)))
From Order;

An here is the Result (I only copied the first Order)

<Orders>
<Order>
<Mandant>10</Mandant>
<OrderNo>BNR2009-12-15/1</OrderNo>
<Customer CustNo="10003">
<Name>Goldbach GmbH
***********Sonder-Aktion******</Name>
<Street>Hanauerstr.
21</Street>
<ZipCode>63755</ZipCode>
<City>Alzenau</City>
</Customer>
<DeliveryDate>2009-12-01</DeliveryDate>
<OrderType>Domestic</OrderType>
<DeliveryTerms>Delivered
Free</DeliveryTerms>
<Positions>
<Position PosNo="1">
<Item
ItemNo="CF001">
<ItemDescription>Champagne flute
1</ItemDescription>
<PricePerUnit
Currency="EUR">,60</PricePerUnit>
</Item>
<DeliveryQuantity>20</DeliveryQuantity>
<DeliveryValue
Currency="EUR">12,00</DeliveryValue>
</Position>
<Position PosNo="2">
<Item
ItemNo="CF003">
<ItemDescription>Champagne flute
3</ItemDescription>
<PricePerUnit
Currency="EUR">1,45</PricePerUnit>
</Item>
<DeliveryQuantity>24</DeliveryQuantity>
<DeliveryValue
Currency="EUR">34,80</DeliveryValue>
</Position>
<Position PosNo="4">
<Item
ItemNo="BS002">
<ItemDescription>Book shelves
2</ItemDescription>
<PricePerUnit
Currency="EUR">66,15</PricePerUnit>
</Item>
<DeliveryQuantity>40</DeliveryQuantity>
<DeliveryValue
Currency="EUR">2646,00</DeliveryValue>
</Position>
</Positions>
</Order>


Mit freundlichen Gr??en / Best regards

Birgitta Hauser

"Shoot for the moon, even if you miss, you'll land among the stars."
(Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
"What is worse than training your staff and losing them? Not training
them and keeping them!"

-----Urspr?ngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Im Auftrag von
Jon Paris
Gesendet: Wednesday, 20.8 2014 17:22
An: RPG programming on the IBM i (AS/400 and iSeries)
Betreff: Re: Writing XML with RPGLE V7R1M0

Your example does seem to work well Birgitta - but even the simplest
of XML documents usually requires a bit more "shape". The script as
given (modified a bit to fit a DB I had to hand) produces this:

<Customers>
<Customer>
<ID>A0011</ID>
<PersName>Acme Best Brew </PersName>
<ZipCode>0</ZipCode>
<Zip-Plus>0</Zip-Plus>
<City>Acme </City>
</Customer>
... repeat Customer element

But what I wanted was:

<Customers>
<Customer>
<ID>A0011</ID>
<PersName>Acme Best Brew </PersName>
<Address> <<<< New compound element
<ZipCode>55901</ZipCode>
<Zip-Plus></Zip-Plus>
<City>Acme </City>
</Address>
</Customer>

And I have looked throughout the IBM and other examples and have not
been able to see how this is done. In all the other approaches
described in this thread providing this "shape" is trivial. I'd love
to know how the SQL approach handles it.

Also Zip-Plus is commonly an optional element and should not be
present when empty - how do I achieve that?


On 2014-08-20, at 12:57 AM, Birgitta Hauser <Hauser@xxxxxxxxxxxxxxx>
wrote:

Hi Brian,

You may check the following article:
Using RPG to exploit IBM DB2 XML support
http://www.ibm.com/developerworks/ibmi/library/i-using-rpg/index.htm
l

Using embedded SQL or better Reference Files is an even easier way
for writing the result to the IFS. (The most complex part is
building the SQL statement for generating the XML document.

The following souce code is a complete program for generating an XML
document and writing this document directly to the IFS:

D MyXMLDoc S SQLTYPE(XML_CLOB_File)
D

//******************************************************************
**
***
/Free
Exec SQL Set Option Commit=*None, DatFmt=*ISO,
CloSQLCsr=*EndActGrp;
Clear MyXMLDoc;
MyXMLDoc_Name = '/home/Hauser/WrtSQLXML.xml';
MyXMLDoc_NL = %Len(%Trim(MyXMLDoc_Name));
MyXMLDoc_FO = SQFOVR; //Replace if
exists

Exec SQL
Select XmlDocument
(xmlgroup(EmployeeNo as "PersNo",
Trim(Trim (FirstName) concat ' ' concat
Trim(Name)) as "PersName",
Address as "Street",
ZipCode as "ZipCode",
City as "City"
Order By City Desc, Name
Option Row "Employee"
Root "Staff"))
into :MyXMLDoc
From LobStaff;

If SQLCODE < *Zeros;
Dsply 'Error occured';
else;
Dsply 'XML Document generated';
EndIf;

*InLR = *On;
/End-Free

Mit freundlichen Gr??en / Best regards

Birgitta Hauser

"Shoot for the moon, even if you miss, you'll land among the stars."
(Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
"What is worse than training your staff and losing them? Not
training them and keeping them!"

-----Urspr?ngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Im Auftrag von
Brian Stapleton
Gesendet: Tuesday, 19.8 2014 21:56
An: rpg400-l@xxxxxxxxxxxx
Betreff: Writing XML with RPGLE V7R1M0

Good Afternoon

I need to learn how to write XML documents with RPGLE V7R1M0 onto our
IFS.

How can I educate myself on doing this?

I would prefer to stay as native RPGLE as possible, and am not
looking to purchase a 3rd party solution.





Brian Stapleton
Information Services
Carhartt, Inc
5750 Mercury Drive
Dearborn, MI 48126
Desk - 313-749-6586
Fax - 313-271-3455
BStapleton@xxxxxxxxxxxx<mailto:BStapleton@xxxxxxxxxxxx>

[Description: Description: Carhartt_emaillogo]


Confidential: This electronic message and all contents contain
information from Carhartt, Inc. and its affiliates which may be
confidential or otherwise protected from disclosure. The information
is intended to be for the addressee only. If you are not the
addressee, any disclosure, copy, distribution or use of the contents
of this message is prohibited. If you have received this electronic
message in error, please notify us immediately at (313) 271-8460 and
destroy the original message and all copies.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take
a moment to review the archives at
http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take
a moment to review the archives at
http://archive.midrange.com/rpg400-l.

Jon Paris

www.partner400.com
www.SystemiDeveloper.com




--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at
http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at
http://archive.midrange.com/rpg400-l.

Jon Paris

www.partner400.com
www.SystemiDeveloper.com





--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To
subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com






------------------------------

message: 2
date: Thu, 21 Aug 2014 11:22:07 -0500
from: Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx>
subject: Re: Writing XML from RPGLE

Hi Brad

I'm going to throw in a consideration when choosing a method here - and
I'm coming from NOT using the SQL support - which is more of a bottom-up
approach as Birgitta presented it.

We have basically 3 approaches here - 1) the recent SQL support 2)
templates (CGIDEV2 and your eRPG) 3) nodes (powerEXT as presented by
Henrik)

Another approach is that of XMLi - it has a choice of the node approach
or a different kind of template approach - worth looking at.

OK - for putting data into XML, I think the node approach is really
good. This would be the case with the examples we've seen here, where we
are really dealing with all our own data.

However, I'm working on creating Excel workbooks in the latest XLSX
format - there is SO much stuff that is not coming from our data, that I
REALLY don't want to put all that into code. Much of it is essentially
boilerplate.

Just a little history from me - I worked on an web application
that had ALL the HTML being written in the RPG - that makes for really
big programs, or lots of them, to do the job. When I started to rewrite
it using CGIDEV2, it was SO clean and much smaller. AND it was no longer
necessary to do all that stuff with strings withing 80 columns!

So having sections that include what is kind of like boilerplate has
worked very well for me.

I looked briefly at XMLi, and its templates include bits that call out
to other things, like SQL SELECT statements in order to get the data - a
little like some NET.DATA things I looked at years ago - ignore that
comment if you like!!

So a couple criteria for deciding which approach to use.

1. If your XML will only have your data in it, go with nodes (API calls
to build the whole thing, as in powerEXT and XMLi).

2. If the XML structure is from an external source and has lots of stuff
that is NOT your data, go with a templated approach.

3. For something in between, see what is best for you.

HTH
Vern

On 8/21/2014 9:59 AM, Bradley Stone wrote:
Brian,

As mentioned CGIDEV2 our our eRPG SDK could be used for this.

They are template based applications that are able not only to output
dynamic content to the web, but stream files in the IFS.

Normally used for dynamic HTML, they can be used to generate dynamic
"anything" (XML, JSON, JavaScript... anything!)


Brad
www.bvstools.com


On Thu, Aug 21, 2014 at 7:46 AM, Birgitta Hauser
<Hauser@xxxxxxxxxxxxxxx>
wrote:

With CGIDEV2 it is as easy as populating and writing printer files.
SQL has all kinds of publishing functions, that can be easily used
within
RPG
And embedded SQL even has a very easy way to directly write to the IFS.

So Why to reinvent the wheel and adding additional opcodes?

Mit freundlichen Gr??en / Best regards

Birgitta Hauser

"Shoot for the moon, even if you miss, you'll land among the stars."
(Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
"What is worse than training your staff and losing them? Not training
them
and keeping them!"

-----Urspr?ngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Im Auftrag von
Brian
Stapleton
Gesendet: Thursday, 21.8 2014 14:32
An: RPG400-L@xxxxxxxxxxxx
Betreff: Writing XML from RPGLE

Good Morning Guru's and Masters of RPGLE


Thank you to all who replied to my earlier email about writing XML from
within RPGLE. I will go back into the digest and read up on the
different
approaches.

The XML files that I will be generating are fairly nested, and are for
the
purpose of transferring data to another system. (Non AS/400 - Yeah,
not
happy about that myself) and I will be pulling the data from several
different files.

I was hoping that the latest release of RPGLE would have Op codes
similar
to
XML-Into / XML-SAX that write XML code to the IFS, and it looks like
such a
thing doesn't exist.

Thank you to all who responded for your help.




Brian Stapleton
Information Services
Carhartt, Inc
5750 Mercury Drive
Dearborn, MI 48126
Desk - 313-749-6586
Fax - 313-271-3455
BStapleton@xxxxxxxxxxxx<mailto:BStapleton@xxxxxxxxxxxx>

[Description: Description: Carhartt_emaillogo]


Confidential: This electronic message and all contents contain
information
from Carhartt, Inc. and its affiliates which may be confidential or
otherwise protected from disclosure. The information is intended to be
for
the addressee only. If you are not the addressee, any disclosure, copy,
distribution or use of the contents of this message is prohibited. If
you
have received this electronic message in error, please notify us
immediately
at (313) 271-8460 and destroy the original message and all copies.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To
subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.





------------------------------

Subject: Digest Footer


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.