关于HR组织架构用visio来展现

*&---------------------------------------------------------------------*
*& Report  rhstru00                                                    *
*&---------------------------------------------------------------------*
*& From SAP_BASIS Releases 6.20 report RHSTRU00 uses alv tree control. *
*& Old report is available under the name RHSTRU00_OLD.                *
*&---------------------------------------------------------------------*
REPORT  Y_TEST_HR_01 MESSAGE-ID PP                                .

TYPE-POOLS: ICON.

TABLES: OBJEC, T77EO, GDSTR, GDSET, PDSTR.

TYPES:  BEGIN OF T_NODE ,
           ID LIKE STRUC-SEQNR,
           PARENT LIKE STRUC-SEQNR,
           TREE_ID TYPE LVC_NKEY,
           TEXT(25),
           TEXT4(40),
           SHORT(14),
           OTYPE(2),
           REALO TYPE REALO,
           ISTAT(1),
           BEGDA(10),
           ENDDA(10),
           VISTAT(1),
           VBEGDA(10),
           VENDDA(10),
           PROZT(8),
           OBJID LIKE OBJEC-OBJID,
         END OF T_NODE.

TYPES:  BEGIN OF TYPE_TREC,
           KEY TYPE LVC_NKEY,
           ID  LIKE STRUC-SEQNR,
        END OF TYPE_TREC.

TYPES: BEGIN OF PARENT_STACK_LINE,
         LEVEL TYPE STRUC-LEVEL,
         ID LIKE STRUC-SEQNR,
       END OF PARENT_STACK_LINE.

*----------------------------------------------------------------------*
* error handling (for internal errors)
*----------------------------------------------------------------------*
* type for ABAP callstack
TYPES: BEGIN OF T_S_ABAP_CALLSTACK,
         MAINPROGRAM LIKE SY-REPID,
         INCLUDE LIKE SY-REPID,
         LINE TYPE I,
         EVENTTYPE LIKE ABDBG-LEVENTTYPE,
         EVENT LIKE ABDBG-LEVENT,
         FLAG_SYSTEM,
       END OF T_S_ABAP_CALLSTACK.

* variable for ABAP callstack
DATA: G_CALLSTACK TYPE STANDARD TABLE OF T_S_ABAP_CALLSTACK,
      G_CALLSTACK_WA TYPE T_S_ABAP_CALLSTACK.

* macro should never be called ;-)
DEFINE INTERNAL_ERROR.   "&1 action that lead to error
* get callstack
  CALL 'ABAP_CALLSTACK' ID 'DEPTH' FIELD 99
                        ID 'CALLSTACK' FIELD G_CALLSTACK.
* get current form/event
  READ TABLE G_CALLSTACK INTO G_CALLSTACK_WA INDEX 1.

  MESSAGE I001(AQ_AD_HOC) WITH G_CALLSTACK_WA-EVENT
                                   &1. "action.
END-OF-DEFINITION.


DATA: IT_NODE TYPE STANDARD TABLE OF T_NODE,
      IT_TAB  TYPE STANDARD TABLE OF T_NODE,
      WA_NODE TYPE T_NODE.

DATA: BEGIN OF WAOBJEC,
        STEXT LIKE OBJEC-STEXT,
        SHORT LIKE OBJEC-SHORT,
        REALO LIKE OBJEC-REALO,
        PLVAR LIKE OBJEC-PLVAR,
        OTYPE LIKE OBJEC-OTYPE,
        OBJID LIKE OBJEC-OBJID,
        BEGDA LIKE OBJEC-BEGDA,
        ENDDA LIKE OBJEC-ENDDA,
        ISTAT LIKE OBJEC-ISTAT,
        SEQNR LIKE STRUC-SEQNR,
      END OF WAOBJEC.

DATA: OK_CODE LIKE SY-UCOMM,
      SAVE_OK LIKE SY-UCOMM.

