quinta-feira, 16 de outubro de 2014

Desafio DataGeek III: SAP Lumira

A SAP lançou um desafio para toda a comunidade explorar o SAP Lumira.
O desafio é o SAP DataGeek III e você pode conferir todos os detalhes no próprio site:http://www.sap.com/datageek

Também foi postado um vídeo de divulgação no Youtube, o vídeo está sensacional!

O SAP Lumira é uma ferramenta para análise de dados, muito poderosa, com interface simples e intuitiva.
O desafio consiste basicamente em pegar uma massa de dados, analisar e descobrir os segredos e relações que os dados ocultam.

Eu resolvi entrar na brincadeira e descobrir como o SAP Lumira funcionava. Para tanto, decidi analisar os dados do atual Governo do meu estado, Rio Grande do Sul. Usei os dados públicos disponibilizados no Portal Transparência do RS. Baixei os arquivos .CSV e criei os datasets no SAP Lumira para começar a análise.

Completei a tarefa e postei o resultado no blog do SAP Lumira (SAP Lumira) para participar do desafio.
O resultado completo pode ser conferido aqui: Data Geek III Challenge - Analysing Government Expenses and Investments

Ainda dá tempo para participar! O desafio vai até o dia 15 de novembro.
Vá ao site, leia sobre o desafio, baixe o SAP Lumira e comece a brincadeira

segunda-feira, 18 de agosto de 2014

O ALV mais fácil do universo!


Tem ABAP que ainda faz ALV com função. Alguns têm fobia de ALV OO, outros nem sabem que existe.
Já ouvi muita gente falando "descobri uma forma nova de fazer ALV, demora mais e é mais difícil porque usa objetos, mas fica melhor".
Bom, tem um jeito ainda mais fácil de fazer ALV OO. Basta usar a classe CL_SALV_TABLE.

Nunca foi tão fácil...
Veja o exemplo abaixo:

SAP Inside Track 2014 – São Leopoldo/RS

O SAP Inside Track é um evento mundial da SAP para troca de experiências e conhecimento. Não bastasse o fato de poder aprender muita coisa nova, o evento é de graça, basta inscrever-se no site: http://shar.es/1nG2eB

No evento deste ano que ocorrerá no SAP Labs, em São Leopoldo/RS, teremos sessões sobre SAP HANA (muita coisa de HANA!), SAPUI5, SAP HCM e Success Factors, SAP MES e Match Insights (o famoso sistema que a Seleção da Alemnha usa).

O evento estará muito bom! Para quem não puder comparecer, o evento será transmitido ao vivo online pelo SAP Connect.

Confira a agenda completa: http://scn.sap.com/docs/DOC-57267

quarta-feira, 7 de maio de 2014

Enviar email com anexos usando classe standard CL_BCS

Enviar email usando a classe CL_BCS é muito fácil, correto?
Mas e enviar email com arquivos anexos? Tem como fazer com a CL_BCS?
Sim, tem como e é barbada também. Precisamos apenas de um método a mais para anexar arquivos no nosso email. Ah, e claro, precisamos preencher uma tabela interna com o conteúdo do arquivo que será anexado ao email.

Segue exemplo abaixo:


*&---------------------------------------------------------------------*
*& Report ZSEND_EMAIL_ATTACHMENT
*&
*&---------------------------------------------------------------------*
*& ABAP Sample Code
*& Send email with attachments using CL_BCS
*&
*& Maurício Lauffer - Brazil - 04.16.2014
*& http://www.linkedin.com/in/mauriciolauffer
*&
*& This sample explains how to send an email with attachment
*& using class: CL_BCS
*&
*&---------------------------------------------------------------------*
REPORT zsend_email_attachment.
CONSTANTS:
  gc_subject TYPE so_obj_des VALUE 'ABAP Email (attachment) with CL_BCS', " Email subject
  gc_email_to TYPE adr6-smtp_addr VALUE 'frodo.baggins@lotr.com', " Valid email
  gc_text TYPE soli VALUE 'Hello world! My first ABAP email with attachment!', " Text used into the email body
  gc_type_raw TYPE so_obj_tp VALUE 'RAW', " Email type
  gc_att_type TYPE soodk-objtp VALUE 'PDF', " Attachment type
  gc_att_subject TYPE sood-objdes VALUE 'Document in PDF'. " Attachment title
DATA:
  gt_text TYPE soli_tab, " Table which contains email body text
  gt_attachment_hex TYPE solix_tab, " Table which contains the attached file
  gv_sent_to_all TYPE os_boolean, " Receive the information if email was sent
  gv_error_message TYPE string, " Used to get the error message
  go_send_request TYPE REF TO cl_bcs, " Email object
  go_recipient TYPE REF TO if_recipient_bcs, " Who will receive the email
  go_sender TYPE REF TO cl_sapuser_bcs, " Who is sending the email
  go_document TYPE REF TO cl_document_bcs, " Email body
  gx_bcs_exception TYPE REF TO cx_bcs.
