jueves, 10 de julio de 2014

Como enviar Citas para Outlook (Archivos ICS) usando ABAP

En este post os voy a explicar como podemos generar y enviar mediante email citas para que agreguen al nuestro calendario de Outlook. Es algo sencillo y a la vez muy util que nos puede dar mucho juego a la hora de hacer nuestros desarrollos.

Muchas veces nos envian email o nos apuntamos a Webinars que nos permiten agregar el evento a nuestro calendario de Outlook directamente, pues bien, nosotros podemos hacer lo mismo mediante código.

Para realizar este ejemplo vamos a utilizar la clase CL_APPOINTMENT. A continuación os dejo el código de ejemplo:

    INCLUDE <cntn01>.
  TYPE-POOLSsccon.

  DATA lo_appointment TYPE REF TO cl_appointment.
  DATA ls_participant TYPE scspart.
  DATA lv_address TYPE swc_object.
  DATA ls_address_container LIKE swcont OCCURS WITH HEADER LINE.
  DATA lt_text TYPE so_txttab.
  DATA ls_text LIKE LINE OF lt_text.
  DATA lv_location LIKE scsappt-room.
  DATA lo_send_request TYPE REF TO cl_bcs.
  DATA lv_sent_to_all TYPE os_boolean.

  CREATE OBJECT lo_appointment.

* Add multiple attendees
  CLEAR ls_participant.
  swc_create_object lv_address 'ADDRESS' space.
  swc_set_element ls_address_container 'AddressString' 'email@email.com'.
  swc_set_element ls_address_container 'TypeId' 'U'.
  swc_call_method lv_address 'Create' ls_address_container.
  CHECK sy-subrc 0.

* * get key and type of object
  swc_get_object_key lv_address ls_participant-objkey.
  CHECK sy-subrc 0.
  swc_get_object_type lv_address ls_participant-objtype.
  CHECK sy-subrc 0.
  MOVE sccon_part_sndmail_with_ans TO ls_participant-send_mail.
  ls_participant-comm_mode 'INT'.
  lo_appointment->add_participantparticipant ls_participant ).

* Sample Appointment for All-Day-Event
  lo_appointment->set_datedate_from fini
                            date_to ffin ).

* Make appointment appear "busy"
  lo_appointment->set_busy_valuesccon_busy_busy ).

* Set Location
  lo_appointment->set_location_string'Location' ).

* Set Organizer
  lo_appointment->set_organizersy-uname ).

* "Type of Meeting" (value picked from table SCAPPTTYPE)
  lo_appointment->set_type'ABSENT' ).

* Make this an all day event
  lo_appointment->set_view_attributesshow_on_top 'X').

* Set Meeting body text
  ls_text 'This is the Body Text of the Appointment'.
  APPEND ls_text TO lt_text.
  lo_appointment->set_textlt_text ).

* Set Meeting Subject
  lo_appointment->set_title'This is the Appointment Subject' ).

* Important to set this one to space. Otherwise SAP will send a not user-friendly e-mail
  lo_appointment->savesend_invitation space ).

* Now that we have the appointment, we can send a good one for outlook by switching to BCS
  lo_send_request lo_appointment->create_send_request).

* don't request read/delivery receipts
  lo_send_request->set_status_attributesi_requested_status 'N'
                                          i_status_mail 'N' ).

* Send it to the world
  lv_sent_to_all lo_send_request->sendi_with_error_screen 'X' ).

  COMMIT WORK AND WAIT.

Como veis el código es muy sencillo. Si lo ejecutamos veremos como nos llega una cita a nuestro Outllook, o al de las personas que pongamos como destinatarios de la misa.


Como reto o duda que planteo, estoy intentando que en la misma cita puedan ir adjuntos documentos (Por ejemplo PDF). Aun no lo he conseguido, pero os animo a intentarlo y si sois capaces a compartirlo con todo el mundo.

No hay comentarios:

Publicar un comentario