CLASS CL_GUI_OBJECT DEFINITION LOAD.

DATA: CONTROL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      ALV_TREE_CONTROL  TYPE REF TO CL_GUI_ALV_TREE,
      ALV_HTML_HEADER   TYPE REF TO CL_GUI_HTML_VIEWER,
      FIELDCATALOG      TYPE  STANDARD TABLE OF LVC_S_FCAT,
      HIERARCHY_HEADER  TYPE TREEV_HHDR.

DATA: LT_LIST_COMMENTARY TYPE SLIS_T_LISTHEADER,
      GS_VARIANT         TYPE DISVARIANT.

DATA: S_NODE TYPE LVC_NKEY.

DATA: OTYPE TYPE OTYPE.

DATA: ANSWER(1).

DATA: IT_TOOLBAR_EXCLUDING TYPE UI_FUNCTIONS.

DATA: EXCL_TAB TYPE TABLE OF SY-UCOMM.

DATA: IT_RECURSIONS TYPE STANDARD TABLE OF TYPE_TREC,
      EXIST_REC     TYPE FLAG_X.

DATA: REPID     LIKE SY-REPID,
      SEL_TABLE TYPE TABLE OF RSPARAMS.

DATA: G_OPTIMIZE_FLAG  TYPE FLAG VALUE ' ',               "note 768405
      G_OPTIMIZE_BUTTON TYPE SMP_DYNTXT.                    "#EC NEEDED

* parent handling
DATA: G_PARENT_STACK TYPE STANDARD TABLE OF PARENT_STACK_LINE,
      G_PARENT_STACK_WA TYPE PARENT_STACK_LINE.

DATA: LV_STRING TYPE STRING.
DATA: GX_ACC_MODE_ON TYPE ABAP_BOOL.

* Change On 2011-2-15
TYPES: BEGIN OF T_DATA,
        ID TYPE STRUC-SEQNR,
        PARENT TYPE STRUC-SEQNR,
        ONAME TYPE HRP1000-SHORT,
        SNAME TYPE HRP1000-SHORT,
        PNAME TYPE HRP1000-SHORT,
        ORGID TYPE HRP1000-OBJID,
        POSID TYPE HRP1000-OBJID,
        PERID TYPE HRP1000-OBJID,
        KNAME TYPE HRP1000-SHORT,
        KCCID TYPE HRP1000-OBJID,
        GRAPH TYPE I,
        IMAGEFILE TYPE CHAR40,
      END OF T_DATA.

DATA: GT_DATA TYPE STANDARD TABLE OF T_DATA.
DATA: WA_DATA TYPE T_DATA.

DATA: GV_VISIO_PATH TYPE STRING,
      GV_VISIO_PARA TYPE STRING.

* Objetos OLE
DATA: GV_APLICACION    TYPE OLE2_OBJECT. "Aplicacion Visio
DATA: GV_DOCUMENTOS    TYPE OLE2_OBJECT. "Coleccion de Documentos Visio
DATA: GV_DOCUMENTO     TYPE OLE2_OBJECT. "Documento Visio
DATA: GV_ADDON         TYPE OLE2_OBJECT. "Addon
DATA: GV_ADDONS        TYPE OLE2_OBJECT. "Addons
DATA: GV_SISTEMA       TYPE OLE2_OBJECT. "Addons

DATA: GV_TEMPLATE_PATH TYPE STRING.
DATA: GV_TEMPLATE_FILE TYPE STRING.
DATA: GV_DATA_FILE TYPE STRING.
DATA: GV_WORKDIR TYPE STRING.

DATA: GV_PARAMETRO_MACRO TYPE STRING,
      GV_ORGWIZ TYPE STRING VALUE 'OrgCWIZ'.

*----------------------------------------------------------------------*
*    SELECTION SCREEN                                                  *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1
                 WITH FRAME
                 TITLE TEXT-001.

* technical depth
PARAMETERS : TDEPTH LIKE GDSTR-TDEPTH.

