× 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.



Possibly Vern - although the Eval-Corr works fine with subscripted DS.

If I had more time I’d play with alternatives but what you have looks good.

Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On May 4, 2016, at 12:46 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx> wrote:

I'm not sure about the LikeDS - I had 2 DS' that I pulled the data area contents into - I think having a separate Dim'd array would mean more code to move the data around, maybe?

Here's the code - it does work OK -

DCL-F dspf workstn indDS(dspfindds);

dcl-ds dtaara1 dtaara('DTAARA') qualified inz;
fld01 zoned(2 : 0);
fld02 zoned(2 : 0);
...;
end-ds;

dcl-ds dtaara2 dtaara('DTAARA') qualified inz;
fld01 zoned(2 : 0);
fld02 zoned(2 : 0);
...;
end-ds;

dcl-ds rcd1AllDs likerec(RECORD1 : *all);

dcl-ds dspfindds;
exit_03 ind pos(3);
cancel_12 ind pos(12);
error_changed_50 ind pos(50);
success_updated_51 ind pos(51);
end-ds;

// Get formatting limits
in(e) dtaara1;

if %error();
clear dtaara1;
endif;

// Prepare to display limits on screen
eval-corr rcd1AllDs = dtaara1;

// Display the limits
exfmt RECORD1 rcd1AllDs;

// Check whether exit or cancel
dow not exit_03 and not cancel_12;

// Get out if user chose to leave or no changes entered
if exit_03 or cancel_12 or (rcd1AllDs = dtaara1);
leave;

else;
// Get formatting limits and lock this time
in(e) *lock dtaara2;

if %error();
clear dtaara2;
endif;

// No changes made by another user
if dtaara2 = dtaara1;
eval-corr dtaara2 = rcd1AllDs;
out dtaara2;
success_updated_51 = *on;

else;
eval-corr rcd1AllDs = dtaara2;
error_changed_50 = *on;
endif;

unlock dtaara2;

// Get formatting limits again for equality test
in(e) dtaara1;

if %error();
clear dtaara1;
endif;

// Redisplay the limits
exfmt RECORD1 rcd1AllDs;
clear error_changed_50;
clear success_updated_51;

endif;

enddo;

*inlr = *on;

On 5/4/2016 10:09 AM, Jon Paris wrote:
It is a useful technique Vern - I used it for years with “manual” copying of the structures, but the DS arrays and everything made it so much easier.

Would it have worked in your case to define the DS for the data area and then used LikeDS for the Dim’d array?


Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On May 4, 2016, at 10:21 AM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx> wrote:

Hey Jon

I just adapted this to a maintenance program for a data area that holds several limits for conditional formatting in Excel.

Very nice - had to use separate arrays for the (1) and (2), since defining a data structure from a data area cannot have the DIM keyword.

Thanks
Vern

On 5/3/2016 2:22 PM, Jon Paris wrote:
Boy you guys like to make it complicated!

Read this for a much simpler approach http://www.itjungle.com/fhg/fhg030315-story01.html

The example there is for a single record update but the exact same method can be used when handling subfiles. The only time I would ever consider using hidden fields for this purpose in a subfile is if that “subfile” were a web page and I was using to hold state information.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On May 3, 2016, at 3:09 PM, Booth Martin <booth@xxxxxxxxxxxx> wrote:

Your response is a great response and is well said.

I'd add this: I define a data structure made up of the input-capable fields on the screen and also define a field named OrigFields. When I write the subfile record I also populate OrigFields, which becomes a hidden field in the subfile record.
That provides:
- an easy two-field compare,
- allows an easily implemented F5-Refresh,
- an easy way to check if any updated fields were changed at another work station in the interim between the unlocked read and the locked chain.

On 5/3/2016 8:04 AM, Mark Murphy/STAR BASE Consulting Inc. wrote:
... To determine if a record is changed, I simply keep hidden copies of every input field, and compare the saved value to the input field. Those hidden copies are loaded with the subfile record, and do not change until I save the subfile record out to the database. ...
--
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.

Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
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.

Please contact support@xxxxxxxxxxxx for any subscription related questions.

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

Please contact support@xxxxxxxxxxxx for any subscription related questions.


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

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.