2013년 12월 11일 수요일

SAP 디비 링크 추가하기

[출처 : http://wiki.sdn.sap.com/ ]

When you want to set up external database connection, you need to use DBCO or DBACOCKPIT Transaction.
When using these transactions, you are setting up the properties for an external database.

BASIS STEPS

Insert TNSNames Alias into file TNSNames.ora under Oracle Directory (C:\oracle\<SID>\102\network\admin\ tnsnames.ora)
YYY.WORLD =

  (DESCRIPTION =

      (ADDRESS =

        (COMMUNITY = TCP.WORLD)

        (PROTOCOL = TCP)

        (HOST = host.xxxxxxx)

        (PORT = 1521)

    )

    (CONNECT_DATA =

      (SID = YYY)

      (GLOBAL_NAME = YYY.WORLD)

    )

  )
Note: Insert the same TNSNames Alias into file TNSNames.ora under Sap Profile Directory (C:\usr\sap\<SID>\SYS\profile\oracle\ tnsnames.ora )

ADMINISTRATION STEPS

DBACOCKPIT Transaction -> DB Connections Tab -> Add
http://i669.photobucket.com/albums/vv53/simon_djflex/WORK/DBACOCKPIT_DBConnections.jpg
You need to set the following parameters:
DB Connection: Logical name
DBMS: type of database (e.g. oracle, mssql, etc)
User name: user name that connect to the database
DB Password: password
Conn. Info: same target name as in tnsnames
http://i669.photobucket.com/albums/vv53/simon_djflex/WORK/DBACOCKPIT_DBConnections_Settings.jpg
With Test Connection Button you can test if your connection work fine.
http://i669.photobucket.com/albums/vv53/simon_djflex/WORK/DBACOCKPIT_TestSuccessfully.jpg

SAMPLE CODE FOR CONNECTION TO EXTERNAL DB  


  DATA: lv_dbs_connection      TYPE dbcon-con_name VALUE 'BDXXX',
        lv_current_connection  TYPE dbcon-con_name.

  DATA dbtype TYPE dbcon_dbms.

  SELECT SINGLE dbms
         FROM dbcon
         INTO dbtype
         WHERE con_name = lv_dbs_connection.

  IF dbtype = 'ORA'.
    TRY.

      EXEC SQL.
        CONNECT TO :lv_dbs_connection
      ENDEXEC.
      IF sy-subrc <> 0.
        RAISE EXCEPTION TYPE cx_sy_native_sql_error.
      ENDIF.
      EXEC SQL.
        SET CONNECTION :lv_dbs_connection
      ENDEXEC.

      EXEC SQL.
        DISCONNECT :lv_current_connection
      ENDEXEC.
    ENDTRY.
  ENDIF.
 
먼저  /sapmnt/***/profile/oracle/tnsnames.ora를 등록한다.

2013년 12월 9일 월요일

Windows, Linux, Mac 가상 OS 무료로 다운로드 받는 방법

[출처 : http://seeit.kr/ ]

VMware나 VirtualBox, Parallels 를 이용해 Windows와 Linux, Mac 등 다양한 버전의 OS를 설치해 프로그램 테스트 환경을 만들게 됩니다. 몇 번 언급했지만 저는 소프트웨어 품질검사 하는 일을 하고 있는데요. Windows 기반의 프로그램을 테스트 할 때는 Windows XP, Vista, 7, 8을 각각 32비트(x86), 64비트(x64) OS에 설치해서 테스트하게 되고, Linux나 Mac 기반에서 테스트 할 때도 마찬가지입니다.
회사라면 저런 다양한 OS가 정품으로 구입한 상태이 마음껏 사용할 수 있지만, 개인 사용자는 다르죠. (물론 불법 복제품으로 사용하시는 분들이 대부분이긴 하겠지만 ^^;)
그래서 오늘은 Windows와 Linux, Mac OS 등을 VMware, VirtualBox, Parallels 등에 바로 마운트해서 사용할 수 있는 가상 OS들을 무료로 다운로드 하는 방법을 소개해드리도록 하겠습니다. 불법 복제품이 아니라 마이크로소프트에서 운영하는 사이트에서 받는 방법입니다.


■ Windows 및 Linux, Mac 가상 OS 무료로 다운로드 방법
마이크로소프트에서는 다양한 인터넷 익스플로러에서 크로스 브라우징 테스트를 하는 사이트를 운영하고 있습니다. 해당 사이트에서는 Windows 제품군에 이전 버전 인터넷 익스플로러가 설치된 가상 OS를 다운로드 받을 수 있도록 제공하고 있는데요. 해당 사이트에서 OS를 다운로드 받아 사용하기 위해서는 VMware나 VirtualBox, Parallels 등 가상 OS를 마운트에서 설치할 수 있는 프로그램이 필요합니다.
그럼, 다운로드 및 설치하는 방법에 대해 간단히 알아볼까요? 
1. Modern-IE 사이트에 접속 [바로가기] 합니다.

2. 크로스 브라우징 테스트도 할 수 있지만, 해당 링크로 이동하면 위 이미지와 같은 가상 시스템을 다운로드 할 수 있는 페이지로 이동하게 됩니다. 

3. 원하는 테스트 OS 메뉴를 눌러 Windows 및 Mac, Linux 등 다운로드 할 OS를 선택해줍니다. Windows XP 버전을 다운로드 한 번 해볼께요!
4. Windows 를 선택하면 '가상화 플랫폼 선택' 메뉴에서 세부 버전을 선택할 수 있습니다. 현재 다운로드 할 수 있는 버전은 WIndows Server 2008 R2 SP1의 Hyper-V 및 Windows 8 Pro, Windows 7 용 가상 PC 등 다양한 플랫폼이 있습니다. Windows 7용 가상 PC를 선택해보겠습니다.

5. OS 종류와 플랫폼을 선택하면 세부 OS 버전을 선택할 수 있습니다. 이 사이트에서 무료 다운로드를 제공하는 이유 중 하나가 IE 버전별 OS를 설치해 테스트를 쉽게 하라는 의미가 있는 것이라 IE6 부터 IE11까지 설치된 Windows XP와 Vista, Win7 등을 선택해 다운로드 할 수 있습니다.

6. 저는 IE8 이 설치된 Windows XP를 설치하기 위해 다운로드 해봤습니다. 다운로드 속도는 1기가 정도에 1분도 안걸릴 정도로 굉장히 빠르네요! (물론 사용자 인터넷 환경에 따라 다르겠죠~)

7. 실행 파일로 된 파일을 다운로드한 경우, 해당 파일 실행 시 위 이미지처럼 압축 해제하는 과정을 거칩니다.
8. 압축 해제 완료 후, 해당 폴더로 이동해보면 위 이미지처럼 vhd와 vmc 확장자 파일이 두 개 있습니다. VMware 에서 바로 마운트해서 Windows 를 실행할 수 있는 파일이죠.
9. 이제 VMware 를 실행해줍니다. 가상 OS 를 많이 돌려보신 분들이라면 다운로드하는 사이트만 알려드려도 알아서 잘 하시겠지만, 잘 모르는 초보자분들을 위해 가상 OS 실행하는 방법까지 설명해드립니다. VMware에서 [File] - [Open] 을 선택합니다.


10. 압축 해제한 가상 OS 폴더로 이동합니다. 자동으로 vmc 파일을 찾아주는데요. 이 파일을 그대로 VMware에서 사용할 수 없기 때문에 VMware vCenter Converter 프로그램으로 변환하는 과정을 거치게 됩니다.


▲ vmc 파일을 VMware 환경에 맞춰 마운트할 수 있도록 VMware vCenter Conver 가 실행된다.
▲ 설치 언어를 선택해준다. 아쉽게도 한국어가 없다.
 

▲ VMware vCenter Converter Standalone 이 실행되며 vmc 파일을 VMware에서 사용할 수 있는 형태로 변환해준다. 모든 과정이 끝나도 별다른 메시지가 없으니 이상하게 생각하지 않아도 된다.
 

11. VMware vCenter Converter Standalone 으로 변환 과정을 마치고 다시 VMware로 돌아와 [File] - [Open] 을 선택해주고 해당 파일을 다시 찾아 마운트 해주면 됩니다.
▲ IE8 이 설치된 WinXP를 VMware에서 사용할 수 잇도록 마운트 하는 과정이 진행된다.
 

12. VMware에 내가 원하던 OS 환경이 리스트로 추가된 것을 확인할 수 있습니다. 이제 IE8가 설치된 Windows XP에서 테스트할 때는 이 가상 OS를 사용하면 되겠네요!
▲ Play 를 눌러 해당 OS를 실행한다.

인터넷 익스플로러 8 외에는 아무것도 설치되지 않은 깨끗한 상태의 Windows XP가 실행되는 것을 확인할 수 있습니다. 클린 PC에서 프로그램 테스트를 해야 하는 경우, 매번 다양한 OS CD로 설치하는 과정을 거쳤는데, 마이크로소프트에서 운영하는 이 사이트에서 다운로드만 받으면 간단하게 마운트해서 사용할 수 있을 것 같습니다.
이렇게 설치된 OS는 정품이지만 30일만 사용할 수 있으므로 참고하세요.

스마트폼의 pdf를 이메일 첨부 발송

[출처:http://www.e-abap.net/]

DATA :  OUTPUT_OPTIONS       TYPE SSFCOMPOP,
           CONTROL_PARAMETERS   TYPE SSFCTRLOP.

  CLEAR: CONTROL_PARAMETERS, OUTPUT_OPTIONS, TSP03.

  CONTROL_PARAMETERS-NO_DIALOG = 'X'.
  " "otf 전환***
  CONTROL_PARAMETERS-GETOTF    = 'X'.   
  CONTROL_PARAMETERS-LANGU     = SY-LANGU.
  CONTROL_PARAMETERS-DEVICE    = 'PRINTER'.


  OUTPUT_OPTIONS-TDSENDDATE   = SY-DATLO.      
  OUTPUT_OPTIONS-TDSENDTIME   = SY-TIMLO.       
  OUTPUT_OPTIONS-TDDEST       = 'LP01'.         
  OUTPUT_OPTIONS-TDNEWID      = 'X'.            

   CALL FUNCTION P_FUNC_MOD_NAME
     EXPORTING
       CONTROL_PARAMETERS = CONTROL_PARAMETERS
       OUTPUT_OPTIONS     = OUTPUT_OPTIONS
       G_ITAB02_T         = G_ITAB02_T
     IMPORTING
       JOB_OUTPUT_INFO    = G_JOB_OUTPUT_INFO
       JOB_OUTPUT_OPTIONS = G_JOB_OUTPUT_OPTIONS
     TABLES
       G_ITAB03_T         = G_ITAB03_T
       G_ITAB08_T         = G_ITAB08_T
     EXCEPTIONS
       FORMATTING_ERROR   = 1
       INTERNAL_ERROR     = 2
       SEND_ERROR         = 3
       USER_CANCELED      = 4
       OTHERS             = 5.
   IF SY-SUBRC <> 0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
     LEAVE PROGRAM.
   ENDIF.

*&
   DATA : OTF_TAB TYPE TSFOTF.

   OTF_TAB[] = G_JOB_OUTPUT_INFO-OTFDATA[].

*&
  DATA: GS_HEAD     LIKE SODOCCHGI1,
        GT_OBJPACK  LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,
        GT_OBJHEAD  LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE,
        GT_OBJBIN   LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE,
        GT_OBJCON   LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE,
        GT_RECEIVER LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
        GV_LINES LIKE SY-TABIX,
        GV_DOC_SIZE LIKE SY-TABIX.

*&
  DATA: LT_PDF            TYPE STANDARD TABLE OF TLINE WITH HEADER LINE,
        L_SIZE           TYPE I,
        L_REG_VALUE(128) TYPE C.
  data: L_FILE       TYPE  XSTRING.


*& OTF 파일을 PDF 파일로 CONVERT.
  CALL FUNCTION 'CONVERT_OTF'
     EXPORTING
       FORMAT                = 'PDF'
    TABLES
      OTF                   = P_OTF[]
      LINES                 = LT_PDF
    EXCEPTIONS
      ERR_MAX_LINEWIDTH     = 1
      ERR_FORMAT            = 2
      ERR_CONV_NOT_POSSIBLE = 3
      OTHERS                = 4.

  DATA: I TYPE I,N TYPE I.
  DATA: L_TXT(1000).

* Convert pdf(134) to binary(255) file.
  LOOP AT LT_PDF.
    L_TXT+I = LT_PDF.
    ADD 134 TO I.
    IF I >= 255.
      GT_OBJBIN = L_TXT.
      APPEND GT_OBJBIN.
      SUBTRACT 255 FROM I.
      L_TXT = L_TXT+255.
    ENDIF.
  ENDLOOP.
  IF I <> 0.
    GT_OBJBIN = L_TXT.
    APPEND GT_OBJBIN.
  ENDIF.


*& 메일 수신자 관련
  GT_RECEIVER-RECEIVER   =  'mychoi@lgcns.com'.
  "수신메일주소
  GT_RECEIVER-REC_TYPE   =  'U'.
  GT_RECEIVER-EXPRESS    =  'X'.
  APPEND GT_RECEIVER. CLEAR GT_RECEIVER.

*& 메일 내용
  GT_OBJCON-LINE = 'Smartforms Mail 확인바랍니다.'.
  APPEND GT_OBJCON. CLEAR GT_OBJCON.
*&
  GT_OBJCON-LINE = '감사합니다'.
  APPEND GT_OBJCON. CLEAR GT_OBJCON.

*&
*& 메일 내용 관련된 사항을 PACKING_LIST에 APPEND
  DESCRIBE TABLE GT_OBJCON LINES GV_LINES.

*& 메일 HEADER
  GS_HEAD-OBJ_NAME     =  'MESSAGE'.
  GS_HEAD-OBJ_DESCR    =  '>>SMART PDF MAIL 확인바랍니다.'.   "메일 제목
  GS_HEAD-OBJ_LANGU    =  'E'.
  GS_HEAD-SENSITIVTY   =  'O'.      "'O' : Standard 'P': Confidential
  GS_HEAD-OBJ_PRIO     =  '1'.
  GS_HEAD-NO_CHANGE    =  'X'.
  GS_HEAD-PRIORITY     =  '1'.
*  gs_head-doc_size = gv_lines * 255.

  GT_OBJPACK-HEAD_START = 1.
  GT_OBJPACK-HEAD_NUM = 0.
  GT_OBJPACK-BODY_START = 1.
  GT_OBJPACK-BODY_NUM = GV_LINES.
  GT_OBJPACK-DOC_TYPE = 'RAW'.

  APPEND GT_OBJPACK. CLEAR GT_OBJPACK.

*& 메일 첨부파일에 관련된 사항을 PACKING LIST에 저장
  DESCRIBE TABLE GT_OBJBIN LINES GV_LINES.
  GT_OBJPACK-TRANSF_BIN = 'X'.
  GT_OBJPACK-HEAD_START = 1.
  GT_OBJPACK-HEAD_NUM = 1.
  GT_OBJPACK-BODY_START = 1.
  GT_OBJPACK-BODY_NUM = GV_LINES.
  GT_OBJPACK-DOC_TYPE = 'PDF'.
* GT_OBJPACK-FILE_EXT = 'PDF'.
  GT_OBJPACK-OBJ_NAME = 'Attachment'.
  GT_OBJPACK-OBJ_DESCR = 'ATT_SMART'.

  READ TABLE GT_OBJBIN INDEX GV_LINES.

  GV_DOC_SIZE = GV_LINES * 255.

* GV_DOC_SIZE = ( GV_LINES - 1 ) * 255 + STRLEN( GT_OBJBIN ).
  GT_OBJPACK-DOC_SIZE = GV_DOC_SIZE.

  APPEND GT_OBJPACK. CLEAR GT_OBJPACK.

*& 메일을 전송하는 Function.....
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = GS_HEAD      "메일TITLE
      PUT_IN_OUTBOX              = 'X'
      COMMIT_WORK                = 'X'
    TABLES
      PACKING_LIST               = GT_OBJPACK
      CONTENTS_BIN               = GT_OBJBIN     "첨부파일
      CONTENTS_TXT               = GT_OBJCON     "메일내용
      RECEIVERS                  = GT_RECEIVER   "수신정보
    EXCEPTIONS
      TOO_MANY_RECEIVERS         = 1
      DOCUMENT_NOT_SENT          = 2
      DOCUMENT_TYPE_NOT_EXIST    = 3
      OPERATION_NO_AUTHORIZATION = 4
      PARAMETER_ERROR            = 5
      X_ERROR                    = 6
      ENQUEUE_ERROR              = 7
      OTHERS                     = 8.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    MESSAGE S002 WITH '메일이 전송 되었습니다.'.
  ENDIF.