Aug 12 2010

Email from SAP - class replaces SO_OBJECT_SEND

SO_OBJECT_SEND has been replaced by CL_BCS and CL_DOCUMENT_BCS. Less code is required to create and send email messages through Business Communication Services aka SAPOffice and SAPconnect. Here is a simple example of sending an email message from NetWeaver using the classes.

Full documentation is available on SDN here.

Note: to send email from SAP your user profile (system > user profile > own data) must have an email address set up so the return address can be detemined.


* Send email from SAP using BCS classes
* Peter Chapman - March 2009 - Final

REPORT zr_email.

DATA:
lv_message TYPE bcsy_text,
lv_send_result TYPE c,

lo_receiver TYPE REF TO if_recipient_bcs,

lo_email TYPE REF TO cl_bcs,
lo_email_body TYPE REF TO cl_document_bcs,

lx_exception TYPE REF TO cx_bcs.

APPEND ‘<font color=”#0000FF”>Your message is reddy!</font>’ TO lv_message.

TRY.
lo_email = cl_bcs=>create_persistent( ).

lo_email_body = cl_document_bcs=>create_document(
i_type = ‘HTM’
i_text = lv_message
i_subject = ‘Message from SAP BCS’ ).

PERFORM add_attachment USING lo_email_body.

lo_email->set_document( lo_email_body ).

lo_receiver = cl_cam_address_bcs=>create_internet_address( ’someone@somewhere.com’ ).
lo_email->add_recipient( i_recipient = lo_receiver
i_express = ‘X’ ).

lo_email->set_send_immediately( ‘X’ ).

lo_email->send( EXPORTING
i_with_error_screen = ‘X’
RECEIVING
result = lv_send_result ).

WRITE: / ‘Success flag:’, lv_send_result.

COMMIT WORK.

CATCH cx_bcs INTO lx_exception.

WRITE:/ ‘Message sending failed:’, lx_exception->error_type.

ENDTRY.

*&—————————–*
*& Form add_attachment
*&—————————–*

FORM add_attachment USING po_attachee TYPE REF TO cl_document_bcs.

DATA:
lt_attachment TYPE soli_tab,
lx_exception TYPE REF TO cx_bcs.

APPEND ‘<html><head/><body><font color=”#0000FF”>Your attachment is bluey!</font></body></html>’ TO lt_attachment.

TRY.

po_attachee->add_attachment(
EXPORTING
i_attachment_type = ‘HTM’
i_attachment_subject = ‘My Attachment’
i_att_content_text = lt_attachment ).

CATCH cx_bcs INTO lx_exception.

WRITE:/ ‘Attachment failed:’, lx_exception->error_type.

ENDTRY.

ENDFORM. “add_attachment


Aug 12 2010

Upload documents to the MIME Repository

Use program BSP_UPDATE_MIMEREPOS to upload files into the MIME Repository at a specific path location.

Select “Process Single File Only” unless you want your entire directory contents sitting in a transport!


Aug 12 2010

Read and convert a MIME object xstring to SOLI table data

If you are working in WebDynpro with PDF forms or Office Documents, you may want to store templates in the Mime repository and then manipulate them before sending them by email, or attaching them to objects using object services.

You need to read the Mime object, and convert it from xstring into a SOLI table. The following code makes that easy and quick.


REPORT zzzzzzz.

DATA:
mime_repository TYPE REF TO if_mr_api,
mime_xstring TYPE xstring,
mime_length TYPE i,
mime_soli TYPE soli_tab,
url TYPE string VALUE ‘/SAP/PUBLIC/BC/mymime.doc’.

mime_repository ?= cl_mime_repository_api=>get_api( ).

CALL METHOD mime_repository->get
EXPORTING
i_url = url
IMPORTING
e_content = mime_xstring.

CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’
EXPORTING
buffer = mime_xstring
IMPORTING
output_length = mime_length
TABLES
binary_tab = mime_soli.

* The MIME object is now in mime_soli ready for SAP Office processing.


Aug 12 2010

Upload an attachment using object services

Object services are accessed from the drop down control in the top left of many SAP transactions such as XD02 Maintain Customer. One feature is the ability to attach documents uploaded from your PC.

It is surprisingly difficult to get under the covers of the object classes driving object services. I am developing an application that collects signatures scrawled on a tablet PC using a Flex control embedded in a web dynpro. Once collected, a signed document will be attached to the underlying SAP object and accessible through object services.

As a first step, I wanted to upload a document and attach it using a custom program. Here is the source code of my solution.


REPORT zzzzzzzz.

PARAMETERS:
p_kunnr TYPE kunnr.

DATA:
ls_object_identity TYPE borident,
lo_gos TYPE REF TO cl_gos_document_service.

ls_object_identity-objkey = p_kunnr. “e.g. ‘0000954410′.
ls_object_identity-objtype = ‘KNA1′.

CREATE OBJECT lo_gos.

CALL METHOD lo_gos->create_attachment
EXPORTING
is_object = ls_object_identity
IMPORTING
ep_attachment = ls_object_identity-objkey.

COMMIT WORK.

In the next post, I will show how to load binary data from a table as an attached file object.


Aug 12 2010

ABAP Proper Case Regex

I need to pull full user names from ADRP for an audit report, but the case is all over the place. This piece of code converts a character string to proper case (first letter uppercase). I wanted to handle Mc and Mac too, but ABAP implements the Posix regex syntax, which has no support for back referencing. If anyone knows a regular expression to catch the first character after Mac then please post a response.

report zzzzzzzz.

data:
li_ofs type i,
lv_name(30).

lv_name = ‘PETER CHAPMAN’.

write: / lv_name.

translate lv_name to lower case.
while sy-subrc = 0.
translate lv_name+li_ofs(1) to upper case.
find regex ‘\b[a-z]‘ in lv_name match offset li_ofs.
endwhile.

write: / lv_name.