Как запустить пакетное редактирование макросов ISPF

Я часто пишу и использую макросы редактирования ISPF. Однако их вызов на переднем плане занимает много времени. Могу ли я использовать программу Rexx для запуска макросов редактирования для всех или некоторых членов PDS в пакетном режиме?


person MikeT    schedule 13.08.2016    source источник
comment
Ты сам отвечаешь на свои вопросы, Майк? ;)   -  person David Crayford    schedule 13.09.2016
comment
Дэвид, ага. По-видимому, это нормально, так как это тактично, как помощь другим и в духе SO.   -  person MikeT    schedule 17.09.2016


Ответы (2)


Вы можете использовать функции управления библиотекой.

  • Вы используете LMINIT, чтобы получить ИДЕНТИФИКАТОР ДАННЫХ для редактируемого набора данных, а затем используете функцию LMOPEN, чтобы открыть набор данных.

    • You could then use LMMLIST if you want to perform the macro on a member or members of a PDS or PDSE.
  • You can then use the EDIT function specifying the macro to use/invoke, which should have an ISREDIT END or ISREDIT CANCEL.
    • If LMMLIST was used the list should be freed using LMMLIST with OPTION(FREE)
  • Затем следует использовать LMCLOSE для закрытия набора данных.
  • Затем следует использовать LMFREE для освобождения ID DATA ID.

Вышеупомянутое можно было бы сделать на разных языках программирования, хотя REXX, вероятно, был бы самым простым.

person Community    schedule 01.10.2018

Вот макрос редактирования, который запускает другой макрос для всех членов PDS:

/*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  */

Он предназначен для использования в ISPF View или Edit, но его можно заставить работать в пакетном режиме, но вы также можете запустить его и сидеть сложа руки, пока он запускает ваш макрос для всех PDS, избавляя вас от необходимости запускать его на каждом члене вручную. .

person Steve Ives    schedule 05.09.2016