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



Thomas,

--
About GIT,
I installed it on IBMi using the youngiprofessionals instructions (http://youngiprofessionals.com/wiki/index.php/PASE/Git).
But I was not satisfied with this. With all the new stuff I asked my team to learn, like layering (http://en.wikipedia.org/wiki/Multilayered_architecture),
I didn't wanted them to have to learn GIT commands as well. Their mind was already busy at the time. And a merge without the proper tool is not very handy.
I wanted them to use windows tools, more user friendly, like the github windows client (http://windows.github.com/) for easy tasks (like pull and push sources),
and sourcetree (http://www.sourcetreeapp.com/) for more complex tasks (merge conflict, branch, etc.), with code compare as merging tool (http://www.devart.com/codecompare/).

To use windows clients, I found 2 ways :

1) Put the local repository (where git will look for modification) in an ifs folder and access it throw a windows network drive. => this is increasingly slow (as long as the project grows).
2) Put the local repository in a local windows folder, precisely where RDi store its cache (C:\Users\{LOGIN}\IBM\rationalsdp\workspace\RemoteSystemsTempFiles\...), and send your upgraded sources to the ifs (using a windows bat script) after every source pull from GIT. => this is fast, but you have to be carreful to not forget to send upgraded sources. (RDi is nice and tell you when the cache is not well synchronized) => Note that it requires you to use a windows editor that copy sources in a cache folder, like RDi, RDp or RpgNextGen. SEU is not an option.

Every programmer has his own folder in the ifs and his own library per project. This way, he works on his own and share his work when he decides too.

We began with the first way, and now, we use the second (it was really too slow).
I am still thinking to use git directly on IBMi, for continuous integration purpose (http://en.wikipedia.org/wiki/Continuous_integration).
This is were your rpgunit will become very usefull.
We already use rpgunit for TDD (http://fr.wikipedia.org/wiki/Test_Driven_Development) and BDD (http://en.wikipedia.org/wiki/Behavior-driven_development).
We use TDD for technical tests, and BDD for business tests.

Remarks : If you want our windows bat scripts, tell me. Despite being very simple, they are very usefull, avoiding us to copy paste manually from windows folder to the ifs.
Don't hesitate to ask any question. I am interested as well in any improvement you might suggest.

--
About IFS source organization,

Our projects sources look like this :

=> Global View

- Project folder :

- - DTO Folder (http://en.wikipedia.org/wiki/Data_transfer_object) :
- - - Those sources are not compiled as a module, they are ony referenced within other modules)

- - DB2 Data Layer :
- - - Compiled as module and then as a service program

- - WebService Data Layer :
- - - Compiled as module and then as a service program

- - ...Data Layer : (Other sources of Data, like ftp, etc.)
- - - Compiled as module and then as a service program

- - Service Layer : (Business Logic)
- - - Compiled as module and then as a service program

- - Presentation Layer
- - - Each batch compiled as module and then as a program
- - - Each controler compiled as module and then as a program (website controlers using MVC pattern) (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)

--------------------------- ---------
- Data Layer - - -
--------------------------- - -
- -
--------------------------- - -
- Service Layer - - DTO -
--------------------------- - -
- -
--------------------------- - -
- Presentation Layer - - -
--------------------------- ---------

=> Detailled View

- Project folder :

- - DTO Folder
- - - Module Folder :
- - - - Project.DTO.rpgle (include all sources files from the DTO Folder, this is this source that will be referenced from)
- - - Model Folder :
- - - - Entity1.rpgle (it is a DTO stored in a DataStructure)
- - - - Entity2.rpgle (it is a DTO stored in a DataStructure)

- - DB2 Data Layer :
- - - Compile Folder :
- - - - Build.sh (build the module and the service program)
- - - Module Folder :
- - - - Project.Data.DB2.rpgle (include all sources files from the DB2 Data Folder, this is the source that is compiled in a module)
- - - Provider Folder :
- - - - Generated Folder
- - - - - Entity1Provider.rpgle (Code created automatically that will handle most of sql generation, sql fetch, etc. exposing CRUD functions (http://en.wikipedia.org/wiki/Create,_read,_update_and_delete)
- - - - Entity1Provider.rpgle (Expose functions on DB2 using the DTO Entity1, on the table named Entity1 as well)

- - WebService Data Layer :
- - - Compile Folder :
- - - - Build.sh (build the module and the service program)
- - - Module Folder :
- - - - Project.Data.WebService.rpgle (include all sources files from the WebService Data Folder, this is the source that is compiled in a module)
- - - Provider Folder :
- - - - Entity2Provider.rpgle (communicate with a webservice using the DTO entity2)

- - ...Data Layer : (Other sources of Data, like ftp, etc.)

- - Service Layer : (Business Logic)
- - - Compile Folder :
- - - - Build.sh (build the module and the service program)
- - - Module Folder :
- - - - Project.BusinessLogic.rpgle (include all sources files from the Service Folder, this is the source that is compiled in a module)
- - - Service Folder :
- - - - Entity1Service.rpgle (Expose every action that can be done on the Business Domain Entity1, handle business rules)
- - - - Entity2Service.rpgle (Expose every action that can be done on the Business Domain Entity2, handle business rules)

- - Presentation Layer :
- - - Compile Folder :
- - - - Build.sh (build the all batchs and controllers)
- - - Batch Folder :
- - - - Batch1.rpgle (this will be compiled in qsys, need a short name)
- - - Controlers Folder :
- - - - Controler1.rpgle (this will be compiled in qsys, need a short name)

Remarks :
- The presentation layer need to be improved, it still feels a little messy to me.
- The layering with service programs works pretty well.
- I would like to use make scripts instead of qsh scripts to compile.
- There are other concepts like developper environment which help to load the developer's specific libraries and folder while launching qsh
- If you want some specific code samples, tell me
- We code in french, I translated everything here
- A project will cover a business domain logic, following Domain Driven Design (http://en.wikipedia.org/wiki/Domain-driven_design)
- I use many open source projects like log4rpg, rpgunit from you, arraylist, lmap, json (from Mihael Schmidt - http://www.rpgnextgen.com/), httpapi, ftpapi, expect (from scott klement - http://www.scottklement.com/)
- Ccsid can be a problem, especially when I use ebcdic unusual characters like { or ^ for regex, json, etc.

--
Junlei Li's experience, "A Fresh Approach to SCM", feels very similar to ours.
I love the way to compile using make scripts.
For now, we are using qsh shell script, compiling using the command 'system -iv "crtrpgmod ..."'

--
Besides, your RDi plugins will be very usefull, especially the one for rpgunit. We use rpgunit (and log4rpg) on every new project (thank you for your great work !).
I might try to create one for some of the features we miss.

If you need more information, feel free to ask.

Charles

-----Message d'origine-----
De : wdsci-l-bounces@xxxxxxxxxxxx [mailto:wdsci-l-bounces@xxxxxxxxxxxx] De la part de thomas.raddatz@xxxxxx
Envoyé : vendredi 6 décembre 2013 08:47
À : wdsci-l@xxxxxxxxxxxx
Objet : Re: [WDSCI-L] Use RDi in the IFS and make autocompletion work


Charles,

I am very interested in your way of using git for RPG development. We use "Turnover" to manage our development and I would love to integrate SVN into it. Hence I'd like to ask you, to share your set up and how to use it with us.

Maybe you find the following information useful. STMFSEU and CRTFRMSTMF are made by Junlei Li, whereas the plugins are mine:

http://www.mcpressonline.com/programming/general/a-fresh-approach-to-scm.html

http://www.tools400.de/rpgunit/

http://www.tools400.de/markertags/

Feel free to share your experiences with me.

Thomas.

rpg400-l-bounces@xxxxxxxxxxxx schrieb am 04.12.2013 14:33:57:

Von: cmartin@xxxxxxxxxxxxxxx
An: rpg400-l@xxxxxxxxxxxx,
Datum: 04.12.2013 14:34
Betreff: RE: Use RDi in the IFS and make autocompletion work Gesendet
von: rpg400-l-bounces@xxxxxxxxxxxx

Thomas, my previous reply is incomplete. Please ignore it.
My project structure is more complex than that.
I need to take some time to write it in an understandable way.
I will come back soon with a solution or more questions.

-----Message d'origine-----
De : rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx
] De la part de Charles MARTIN
Envoyé : mercredi 4 décembre 2013 14:22 À : RPG programming on the IBM
i (AS/400 and iSeries) Objet : RE: Use RDi in the IFS and make
autocompletion work

This is interesting to know.
I don't know how to use it in my projects effectively.

In the ifs, I have this convention :
- Project Folder
- - Sub domain 1 folder
- - - sourceFile1.rpgle
- - Sub domain 2 folder
- - - sourceFile2.rpgle
- - Module folder
- - - moduleFile.rpgle


The module file copy everything in the project with the /copy command,
with a relative path.
Then, I just have to compile the moduleFile.rpgle source.

This is important that the path is relative. Each programmer work with
his own path in the ifs (the sources are merged in a git
repository).
This way, each programmer has is own environment to code.
This the best way to organize sources in the ifs we found yet.

When a programmer is editing the sourceFile1.rpgle or
sourceFile2.rpgle, I wish he had autocompletion.
But this source has no /copy command. A /copy command with a "/if not
defined" command might do the trick (having the copy at editing, but
not at compile time).
But before, I have to solve the relative path problem first.

-----Message d'origine-----
De : rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx
] De la part de thomas.raddatz@xxxxxx Envoyé : mardi 3 décembre 2013
13:43 À : rpg400-l@xxxxxxxxxxxx Objet : Re: Use RDi in the IFS and
make autocompletion work


One more thing that I figured out. Live parsing and autocomplete
works, when the copy books are full qualified like this:

*
* -----------------------------------------
* Exported functions
* -----------------------------------------
/COPY /home/raddatz/ubmsys/QBASICS1/pbasics1rb.rpgle
*

It also works when the current directory is set to the folder of the
copy books, which can be achieved with parameter 'Initial command'
of the subsystem properties of the remote connection:

Initial command: CD '/HOME/RADDATZ/UBMSYS/QBASICS1/'

*
* -----------------------------------------
* Reference fields
* -----------------------------------------
/COPY basics1r0.rpgle

Thomas.

rpg400-l-bounces@xxxxxxxxxxxx schrieb am 03.12.2013 12:13:14:

Von: thomas.raddatz@xxxxxx
An: rpg400-l@xxxxxxxxxxxx,
Datum: 03.12.2013 12:13
Betreff: Antwort: Use RDi in the IFS and make autocompletion work
Gesendet von: rpg400-l-bounces@xxxxxxxxxxxx


I assume that this issue is a defect in RDi. When I try to open a
copy

book from the /COPY statement of an IFS source file, I receive error
message EVFR0026 "*LIBL/*LIBL/QRPGLESRC('H_SPEC.rpgle') not found."
That

implies to me that RDi tries to open a member of a source physical
file instead of an IFS file:



The module compiles fine using the following command:

CRTRPGMOD MODULE(QTEMP/BASICS1RB)
SRCSTMF('/home/raddatz/ubmsys/QBASICS1/basics1rb.rpgle')

Since the compiler locates the included IFS file, it should be a bug
in RDi.

Thomas.

rpg400-l-bounces@xxxxxxxxxxxx schrieb am 03.12.2013 09:43:16:

Von: cmartin@xxxxxxxxxxxxxxx
An: rpg400-l@xxxxxxxxxxxx,
Datum: 03.12.2013 09:43
Betreff: Use RDi in the IFS and make autocompletion work Gesendet
von: rpg400-l-bounces@xxxxxxxxxxxx

I put my rpgle sources in the IFS for ages.
There is a lot of benefits.
I can put my sources in a git repository (http://www.git-scm.com/).
I can create files and folders with a long name.
I can organize sources in subfolders, etc.
It is worth it.

There is something that bother me a little.
If I put my rpgle sources in qsys instead, using RDi, I can use
autocomplete from copied sources.
I don't have this feature in the IFS, and I want it.

What does it mean :
When i have 2 sources in QSYS :
------------------------
Source1.rpgle :
P DisplayHelloWorld...
P b EXPORT
D pi
/free
dsply 'Hello world';
/end-free
P e
------------------------
Source2.rpgle :

/free
//I type "D" => RDi suggest "DisplayHelloWorld" (and
parameters,
etc.)
DisplayHelloWorld();
/end-free

/copy LIB/qrpglesrc,source1
------------------------

If I have 2 sources in the IFS :
------------------------
SourceIfs1.rpgle :
P DisplayHelloWorld...
P b EXPORT
D pi
/free
dsply 'Hello world';
/end-free
P e
------------------------
SourceIfs2.rpgle :

/free
//I type "D" => RDi don't suggest "DisplayHelloWorld"
DisplayHelloWorld();
/end-free

'SourceIfs1.rpgle'
------------------------

This missing feature is quite annoying, is there any way to get it
back
?
--
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.



--
IMPORTANT NOTICE:
This email is confidential, may be legally privileged, and is for
the intended recipient only. Access, disclosure, copying,
distribution, or

reliance on any of it by anyone else is prohibited and may be a
criminal offence. Please delete if obtained in error and email
confirmation to the sender.-- 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.



--
IMPORTANT NOTICE:
This email is confidential, may be legally privileged, and is for the
intended recipient only. Access, disclosure, copying, distribution, or
reliance on any of it by anyone else is prohibited and may be a
criminal offence. Please delete if obtained in error and email
confirmation to the sender.
--
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.

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



--
IMPORTANT NOTICE:
This email is confidential, may be legally privileged, and is for the intended recipient only. Access, disclosure, copying, distribution, or reliance on any of it by anyone else is prohibited and may be a criminal offence. Please delete if obtained in error and email confirmation to the sender.
--
This is the Rational Developer for IBM i / Websphere Development Studio Client for System i & iSeries (WDSCI-L) mailing list To post a message email: WDSCI-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/wdsci-l
or email: WDSCI-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at http://archive.midrange.com/wdsci-l.

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.