Michael,

I don't have an easy answer for this... I think you've hit upon one of the limits of the IWS.

Personally (when I need something complex like this) is to just use Apache to call my RPG program instead of IWS. Then, I need to do all of the XML work myself -- which I don't find too difficult if I already know what the XML should look like (and I can use the IWS to tell me that).

But, if you code the XML yourself, you can make it only return the array elements you need very easily.

Plus, running raw RPG code will outperform the IWS.

-SK



On 12/29/2014 9:06 AM, Koester, Michael wrote:
Running iOS 7.1 (TR8, I think).

I'll be using the Integrated Web Services wizard to generate a web service that provides data to a business partner. I need to send data in the form of multiple arrays. I am able to do this by having the service program function return data structures shown in D-specs similar to below (simplified a bit here), but the actual number of array rows used will vary, up to the dim limits.

D GetEBPPdata3...
D PR Extproc('EBPPTEST3')
D likeDS(rtnDS) RTNPARM
D Account 7a const
D Phone 13a const
D EmailIn 64a const

D rtnDS ds qualified
D Account likeDS(Set1)
D PhonesCount 10i 0
D Phone likeDS(Set2) dim(32)
D PaymentsCount 10i 0
D Payment likeDS(Set3) dim(16)

* fields that pertain to Account
d Set1 ds qualified inz
d Success n inz
d MsgText 128a
d DateDue 10a
d NextAutoPayDate...
d 10a

* fields that pertain to each phone on account
d Set2 ds qualified inz
d PhoneNumber 10 0 inz
d AmtDue 8 2 inz
d BankRouting 9 0 inz
d BankAccount 16a

* fields that pertain to each prior payment
d Set3 ds qualified inz
d PhoneNumber 10 0 inz
d Amount 8 2 inz
d PaidDate 10a
d Status 16a

When I test the web service, the resulting XML is pretty close to perfect, except that I need to find a way to restrict the output from including all the "empty" array rows. For the "Set2" stuff, I get XML for all 32 rows, when only 2 rows are used:

...<PHONESCOUNT>2</PHONESCOUNT>
<PHONE>
<PHONENUMBER>5290001</PHONENUMBER>
<AMTDUE>25.11</AMTDUE>
<BANKROUTING>987654321</BANKROUTING>
<BANKACCOUNT>1234567890</BANKACCOUNT>
</PHONE>
<PHONE>
<PHONENUMBER>5290002</PHONENUMBER>
<AMTDUE>50.05</AMTDUE>
<BANKROUTING>456987123</BANKROUTING>
<BANKACCOUNT>98745612</BANKACCOUNT>
</PHONE>
<PHONE>
<PHONENUMBER>0</PHONENUMBER>
<AMTDUE>0.00</AMTDUE>
<BANKROUTING>0</BANKROUTING>
<BANKACCOUNT></BANKACCOUNT>
</PHONE>
<PHONE>
<PHONENUMBER>0</PHONENUMBER>
<AMTDUE>0.00</AMTDUE>
<BANKROUTING>0</BANKROUTING>
<BANKACCOUNT></BANKACCOUNT>
</PHONE>
<PHONE>
<PHONENUMBER>0</PHONENUMBER>
<AMTDUE>0.00</AMTDUE>
<BANKROUTING>0</BANKROUTING>
<BANKACCOUNT></BANKACCOUNT>
</PHONE>
<PHONE>
<PHONENUMBER>0</PHONENUMBER>
<AMTDUE>0.00</AMTDUE>
<BANKROUTING>0</BANKROUTING>
<BANKACCOUNT></BANKACCOUNT>
</PHONE>
<PHONE>
<PHONENUMBER>0</PHONENUMBER>
... [for all 32 rows. Same issue with the <Payment> array for 16 rows.]

If my output was a single array, my understanding is that I might have an opportunity in the wizard to define the output structure count to be a run-time variable instead of the dim default. My output, as a "structure of structures" does not appear to allow me any chance at fixing the counts.

Is there a way to specify PhonesCount and PaymentsCount someplace as the runtime values of array rows to return?

Many thanks.

Michael Koester
Programmer/Analyst


This thread ...

Follow-Ups:
Replies:

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

This mailing list archive is Copyright 1997-2019 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].