TRY.
    "Create send request
    go_send_request = cl_bcs=>create_persistent( ).
    "Email FROM...
    go_sender = cl_sapuser_bcs=>create( sy-uname ).
    "Add sender to send request
    go_send_request->set_sender( i_sender = go_sender ).
    "Email TO...
    go_recipient = cl_cam_address_bcs=>create_internet_address( gc_email_to ).
    "Add recipient to send request
    go_send_request->add_recipient(
      EXPORTING
        i_recipient = go_recipient
        i_express = abap_true
    ).
    "Email BODY
    APPEND gc_text TO gt_text.
    go_document = cl_document_bcs=>create_document(
                    i_type = gc_type_raw
                    i_text = gt_text
                    i_length = '12'
                    i_subject = gc_subject ).
    "You should populate the table gt_attachment_hex
    "with the binary data from your file!
    "For example: gt_attachment_hex = binary_data_from_file.
    "Attachment
    go_document->add_attachment(
      EXPORTING
        i_attachment_type = gc_att_type
        i_attachment_subject = gc_att_subject
        i_att_content_hex = gt_attachment_hex
    ).
    "Add document to send request
    go_send_request->set_document( go_document ).
    "Send email and get the result
    gv_sent_to_all = go_send_request->send( i_with_error_screen = abap_true ).
    IF gv_sent_to_all = abap_true.
      WRITE 'Email sent!'.
    ENDIF.
    "Commit to send email
    COMMIT WORK.
    "Exception handling
  CATCH cx_bcs INTO gx_bcs_exception.
    gv_error_message = gx_bcs_exception->get_text( ).
    WRITE gv_error_message.
ENDTRY.









Easy like a sunday morning...

Link do código no GitHub:
https://github.com/mauriciolauffer/ABAP/blob/master/Email/send_email_with_attachment.abap


quinta-feira, 17 de abril de 2014

Enviar email usando classe standard CL_BCS

Para enviar email com um programa ABAP é muito fácil, basta utilizar uma classe standard da SAP, a classe CL_BCS.
Ela é uma classe simples de utilizar, até mesmo para aqueles que ainda não estão acostumados com OO (ainda existe???).

Bom, vamos ao exemplo:




*&---------------------------------------------------------------------*
*& Report ZSEND_EMAIL
*&
*&---------------------------------------------------------------------*
*& ABAP Sample Code
*& Send email with CL_BCS
*&
*& Maurício Lauffer - Brazil - 04.15.2014
*& http://www.linkedin.com/in/mauriciolauffer
*&
*& This sample explains how to send an email using class: CL_BCS
*&
*&---------------------------------------------------------------------*
REPORT zsend_email.
CONSTANTS:
  gc_subject TYPE so_obj_des VALUE 'ABAP Email with CL_BCS', " Email subject
  gc_email_to TYPE adr6-smtp_addr VALUE 'frodo.baggins@lotr.com', " Valid email
  gc_text TYPE soli VALUE 'Hello world! My first ABAP email!', " Text used into the email body
  gc_type_raw TYPE so_obj_tp VALUE 'RAW'. " Email type
DATA:
  gt_text TYPE soli_tab, " Table which contains email body text
  gv_sent_to_all TYPE os_boolean, " Receive the information if email was sent
  gv_error_message TYPE string, " Used to get the error message
  go_send_request TYPE REF TO cl_bcs, " Email object
  go_recipient TYPE REF TO if_recipient_bcs, " Who will receive the email
  go_sender TYPE REF TO cl_sapuser_bcs, " Who is sending the email
  go_document TYPE REF TO cl_document_bcs, " Email body
  gx_bcs_exception TYPE REF TO cx_bcs.
TRY.
    "Create send request
    go_send_request = cl_bcs=>create_persistent( ).
    "Email FROM...
    go_sender = cl_sapuser_bcs=>create( sy-uname ).
    "Add sender to send request
    go_send_request->set_sender( i_sender = go_sender ).
    "Email TO...
    go_recipient = cl_cam_address_bcs=>create_internet_address( gc_email_to ).
    "Add recipient to send request
    go_send_request->add_recipient(
      EXPORTING
        i_recipient = go_recipient
        i_express = abap_true
    ).
    "Email BODY
    APPEND gc_text TO gt_text.
    go_document = cl_document_bcs=>create_document(
                    i_type = gc_type_raw
                    i_text = gt_text
                    i_length = '12'
                    i_subject = gc_subject ).
    "Add document to send request
    go_send_request->set_document( go_document ).
    "Send email and get the result
    gv_sent_to_all = go_send_request->send( i_with_error_screen = abap_true ).
    IF gv_sent_to_all = abap_true.
      WRITE 'Email sent!'.
    ENDIF.
    "Commit to send email
    COMMIT WORK.
    "Exception handling
  CATCH cx_bcs INTO gx_bcs_exception.
    gv_error_message = gx_bcs_exception->get_text( ).
    WRITE gv_error_message.
ENDTRY.




Agora é copiar/colar e começar a brincar.
Barbadinha!

Link do código no GitHub:
https://github.com/mauriciolauffer/ABAP/blob/master/Email/send_email.abap