At line 1 added 100 lines |
%%(display:none) |
{{{ |
WikiUp |
}}} |
/% |
[{TableOfContents }]\\ |
!!! Compatibilità\\ |
La release minima di sistema operativo con cui è compatibile Sme.UP ERP è la V6R1.\\ |
È quindi importante prestare attenzione a non utilizzare istruzioni di release successive, in quanto potrebbero essere accettate dal Seu, ma non dal compilatore.\\ |
\\ |
!!! Esempi di programmi\\ |
Il file QSRCGEN nella libreria SMEDEV contiene degli esempi di sorgenti di programmi, che possono essere utilizzati come prototipi.\\ |
Di seguito __alcuni__ dei sorgenti disponibili:\\ |
\\ |
||MIN_RPG||include le /copy minime per un programma Sme.up |
|FMT2_RPG | programma minimale con utilizzo di n file video\\ |
|FUN | prototipo di programma "funizzato" (avente un'interfaccia standard con cui essere richiamato)\\ |
\\ |
\\ |
!!! La stesura del codice\\ |
!! Definizioni\\ |
In testa si trova l'elenco delle modifiche, contrassegnate come specifiche __V*__, interpretate nella scheda Modello Dinamico di Looc.up.\\ |
Per informazioni sul Modello Dinamico, fare riferimento all'apposito paragrafo del documento sotto riportato:\\ |
[Lavorare con i programmi|MBDOC-AXBASE_SD]\\ |
\\ |
Si trovano poi una serie di specifiche:\\ |
%%quote |
H/COPY QILEGEN,£INIZH |
/% |
---- |
per l'inclusione delle specifiche di compilazione contenute nella /copy __£INIZH__.\\ |
\\ |
%%quote |
I/COPY QILEGEN,£TABB£1DS |
/% |
---- |
La /copy __£TABB£1DS__ definisce le 2 DS:\\ |
* B£1$DS : utilizzata per salvare i riferimenti degli applicativi a cui puntano gli oggetti (es. cliente, fornitore, articolo) e dell'ambiente.\\ |
* B£2$DS : utilizzata per salvare campi eterogenei (es. azienda, divisa, magazzino).\\ |
\\ |
%%quote |
I/COPY QILEGEN,£PDS |
/% |
---- |
La /copy __£PDS__ definisce la mappatura dell'area dati LDA (Local Data Area) con campi contenti dati di sistema e dati caricati dalla /copy £INZSR.\\ |
La /copy __£INZSR__ si occupa di inizializzare il programma, valorizza la LDA ed esegue la routine __£INIZI__ (eseguita solo la prima volta, nel caso il programma termini con RT)\\ |
Al di sotto della specifica relativa alla £PDS posso definire delle variabili includendole nella LDA (metodo utilizzato per il passaggio di parametri in chiamate batch di altri programmi).\\ |
\\ |
__È preferibile che la definizione delle variabili avvenga sempre in testa al sorgente come specifiche D, e non a destra in specifiche C.__\\ |
%%quote |
DSTR198 S 198 |
/% |
---- |
\\ |
A volte però risulta ancora necessario utilizzare la dichiarazione in specifiche C, come nel caso in cui ci sia bisogno di dichiarare delle variabili all'interno di /COPY di specifiche C.\\ |
%%quote |
C* Dichiarazione variabili locali |
C 'A' IFEQ 'B' |
C MOVEL *BLANKS £MDVNA 1 |
C MOVEL *BLANKS £MDVAP 8 |
C ENDIF |
/% |
---- |
Per la definizione delle DS utilizzare in modo esteso l'istruzione __LIKE__ per la definizione dinamica a partire dai campi dei file di dati.\\ |
\\ |
!! Costanti\\ |
È necessario che le costanti non siano definite come stringhe fisse all'interno di specifiche C od O, ma tramite valorizzazione di schiere a livello di programma, altrimenti non ne viene gestita la traduzione in fase di precompilazione. Lo stesso vale per le costanti utilizzate nei file di stampa.\\ |
\\ |
!! ILE RPG\\ |
Si suggerisce l'utilizzo di __specifiche CX__ e di __EVAL__ invece di MOVEL, in modo da rendere più facile un eventuale passaggio al FREE, per ora non in programma.\\ |
Inoltre si consiglia di usare istruzioni che supportano il formato libero (DO, FOR) ed evitare di utilizzare l'istruzione GOTO.\\ |
Attenzione agli indicatori: se un indicatore non viene impostato come acceso o spento, per RPG ha valore acceso, mentre per l'ILE ha valore spento.\\ |
\\ |
!! Utilizzo di /COPY nidificate (come ad esempio £JAX_C)\\ |
In Sme.up alcune /COPY sono nidificate.\\ |
Ad esempio, la /COPY £JAX_C contiene al suo interno il richiamo della £JAX_C1 e della £JAX_C2.\\ |
In alcuni casi sembra esserci l'esigenza di "scorporare" alcune /COPY nidificate (cioè richiamare singolarmente le diverse /COPY contenute all'interno).\\ |
Questo comportamento è fortemente sconsigliato, in quanto l'eventuale aggiunta di ulteriori richiami nella /COPY "contenitore" non viene recepito nei programmi in cui tale COPY è stata scorporata.\\ |
Seguendo l'esempio iniziale, l'eventuale aggiunta nella £JAX_C del richiamo alla /COPY £JAX_C3, non verrebbe recepita nei pgm in cui sono state inserite singolarmente la £JAX_C1 e la £JAX_C2.\\ |
\\ |
! SQLRPGLE\\ |
Il precompilatore SQL non gestisce le /COPY nidificate. Quindi se un membro è di tipo SQLRPGLE e non RPGLE, sembra necessario scorporare le /COPY nidificate per poter compilare correttamente.\\ |
In realtà è sufficiente sostituire la direttiva /COPY con /INCLUDE (che ha in pratica lo stesso comportamento di /COPY tranne per il fatto che con questa il precompilatore SQL è in grado di gestire la nidificazione).\\ |
E' sufficiente inserire /INCLUDE solo per la COPY "contenitore", quindi tornando all'esempio iniziale, è sufficiente scrivere /INCLUDE QILEGEN,£JAX_C invece di /COPY QILEGEN,£JAX_C;\\ |
non è necessario modificare il contenuto della /COPY £JAX_C.\\ |
\\ |
! NON-inclusione una /COPY inclusa in un'altra\\ |
In alcuni casi non si vogliono inserire tutte le COPY richiamate dalla /COPY contenitore.\\ |
Un esempio ricorrente è quello della £JAX_C. Essa richiama anche la £JAX_C9 che contiene la ENTRY PLIST.\\ |
In alcuni programmi con una propria ENTRY PLIST (tipicamente non servizi) in cui si ha l'esigenza di inserire ad esmpio la £JAX_C1, non si può inserire anche la £JAX_C9 che contiene una nuova ENTRY PLIST.\\ |
In questo caso, invece di inserire manualmente tutte le altre /COPY, è possibile richiamare la £JAX_C facendo in modo che la £JAX_C9 non venga inserita.\\ |
Per fare questo è possibile utilizzare alcune direttive di compilazione. Nel caso specifico, basta scrivere /DEFINE JAX_C9_INCLUDED /COPY QILEGEN,£JAX_C.\\ |
In questo modo vengono incluse tutte le /COPY contenute nella £JAX_C tranne la £JAX_C9.\\ |
\\ |
!! Performance\\ |
In fase di sviluppo si raccomanda di prestare attenzione alle performance, ad esempio relativamente al numero di accessi in lettura di un file di dati.\\ |
Se si usano le CL è meglio definirle come CLLE (il record è più lungo e le performance risultano migliori.\\ |
\\ |
!! Commenti\\ |
È raccomandato l'utilizzo dei commenti, al fine di aumentare la leggibilità del codice, in particolar modo nel caso di modifiche.\\ |