ABAP & DOI NACE OUTPUT

  ABAP上传文件的TCODE:SMW0, OAOR

 

     现在遇到的业务需求是在VA03的订单通过SAP标准的OUTPUT配置打印出order confirmation以后,再打印公司的文字条款内容,WORD格式的两页纸。

 

  最开始想到的实现方式是在NACE->V1 里面的配置中,是否可以配置两个SMARTFORM连续打印。我推测是可以的,因此把同一个SMARTFORM配两次测试了一下,确实可以打印两份。ZSDFM005 我单独COPY一份出来命名为ZSDFM005A以后修改了第二个FORM当中的内容,但是打印出来的是同样的两份。

 

  第二种解决的思路是:ORDER CONFIRMATION采用SMARTFORM格式打印,后面的条款内容采用PDF格式打印,需要自己写PDF的打印逻辑。由于SMW0 OAOR都是上传DOC、EXCEL等OFFICE相关的文件类型,PDF采用什么方式上传服务器,还不知道。当然,我也可以费点周折,将DOC的文档上传后,用程序将DOC文件转换为临时的PDF再去打印。问题在于,不知道怎么写PDF的打印,自己独立的写ABAP打印程序,还是参考RVADOR01来写打印,或者系统本身就支持标准的ROUTINE来打印PDF(OUTPUT TYPE:EMAIL配置中其实是将SMARTFORM以PDF输出后发送给用户进行确认)。

 

  后来问了一个同事,她的建议是调用WORD文件的宏进行打印,我感觉这个方法太妙了,而且实现起来简单。所以,就找了一下DOI的方式。也确实能够实现预期的需求了。不过利用WORD或EXCEL的宏,前提都是要求用户的EXCEL安全级别设置为中或低。FUNCTION认为这个对用户的要求太高,不推荐这种方式去解决问题。

  以前就写过一个报表,我测试OK,用户始终说格式有问题,检查宏的代码也没找到原因。后来才发现是她的EXCEL安全级别限制了宏根本无法运行,所以导出的格式比较丑。

  DOI的方式虽然简洁,不过宏的运行对用户本地的EXCEL文件安全性设置有要求。

 

-----NACE配置-------------------------

 

 

Output Type     ZBA1         

Application     V1            Sales
Transm. Medium

Layout module

 

   Program                   ZSD_RVADOR01
   Form Routine              ENTRY
   Form

   PDF/Smartform Form        ZSDFM005                          Form Type smartforms

 

   Program                   ZSD_RVADOR01
   Form Routine              ENTRY
   Form                      ZSDFM005

 

-----------------------------------

"PRINT DOC USE MACRO
data mycontrol  type ref to i_oi_container_control.
data mydocument type ref to i_oi_document_proxy.
data mycontainer type ref to cl_gui_custom_container.

  call method c_oi_container_control_creator=>get_container_control
    importing
      control = mycontrol.

  create object mycontainer
    exporting
      container_name = 'MYCONTAINER'.

  call method mycontrol->init_control
    exporting
      r3_application_name = 'SAP ECC'
      parent              = mycontainer
      inplace_enabled     = ' '
      no_flush            = 'X'.

    data: bds_instance type ref to cl_bds_document_set.
    data: doc_components type sbdst_components,
          doc_signature type sbdst_signature,
          wa_doc_signature like line of doc_signature,
          doc_uris type sbdst_uri,
          wa_doc_uris like line of doc_uris.
    data: item_url(256).

*    if doc_description is not initial.
      wa_doc_signature-prop_name = 'DESCRIPTION'.
      wa_doc_signature-prop_value = 'ORDER CONFIRMATION N/A TERMS'."doc_description.
      append wa_doc_signature to doc_signature.
*    endif.

    create object bds_instance.
    call method bds_instance->get_info
      exporting
        classname  = 'HRFPM_EXCEL_STANDARD'"doc_classname
        classtype  = 'OT'"doc_classtype
        object_key = 'ZSD_ORDER_CONFIRMATION'"doc_object_key
      changing
        components = doc_components
        signature  = doc_signature.

    call method bds_instance->get_with_url
      exporting
        classname  = 'HRFPM_EXCEL_STANDARD'"doc_classname
        classtype  = 'OT'"doc_classtype
        object_key = 'ZSD_ORDER_CONFIRMATION'"doc_object_key
      changing
        signature  = doc_signature
        uris       = doc_uris.

    free bds_instance.

    read table doc_uris into wa_doc_uris index 1.

    item_url = wa_doc_uris-uri.

    call method mycontrol->get_document_proxy
      exporting
        document_type  = SOI_DOCTYPE_WORD_DOCUMENT"soi_doctype_excel_sheet
      importing
        document_proxy = mydocument.

    call method mydocument->open_document
      exporting
        open_inplace = 'X'
        document_url = item_url.

  CALL METHOD mydocument->execute_macro
    EXPORTING
      macro_string = '模块.macro1'
     .

 

 

-----------------------------------

 

以下为转载:

 

http://sapjava.javaeye.com/blog/419835

 

 Desktop Office Integration
用来集成支持OLE2的应用程序到SAP系统中.它提供了OO的操作方法对应用程序如EXCEL,WORLD等进行打开,修改等操作.目前在一个报表中使用EXCEL作为模板,然后将数据填充到EXCEL中的指定位置中.

首先使用Tcode: OAOR Business Document Navigator将EXCEL模板上传到系统中. 然后使用cl_bds_document_set类获取文档, 再用DOI的相关来操作EXCEL.

DOI参考:http://help.sap.com/saphelp_46c/helpdata/en/21/b53138e1ba11d2bdbe080009b4534c/frameset.htm

系统示例:SAPRDEMOEXCELINTEGRATION2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值