Plex/2E Feed Aggregator

February 04, 2012

CA Forum - Plex General Discussion

February 03, 2012

CA Forum - 2E General Discussion

RE: Efficient Development

Hi Mark,

First off, this isn't me questioning your results, rather me just trying to understand what I am hearing!

What sort of hardware is this being run on?
What version of the operating system are you using?

I can understand that there would be additional overhead reading an LF vs. a PF, but I wouldn't expect it to be in the region of 800%.

I compared my 19 million reads of PF vs LF and I really didn't see that much of a difference. I then tried an LF that would have absolutely no correlation to the Physical sequence of records. Similar results.

I'm also quite confused by your reference to sorting the PF in the LF's sequence. I can see that might have some potential performance gain, perhaps, but frankly the IBM i nowadays is so good at handling all this sort of thing under tha covers that I would expect the difference to be negligible. Otherwise your saying that the system is optimized to accessing data in the Physical order, and I just can't see how that can be the case. Otherwise there'd be no way to access the data in any other fashion with any reasonable response. My opinion is that the IBM i is the best in class at database access, and the idea that performance drops 8 times because of the physical order or records in the file see to go against that idea.

On my system I generate DDL for TABLE/INDEX, but still use RPG RLA. So I am using INDEX access paths. But even so, DDS LF's were given the same access path size as DDL INDEX's in either release 5.4 or release 6.1, so they can be shared. When I originally moved everything over to DDL, one of the main reasons was for performance, we have a high READ system. DDS validates data on READ, whereas DDL validates data on WRITE, so you remove the data validation piece when using a SQL TABLE vs. using a DDS PF. But I have read a lot in the last few years that makes me wonder if that is really a problem any more. At least it is no longer touted as the main reason to rebuild using DDL. One of the other reasons was for DB2/Web Query access, and creating EVI INDEX's and lots of other fancy things for that. While we could probably have continued using DDS, it seemed that replacing DDS with DDL was the route the machine was taking anyway, so I jumped on board.

I would hope that the similarity in performance that I see, and the disparity that you are seeing is not purely down to a DDS vs. DDL scenario. Maybe that is the case.

Sorry if I was rambling, I do enjoy the subject :)

Crispin.

by Crispin at February 03, 2012 07:53 PM

RE: Efficient Development

Hi All,

ran a few tests see below

A few notes on these figures there not very scientific - just to give a feel.
Elapsed time is obviously affected by all the other jobs on the system - I chopped the job with the unblocked reads (Test d) as it was taking too long.
I've listed CPU seconds which may be more interesting (as the job in its current state could finish in a shorter time - i.e. all waits eliminated) but you really need to use a tool like performance explorer to give you an insight into the components of the job and what they are up to.
The file I was using (78 million records) has never been reorganized, I'm sure the reads using the LF would be closer to the PF if I bother to re-org it in the LF sequence.

Test a) Blocking over LF, Number of records as defaulted by complier/OS
Elapse time 104 mins
CPU seconds: 491

Test b) Blocking over LF, Number of records set to 10,000
Elapse time: 64 mins
CPU secs: 377

Test c) Blocking over LF, Number of records set to 32,000
Elapse time: 141 mins
CPU secs: 406

Test d) No blocking over LF
Elapse time: 230+ mins
CPU secs: 250+
Ended as only a quarter of the way through so would estimate around 1000 CPU secs and elapse time around 12+ hours (it started running in our quiet time overnight but hadn't finished by morning).

Test e) Blocking over PF, Number of records as defaulted by complier/OS
Elapse time: 12 mins 1 secs
CPU secs: 70

Test f) Blocking over PF, Number of records set to 32000
Elapse time: 11 mins 1 secs
CPU secs: 55

Test g) No blocking reads over physical
Elapse time: 14 mins 1 sec
CPU secs: 69

The results of tests e and g seem about the same - the OS seemed to be doing blocking even though I hadn't specified it.

by MG at February 03, 2012 03:52 PM

PleXML Wiki

Object Main

New page

==Object Main==

* Table-Name: '''aobjmt'''

===Fields===
--> Key fields Main, Group, Type
OBJMID Key decimal(15,0)
OBJGID Group Key decimal(15,0)
OBJTID Type Key decimal(15,0)

--> varchar 100
OBJTX1 varchar(100) --> Business key that is used in Combo-Boxes, Relations ...
OBJTX2 varchar(100)
OBJTX3 varchar(100)
OBJTX4 varchar(100)
OBJTX5 varchar(100)
OBJTX6 varchar(100)
OBJTX7 varchar(100)
OBJTX8 varchar(100)
OBJTX9 varchar(100)
OBJTXA varchar(100)
OBJTXB varchar(100)
OBJTXC varchar(100)
OBJTXD varchar(100)
OBJTXE varchar(100)
OBJTXF varchar(100)

--> varchar 1000
OBJ1T1 varchar(1000)
OBJ1T2 varchar(1000)
OBJ1T3 varchar(1000)
OBJ1T4 varchar(1000)
OBJ1T5 varchar(1000)
OBJ1T6 varchar(1000)
OBJ1T7 varchar(1000)
OBJ1T8 varchar(1000)
OBJ1T9 varchar(1000)
OBJ1TA varchar(1000)

--> varchar 4000
OBJ4T1 varchar(4000)
OBJ4T2 varchar(4000)
OBJ4T3 varchar(4000)
OBJ4T4 varchar(4000)
OBJ4T5 varchar(4000)

--> Time
OBJTI1 time
OBJTI2 time
OBJTI3 time
OBJTI4 time

--> ISO Date
OBJD01 date
OBJD02 date
OBJD03 date
OBJD04 date
OBJD05 date
OBJD06 date
OBJD07 date
OBJD08 date

