Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 18/01/2010, 14h29   #1
Membre régulier
 
Jean-Philippe BALLAT
Inscription : avril 2008
Messages : 62
Détails du profil
Informations personnelles :
Nom : Jean-Philippe BALLAT
Âge : 47

Informations forums :
Inscription : avril 2008
Messages : 62
Points : 71
Points : 71
Par défaut Trigger Image Avant

Bonjour,

Merci de votre aide !! je dois absolument avoir un trigger pour un client !!
Trigger en RPGLE
Mon Prb : Je n'arrive pas a avoir l'image avant modif

Merci de votre rapidité

1 PGM TRIGGER SIMPLE RPGLE :
Je n'arrive pas a avoir l'image avant modif
Test en Update !!


----------------------------------------------*
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
H DATEDIT(*YMD)                                       
fCRMUZBEXP o  a e             disk                    
D*                                                    
DOldRecord      e ds                  ExtName(FRRM)   
D                                     Prefix(O_)      
D*                                                    
DNewRecord      e ds                  ExtName(FRRM)   
D                                     Prefix(N_)      
dBuffer           ds          4000                    
dTrgFile                  1     10                    
dTrgLib                  11     20                    
dTrgMbr                  21     30                    
dEvent                   31     31                    
dTTime                   32     32                    
dOldOffset               49     52b00             
dOldLength               53     56b00             
dNewOffset               65     68b00             
dNewLength               69     72b00             
DBufferLen        S             10I 0             
d                sds                              
dUserId                 254    263                
DPos                             4  0             
DTimStp                         14  0             
                                                  
c     *entry        plist                              
c                   parm                    Buffer     
c                   parm                    BufferLen 		

c                   if        Event= '1'                                
                                                                        
c                   eval      Pos=NewOffset+1                           
c                   eval      NewRecord=%subst(Buffer:Pos:NewLength)    
                                                                        
c                   eval      Pos=OldOffset+1                           
c                   eval      OldRecord=%subst(Buffer:Pos:OldLength)    
                                                                        
c                   endif
----------------------
Le OLD record NE CONTIENT RIEN ??
Si j'affiche O_xxxxx rien du tout

mon trigger
Code :
1
2
3
4
ADDPFTRG   FILE(AMSFUZBTST/FRRM) TRGTIME(*AFTER) +        
               TRGEVENT(*UPDATE) PGM(AMSUZBTST/TRIGFRRM) +   
               RPLTRG(*YES) TRG(TRIGFRRM_CHG) +              
               TRGUPDCND(*CHANGE)
Cordialement

Jean-Philippe

Dernière modification par Hédhili Jaïdane ; 18/01/2010 à 15h11. Motif: Fusion posts et Balise Code
BALLAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2010, 16h54   #2
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Tu as demandé que le trigger se déclenche après la mise à jour (update) et tu testes la valeur du "trigger event" pour une insertion et ça, ça ne risque pas de marcher.
Si tu testes la valeur '3' dans la zone "Event", ça va aller nettement mieux :

Remarques
  1. Il ne faut plus jamais employer la notation "B 0" pour déclarer des zones en binaire mais toujours la nouvelle notation "I 0" car RPG IV sait désormais gérer les vrais entiers et non ces définitions à la noix du RPG II/RPG III qui faussaient les résultats en les rendant erronés.
  2. Les pointeurs sont bien pratiques pour programmer "moderne".

