Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

SAP BDS - Template Based Word Integration

Former Member
0 Likes
1,651

Hi,

I am having requirement of integration with Microsoft Word.

There will be set of letter templates in the Word document for quotation. I need to create dynamic documents with reference to thse templates kinda mail merge and present it to user.

User might change the data in the document and the changed data shd be saved back.

I am thinking of putting these document templates in BDS and retrieve/populate them using mail merge interface.

I guess there are some methods as well to save the document data back to BDS.

But i am not getting how shd I start with BDS. What kind of config is needed to start with BDS ? How do we store the template documents on BDS server ? I am looking for kind of functionality as that of SAPRDEMO_MAILMERGE_INTERFACE

Technical help from BDS perspective will be helpful.

Thanks

Hi,

I am having requirement of integration with Microsoft Word.

There will be set of letter templates in the Word document for quotation. I need to create dynamic documents with reference to thse templates kinda mail merge and present it to user.

User might change the data in the document and the changed data shd be saved back.

I am thinking of putting these document templates in BDS and retrieve/populate them using mail merge interface.

I guess there are some methods as well to save the document data back to BDS.

But i am not getting how shd I start with BDS. What kind of config is needed to start with BDS ? How do we store the template documents on BDS server ? I am looking for kind of functionality as that of SAPRDEMO_MAILMERGE_INTERFACE

Technical help from BDS perspective will be helpful.

Thanks

2 REPLIES 2
Read only

Former Member
0 Likes
981

Hi,

Please revard if useful. And look at the sap demo program

SAPRDEMO_DOI_BDS or below is a sample code.

*STEP 1 OPEN BDS INSTANCE

DATA: LINK_SERVER TYPE REF TO I_OI_LINK_SERVER.

TYPES: DOCUMENT_LIST TYPE DOCUMENT_DESCR OCCURS 0.

DATA: FACTORY TYPE REF TO I_OI_DOCUMENT_FACTORY.

DATA: DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY.

DATA: DOCUMENT_MIMETYPE TYPE BAPICOMPON-MIMETYPE.

DATA: BDS_INSTANCE TYPE REF TO CL_BDS_DOCUMENT_SET.

TYPES: T_URL LIKE BAPIURI-URI.

DATA: DESCR TYPE DOCUMENT_DESCR.

DATA: DOCUMENTS TYPE DOCUMENT_LIST,

DOCUMENT_TYPE(80) VALUE SOI_DOCTYPE_WORD97_DOCUMENT,

DOCUMENT_FORMAT(80) TYPE C,

DOC_URL TYPE T_URL,

DATA_TABLE TYPE SBDST_CONTENT,

DATA_SIZE TYPE I,

RETCODE TYPE T_OI_RET_STRING.

FORM PRINT_CONT USING P_DOCNAME.

PERFORM OPEN_BDSINSTANCE.

PERFORM REFRESH_LINKS.

REFRESH DOCUMENTS.

CALL METHOD CL_GUI_CFW=>DISPATCH.

DESCR-DOCUMENT_NAME = P_DOCNAME.

DESCR-DOCUMENT_ID = 'YMMPU'.

APPEND DESCR TO DOCUMENTS.

IF BDS_INSTANCE IS INITIAL.

CREATE OBJECT BDS_INSTANCE.

ENDIF. " IF bds_instance IS INITIAL.

PERFORM LOAD_DOCUMENT TABLES DOCUMENTS

CHANGING DOCUMENT_TYPE

DOCUMENT_FORMAT

DOC_URL.

IF NOT DOC_URL IS INITIAL.

CALL METHOD DOCUMENT->OPEN_DOCUMENT

EXPORTING DOCUMENT_URL = DOC_URL

OPEN_INPLACE = 'X'

NO_FLUSH = ' '

IMPORTING RETCODE = RETCODE.

CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.

CALL METHOD DOCUMENT->SAVE_DOCUMENT_TO_TABLE

IMPORTING RETCODE = RETCODE

CHANGING DOCUMENT_TABLE = DATA_TABLE

DOCUMENT_SIZE = DATA_SIZE.

CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.

CALL METHOD DOCUMENT->EXECUTE_MACRO