--> Int 4
OBJIN1 decimal(4,0)
OBJIN2 decimal(4,0)
OBJIN3 decimal(4,0)
OBJIN4 decimal(4,0)
OBJIN5 decimal(4,0)
OBJIN6 decimal(4,0)
OBJIN7 decimal(4,0)
OBJIN8 decimal(4,0)
OBJIN9 decimal(4,0)
OBJINA decimal(4,0)

--> Double 15.2
OBJN21 double (15,2)
OBJN22 double (15,2)
OBJN23 double (15,2)
OBJN24 double (15,2)
OBJN25 double (15,2)
OBJN26 double (15,2)
OBJN27 double (15,2)
OBJN28 double (15,2) --> Contains the average rating value if you use the Memo-Rating field.

--> Double 15.5
OBJN51 double (15,5)
OBJN52 double (15,5)
OBJN53 double (15,5)
OBJN54 double (15,5)
OBJN55 double (15,5)
OBJN56 double (15,5)
OBJN57 double (15,5)
OBJN58 double (15,5)

--> Free ForeignKey fields
OBJKE1 ForeignKey decimal(15,0)
OBJKE2 ForeignKey decimal(15,0)
OBJKE3 ForeignKey decimal(15,0)
OBJKE4 ForeignKey decimal(15,0)
OBJKE5 ForeignKey decimal(15,0)

--> Status fields 1
OBJS11 Status char(1)
OBJS12 Status char(1)
OBJS13 Status char(1)
OBJS14 Status char(1)
OBJS15 Status char(1)
OBJS16 Status char(1)
OBJS17 Status char(1)
OBJS18 Status char(1)
OBJS19 Status char(1)
OBJS1A Status char(1)
OBJS1B Status char(1)
OBJS1C Status char(1)
OBJS1D Status char(1)
OBJS1E Status char(1)
OBJS1F Status char(1)

--> Status fields 15
OBJS51 Status char(15)
OBJS52 Status char(15)
OBJS53 Status char(15)
OBJS54 Status char(15)
OBJS55 Status char(15)
OBJS56 Status char(15)
OBJS57 Status char(15)
OBJS58 Status char(15)
OBJS59 Status char(15)
OBJS5A Status char(15)

--> Reference to ObjectMain
OBJRM1 OBJReference decimal(15,0)
OBJRT1 OBJReference decimal(15,0)
OBJRM2 OBJReference decimal(15,0)
OBJRT2 OBJReference decimal(15,0)
OBJRM3 OBJReference decimal(15,0)
OBJRT3 OBJReference decimal(15,0)
OBJRM4 OBJReference decimal(15,0)
OBJRT4 OBJReference decimal(15,0)
OBJRM5 OBJReference decimal(15,0)
OBJRT5 OBJReference decimal(15,0)
OBJRM6 OBJReference decimal(15,0)
OBJRT6 OBJReference decimal(15,0)
OBJRID OBJReference decimal(15,0)

--> Default fields
UsrAdd char(15)
DatAdd datetime
SysAdd char(15)
UsrChg char(15)
DatChg datetime
SysChg char(15)
UsrDel char(15)
DatDel datetime
SysDel char(15)
STHash char(20)
RecSts char(1) --> L=Locked is used for new/not jet saved records and is generally excluded in FindBrowse, Combo-Boxes...
SOwner char(15)
STDSof char(15)
STDEnt char(5)
STDShp char(15)
STDSec char(15)
SAuthr char(1)
LogNbr decimal(15,0)

===Indexes===


[[Category: Objects]]

by Zwirnerj at February 03, 2012 11:56 AM

CA Forum - Plex General Discussion

CPLEX-700-1863-001:NEW PLEXAPI METHODS

I read with great interest CA Plex r7.0 Beta

CPLEX-700-1863-001:NEW PLEXAPI METHODS
Added the following new PlexAPI methods:
• ShowObjHelp: Shows the Shift+F1 help for an object in the current model.
• GetObjSurrogate: Returns the surrogate associated with a given object reference value.
• GetObjPackageName: Returns the name of the Package associated with a given object reference value.

This is good news but wanted to ask CA if these methods will be avaliable to 6.1 Plex?
Secondly GetObjBySurrogate would very useful to complment GetObjSurrogate and am currently working around this area as it happens.
Thirdly what are the chances of exposing "Object Details tabbed dialog Parameters Tab" in plex as a an api as the logic to do this is in model api is vast, a similar request to the ideation "Model API to get all fields from an entity or view"

Many thanks

by GeorgeJeffcock at February 03, 2012 10:23 AM

February 02, 2012

CA Forum - Plex General Discussion

Multiple Mail Recipents

Has anyone been able to successfully manipulate the Supplied mail API (WINAPI or OBMAPI) source codes to pre populate a mail message with Multiple Recipients

I want the User to be able to pre-populate a mail message but the message need to go to multiple Email addresses in one message - not send multiple messages to each individual email address

I have been unsuccessful trying to resolve the mail name to a handle than can be used to point to the recipient list

any help appreciated..

by wayne.morgan1.1 at February 02, 2012 10:07 PM

CA Forum - 2E General Discussion

Efficient Development

Hi All,

Just a general reply not specific to the BLOCK processing.

I wrote a blog post a few years ago regarding performance tips for 2E developers. Most of these are basic but there are some little gems for both batch, online as well as general code maintainability.

My experience has told me that a system with performance issues will need to be attacked on many fronts and that there is no silver bullet that solves the entire performance problem with one tweak.

The blog post is below and is a set of tips learnt, cribbed and poached over the years :-)

http://leedare-plex2e.blogspot.co.nz/2008/07/2e-development-standards-performance.html

Despite the lack of a silver bullet (massive machine upgrade) I worked at a site once that had high I/O and was also under utilising the processor(s) during a batch run. We did a few simple things.