Voici un exemple de trigger mis au goût RPG IV ILE:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    F********************************************************************
     F
     D
     D  NulTypePtr     S               *
     D  TypeBin4       S             10I 0 Based(NulTypePtr)
     D  TypeChr        S              1A   Based(NulTypePtr)
     D  TypeSysNam     S             10A   Based(NulTypePtr)
     D  TypePtr        S               *   Based(NulTypePtr)
     D
     D  TgBufLen       S                   Like(TypeBin4)
     D  TgBfrPtr       S                   Like(TypePtr)
     D  TgAftPtr       S                   Like(TypePtr)
     D  TgBufSiz       C                   Const(%size(TgBufChr))
     D
     D TgBufDS         DS
     D  TgFile                             Like(TypeSysNam)
     D  TgLib                              Like(TypeSysNam)
     D  TgMbr                              Like(TypeSysNam)
     D  TgTrgEvt                           Like(TypeChr)
     D  TgTrgTime                          Like(TypeChr)
     D  TgCmtLvl                           Like(TypeChr)
     D  TgReserve1                    3A
     D  TgCcsId                            Like(TypeBin4)
     D  TgReserve2                    8A
     D  TgBfrOfs                           Like(TypeBin4)
     D  TgBfrLen                           Like(TypeBin4)
     D  TgBfrNulOf                         Like(TypeBin4)
     D  TgBfrNulLn                         Like(TypeBin4)
     D  TgAftOfs                           Like(TypeBin4)
     D  TgAftLen                           Like(TypeBin4)
     D  TgAftNulOf                         Like(TypeBin4)
     D  TgAftNulLn                         Like(TypeBin4)
     D  TgBufChr               1  32767A
     D   TgBufAry                     1A   Overlay(TgBufChr)
     D                                       DIM (%size(TgBufChr))
     D
     D SDS            SDS
     D  WSID                 244    253
     D  USRID                254    263
     D  PGMID            *PROC
     D
     D
     D***********************************************************************
     D**>>> On the next two definitions, put the based-on file name    <<<
     D**>>>   in the ExtName parameter                                 <<<
     D***********************************************************************
     D  BfFile       E DS                  ExtName(MBALREP)                     <- TRIGGER FILE
     D                                       Prefix(Bf_)
     D                                       Based(TgBfrPtr)
     D
     D  AfFile       E DS                  ExtName(MBALREP)                     <- TRIGGER FILE
     D                                       Prefix(Af_)
     D                                       Based(TgAftPtr)
     D*****
     D
     D
     C     *Entry        PList
     C     TgBufDs       Parm                    TgBufDs
     C     TgBufLen      Parm                    TgBufLen
     C
     C                   Eval      TgBfrPtr = %addr(TgBufAry(TgBfrOfs+1))
     C                   Eval      TgAftPtr = %addr(TgBufAry(TgAftOfs+1))
     C
     C*****
     C*
     C*  The based-on-file fields are now prefixed with Bf_  for before values
     C*                       and are now prefixed with Af_  for after  values
     C*
     C*****
     C
     C*  Call insert subroutines
     C                   IF        (TgTrgEvt = '1')                             INSERT
     C                   IF        (TgTrgTime = '1')                              AFTER
     C                   EXSR      AfterInsert
     C                   ENDIF
     C                   IF        (TgTrgTime = '2')                              BEFORE
     C                   EXSR      BeforeInsert
     C                   ENDIF
     C                   ENDIF
     C
     C*  Call delete subroutines
     C                   IF        (TgTrgEvt = '2')                             DELETE
     C                   IF        (TgTrgTime = '1')                              AFTER
     C                   EXSR      AfterDelete
     C                   ENDIF
     C                   IF        (TgTrgTime = '2')                              BEFORE
     C                   EXSR      BeforeDelete
     C                   ENDIF
     C                   ENDIF
     C
     C*  Call update subroutines
     C                   IF        (TgTrgEvt = '3')                             UPDATE
     C                   IF        (TgTrgTime = '1')                              AFTER
     C                   EXSR      AfterUpdate
     C                   ENDIF
     C                   IF        (TgTrgTime = '2')                              BEFORE
     C                   EXSR      BeforeUpdate
     C                   ENDIF
     C                   ENDIF
     C
     C                   Eval      *INLR = *on
     C
     C
     C********************************************************************
     C* After Insert Processing                                          *
     C********************************************************************
     C     AfterInsert   BEGSR
     C
     C                   ENDSR
     C
     C
     C********************************************************************
     C* Before Insert Processing                                         *
     C********************************************************************
     C     BeforeInsert  BEGSR
     C
     C                   ENDSR
     C
     C
     C
     C********************************************************************
     C* After Delete Processing                                          *
     C********************************************************************
     C     AfterDelete   BEGSR
     C
     C                   ENDSR
     C
     C
     C********************************************************************
     C* Before Delete Processing                                         *
     C********************************************************************
     C     BeforeDelete  BEGSR
     C
     C                   ENDSR
     C
     C
     C********************************************************************
     C* After Update Processing                                          *
     C********************************************************************
     C     AfterUpdate   BEGSR
     C
     C                   ENDSR
     C
     C
     C********************************************************************
     C* Before Update Processing                                         *
     C********************************************************************
     C     BeforeUpdate  BEGSR
     C
     C                   ENDSR

Dernière modification par Mercure ; 19/01/2010 à 12h44. Motif: typo
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 21h22   #3
Membre régulier
 
Jean-Philippe BALLAT
Inscription : avril 2008
Messages : 62
Détails du profil
Informations personnelles :
Nom : Jean-Philippe BALLAT
Âge : 47

Informations forums :
Inscription : avril 2008
Messages : 62
Points : 71
Points : 71
Merci Bien.
BALLAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 05h05.


 
 
 
 
Partenaires

Hébergement Web