2016-08-13 9 views
1

Ich schreibe häufig und benutze ISPF Editier-Makros. Es ist jedoch zeitaufwendig, sie im Vordergrund aufzurufen. Kann ich ein Rexx-Programm verwenden, um die Bearbeitungsmakros gegen alle oder eine Auswahl von Mitgliedern einer PDS über Batch auszuführen?Wie kann ich ISPF Edit Macros im Batch ausführen

+0

Beantworten Sie Ihre eigenen Fragen Mike? ;) –

+1

David, ja. Anscheinend ist es in Ordnung, dies zu tun, da es darauf ankommt, anderen zu helfen und im Sinne von SO. – MikeT

Antwort

0

Hier ist ein bearbeiten Makro, das ein anderes Makro gegen alle Mitglieder einer PDS laufen:

/*REXX - Edit macro to invoke the same macro against all members */ 
/*  in the data set being edited.        */ 
/*  Syntax:             */ 
/*   ALLMEM macro prefix          */ 
/*    macro is the name of a macro to execute. If it  */ 
/*     is a program macro, remember to specify the */ 
/*     exclamation point before the name.    */ 
/*                 */ 
/*    prefix is an optional prefix to use when selecting */ 
/*     members to process. for example, ISR will */ 
/*     process all members starting with ISR.  */ 
/*                 */ 
/*  Note that the macro which this calls can have an   */ 
/*  ISREDIT END or ISREDIT CANCEL in it to avoid the display */ 
/*------------------------------------------------------------------*/ 
Address 'ISPEXEC' 
'ISREDIT MACRO (WORKMAC,PREFIX)' 
'ISREDIT (DATA1) = DATAID' 
'ISREDIT (THISONE) = MEMBER ' 
Address 'ISPEXEC' 'LMOPEN DATAID('data1') OPTION(INPUT)' 
parse upper var prefix prefix . 
member1='' 
Do Until lmrc\=0 
    Address 'ISPEXEC' 'LMMLIST DATAID('data1') OPTION(LIST)', 
        'MEMBER(MEMBER1) STATS(YES)' 
    lmrc = rc 
    If lmrc = 0   ,/* if member name returned     */ 
    & member1\=thisone ,/* and it isn't this member    */ 
    & (    ,/* and prefix check is ok...    */ 
     prefix=''  ,/* No prefix specified     */ 
     | substr(member1,1,length(prefix))=prefix,/* or prefix match*/ 
    ) Then 
    Do     /* invoke edit with specified initial macro*/ 
     Address 'ISPEXEC' 'CONTROL ERRORS CANCEL' 
     Address 'ISPEXEC' 'EDIT DATAID('data1')', 
       'MEMBER('member1') MACRO('workmac')' 
     Address 'ISPEXEC' 'CONTROL ERRORS CANCEL' 
    End 
End 
Address 'ISPEXEC' 'LMMLIST DATAID('data1') OPTION(FREE)' 
Address 'ISPEXEC' 'LMCLOSE DATAID('data1')' 
'ISREDIT DEFINE 'workmac' MACRO CMD' 
If prefix=''        ,/* No prefix specified */ 
    | substr(thisone,1,length(prefix))=prefix, /* or prefix match*/ 
    then 
    'ISREDIT 'workmac   /* perform macro for this member */ 

Es ist für den Einsatz unter ISPF anzeigen oder bearbeiten, kann aber gemacht wird im Batch zu arbeiten, aber man kann auch Feuer es aus und lehnen Sie sich zurück, während es Ihr Makro gegen alle von einem PDS laufen lässt, Sie ersparend, es auf jedem Mitglied manuell laufen zu lassen.

Verwandte Themen