1. Reduce I/O by using reads for reference data tables in transactional processes.
2. Spread the EOD jobs across many queues where they could be ran in parallel.
3. Where they needed to be single threaded because of a dependent job we split the single threaded job into x chunks (typically 4 or 5). i.e. we processed a definable subset of the records in the master (driving) table.
4. Ensure we weren't closing programs that were called every iteration.


These made up a reasonable chunk of the savings and may be worth consideration in your environment.

It's been a while for me but I also found the performance tools on the 'i' to be of great value when identifying the slower areas.......

Lee.

by leed at February 02, 2012 09:55 PM

RE: Date & timestamp synchronization issue for Message Board has been resol

Hi,

This is a different issue from the time stamp issue. We have isolated the reason and addressed it and will release that 2/11/12. This was introduced due to some caching performance enhancements unrelated to the message board.

Thanks,

Sam

by samcreek at February 02, 2012 09:36 PM

RE: Efficient Development

Some 2E Metrics.

OK, I created a RTVOBJ over the same PF I had the code reading in the previous 2 minute run. It took 3 minutes with no Blocking.

Crispin.

by Crispin at February 02, 2012 04:28 PM

RE: Efficient Development

Hi all,

I've been trying to get on here all day - but getting an internal server error.


Thanks Darryl for pointing that out (your Freedom/Pre-Compiler tool looks excellent), as Darryl suggests putting the RTVOBJ into its own EXCEXTFUN, we have used the idea of modules to separate this (the only use we found for MODS before service programs were introduced) - so one file retrieve get's its own MOD with closedown = NO

If you use that code I posted you'll have to customise the scan/replace with the file name and associated format that you want to apply blocking to - I was trying to be generic but should have pointed that out, apologies.

Take your point Crispin we've used RTVOBJ over a LF in its own MOD, leaving the SETLL in place - blocking still works and SETLL / LF means no abnormal end of files – just have to detect when you get past the key you're interested in (as READ vs. READE).

Have tended to use PFs for output only with blocking for filling work files, for this the SETLL against a RRN is included whether we like it or not but blocking won't work with this so it needs to be commented out.

…..

I'll run a couple of tests with and without blocking and let you know the results - tomorrow.

....

- I assume the BLOCK keyword must be added before i can take advantage of the IVRDBF in the CL?

Not necessarily if the files in your rpgle can be processed sequentially then you can just use the block in the CL.

.....

On that page I quoted – I'm not sure why you aren't getting the English version – I know it's a German site but it's showing it in English for me.

Cheers
Mark




Cheers
Mark

by MG at February 02, 2012 04:26 PM

RE: Efficient Development

MG:
* comment out the SETLL - as Crispin says this will stop blocking - not sure why this is still generated when processing all records in a physical file - one for Rory perhaps


Mark,

The SETLL issue as far as blocking in concerned can be removed with BLOCK(*YES), although I think you already know that.

As far as the SETLL in the RTVOBJ over a PF. This can get tricky.

Consider the same EXCEXTFUN being called multiple times, and that EXCEXTFUN being set to Close Down Program = No. Subsequent calls to the program would not process any records because the file pointer would still be at EOF.

Consider multiple RTVOBJ's over the same PF in the same EXCEXTFUN. Sure, the first one called would not require the SETLL (unless you have a situation as descibed in my previous consideration), but subsequent RTVOBJ calls would require the SETLL, because the PF's file pointer would now be at EOF.

See where I'm coming from?

I'm interested to understand what sort of performance improvements have been seen with reading a PF with blocking vs. non-blocking. Same logic, just added blocking. What kind of improvements are you seeing?

I can read about 19 million records in 2 minutes on my development machine.

Crispin.

by Crispin at February 02, 2012 03:51 PM

RE: Efficient Development

Make sure you only use this in functions with only one RTVOBJ or database file defined, otherwise it will change all the database files in your program.

Using the approach above to wrapper your RTVOBJ functions with an EXCEXTFUN will ensure you only change one file.

Regards,

Darryl

by Darryl_Millington at February 02, 2012 05:05 AM

RE: Efficient Development

If you need something a little more versatile than YSCNRPLSRC, then we have developed a tool called Freedom/Pre-Compiler.

The basic version is FREE for anyone to use.

See http://www.hawkbridge.com.au/html/products/freedompcp.aspx for further details.

Regards,

Darryl

by Darryl_Millington at February 02, 2012 04:58 AM

February 01, 2012

CA Forum - 2E General Discussion

RE: Date & timestamp synchronization issue for Message Board has been resol

Hey Crispin,

My heart sank when I read your post that date and timestamp info is still not accurate on the forums.

I will do my best to get someone to fix this properly once and for all.

Thanks for taking the time, valuable time, and energy to alert us to this.

Cheers,

Simon

Simon Cockayne
CA Technologies
Principal Software Engineer
CA Subject Matter Expert
Tel: +1-703-708-3042
Simon.cockayne@ca.com

by Simon_Cockayne at February 01, 2012 09:50 PM

RE: Date & timestamp synchronization issue for Message Board has been resol

Simon,

This isn't fixed. Look at this screen print. It showed Rory's last post to me earlier in the Large Gen Error thread, and now it says I was the last to post.

Crispin.

by Crispin at February 01, 2012 08:51 PM

RE: Efficient Development

rick_ceyba:
Hi Doreen,
Thank you for the suggestion. I was wondering what HLL you generate. According to the help text on 'Close down Program', it is for RPG III (unless the help text has not been updated!), and we generate RP4. Either way, we default to N for this option. I will definitely take your suggestion to our DB team.

Regards,
Rick



We generate RP4 (RPGLE)

by Doreen_Kneller at February 01, 2012 07:42 PM

RE: Efficient Development

Rick,

Same thing for RPGIV code. It determines whether *INLR is set on when the program exits. If *INLR is not set on, then the program will have to go through program initialization each time it is called, which involves opening access paths , initializing storage and so on, and is an expensive part of a program call. Avoiding it is a good idea, when it makes sense.