* recursion check
PARAMETERS: RECURS LIKE PPPCH-RECURS DEFAULT ' ' AS CHECKBOX.

* perform rhstru00_old
PARAMETERS: OLD_REP TYPE FLAG_X  DEFAULT ' ' AS CHECKBOX.

* Change On 2011-2-15
PARAMETERS: VISIO TYPE FLAG_X  DEFAULT ' ' AS CHECKBOX.
PARAMETERS: VISIO_T TYPE FLAG_X  DEFAULT ' ' AS CHECKBOX.
PARAMETERS: DEMO_D TYPE FLAG_X  DEFAULT ' ' AS CHECKBOX.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS: VISIO_C1 RADIOBUTTON GROUP RA1. "###
SELECTION-SCREEN COMMENT 12(30) TEXT-901.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS: VISIO_C2 RADIOBUTTON GROUP RA1. "#####
SELECTION-SCREEN COMMENT 12(30) TEXT-902.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS: VISIO_D1 RADIOBUTTON GROUP RA1. "#######
SELECTION-SCREEN COMMENT 12(30) TEXT-903.
SELECTION-SCREEN END OF LINE.


SELECTION-SCREEN END OF BLOCK BLOCK1.

*PARAMETERS: ORG_PATH TYPE STRING DEFAULT 'C:\Program Files\Microsoft Office\Office12\ORGWIZ.EXE'.


*----------------------------------------------------------------------*
*    INITIALIZATION                                                    *
*----------------------------------------------------------------------*
INITIALIZATION.

* Structured evaluation
  $PCH$-ACCES = $STRUCTURED$.
  PCHTIMED = 'D'.

* initialize variables
  CLEAR: WAOBJEC,
         IT_NODE[].

  REPID = SY-REPID.

*----------------------------------------------------------------------*
*    START-OF-SELECTION                                                *
*----------------------------------------------------------------------*
START-OF-SELECTION.

* call rhstru00_old
  IF NOT OLD_REP IS INITIAL.
    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
      EXPORTING
        CURR_REPORT     = REPID
      TABLES
        SELECTION_TABLE = SEL_TABLE
      EXCEPTIONS
        NOT_FOUND       = 1
        NO_REPORT       = 2
        OTHERS          = 3.
    IF SY-SUBRC <> 0.
      INTERNAL_ERROR 'FUNCTION RS_REFRESH_FROM_SELECTOPTIONS'. "#EC NOTEXT
    ENDIF.

    SUBMIT RHSTRU00_OLD
           WITH SELECTION-TABLE SEL_TABLE
           AND RETURN.
    EXIT.
  ENDIF.

* perform report for all objects?
  IF PCHOBJID[] IS INITIAL AND PCHSOBID[] IS INITIAL.
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        TITLEBAR              = 'Information'(027)
        TEXT_QUESTION         = 'Programm ausf黨ren f黵 alle Objekte?'(015)
        DISPLAY_CANCEL_BUTTON = ' '
      IMPORTING
        ANSWER                = ANSWER
      EXCEPTIONS
        TEXT_NOT_FOUND        = 1
        OTHERS                = 2.
    IF SY-SUBRC <> 0.
      INTERNAL_ERROR 'FUNCTION POPUP_TO_CONFIRM' .          "#EC NOTEXT
    ENDIF.

*   back to selection screen
    IF ANSWER = '2'.
      CLEAR SEL_TABLE[].
      CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
        EXPORTING
          CURR_REPORT     = REPID
        TABLES
          SELECTION_TABLE = SEL_TABLE
        EXCEPTIONS
          NOT_FOUND       = 1
          NO_REPORT       = 2
          OTHERS          = 3.
      IF SY-SUBRC <> 0.
        INTERNAL_ERROR 'RS_REFRESH_FROM_SELECTOPTIONS'.     "#EC NOTEXT
      ENDIF.

      SUBMIT RHSTRU00
             VIA SELECTION-SCREEN
             WITH SELECTION-TABLE SEL_TABLE.
    ENDIF.
  ENDIF.

