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-POOLS: sccon.

  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 0 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_participant( participant = ls_participant ).

* Sample Appointment for All-Day-Event
  lo_appointment->set_date( date_from = fini
                            date_to = ffin ).

* Make appointment appear "busy"
  lo_appointment->set_busy_value( sccon_busy_busy ).

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

* Set Organizer
  lo_appointment->set_organizer( sy-uname ).

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

* Make this an all day event
  lo_appointment->set_view_attributes( show_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_text( lt_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->save( send_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_attributes( i_requested_status = 'N'
                                          i_status_mail = 'N' ).

* Send it to the world
  lv_sent_to_all = lo_send_request->send( i_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

Integración SAP

Cuando hablamos de SAP como sistema integrado que cubre toda la casuística de nuestro negocio estamos siendo bastante osados. Casi cualquier...