Crispin.

by Crispin at February 01, 2012 05:07 PM

RE: Efficient Development

rick_ceyba:
Hello Mark,
I recall using YSCNRPLSRC for a project a few years ago. I remember it was a combination of a CL to perform the scan/rpl, and user source which adds a Y* statement to call the CL. If you could provide some examples, that would be greatly appreciated! It's amazing how easy you forget something when you haven't used it in a few years. That being the case, I have a couple questions:

Working backwards - scan replace in a CL - see attached

Some user source

Y* CALL yourlib/yourCLP

you need to plug the user source into the program

.... I'll get back to you on your other points


- From Crispin's note, I need to add the BLOCK keyword. However, you say that I need to get the SETLL commented out? I understood that by specifying BLOCK, the program will allow record blocking while using a SETLL. If that is commented out, then how will I position my Read?
I'm talking rubbish here - that's only a problem if you're blocking output only files.
The thing to remember is that you are doing a READ so you need to check you have reached the end of the selection

- I assume the BLOCK keyword must be added before i can take advantage of the IVRDBF in the CL?



Thank you.
Regards,
Rick

by MG at February 01, 2012 04:36 PM

RE: Efficient Development

Hi Doreen,
Thank you for the suggestion. I was wondering what HLL you generate. According to the help text on 'Close down Program', it is for RPG III (unless the help text has not been updated!), and we generate RP4. Either way, we default to N for this option. I will definitely take your suggestion to our DB team.

Regards,
Rick

by rick_ceyba at February 01, 2012 03:50 PM

RE: Efficient Development

Hi Mark,
Thank you for the reference to Dan's article. It appears there is more to this than just the one page. As I am not up to speed on my Danishemoticon, I could not determine if the artcile was continued on another page, or if you have to join the News solutions group to see the rest. Please advise.

Rick

by rick_ceyba at February 01, 2012 03:45 PM

RE: Efficient Development

Hello Mark,
I recall using YSCNRPLSRC for a project a few years ago. I remember it was a combination of a CL to perform the scan/rpl, and user source which adds a Y* statement to call the CL. If you could provide some examples, that would be greatly appreciated! It's amazing how easy you forget something when you haven't used it in a few years. That being the case, I have a couple questions:

- From Crispin's note, I need to add the BLOCK keyword. However, you say that I need to get the SETLL commented out? I understood that by specifying BLOCK, the program will allow record blocking while using a SETLL. If that is commented out, then how will I position my Read?
- I assume the BLOCK keyword must be added before i can take advantage of the IVRDBF in the CL?

Thank you.
Regards,
Rick

by rick_ceyba at February 01, 2012 03:40 PM

RE: Efficient Development

One of the Performance Enhancements I use is to Wrap INTERNAL Retrieve Objects (RTVOBJ) into a Execute External Function (EXCEXTFUN).
On the EXCEXTFUN change the Object to not SETON *LR. Edit Function Options and change the Close down program to (NO).
Then, replace the Internal RTVOBJ within your Action Diagram to use the New EXCEXTFUN.

I know this seems minor, but we have seen significant Performance Improvements by replacing RTVOBJ with EXCEXTFUN and not setting on LR.

Just a word of warning here: Be careful with the use of WRK vs. LCL vs. NLL Context on your Parameters.
Make sure there are proper Initialize and Cleanup of the Work variables when reading multiple records.


1EXCEXTFUN - Edit Function Options:

by Doreen_Kneller at February 01, 2012 02:35 PM

PleXML Wiki

Send Mail

New page

==Send Mail from Plex-XML==
# As reaction of a request
# Per API with in Plex