* Branchwise authority
  $PCH$-STRU_AUTHY = 'A'.
* Check recursions
  IF RECURS = 'X'.
    $PCH$-RECURS = 'X'.
  ENDIF.
* technical depth
  $PCH$-TDEPTH = TDEPTH.
  $PCH$-REFRE  = $OFF$.


*----------------------------------------------------------------------*
*    GET OBJEC                                                         *
*----------------------------------------------------------------------*
GET OBJEC.

  CLEAR WAOBJEC.

  MOVE-CORRESPONDING OBJEC TO WAOBJEC.
  WAOBJEC-SEQNR = STRUC-SEQNR.

* set the current id of the node
  WA_NODE-ID = STRUC-SEQNR.

* determine the correct parent id
  IF STRUC-PUP = 0.
*   there is no parent as this is the topmost node
    CLEAR: G_PARENT_STACK, G_PARENT_STACK_WA.
    WA_NODE-PARENT = STRUC-PUP.
*   add the current node as parent to the stack
    G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
    G_PARENT_STACK_WA-ID = STRUC-SEQNR.
    INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
                             INDEX 1.
  ELSE.
*   there was a parent
    READ TABLE G_PARENT_STACK
         INDEX 1
         INTO G_PARENT_STACK_WA.
    IF SY-SUBRC = 0.
*there is a parent in the stack available now check if the levels match
      IF G_PARENT_STACK_WA-LEVEL >= STRUC-LEVEL.
*       delete the entries that are deeper in the structure
*       as they can not be the parents
        DELETE G_PARENT_STACK
               WHERE LEVEL >= STRUC-LEVEL.
      ENDIF.
*     read again the topmost entry from the stack
      READ TABLE G_PARENT_STACK
           INDEX 1
           INTO G_PARENT_STACK_WA.
      IF SY-SUBRC = 0.
*       there is a parent
        WA_NODE-PARENT = G_PARENT_STACK_WA-ID.
*       add the current node as parent to the stack
        G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
        G_PARENT_STACK_WA-ID = STRUC-SEQNR.
        INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
                                 INDEX 1.
      ELSE.
*       there is no parent this is the topmost node others where skipped
        WA_NODE-PARENT = STRUC-PUP.
*       add the current node as parent to the stack
        G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
        G_PARENT_STACK_WA-ID = STRUC-SEQNR.
        INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
                                 INDEX 1.
      ENDIF.
    ELSE.
*     there is no parent this is the topmost node others where skipped
      WA_NODE-PARENT = STRUC-PUP.
*     add the current node as parent to the stack
      G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
      G_PARENT_STACK_WA-ID = STRUC-SEQNR.
      INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
                               INDEX 1.
    ENDIF.
  ENDIF.


* node text
  IF NOT WAOBJEC-STEXT IS INITIAL.
    WA_NODE-TEXT4 = WAOBJEC-STEXT.
  ELSE.
    WA_NODE-TEXT4 = WAOBJEC-SHORT.
  ENDIF.
  WA_NODE-SHORT = WAOBJEC-SHORT.

* Object key
  WA_NODE-OTYPE = WAOBJEC-OTYPE.
  WA_NODE-REALO = WAOBJEC-REALO.

* Status validity
  WA_NODE-ISTAT = WAOBJEC-ISTAT .
  WRITE WAOBJEC-BEGDA TO WA_NODE-BEGDA.
  WRITE WAOBJEC-ENDDA TO WA_NODE-ENDDA.

* Relation
  IF STRUC-VISTAT IS NOT INITIAL.
    WA_NODE-VISTAT = STRUC-VISTAT .
    WRITE STRUC-VBEGDA TO WA_NODE-VBEGDA.
    WRITE STRUC-VENDDA TO WA_NODE-VENDDA.
  ENDIF.

