"
Supported by

Communication by event between programmes

In Greek mythology, the gods’ most commonly used means of communication with mortals was rape. They would rape for no reason whatsoever.

The closest thing we have to rape in ABAP is the command “SUBMIT”, which is also the most common way of communicating between two programmes.


But there are less crude ways for a programme to communicate with another, e.g. by using an event.

Let’s imagine you have a programme called ZEUS (strictly speaking, it would be ZEUS_TOURO, but OK) that wants to communicate with another called ZEUROPA.

  1. In the SM62 transaction, you create the event with a type Z* name. Let’s call it ZAS! Once it is created, you can find it near the end of the long list of events, next to the other events created by the client;
  2. If you right-click, you can do a whole lot of things with it. One of these is to transport it, i.e. add it to a transport order;
  3. In the ZEUS programme, in the place where ZEUROPA should be called up, enter the following code:
    
    CALL FUNCTION 'BP_EVENT_RAISE'
      EXPORTING
        eventid                      = 'ZAS'
     EXCEPTIONS
       BAD_EVENTID                  = 1
       EVENTID_DOES_NOT_EXIST       = 2
       EVENTID_MISSING              = 3
       RAISE_FAILED                 = 4
       OTHERS                       = 5
    
  4. In the SM36 transaction, create a job ZEUS_ZAS_EUROPA with a single step, the execution (heaven forbid) of ZEUROPA;
  5. In the execution conditions of the job choose the option “after event” and select the ZAS event. Save.

Alright then.
When you run the ZEUS programme,
It launches the event ZAS,
Which triggers the job ZEUS_ZAS_EUROPA,
Which executes (heaven forbid) ZEUROPA.

Greetings from Abapinho.

2 comentários a “Communication by event between programmes”

  1. Diogo Diz:

    Bom dia.
    Gostaria de registrar minha opnião contra o uso de eventos.
    1- Fica mais difícil para debugar o ZEUROPA;
    2- Fica mais difícil para encontrar todos os pontos de chamada para o ZEUROPA
    3- Não sei se é possível passar parâmetros para o ZEUROPA
    4- Como o ZEUS irá ter conhecimento de que o ZEUROPA terminou a execução?
    5- Alguém pode, inadvertidamente, cancelar o job

  2. Nuno Godinho Diz:

    Olá Diogo,

    Concordo que os eventos de sistema são um bocado toscos e os argumentos que apresentas são válidos mas não considero que sejam argumentos contra o uso de eventos. São antes limitações intrínsecas destes.

    Os eventos não são adequados a todas as situações. Mas há determinadas circunstâncias em que são a melhor (ou mesmo a única) solução.

    Os eventos são um dos mecanismos ideais para fazer programas “loosely coupled”, como se diz em inglês, que não sei dizer em português. A programação GUI moderna, por exemplo, é intrinsecamente “loosely coupled” e amplamente baseada em eventos. Sofre de algumas das desvantagens que apontas mas não é por isso que o uso de eventos não é a melhor opção e não recorrer eles seria bem mais limitativo.

    O exemplo que dei é meramente ilustrativo. Mas repara: basta que no momento do desenvolvimento do ZEUS não se saiba ainda quem este vai chamar ou não se querer pré-defini-lo para ter de recorrer a um evento por forma a manter os dois independentes. Amanhã pode substituir-se o ZEUROPA pelo ZASIA ou pelo ZAMERICA sem ter de alterar um única linha do ZEUS. Aliás, amanhã o ZEUS pode inclusive espoletar os três ao mesmo tempo.

    Quanto às desvantagens que apontaste:
    1. Verdade;
    2. Verdade;
    3. Não é possível, mas só é uma desvantagem se for preciso passar parâmetros;
    4. Não é uma desvantagem se o ZEUS não precisar de o saber;
    5. Não me parece que seja relevante. Alguém pode inadvertidamente matar um processo qualquer também :)

    Na programação OO uma classe pode também publicar e subscrever eventos para criar ligações “loosely coupled” entre métodos. Neste caso o ABAP é mais sofisticado e permite fazer “where used” e tornar o debug mais simples. Quando possível utilizar eventos OO é claramente preferível a utilizar os toscos eventos de sistema.

Deixe um comentário


About Abapinho
Abapinho runs on WordPress
Articles (RSS) e Comments (RSS).