* System-Parameter: [[System_Parameter#Mail]]
* Request-Handling reaction '''SENDMAIL''': [[Web-Requests#Reaction_Types]]


==Example==


===External links and tips===
* http://en.wikipedia.org/wiki/Sender_Policy_Framework
* http://37signals.com/svn/posts/3096-behind-the-scenes-giving-away-the-secrets-of-email-delivery

by Zwirnerj at February 01, 2012 09:49 AM

Node.js

New page

==node.js==
Getting started with a collection of node.js links:

====node.js is not or should not be used for====
* http://teddziuba.com/2011/10/node-js-is-cancer.html : node.js is cancer
but on the other hand:
* http://venturebeat.com/2012/01/24/node-at-google-mozilla-yahoo/

====Docs====
* http://nodejs.org/ : node.js
* http://nodejs.org/docs/latest/api/index.html : Documentation
* http://nodeguide.com : Felix's Node.js Guide
* http://www.nodebeginner.org/ : The Node Beginner Book

====Examples====
* http://rawkes.com/blog/2011/11/06/creating-a-real-time-multiplayer-game-with-websockets-and-node.js : creating-a-real-time-multiplayer-game-with-websockets-and-node.js

====Short description====
* http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/ : The Node Ahead: JavaScript leaps from browser into future
* http://t3n.de/magazin/nodejs-javascript-server-revolutioniert-schubrakete-226177/ : Short story about node.js (GERMAN)
* http://www.webkrauts.de/2011/12/13/serverseitiges-javascript-mit-node-js/ : Another short story (GERMAN)

====Resources====
https://github.com/joyent/node/wiki/modules : Modules

by Zwirnerj at February 01, 2012 09:18 AM

CA Forum - 2E General Discussion

RE: Efficient Development

Hi Rick,

I found Dan Cruikshank's article from 2006, "Analyzing Data Access Methods" at http://newsolutions.de/news400/artikel/abo/data.php.
It explains how to use performance explorer to gather and analyse data to see how to minimize database I/O .
You'll also find other information on using SQL by Dan if you search on the web. Should you go down that route, I'm sure we'd all be interested to know what you find.emoticon
Cheers,
Mark

by MG at February 01, 2012 08:39 AM

RE: Efficient Development

Hi Rick,

we have some user source call CLs to do a scan/replace to:
* add the block key word
* comment out the SETLL - as Crispin says this will stop blocking - not sure why this is still generated when processing all records in a physical file - one for Rory perhaps
** You'll see the message Open of member changed to SEQONLY(*NO) in the job log when you run you program if you have SETLL still in the pgm.
* amend the READE to a READ (have added this in the idea section - Blocking DB accesses for performance)

You obviously have to take care of record selction in your code now - or OPNQRYF.

I can put some example scan / repalce code here if you like.

Once you have blocking set up you can wrap a CL around you RPGLE program to change the number of records "read" in one get using OVRDBF FILE(yourfile) SHARE(*YES) SEQONLY(*YES 10000) to tune your performance.

You can also block your output records..

You also have to run your program in a subsystem which has an associated storage pool where expert cache is switched on - there was a very good article by Dan Cruikshank years ago on what was going on under the covers.

Cheers
Mark

by MG at February 01, 2012 07:59 AM

RE: Efficient Development

Hi Rick,

Yes, RPGLE source type is RPGIV. So, according to the RPG Manual, use of SETLL will stop blocking. You need to add BLOCK(*YES) to the F spec for the file in question.

Crispin.

by Crispin at February 01, 2012 02:24 AM

January 31, 2012

CA Forum - 2E General Discussion

RE: Efficient Development

Hi Rory.
I wrote a few functions years ago over the PF to perform basic batch functions (read input from client, load to DB, etc). Are there any options or techniques I should be aware of that will improve efficency, or is it just the fact that we are processing the PF?

by rick_ceyba at January 31, 2012 10:31 PM

RE: Efficient Development

Hey Rick,

For non-interactive programs, have you looked at using the 'Batch Processing' feature of 2E that we introduced at r7.0, which allows you to create some functions over physical files (the PHY access path)? This processing requires a slightly different mind-set than traditional 2E programs, but especially for those long overnight processes, it can speed things upa lot - your file blocking options are better and much of the generated code is simplified or removed entirely.

Of course this doesn't help with traditional 2E interactive functions...

Rory

by roryhewitt at January 31, 2012 09:56 PM

RE: Efficient Development

We generate using type RP4, which gens a source type RPGLE. So will this require us to use the Block keyword?

by rick_ceyba at January 31, 2012 09:52 PM

RE: Efficient Development

Hi Rick,

In RPGIV BLOCK is a keyword that goes in the Keywords entry of the F Spec.

But, I suspect that you are using RPGIII given your question, and RPGIII appears to not allow you to change the blocking. And, what I was saying is only calid for RPGIV, not RPGIII. In RPGIII SETLL does not stop blocking.

Crispin.

by Crispin at January 31, 2012 09:40 PM

RE: Efficient Development

Hey Crispin. Good to hear from you. I am goingto check with the team peforming the analysis on our system to see just what their metrics reported. They are mainly looking at native programs to tune up. However, they pulled me in to give them whatever help i can for the 2E programs.

In the mean time, where exactly do you specify BLOCK(*YES) on the F specs? Also, I assume that can be overridden with user source Y* statements and YSCNRPLSRC?

by rick_ceyba at January 31, 2012 08:49 PM

RE: Efficient Development

Hi Rick,

Unless you specify BLOCK(*YES) on the file specs, you'll not get any blocking with the POS code either. SETLL is going to stop that.

Anyway, have you done any metrics to see of record blocking provides any performance improvements over your data? You don't want to recode everything just to find no real improvements.

SQL migtht be a better bet, but I have never used SQL in 2E and not sure how it stands up.

What sort of performance issues are you seeing? Are you selecting records when an access path might reduce I/O?

Just some initial thoughts.

Crispin.

by Crispin at January 31, 2012 08:15 PM

CA Forum - Plex General Discussion

RE: Re: UI Gallery

Hi

You should try the guys at vigor, (plex site in Iceland) they sent me there toolbar code jock patterns which were very clever and could help you on many levels. See vigor Toolbar

Then again there is youeye from designit in uk, based on codejock also, you could contact them about getting a demo as I did. I was messing about with teebo controls for a Stella tools as its budget matched stella tools budget of zero. But if I had any sort of budget I'd just buy youeye, as the wheel has been made.

Then again plex 7.0 finishing beta and wpf on the way... How much would you want to spend time wise on c++ generator.

Cheers
George

by GeorgeJeffcock at January 31, 2012 06:15 PM

CA Forum - 2E General Discussion

Efficient Development

Hi everyone. I hope this message finds you all well. I was wondering if anyone had any tips and techniques documentation on making more efficient functions. We need to start performing some serious tune up work here, and we are looking for ways to decrease the amount of I/O we process. An example of efficient coding is to use Positional parameters instead of restrictor parameters for batch processing. Using restrictor parms translates into a READE, whereas using positional relates to a SETLL and READ. Using READ instead of READE blocks many more records for I/O purposes. These are the kind of tips I am looking for. Anything would be greatly appreciated.

Regards,
Rick Ceyba

by rick_ceyba at January 31, 2012 04:50 PM

2E service programs and modules

We are looking for some guidance on how best to utilise the service program features within 2E. We have tried a couple of different approaches but can see problems with both.

First we looked at one (or more) service programs each containing many modules.

With this approach, we are concerned with how we would manage implementation. In its simplest form there would be one service program which contained two modules. If both modules were under development how would we release the service program and one module at a time? It would seem to us that we would have to get all modules within a service program tested and signed off before we could release the service program into production. So, one project could delay the release of other changes. This would clearly get much harder to manage the more modules we have.

Then we looked at one service program one module. This seems to get around the problem we encountered above, but introduced a new issue. When promoting, CM compiles the modules first, and then the service programs, which makes sense. However, if one module calls another module in a hierarchical structure then the called module is bound by copy into the calling module (and 2E adds a *MODULE entry to the binding directory). When the service program is created it fails because it finds the reference to the called module twice, once in the module and once in the service program. The only way we have found to get around this issue is to split the promotion up into as many levels as there are module to module calls, and promote them one at a time. That way all the lowest level modules are created and subsequently bound into their service programs. When the next level of modules are created they get bound by reference to the service program correctly. (2E removes the *MODULE entry in the binding directory when the module is bound to the service program).
(Apologies if any terminology is incorrect – I’m new to service programs and modules)

For example, consider a structure where SRVPGM_A contains MODULE_A, SRVPGM_B contains MODULE_B and SRVPGM_C contains MODULE_C. And MODULE_A calls MODULE_B which in turn calls MODULE_C.

This would need to be promoted in three steps, first MODULE_C and SRVPGM_C, then MODULE_B and SRVPGM_B and finally MODULE_A and SRVPGM_A.

It seems that perhaps a compromise may be the best solution to the problem, whereby each service program only contains the specific modules required to achieve a particular task. This way the modules included are not likely to be changed independently and therefore we shouldn’t encounter the first kind of problem where we could be waiting for one module to be signed off before we could promote the service program when other modules were ready to go live.
But, I still think we would have the second issue, unless we could somehow flatten out the module to module calls, although I’m not sure how! And we would almost certainly encounter that issue with general utility service program modules.
Or is there a better way of managing modules and service programs? Have we missed something somewhere?

Cheers
Mike

by Mike_Davies at January 31, 2012 12:23 PM

CA Forum - Plex General Discussion

RE: Re: UI Gallery

The screens and interfaces looks very good. I am interested in making use of codejock controls. I downloaded the trail version of the suite. But I am struggling a bit. I can do some of the development in VB.net to create short cut bars etc. But I do not have a clue on how to create a base pattern or how to even use the codejock control in PLEX?

Can someone maybe point me in the right direction on how to do this? It will be very much appreciated.

Thank you

by Tienie_de_Klerk at January 31, 2012 10:28 AM

January 27, 2012

Ideation - CA 2E

Provide Sample Models for 2E Functionality

When releasing new features, such as the Multiple Instance Arrays in 8.6, provide a Sample model available for download via the Support site that demonstrates the new functionality.

While documenting the new feature function is valuable, real world examples in a model are often times a much better way for developers to understand the new functionality. If sample models were provided demonstrating real world examples of the new features, it would be easier for users new to the feature to become familiar with them.

Some things that could be included.

Web Services
Service Programs
Multiple Instance Arrays.

Combining the above 3 for a feature rich Web Service.

Crispin.

January 27, 2012 08:19 PM

CA Forum - 2E General Discussion

RE: *ARRAYS (Copy ?)

Crispin:
Doreen,

One of the first "Ideas" that Simon Cockayne posted in the Ideas section was this Copy Array

If you would like to see that implemented in 2E, vote the Idea up!

Crispin.



Thanks, I just found it and Promoted/Voted for it emoticon

by Doreen_Kneller at January 27, 2012 08:02 PM

RE: *ARRAYS (Copy ?)

Doreen,

One of the first "Ideas" that Simon Cockayne posted in the Ideas section was this Copy Array

If you would like to see that implemented in 2E, vote the Idea up!

Crispin.

by Crispin at January 27, 2012 05:19 PM

RE: Function Decomposition - also Blue sky

Looks like something for the IDEAS Tab. emoticon
I will promote and give it some Points.

by Doreen_Kneller at January 27, 2012 03:27 PM

RE: *ARRAYS (Copy ?)

Hi Doreen,

short of setting up a structure file to let you reuse the fields in the array in other arrays - which would just give you the same problem that you're already facing. I think you're back to good old cut and paste.

Cheers
Mark

by MG at January 27, 2012 03:26 PM

RE: 'Par Grp' (Parameter Group?) from Array Key definition screen

Hi David,

It's just parameter group so:
for any File context all the fields from that file count as a single parameter group
and for a *FIELD context each field counts as a signle parameter group

The sequence of the file/*Field will determine the number in that parameter group. If you don't give them a number then the parameter group (number) is as you entered them.


Cheers
Mark

by MG at January 27, 2012 03:16 PM

*ARRAYS (Copy ?)

I have an Array that contains 33 Attributes/fields per Element and 6 Key Fields to make it Unique.
I want to create another Array just like it with a Different Sort / Key Sequence.

Is there an Easy way to COPY an existing ARRAY and give the New ARRAY a Different Name ?

We have so many field names in our Model that look alike, I am afraid of grabbing the wrong one, when creating my New ARRAY.
For Example: Order Number / Order Nbr / Order No. / Order # (Multiply this scenario times 30 fields)

by Doreen_Kneller at January 27, 2012 03:05 PM

'Par Grp' (Parameter Group?) from Array Key definition screen

Hello,
A coworker asked me what the 'Par Grp' column is on the screen where an array's key is defined. I'm guessing it stands for Parameter Group but I can't find any reference to it either in the online help or any of the 2E documentation. I've done extensive googling but still no luck. I'm a bit stumped. I've attached a screenshot of what I'm talking about. Does anyone know what ‘Par Grp’ represents and how it is used? Any insight would be greatly appreciated. Thanks!

~David

by Wojcik at January 27, 2012 02:46 PM

January 26, 2012

PleXML Wiki

PanelAndChild

← Older revision Revision as of 12:44, 26 January 2012
Line 24: Line 24:
  
 
;Elements
 
;Elements
:'''<HTML>''' : For customized HTML output.
+
:'''<html>''' : For easy HTML output. Only one element should be used,
 
<pre>
 
<pre>
 
  <childpanel region="north" id="tabGroup_priceManager_north" height="34" border="false">
 
  <childpanel region="north" id="tabGroup_priceManager_north" height="34" border="false">
Line 32: Line 32:
 
  </childpanel>
 
  </childpanel>
 
</pre>
 
</pre>
 +
 +
:'''<domhelper>''' : For customized nested HTML output.
 +
<childpanel region="north" id="tabGroup_priceManager_north" height="40" border="false">
 +
  <domhelper>
 +
  {tag: 'div',
 +
    style: 'width:100%;border:1px solid blue;',
 +
    cls: 'wtf',
 +
    children: [{
 +
    tag: 'a',
 +
    href: 'www.allabout.de',
 +
    children: [{
 +
      tag: 'span',
 +
      html: 'text'
 +
      }]
 +
    }]
 +
    }
 +
  </domhelper>
 +
</childpanel>
 +
 +
* See http://docs.sencha.com/ext-js/3-4/#!/api/Ext.DomHelper
  
 
:'''<ajaxPageLoad>''' : To load the content of a Plex-XML function in a panel.
 
:'''<ajaxPageLoad>''' : To load the content of a Plex-XML function in a panel.

by Zwirnerj at January 26, 2012 12:44 PM

CA Forum - Plex General Discussion

RE: Level Consolidation

George, no progress on this one. Given the size/complexity of the application it looks like we will have to retain the current levels. Dave.

by dave_gamble at January 26, 2012 09:30 AM

January 25, 2012

WebClient for CA Plex

Mobile Device Development Recommended Reading List

Here is a list of ebooks that we have found useful for mobile device development. We will be adding to the list as we come across new valuable resources. http://www.amazon.com/lm/R19VKG1G2RSJJY/ref=cm_lm_pthnk_view?ie=UTF8&lm_bb= Enjoy!

by admin at January 25, 2012 05:29 PM

Webcast Replay – CA Plex, Mac, and Mobile Development

To view a recording of the webcast, click here: https://www305.livemeeting.com/cc/cai/view?id=2F7GPS&role=attend&pw=kQ%2CM9%28%2BMg

by admin at January 25, 2012 05:20 PM

PleXML Wiki

Format

← Older revision Revision as of 17:04, 25 January 2012
Line 3: Line 3:
 
All data you see in the format is extracted from your Plex-Modell via Meta-Code on the first function call. You don't have to type it manually.
 
All data you see in the format is extracted from your Plex-Modell via Meta-Code on the first function call. You don't have to type it manually.
  
--> Hint: See [[Plex-XML Formats r2|Formats 2.0]] for the next version of Plex-XML formats scheduled November 2007
+
--> Hint: See [[Format Field Attributes]] for additional attributes
  
 
== Translate a format name ==
 
== Translate a format name ==

by Zwirnerj at January 25, 2012 05:04 PM

Format Field Attributes

Created page with "'''Format Field Attributes''' is a table in the PleXMLF-Modell. It is a 1:N relation to Fields and Format-Fields. Used to store additional fields attributes that won't be covered..."

New page

'''Format Field Attributes''' is a table in the PleXMLF-Modell. It is a 1:N relation to Fields and Format-Fields. Used to store additional fields attributes that won't be covered in Format-Fields.

All new attributes for HTML5, deeper Sencha integration will be stored her.

===Add a new attribute===
While you are able to store any attribute in the table it makes sense to define fields and input logic for common attributes.
If you like to add a new attribute you should:

1. Add a field in the PleXMLF-Modell
FLD_ATR_NewAttribute is a DOMAttributeValue
FLD_ATR_NewAttribute left lable New-Attribute
FLD_ATR_NewAttribute message Hint --> put a short description inside
FLD_ATR_NewAttribute impl name newAttribute --> should be the attribute name

2. Add that field to the '''Field_Attributes_Fields.Field_Attributes_Fields''' view.

3. Gen+Build these functions:
PleXMLF: Field_Attributes.Fetch.FieldAttibuteFields_Read
PleXMLF: Field_Attributes.Fetch.FieldAttibuteFields_Update1
PleXMLF: Field_Attributes.Fetch.FieldAttibuteFields_Update2
SEC-XML: FormDetail.XML_Intern.Dictionary.Update

4. Update the Format-Fields-Maintanance function format in your deployed application

5. Add any logic to your XSLT's to bring your new attribute to life.

===Existing default attributes===
* canGrow: Used in FindBrowse/Grids to define a column that is allowed to grow an take all space that isn't used by other columns.
* placeholder: HTML5 placeholder attribute (hint text in empty input fields)

by Zwirnerj at January 25, 2012 05:02 PM

January 24, 2012

CA Forum - Plex General Discussion

RE: Oversized grid column

Hey Jussi , This works also if you simply wanted to add a button on the panel for the user to press to reset all columns widths to 100

 1
 2{
 3HWND HwndGrid=ObPanelAPI::GetControlHandleByName("&(1:)");
 4    if (HwndGrid)
 5    {
 6        WORD wColCount;
 7        wColCount = SendMessage(HwndGrid, HGM_GETCOLCOUNT, 0, 0L);
 8        {
 9        while (wColCount > 0)
10            {
11            wColCount = wColCount - 1; // Zero Based
12            SendMessage(HwndGrid, HGFM_SETCOLWIDTH,wColCount ,100);
13            }
14        }
15    }
16}


Parameter 1 = FIELDS/Control (passing the control name of your grid)

by GeorgeJeffcock at January 24, 2012 07:42 PM

RE: Oversized grid column

Sweet I had just been using the Setselextent in Left top button. But did not join the dots on this one, elegant answer,

Gives me idea of combining setcoulmnwidth and Setselextent , off to play.

 1{
 2HWND HwndGrid=ObPanelAPI::GetControlHandleByName("Grid1P");
 3if (HwndGrid)
 4{
 5BOOL bExtend=FALSE;
 6SendMessage(HwndGrid,HGM_SETSELEXTENT, (WPARAM)bExtend, MAKELONG(-1,-1));
 7SendMessage(HwndGrid, HGFM_SETCOLWIDTH,0,10);
 8}
 9}


But it did not work as if the user did it as Peter described. The whole grid is selected but only the one column (first in this case) was adjusted to 10 in width, i had hoped because the whole grid was selected that all columns would have been adjusted not just the first one. thanks peter for sharing the tip.

by GeorgeJeffcock at January 24, 2012 06:52 PM

RE: Oversized grid column

Thank you Peter!

This was exactly the kind of solution we were looking for. Perfect for default OBASE panels.

Jussi

by JussiS at January 24, 2012 03:31 PM

CA Forum - Webcast Archive

January 2012 - Webcast Replay - CA Plex, Mac, and Mobile Development

Below is the Replay information for the CA Plex/2E Global User Community Webcast on January 19, 2012

Topic:

CA Plex, Mac, and Mobile Development – Presented by John Rhodes, CM First Technologies
Mac OS is becoming popular in many technology circles, reflecting the increased interest in mobile device development, and the requirement that you must use Apple hardware for iOS development. As a CA model based developer you are probably also curious – can CA Plex be used effectively in this new software development paradigm? Perhaps surprisingly to some, the answer is yes. Attend this webcast to find out how.

Topics to be covered include:
o Setting up CA Plex in a Mac VMWare Fusion environment
o Building and testing Java Apps directly on the Mac
o Configuring CA Plex WebClient apps within Xcode
o Using Apple device emulators
o Using Eclipse for Mac with Android SDK
o Code signing and deploying iOS and Android apps to the popular app stores
o A bit of fun with WebClient mobile features such as Camera, GPS, and Charts


Click here for the replay: https://www.livemeeting.com/cc/cai/view?id=2F7GPS&role=attend&pw=kQ%2CM9%28%2BMg

by MaryGreening at January 24, 2012 02:34 PM

CA Forum - Plex General Discussion

RE: Oversized grid column

Jussi,

There is a way to allow user to do this all on his own. Prerequisite is that the panel property "Grid.Row Headings" has been set to Yes. In addition, besides your oversized column you neet at least one additional column with normal width in the grid.
Done so, the user now can resize the oversized grid column as follows (by the way, this works in the Panel Editor also for developers):
  1. Select the whole grid by clicking on the left upper grid corner (i.e. the meeting point of the row and column headings).
  2. Resize just one fully visible column. In consequence, immediately all the visible columns will be resized to the same width.
  3. Now click on any row to return to normal grid selection mode and resize each of the columns to its wished width.

HTH!
--
Peter

by Fabel at January 24, 2012 02:17 PM

January 23, 2012

CA Forum - Plex General Discussion

Email response feature available! - Important information!

Dear Community Member:

Responding to MyCA Message Board Posts Just Got Easier! Are you subscribed to any MyCA community message boards or threads? If so, now you can respond directly from your email account. A subscription is necessary as you must receive the message board post notification in order to respond to the post.

Please be aware that any information contained in your email signature (phone numbers, company name, email address, etc.) will be included in the post. You need to be aware of the possibility of disclosing personally identifiable information. Once the information is posted, it will be indexed via search engines from our public communities to the internet at large and received in the inbox of those who have subscribed to the message boards. It is up to you to determine how much information to include in your posts.

A message board thread has been started in the MyCA Feedback Community for questions or comments. Alternatively, you can send a note to customerprograms@ca.com.

Regards,
The CA Communities Team

by MaryGreening at January 23, 2012 07:58 PM

CA Forum - 2E General Discussion

Email response feature available! - Important information!

Dear Community Member:

Responding to MyCA Message Board Posts Just Got Easier! Are you subscribed to any MyCA community message boards or threads? If so, now you can respond directly from your email account. A subscription is necessary as you must receive the message board post notification in order to respond to the post.

Please be aware that any information contained in your email signature (phone numbers, company name, email address, etc.) will be included in the post. You need to be aware of the possibility of disclosing personally identifiable information. Once the information is posted, it will be indexed via search engines from our public communities to the internet at large and received in the inbox of those who have subscribed to the message boards. It is up to you to determine how much information to include in your posts.

A message board thread has been started in the MyCA Feedback Community for questions or comments. Alternatively, you can send a note to customerprograms@ca.com.

Regards,
The CA Communities Team

by MaryGreening at January 23, 2012 07:55 PM

PleXML Wiki

Inner request

← Older revision Revision as of 14:22, 23 January 2012
Line 9: Line 9:
  
 
===Example===
 
===Example===
<pre>
+
Example with ajaxPageLoad-call-template. The template takes also care of the [[Secured Fields|secured-fields]] hashcode.
<xsl:template name="MasterDetailGrid">
+
<xsl:template name="MasterDetailGrid">
<inner_request>
+
  <inner_request>
  <idiv>
+
  <idiv>
  <ajaxPageLoad style="ajax">
+
    <xsl:call-template name="[[ajaxPageLoad]]">
    <request>ActPipeFB02</request>
+
    <xsl:with-param name="param">
    <param value="ACTMID">webFindName</param>
+
      <request>FooRequest</request>
    <param value="=">webFindOper</param>
+
      <param value="ajax">style</param>
    <param value="{$vActID}">webFindValue</param>
+
      ...
  </ajaxPageLoad>
+
      <param value="FooValue">FooName</param>
  </idiv>
+
    </xsl:with-param>
</inner_request>
+
    </xsl:call-template>
</xsl:template>
+
  </idiv>
</pre>
+
  </inner_request>
 +
</xsl:template>
  
 
==iframe==
 
==iframe==

by Zwirnerj at January 23, 2012 02:22 PM