Как запустить ISPF Edit Macros в пакетном режиме?
Я часто пишу и использую макросы редактирования ISPF. Однако их вызов на переднем плане занимает много времени. Могу ли я использовать программу Rexx для запуска макросов редактирования для всех или выбора членов PDS с помощью пакета?
2 ответа
Вы можете использовать функции управления библиотекой.
Вы используете LMINIT, чтобы получить идентификатор данных для редактируемого набора данных, а затем используете функцию LMOPEN, чтобы открыть набор данных.
- Затем вы можете использовать LMMLIST, если хотите выполнить макрос для члена или членов PDS или PDSE.
- Затем вы можете использовать функцию EDIT, определяющую макрос для использования / вызова, который должен иметь ISREDIT END или ISREDIT CANCEL.
- Если используется LMMLIST, список должен быть освобожден с использованием LMMLIST с OPTION(FREE)
- Затем следует использовать LMCLOSE, чтобы закрыть набор данных.
- Затем следует использовать LMFREE для освобождения DATA ID.
Вышесказанное может быть сделано на разных языках программирования, хотя REXX, вероятно, будет самым простым.
Вот макрос редактирования, который запустит другой макрос против всех членов 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, избавляя вас от необходимости запускать его на каждом члене вручную,