Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7190645
  • 博文数量: 655
  • 博客积分: 10264
  • 博客等级: 上将
  • 技术积分: 8278
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-04 17:47
个人简介

ABAP顾问

文章分类

全部博文(655)

文章存档

2017年(2)

2014年(8)

2013年(3)

2012年(2)

2011年(18)

2010年(102)

2009年(137)

2008年(274)

2007年(134)

分类:

2008-12-04 22:14:02

很多兄弟问我如何在SAP里面实现对本地OCX的调用,希望能有个例子,不才写了一个在GUI里面调用Flash播放器的例子,希望能抛砖引玉,如果有好的想法,请不吝留言,让大家分享一下,谢谢!
 
REPORT  z_barry_flash NO STANDARD PAGE HEADING.
 
DATA: cont TYPE REF TO cl_gui_custom_container .
 
CLASS cl_flash DEFINITION DEFERRED .
DATA: o_flash TYPE REF TO cl_flash .
 
*---------------------------------------------------------------------*
* CLASS cl_flash DEFINITION
*---------------------------------------------------------------------*
CLASS cl_flash DEFINITION INHERITING FROM cl_gui_control .
  PUBLIC SECTION .
    METHODS:
      constructor
        IMPORTING
          value(shellstyle) TYPE i OPTIONAL
          value(disp_mode) TYPE i OPTIONAL
          value(life_time) TYPE i OPTIONAL
          value(name) TYPE string OPTIONAL
        EXCEPTIONS
          cntl_error
          cntl_install_error .
ENDCLASS .                    "cl_flash DEFINITION
 
*----------------------------------------------------------------------*
*       CLASS cl_flash IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_flash IMPLEMENTATION .
  METHOD constructor.
    DATA: ctrl_name(80) TYPE c ,
    wf_clsid(100) TYPE c .
    IF NOT cl_gui_object=>activex IS INITIAL .
      wf_clsid = '{D27CDB6E-AE6D-11cf-96B8-444553540000}' .
    ELSE .
      RAISE cntl_error .
    ENDIF .
    CALL METHOD super->constructor
      EXPORTING
        clsid             = wf_clsid
        parent            = cont
        shellstyle        = shellstyle
        lifetime          = life_time
        name              = name
      EXCEPTIONS
        cntl_system_error = 1
        OTHERS            = 2.
    CASE sy-subrc .
      WHEN 1 .
        RAISE cntl_install_error .
      WHEN 2 .
        RAISE cntl_error .
    ENDCASE .
    CALL METHOD set_property
      EXPORTING
        property          = 'Movie'
        value             = 'c:\test.swf'
      EXCEPTIONS
        cntl_system_error = 1
        cntl_error        = 2
        OTHERS            = 3.
    CALL METHOD cl_gui_cfw=>subscribe
      EXPORTING
        ref     = me
        shellid = me->h_control-shellid
      EXCEPTIONS
        OTHERS  = 1.
    IF sy-subrc NE 0 .
      RAISE cntl_error .
    ENDIF .
  ENDMETHOD . "constructor
ENDCLASS . "cl_flash IMPLEMENTATION
 
START-OF-SELECTION.
  CALL SCREEN 100 .
 
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN'.
  IF cont IS INITIAL.
    CREATE OBJECT cont
      EXPORTING
        container_name = 'CON1'.
    CREATE OBJECT o_flash .
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
阅读(8347) | 评论(13) | 转发(0) |
给主人留下些什么吧!~~

qdbarry2008-12-06 08:59:29

这样的OCX跟SAP服务器没有关系的,都是在本地运行。 也就是说,如果你想要在SAPGUI里面用OCX控件,必须先在本地注册 另:你根本不需要用SOLE去注册:)

chinaunix网友2008-12-05 23:58:35

白大哥的很多例子做的很好,blog我收藏的,呵呵。 据我所知IE 会自动从Web服务器将控件下载并安装的,所以没有问题。 我之前以为SAP中用SOLE注册控件时,本机的ocx将被自动上传到服务器某目录,如果其他未注册该ocx的客户端运行含ocx程序,也会有一个自动安装的过程。测试下来感觉不是这样的,应该是相关的客户端本机都要先注册好ocx控件。 不过白大哥没有碰到此类问题,会不会你的版本比较高级,已经对此进行了改进?呵呵~~~

qdbarry2008-12-05 23:19:41

哦,这样啊,我做了几个OCX都没有这样的问题。 有在网上下了,有用VC自己做的。 你加到HTML试试,看看是什么问题。

chinaunix网友2008-12-05 23:11:14

我写了个类似的程序,调用自己的一个视频控件,classid填写的是该ocx在我电脑上的classid。 这个程序在我这里运行,一切正常,可是如果此时,别的用户在其他电脑上运行该程序,会有Runtime Error的,大概因为它的SAPGUI识别不了这个控件,我这里的classid不是他那里的classid。 我本来以为通过SOLE注册下,他也能正常运行,结果试了还是不行。呵呵,可能“a abaper” 说的是就是解决办法:“不要使用CLSID,使用PROGID作为CLSID”

qdbarry2008-12-05 21:00:12

“如果是其他客户端运行同一程序,将会出现Runtime Error” 可否详细说一下?我没有测试到这个情况