* Percentage
  IF STRUC-VISTAT IS NOT INITIAL AND STRUC-VPROZT IS NOT INITIAL.
    WRITE STRUC-VPROZT TO WA_NODE-PROZT(6) RIGHT-JUSTIFIED .
    WRITE ' %' TO  WA_NODE-PROZT+6(2).
  ENDIF.
  WA_NODE-OBJID = WAOBJEC-OBJID.

* Add icon when recursion
  IF NOT RECURS IS INITIAL AND
    STRUC-RFLAG = 'X'.
    WA_NODE-TEXT = TEXT-014.
    EXIST_REC = 'X'.
  ENDIF.

  APPEND WA_NODE TO IT_NODE.
  CLEAR  WA_NODE.
  CLEAR WAOBJEC.


*----------------------------------------------------------------------*
*    END-OF-SELECTION
*
*----------------------------------------------------------------------*
END-OF-SELECTION.

  IF VISIO = 'X'.

    PERFORM SUB_CREATE_DIR.

    IF VISIO_C1 = 'X'.
      IF DEMO_D = 'X'.
        PERFORM SUB_FILL_DEMO_DATA_C1.
      ELSE.
        PERFORM SUB_FILL_DATA_C1.
      ENDIF.
      PERFORM SUB_SET_PARAMETRO_MACRO2 USING GV_PARAMETRO_MACRO.
    ENDIF.

    IF VISIO_C2 = 'X'.
      IF DEMO_D = 'X'.
        PERFORM SUB_FILL_DEMO_DATA_C2.
      ELSE.
        PERFORM SUB_FILL_DATA_C2. "to do
      ENDIF.
      PERFORM SUB_SET_PARAMETRO_MACRO3 USING GV_PARAMETRO_MACRO.
    ENDIF.

    IF VISIO_D1 = 'X'.
      IF DEMO_D = 'X'.
        PERFORM SUB_FILL_DEMO_DATA. "to do
      ELSE.
        PERFORM SUB_FILL_DATA. "to do
      ENDIF.
      PERFORM SUB_SET_PARAMETRO_MACRO USING GV_PARAMETRO_MACRO.
    ENDIF.

*      PERFORM SUB_GET_TEMPLATE USING 'ORGCHART'.
    IF VISIO_D1 = 'X'.
      PERFORM SUB_DOWNLOAD_PHOTO.
    ENDIF.
*      PERFORM SUB_RUN_TEMPLATE. "delete by david because the photo can't be update automate
    PERFORM SUB_DOWNLOAD_DATA.
    PERFORM SUB_OPEN_DOCUMENT.

  ELSE.
    CALL SCREEN 100.
  ENDIF.


*---------------------------------------------------------------------*
*  MODULE STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.

* structural graphic is not available in web gui
  CALL FUNCTION 'GET_ACCESSIBILITY_MODE'
    IMPORTING
      ACCESSIBILITY = GX_ACC_MODE_ON
    EXCEPTIONS
      OTHERS        = 1.
  IF SY-SUBRC <> 0 OR
     GX_ACC_MODE_ON = ABAP_TRUE OR
     CL_GUI_OBJECT=>WWW_ACTIVE = 'X'.
    APPEND 'GSTR' TO EXCL_TAB.
  ENDIF.

* show button for recursions ?
  IF RECURS NE 'X'.
    APPEND 'SHRE' TO EXCL_TAB.
  ENDIF.

  PERFORM SET_OPTIMIZATION_TEXT.

  SET PF-STATUS 'MAIN' EXCLUDING EXCL_TAB.

  SET TITLEBAR 'MAINTITLE'.

*  CALL METHOD CL_GUI_HTML_VIEWER=>set_accdescription
*    EXPORTING
*      accdescription    = 'Header Data'
**    EXCEPTIONS
**      CNTL_ERROR        = 1
** 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值