EXPORTING MACRO_STRING = 'R3UpdateTables'

IMPORTING RETCODE = RETCODE.

IF P_PRINT = 'X'.

DO P_NO TIMES.

CALL METHOD DOCUMENT->PRINT_DOCUMENT

EXPORTING

NO_FLUSH = ' '

PROMPT_USER = ' '

IMPORTING

RETCODE = RETCODE .

ENDDO. " DO p_no TIMES.

ENDIF. " IF p_print = 'X'.

CALL METHOD DOCUMENT->CLOSE_DOCUMENT

EXPORTING

NO_FLUSH = ' '

IMPORTING

RETCODE = RETCODE .

ELSE.

MESSAGE E010.

ENDIF. " IF NOT doc_url IS INITIAL.

PERFORM CLOSE_BDSINSTANCE.

ENDFORM. " print_contract

FORM OPEN_BDSINSTANCE.

IF FACTORY IS INITIAL.

CALL METHOD C_OI_FACTORY_CREATOR=>GET_DOCUMENT_FACTORY

IMPORTING FACTORY = FACTORY

RETCODE = RETCODE.

IF RETCODE NE C_OI_ERRORS=>RET_OK. EXIT. ENDIF.

CALL METHOD FACTORY->START_FACTORY

EXPORTING R3_APPLICATION_NAME = 'SAP Basis'

REGISTER_ON_CLOSE_EVENT = 'X'

REGISTER_ON_CUSTOM_EVENT = 'X'

IMPORTING RETCODE = RETCODE.

CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.

CALL METHOD FACTORY->GET_LINK_SERVER

IMPORTING LINK_SERVER = LINK_SERVER

RETCODE = RETCODE.

CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.

CALL METHOD LINK_SERVER->START_LINK_SERVER

IMPORTING RETCODE = RETCODE.

CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.

CALL METHOD FACTORY->GET_DOCUMENT_PROXY

EXPORTING DOCUMENT_TYPE = DOCUMENT_TYPE

IMPORTING DOCUMENT_PROXY = DOCUMENT

RETCODE = RETCODE.

CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.

ENDIF. " IF factory IS INITIAL.

ENDFORM. " OPEN_BDSINSTANCE

*STEP2 REFRESH LINKSS

FORM REFRESH_LINKS.

IF NOT LINK_SERVER IS INITIAL.

REFRESH ITAB.

CLEAR ITAB.

ITAB-COL1 = 'Contract :'.

APPEND ITAB.

CALL METHOD LINK_SERVER->ADD_TABLE_ITEM2

EXPORTING ITEM_NAME = 'Contract'

IMPORTING RETCODE = RETCODE

CHANGING DATA_TABLE = ITAB[].

ENDIF. " IF NOT link_server IS ...

ENDFORM.

&----


FORM LOAD_DOCUMENT TABLES DOCUMENTS

CHANGING DOCUMENT_TYPE TYPE C

DOCUMENT_FORMAT TYPE C

DOC_URL TYPE T_URL.

  • Tables and WAs:

DATA: DOC_SIGNATURE TYPE SBDST_SIGNATURE,

WA_DOC_SIGNATURE LIKE LINE OF DOC_SIGNATURE,

DOC_COMPONENTS TYPE SBDST_COMPONENTS,

WA_DOC_COMPONENTS LIKE LINE OF DOC_COMPONENTS,

DOC_PROPERTIES TYPE SBDST_PROPERTIES,

DOC_URIS TYPE SBDST_URI,

WA_DOC_URIS LIKE LINE OF DOC_URIS.

  • IDs:

DATA: DOC_CLASSNAME TYPE SBDST_CLASSNAME VALUE 'CONTRACT',

DOC_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE 'OT',

DOC_OBJECT_KEY TYPE SBDST_OBJECT_KEY VALUE

'YMMPU',

DOC_MIMETYPE LIKE BAPICOMPON-MIMETYPE.

READ TABLE DOCUMENTS INDEX 1 INTO DESCR.

IF SY-SUBRC EQ 0.

CLEAR: WA_DOC_SIGNATURE, WA_DOC_COMPONENTS, WA_DOC_URIS.

