вторник, 19 ноября 2019 г.

Вызов события по добавлению/изменению записей в таблице

Интересная настройка - при создании ракурса ведения для таблиц, можно привязать выполнение любый действий (ибо АБАП) к основным операциям с данными в этой таблице.

Генератор ведения таблиц (se54)-Среда-Модификация-События. но перед этим ставишь точку прерывания в ***INCLUDE MSVIMF30 .на строке 39, и подменяешь значение SY-SUBRC на 0, если нет прав на ведение:



Главное правильно описать логику в форме, которую нужно создать с указанным именем в нужно инклюде.

FORM save_record.
  CALL FUNCTION 'TH_POPUP'
    EXPORTING
      client               =  sy-MANDT
      user                 =  sy-uname
      MESSAGE              =  'Внести изменения в таблицу'
*   MESSAGE_LEN          = 0
*   CUT_BLANKS           = ' '
* EXCEPTIONS
*   USER_NOT_FOUND       = 1
*   OTHERS               = 2
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    "SAVE_RECORD

вторник, 12 ноября 2019 г.

Управление цепочкой загрузки из АБАПа, продолжение

Ок, парни, в прошлой серии мы с вами пытались управлять цепочкой загрузки через перепланирование следующего запуска. Справедливо было замечено, что если мы делаем это шаманство из текущего прогона, он зависает или прерывается, так как CALL FUNCTION 'RSPC_API_CHAIN_SCHEDULE'.

Ниже код, который находит задание, шаманит с его временем следующего запуска, и ни разу не мешает текущему прогону:
DATA:
      lt_processlist  TYPE STANDARD TABLE OF rspc_s_processlist,
      wa_processlist  LIKE LINE OF lt_processlist,
      lv_variant      TYPE rspc_variant,
      wa_jobhead      LIKE  tbtcjob,
      it_steplist     TYPE STANDARD TABLE OF  tbtcstep,
      lt_joblist      TYPE STANDARD TABLE OF tbtcjob,
      text            TYPE string.


BREAK-POINT.
*"  Имя варианта процесса запуска
CALL FUNCTION 'RSPC_API_CHAIN_GET_PROCESSES'
  EXPORTING
    i_chain         'USEM_CR_RETAIL'
  TABLES
    e_t_processlist lt_processlist.
IF sy-subrc <> 0.
  text `Сбой при поиске варианта запуска по цепочке`.
  MESSAGE text TYPE 'E'.
ENDIF.

READ TABLE lt_processlist INTO wa_processlist
WITH KEY chain_id 'USEM_CR_RETAIL'
         type 'TRIGGER'.

lv_variant wa_processlist-variante.

*"  Параметры следующего задания по нашей цепочке
CALL FUNCTION 'RSPC_API_PROCESS_GET_JOBS'
  EXPORTING
    i_chain     'USEM_CR_RETAIL'
    i_type      'TRIGGER'   "тип процесса запуска в цепочке
    i_variant   lv_variant
    i_event     ''          "можно не заполнять
    i_eventp    ''          "можно не заполнять
  TABLES
    e_t_joblist lt_joblist.
IF sy-subrc <> 0.
  text `Сбой при поиске запланированного задания по цепочке`.
  MESSAGE text TYPE 'E'.
ENDIF.

IF lt_joblist IS INITIAL.
  text `Сбой при поиске запланированного задания по цепочке`.
  MESSAGE text TYPE 'E'.
ENDIF.

READ TABLE lt_joblist INDEX INTO wa_jobhead.

*"  Теперь джобу надо считать
CALL FUNCTION 'BP_JOB_READ'
  EXPORTING
    job_read_jobcount     wa_jobhead-jobcount
    job_read_jobname      wa_jobhead-jobname
    job_read_opcode       '20'
  IMPORTING
    job_read_jobhead      wa_jobhead
  TABLES
    job_read_steplist     it_steplist
  EXCEPTIONS
    invalid_opcode        1
    job_doesnt_exist      2
    job_doesnt_have_steps 3
    OTHERS                4.
IF sy-subrc <> 0.
  text `Сбой при считывании запланированного задания`.
  MESSAGE text TYPE 'E'.
ENDIF.

wa_jobhead-sdlstrtdt wa_jobhead-sdlstrtdt + 1.
wa_jobhead-sdlstrttm '050000'.

*"  Изменить
CALL FUNCTION 'BP_JOB_MODIFY'
  EXPORTING
    dialog           'N'
    jobcount         wa_jobhead-jobcount
    jobname          wa_jobhead-jobname
    new_jobhead      wa_jobhead
    opcode           '16'
  IMPORTING
    modified_jobhead wa_jobhead
  TABLES
    new_steplist     it_steplist.
IF sy-subrc <> 0.
  text `Сбой при изменении запланированного задания`.
  MESSAGE text TYPE 'E'.
ENDIF.

*"  И закрыть назад
CALL FUNCTION 'JOB_CLOSE'
  EXPORTING
    jobcount wa_jobhead-jobcount
    jobname  wa_jobhead-jobname.
IF sy-subrc <> 0.
  text `Сбой при закрытии джобы`.
  MESSAGE text TYPE 'E'.
ENDIF.

четверг, 7 ноября 2019 г.

Я хочу изменить время запуска цепочки из АБАПа

Да, пожалуйста:

*"  startdttyp = 'I' - немедленный запуск
*"  startdttyp = 'D' - планирование

    ls_startcondition-startdttyp  'D'.
    ls_startcondition-sdlstrtdt   sy-datlo + 1"нужное время
    ls_startcondition-sdlstrttm   '050000'.     "нужная дата

    CALL FUNCTION 'RSPC_API_CHAIN_SET_STARTCOND'
      EXPORTING
        i_chain            so_chain
        i_s_startcondition ls_startcondition.
    IF sy-subrc NE 0.
      CONCATENATE `Проблемы с цепочкой ` so_chain INTO text.
      MESSAGE text TYPE 'E'.
    ENDIF.

    CALL FUNCTION 'RSPC_API_CHAIN_SCHEDULE'
      EXPORTING
        i_chain so_chain.
    IF sy-subrc NE 0.
      CONCATENATE `Проблемы с цепочкой ` so_chain INTO text.
      MESSAGE text TYPE 'E'.
    ENDIF.