REFRESH: DOC_SIGNATURE, DOC_COMPONENTS, DOC_URIS.

WA_DOC_SIGNATURE-PROP_NAME = 'DESCRIPTION'.

WA_DOC_SIGNATURE-PROP_VALUE = DESCR-DOCUMENT_NAME.

APPEND WA_DOC_SIGNATURE TO DOC_SIGNATURE.

CALL METHOD BDS_INSTANCE->GET_INFO

EXPORTING CLASSNAME = DOC_CLASSNAME

CLASSTYPE = DOC_CLASSTYPE

OBJECT_KEY = DOC_OBJECT_KEY

CHANGING COMPONENTS = DOC_COMPONENTS

SIGNATURE = DOC_SIGNATURE

EXCEPTIONS NOTHING_FOUND = 1

ERROR_KPRO = 2

INTERNAL_ERROR = 3

PARAMETER_ERROR = 4

NOT_AUTHORIZED = 5

NOT_ALLOWED = 6.

IF SY-SUBRC NE 0 AND SY-SUBRC NE 1.

MESSAGE E016.

ENDIF. " IF sy-subrc NE 0 AND ...

IF SY-SUBRC = 1.

MESSAGE E017.

ENDIF. " IF sy-subrc = 1.

CALL METHOD BDS_INSTANCE->GET_WITH_URL

EXPORTING CLASSNAME = DOC_CLASSNAME

CLASSTYPE = DOC_CLASSTYPE

OBJECT_KEY = DOC_OBJECT_KEY

CHANGING URIS = DOC_URIS

SIGNATURE = DOC_SIGNATURE

EXCEPTIONS NOTHING_FOUND = 1

ERROR_KPRO = 2

INTERNAL_ERROR = 3

PARAMETER_ERROR = 4

NOT_AUTHORIZED = 5

NOT_ALLOWED = 6.

IF SY-SUBRC NE 0 AND SY-SUBRC NE 1.

MESSAGE E016.

ENDIF. " IF sy-subrc NE 0 AND ...

IF SY-SUBRC = 1.

MESSAGE E017.

ENDIF. " IF sy-subrc = 1.

READ TABLE DOC_COMPONENTS INTO WA_DOC_COMPONENTS INDEX 1.

READ TABLE DOC_URIS INTO WA_DOC_URIS INDEX 1.

DOC_MIMETYPE = WA_DOC_COMPONENTS-MIMETYPE.

DOCUMENT_MIMETYPE = DOC_MIMETYPE.

DOC_URL = WA_DOC_URIS-URI.

CASE DOC_MIMETYPE.

WHEN 'application/x-rtf' OR 'text/rtf'.

DOCUMENT_FORMAT = SOI_DOCFORMAT_RTF.

WHEN 'application/x-oleobject'.

DOCUMENT_FORMAT = SOI_DOCFORMAT_COMPOUND.

WHEN 'text/plain'.

DOCUMENT_FORMAT = SOI_DOCFORMAT_TEXT.

WHEN OTHERS.

DOCUMENT_FORMAT = SOI_DOCFORMAT_NATIVE.

ENDCASE. " CASE doc_mimetype.

ENDIF. " IF sy-subrc EQ 0.

ENDFORM. " LOAD_DOCUMENT

FORM CLOSE_BDSINSTANCE.

IF NOT DOCUMENT IS INITIAL.

FREE DOCUMENT.

ENDIF. " IF NOT document IS INITIAL.

IF NOT LINK_SERVER IS INITIAL.

CALL METHOD LINK_SERVER->STOP_LINK_SERVER

IMPORTING RETCODE = RETCODE.

FREE LINK_SERVER.

ENDIF. " IF NOT link_server IS ...

IF NOT FACTORY IS INITIAL.

CALL METHOD FACTORY->STOP_FACTORY IMPORTING RETCODE = RETCODE.

FREE FACTORY.

ENDIF. " IF NOT factory IS INITIAL.

IF NOT BDS_INSTANCE IS INITIAL.

FREE BDS_INSTANCE.

ENDIF. " IF NOT bds_instance IS ...

ENDFORM. " close_bdsinstance

Read only

0 Likes
981

This message was moderated.