2020년 12월 22일 화요일

[SAP] SE78에서 등록한 이미지 다운 받기

[ 출처  : https://answers.sap.com/ ]

아래 프로그램으로 업로드 이미지 다운로드 가능함.

REPORT Z_DUMMY_ATG_3.

DATA : L_BYTECOUNT TYPE I,
       L_TDBTYPE   LIKE STXBITMAPS-TDBTYPE,
       L_CONTENT   TYPE STANDARD TABLE OF BAPICONTEN INITIAL SIZE 0.

DATA: GRAPHIC_SIZE TYPE I.

DATA: BEGIN OF GRAPHIC_TABLE OCCURS 0,
LINE(255) TYPE X,
END OF GRAPHIC_TABLE.

CALL FUNCTION 'SAPSCRIPT_GET_GRAPHIC_BDS'
  EXPORTING
    I_OBJECT       = 'GRAPHICS'
    I_NAME         = 'ZPRUEBA'
    I_ID           = 'BMAP'
    I_BTYPE        = 'BCOL'  "흑백일 경우 BMON임
  IMPORTING
    E_BYTECOUNT    = L_BYTECOUNT
  TABLES
    CONTENT        = L_CONTENT
  EXCEPTIONS
    NOT_FOUND      = 1
    BDS_GET_FAILED = 2
    BDS_NO_CONTENT = 3
    OTHERS         = 4.

CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP'
  EXPORTING
    OLD_FORMAT               = 'BDS'
    NEW_FORMAT               = 'BMP'
    BITMAP_FILE_BYTECOUNT_IN = L_BYTECOUNT
  IMPORTING
    BITMAP_FILE_BYTECOUNT    = GRAPHIC_SIZE
  TABLES
    BDS_BITMAP_FILE          = L_CONTENT
    BITMAP_FILE              = GRAPHIC_TABLE
  EXCEPTIONS
    OTHERS                   = 1.

CALL FUNCTION 'WS_DOWNLOAD'
  EXPORTING
    BIN_FILESIZE            = GRAPHIC_SIZE
    FILENAME                = 'C:\FirmaAsociado.bmp'
    FILETYPE                = 'BIN'
  TABLES
    DATA_TAB                = GRAPHIC_TABLE
  EXCEPTIONS
    INVALID_FILESIZE        = 1
    INVALID_TABLE_WIDTH     = 2
    INVALID_TYPE            = 3
    NO_BATCH                = 4
    UNKNOWN_ERROR           = 5
    GUI_REFUSE_FILETRANSFER = 6.

IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

 

2020년 12월 17일 목요일

DAX 함수

 1. 계산값

 - 월별 누적 금액 산출시

CALCULATE( SUMX( 집계테이블 ,합산필드 ) , DATESMTD(집계 기준 일자 필드) )

 DATESQTD : 분기 / DATESYTD : 년 기준으로 집계함.

2020년 12월 9일 수요일

[ORACLE] Table space 관련

 테이블 스페이스 삭제

drop tablespace [TABLE SPANE NAME] ;

아래와 같은 오류 발생시 테이블 스페이스내 의존선으로 연결된 부분이 있는 것으로  아래 SQL로 확인 후 제거하고 삭제 처리한다.

ORA-00604: error occurred at recursive SQL level 1
ORA-02429: cannot drop index used for enforcement of unique/primary key


SELECT  INDEX_NAME,  TABLE_NAME,  TABLESPACE_NAME
 FROM DBA_INDEXES
WHERE TABLESPACE_NAME= '[TABLE SPANE NAME]' ;

실행 결과를 복사하여 한번 실행한 후 테이블 스페이스를 삭제 한다.

SELECT
 'DROP TABLE ' || TABLE_OWNER||'.'|| TABLE_NAME || ' CASCADE CONSTRAINTS;'
FROM DBA_INDEXES
WHERE TABLESPACE_NAME= '[TABLE SPANE NAME]';

 

처리가 끝나면 물리적인 파일도 삭제 처리 한다.

2020년 12월 4일 금요일

Linux 64bit 시스템에서 32bit 프로그램 실행하기

 별도 라이브러리 설치 필요

[root@localhost oracle]# yum install glibc.i686
Last metadata expiration check: 2:52:40 ago on Fri Dec  4 14:58:27 2020.
Dependencies resolved.
================================================================================
 Package         Architecture   Version                  Repository        Size
================================================================================
Installing:
 glibc           i686           2.28-101.el8             BaseOS           3.4 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 3.4 M
Installed size: 15 M
Is this ok [y/N]: y
Downloading Packages:
glibc-2.28-101.el8.i686.rpm                     960 kB/s | 3.4 MB     00:03
--------------------------------------------------------------------------------
Total                                           960 kB/s | 3.4 MB     00:03
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Running scriptlet: glibc-2.28-101.el8.i686                                1/1
  Installing       : glibc-2.28-101.el8.i686                                1/1
  Running scriptlet: glibc-2.28-101.el8.i686                                1/1
  Verifying        : glibc-2.28-101.el8.i686                                1/1
Installed products updated.

Installed:
  glibc-2.28-101.el8.i686

Complete!

2020년 6월 23일 화요일

윈도우 서버에서 영문 요일을 구하여 오라클 백업 배치 파일 작성

@echo off
for /f %%i in ('powershell ^(get-date^).DayOfWeek') do set week=%%i
cd c:\backup
del %week%_*.* /q
exp ID/PW file=%week%_backup.dmp log=%week%_backup.log statistics=none

Task Manager에서 작업할 내용을 추가
 - 로그인 안돼어 있을 경우에도 실행되도록 설정
























 - 실행할 시간 설정
























 - 수행할 배치 파일 설정

한대의 서버에 Tomcat 인스턴스 여러개 사용

[ 출처 : http://itscom.org/ ]

“한 대의 서버에 Tomcat 인스턴스를 여러개 설치하여 운영하기 위한 매뉴얼 입니다. 여기서는 1개의 배포(webapps 및 라이브러리(lib)용) 인스턴스와 2개의 서비스용 인스턴스를 설치하는 방법입니다.”
* 인스턴스별 포트(shutdown, http, https, ajp) 및 환경설명 *

tomcat8_0 인스턴스 :  8005, 8080, 8443, 8009  배포용 인스턴스로 unpackWARs=”true” 설정
tomcat8_1 인스턴스 :  8004, 8081, 8444, 8010  서비스용 인스턴스 1
tomcat8_2 인스턴스 :  8003, 8082, 8445, 8011  서비스용 인스턴스 2

1. 준비환경

1) CentOS 7 에 JDK 설치
2) tomcat 용 계정생성
[root@localhost ~]# adduser -s /sbin/nologin tomcat

2. 톰캣 다운로드
[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-8/v8.5.11/bin/apache-tomcat-8.5.11.tar.gz
[root@localhost src]# tar xvfz apache-tomcat-8.5.11.tar.gz
[root@localhost src]# cp apache-tomcat-8.5.11 /usr/local/tomcat8_0 -r
[root@localhost src]# cp apache-tomcat-8.5.11 /usr/local/tomcat8_1 -r
[root@localhost src]# cp apache-tomcat-8.5.11 /usr/local/tomcat8_2 -r

3. bin/catalina.sh 수정

(모든 인스턴스에 127라인 쯤 #Get standard environment variables 앞에 다음 추가)

1) tomcat8_0 인스턴스
bin/catalina.sh
export CATALINA_HOME=/usr/local/tomcat8_0export TOMCAT_HOME=/usr/local/tomcat8_0
export CATALINA_BASE=/usr/local/tomcat8_0
CATALINA_PID=/usr/local/tomcat8_0/bin/tomcat.pid

# jdk 를 소스 설치 시
export JAVA_HOME=/usr/local/jdk1.8

2) tomcat8_1 인스턴스
export CATALINA_HOME=/usr/local/tomcat8_1
export TOMCAT_HOME=/usr/local/tomcat8_1
export CATALINA_BASE=/usr/local/tomcat8_1
CATALINA_PID=/usr/local/tomcat8_1/bin/tomcat.pid

# jdk 를 소스 설치 시
export JAVA_HOME=/usr/local/jdk1.8

3) tomcat8_2 인스턴스
export CATALINA_HOME=/usr/local/tomcat8_2
export TOMCAT_HOME=/usr/local/tomcat8_2
export CATALINA_BASE=/usr/local/tomcat8_2
CATALINA_PID=/usr/local/tomcat8_2/bin/tomcat.pid

# jdk 를 소스 설치 시
export JAVA_HOME=/usr/local/jdk1.8

4. conf/server.xml 수정
1) tomcat8_0 인스턴스
conf/server.xml

<server port="8005" shutdown="SHUTDOWN">
~생략~
<connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
~생략~
<connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
~생략~
<host name="localhost"  appBase="../tomcat8_0/webapps"
            unpackWARs="true" autoDeploy="true">

2) tomcat8_1 인스턴스
<server port="8004" shutdown="SHUTDOWN">
~생략~
<connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />
~생략~
<connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
~생략~
<host name="localhost"  appBase="../tomcat8_0/webapps"
            unpackWARs="false" autoDeploy="true">

3) tomcat8_2 인스턴스
<server port="8003" shutdown="SHUTDOWN">
~생략~
<connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8445" />
~생략~
<connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
~생략~
<host name="localhost"  appBase="../tomcat8_0/webapps"
            unpackWARs="false" autoDeploy="true">

5. 권한설정, 심볼릭링크
1) 권한설정
chown tomcat.tomcat /usr/local/tomcat8* -R
 2) 심볼릭링크
rm -Rf /usr/local/tomcat8_1/lib
ln -s /usr/local/tomcat8_0/lib /usr/local/tomcat8_1/lib
rm -f /usr/local/tomcat8_1/conf/context.xml
ln -s /usr/local/tomcat8_0/conf/context.xml /usr/local/tomcat8_1/conf/context.xml

rm -Rf /usr/local/tomcat8_2/lib
ln -s /usr/local/tomcat8_0/lib /usr/local/tomcat8_2/lib
rm -f /usr/local/tomcat8_2/conf/context.xml
ln -s /usr/local/tomcat8_0/conf/context.xml /usr/local/tomcat8_2/conf/context.xml

6. systemctl 서비스 등록
1) tomcat8_0 인스턴스 (vi /usr/lib/systemd/system/tomcat_0.service)
/usr/lib/systemd/system/tomcat_0.service


[Unit]
Description=Tomcat8 Service
After=syslog.target
After=network.target

[Service]
Type=forking
User=tomcat
ExecStart=/usr/local/tomcat8_0/bin/catalina.sh start
ExecStop=/usr/local/tomcat8_0/bin/catalina.sh stop

[Install]
WantedBy=multi-user.target
2) 모든 인스턴스를 위와같이 작업
3) 서비스 시작 및 등록
[root@localhost ~]# systemctl start tomcat_0
[root@localhost ~]# systemctl enable tomcat_0.service

[root@localhost ~]# systemctl start tomcat_1
[root@localhost ~]# systemctl enable tomcat_1.service

[root@localhost ~]# systemctl start tomcat_2
[root@localhost ~]# systemctl enable tomcat_2.service

7. 기타
1) 웹서비스 점검

웹브라우저에서 http://ip주소:8080 , http://ip주소:8081, http://ip주소:8082 접속합니다.

2) 톰캣 인스턴스 상태점검
[root@localhost ~]# for i in {0..2};do systemctl status tomcat_$i;done

3) 톰캣 디렉토리 구성 및 설명

– /bin : 톰캣의 바이너리와 실행스크립트가 들어 있는 디렉토리

  startup.sh : 톰캣 시작 스크립트

  shutdown.sh : 톰캣 종료 스크립트

  version.sh : 톰캣 버전과 운영체제, JDK 정보를 출력하는 스크립트

  configtest.sh : 설정의 이상유무 테스트

– /conf : 모든 webapp 에 영향을 미치는 톰캣의 전역 설정파일이 들어 있는 디렉토리
  server.xml             : 가장 중요한 설정파일로 톰캣의 서비스, 엔진, 호스트 등의 내용을 설정
  tomcat-users.xml : 역할을 기반으로 하는 사용자 권한과 인증 정보를 설정.
  web.xml                 : 모든 웹애플리케이션을 배포할 때 사용할 기본설정.
  context.xml           : 세션, 쿠키 저장 경로 등 톰캣에 의존적인 설정을 지정.

– /lib : 모든 webapps 에서 사용가능한 JAR 파일 위치

-/logs : 로그 저장 디렉토리로 카탈리나 엔진은 catalina.yyyy-mm-dd.log 와 server.xml 에 지정된 호스트 로그는 localhost.yyyy-mm-dd.log 로 저장

– /webapps : 웹애플리케이션이 있는 디렉토리

– /work : 서블릿이나 JSP 파일을 컴파일한 소스와 클래스 파일이 위치.

2020년 6월 3일 수요일

nslookup으로 공인 아이피 알아내기

[ 출처 : http://www.coolenjoy.net/ ]

nslookup myip.opendns.com resolver1.opendns.com








윈도우에서 배치로 만들면 공인 아이피를 가져와서 클립보드에 자동 복사됨.
@for /f "skip=4 tokens=2" %%i in ('nslookup myip.opendns.com resolver1.opendns.com 2^>nul') do echo|set /p="%%i"|clip

2020년 3월 27일 금요일

[ABAP] Field Catalog 항목

[출처 : http://blog.daum.net/rightvoice/791 ]


FieldName
소속
설명
ROW_POS
ALV 제어: 출력라인 (INTERNAL USE)
COL_POS Display Display되는 Column의 순서
생략시 입력순서대로 표시된다
TABNAME Control ALV의 Output Table의 Name을 넣어준다.
그런데 없어도 상관은 없다.
왜? 어차피 1개의 ALV는 1개의 FieldCatalog를 취하니까.
FIELDNAME Control(필수) ALV의 Output Table의 FieldName을 넣어준다.
여기가 Output Table 과 Catalog가 Match되는 방법이다
F4AVAILABL   필드에 출력도움말 유무점검 오류 : "No input help is available" 발생시
ref_table / ref_field를 Clear하면 된다.
REF_TABLE ABAP Dic(활용) ABAP Dic으로 부터 모든 데이타를 활용하게 설정할경우
(DOMAIN값을 참조할때도 반드시 설정되어 있어야 한다.)
ABAP Dic 참조하기위한 [테이블명]을 넣어준다.
REF_FIELD ABAP Dic(활용) ABAP Dic으로 부터 모든 데이타를 활용하게 설정할경우
(DOMAIN값을 참조할때도 반드시 설정되어 있어야 한다.)
ABAP Dic 참조하기위한 테이블의 [Field명]을 넣어준다.
DOMNAME ABAP Dic(활용) 윗 4개가 일치하지 않는경우,
DOMNAME이 어뚱한 놈을 바라보면 POPUP은 뜨는데 유효성 검사가 어뚱하게 걸리는 현상이 나타난다.
CURRENCY ABAP Dic(참조) 보여주려는 [숫자]의 소속이 [통화금액]인 경우
[고정통화]를 쓰는 경우 통화단위를 넣어준다. ex) [KRW]
CFIELDNAME ABAP Dic(참조) 보여주려는 [숫자]의 소속이 [통화금액]인 경우
[통화]를 가지고 있는 [FieldName]을 넣어준다.
=> [FieldName]이 FieldCatalog의 Member로 등록되어있어야 함.
(만약에 없는경우, [Data]수정시 오류가 발생함. )
QUANTITY ABAP Dic(참조) 보여주려는 [숫자]의 소속이 [단위수량]인 경우
[고정단위]를 쓰는 경우 수량단위를 넣어준다. ex) [Kg]
QFIELDNAME ABAP Dic(참조) 보여주려는 [숫자]의 소속이 [단위수량]인 경우
[단위]를 가지고 있는 [FieldName]을 넣어준다.
=> [FieldName]이 FieldCatalog의 Member로 등록되어있어야 함.
(만약에 없는경우, [Data]수정시 오류가 발생함. )
INTTYPE Control(필수) ABAP 데이타유형 (C,D,N,...)
JUST Display(추천) 화면표시 정렬 ( Left , Center , Right )
OUTPUTLEN Display(추천) 화면표시 문자의 열 너비
Layout-cwidth_opt = 'X' 설정시 무력화 된다.
COLTEXT (40) Display(필수) Column Header의 텍스트(오직 1개의 종류만 표시할때)
   SCRTEXT_L  (40) Display(선택)    Column Header의 텍스트(폭이 넓은경우 표시)
   SCRTEXT_M (20) Display(선택)    Column Header의 텍스트(폭이 중간인 경우 표시)
   SCRTEXT_S (10) Display(선택)    Column Header의 텍스트(폭이 좁은경우 표시)
   TOOLTIP(40) Display(선택) Column의 말풍선
NO_OUT Display(Variant설정) 초기화면 조회시에는 보이지 않도록
Variant설정시에는 Layout설정에 나타난다.
  TECH Display(Variant설정) 화면에서 아예 보이지 않는다.
HOTSPOT Display(선택)/Event연동 웹브라우저의 HyperLink처럼 동작하게 한다. Click Event처리
EDIT
(가장 중요한 설정항목중 하나임)
Display(편집) 해당 Field에 대해서 편집설정을 나타낸다.
Layout-edit = 'X' 설정시 무력화 된다.(하위개념임)
그밑에 Cell-Style의 Enable/Disable이 있음
CHECKBOX Display(편집) 체크박스로 보여준다.
DRDN_HNDL Display(편집) Dropdown List Handle/ 정수값을 입력해 주어야 한다
1개의 Field는 1개의 Dropdown List만을 보여줄때 사용
   DRDN_FIELD Display(편집) Dropdown List Field/ FieldName을 입력해 주어야 한다
1개의 Field는 다수의 Dropdown List를 보여줄수 있다.
   DRDN_ALIAS Display(편집) Dropdown List Handle( X 설정요망 )
User에게 코드를 보여주면 가독성이 떨어진다.
따라서 [코드:설명]이렇게 보여주기 원할때 사용한다
CHECKTABLE Display(편집) ABAP Dic에 의해 CheckTable이 설정되면 자동으로 F4활성
유효성 검사등이 수행된다.
이때 이값에 "!"을 넣어주면 임의편집을 가능하게할수있다
KEY Control(선택) 키필드로 선택(배경색이 자동으로 파랑색, Key역활을 시작함)
1. 필수 입력사항이다.
2. 한번 입력된 내용은 수정될 수 없다.
3. Key Value는 Unique해야 한다.
   KEY_SEL Control(선택) KEY로 설정한후 화면상의 Display하지않음, Variant에도 안나옴
FIX_COLUMN Control(선택) Column고정.  Hsplit 기능을 사용할 때 사용한다.
ROUND Display(숫자) 보여주려는 [숫자]의 소수점을 주어진 round 수만큼
좌측이로 이동한다.
결과숫치 =  기존숫자 / (10^(round) ) 의 역활을 한다.
숫치입력시 자동으로 나누기가 시행되므로 사용에 주의할것
Ex) 100.00 [Round = 2] => 1.00
NO_SIGN Display(숫자) 보여주려는 [숫자]의 부호를 표시하지 않는다.
NO_ZERO Display(숫자) 보여주려는 [숫자]가 0인경우 표시하지 않는다 [숫자]의 소속이 [통화금액][단위수량]인경우 자동으로 설정
DECIMALS_O Display(숫자) 보여주려는 [숫자]의 소숫점 자리수 설정. Decimals 설정을 같이 늘려주지 않으면 입력오류가 발생됨
   DECIMALS Display(숫자) 입력되는 [숫자]의 소숫점 자리수 설정.
LZERO Display(숫자) Data Type : N , ABAP Type : Numeric
문자형 숫자이므로 앞쪽에 빈공간에 "0"을 채워준다.
DO_SUM Display(숫자)/Sort연동 set_table_for_first_display
의 Sort설정이 되었을경우 중간합을 보여준다.
'X' 설정시 [총합]
'C' 설정시 [평균]을 보여준다.
EXPONENT
ALV 제어: 부동표현에 대한 지수
ICON Display(문자) 아이콘으로 출력할때
SYMBOL Display(문자) ALV 제어: 기호로 출력
EDIT_MASK Display(문자) 화면 Display시 편집마스크. Ex) "____/__/__"
EMPHASIZE Display(강조) Column(Field)를 시스템이 지정한 색상으로 강조한다
= 'C600' (개발자가 색상지정), = 'X' (시스템이 색상지정)
NO_SUM
ALV 제어: 열값에 관한 집합처리없음
TECH
ALV 컨트롤: 기술적 필드
CONVEXIT   변환루틴( Domain에 Exit가 걸린경우 해당정보를 제공한다 )
SELTEXT
ALV 제어: 다이얼로그 기능에 대한 열식별자
NO_CONVEXT
ALV 제어: 화면 Display시 변환종료를 고려하지 마십시오
ROLLNAME   ALV 제어: F1 도움말의 데이터 요소
Elment의 이름을 넣어주면된다. [Dynamic itab]이 설정기준이 된다.
DATATYPE   ABAP Dictionary 데이타유형
INTLEN   내부길이 (바이트단위)
LOWERCASE
소문자 사용/금지
REPTEXT
헤딩
HIER_LEVEL
ALV 컨트롤: 내부 사용
REPREP
ALV 컨트롤: 값은 rep./rep.intf에 대한 선택 기준입니다.
DOMNAME
도메인이름
SP_GROUP
그룹 키
DFIELDNAME
ALV 제어: 데이터베이스의 열 그룹에 대한 필드 이름
COL_ID
ALV 제어: 열 ID
AUTO_VALUE
ALV 제어: 자동값복사
VALEXI
고정값 존재
WEB_FIELD
ALV 제어: 내부 테이블 필드의 필드 이름
HREF_HNDL
정수
STYLE
ALV 제어: 스타일
STYLE2
ALV 제어: 스타일
STYLE3
ALV 제어: 스타일
STYLE4
ALV 제어: 스타일
DRDN_FIELD
ALV 제어: 내부 테이블 필드의 필드 이름
NO_MERGING
문자 필드 길이 1
H_FTYPE
ALV 트리 제어: 기능유형 (합계, 평균, 최대, 최소, ...)
COL_OPT
선택 열 최적화 엔트리
NO_INIT_CH
문자 필드 길이 1
TXT_FIELD
ALV 제어: 내부 테이블 필드의 필드 이름
ROUNDFIELD
ALV 제어: ROUND 사양을 가진 필드이름
DECMLFIELD
ALV 제어: DECIMALS 사양을 가진 필드이름
DD_OUTLEN
ALV 제어: 문자의 출력길이
COLDDICTXT
ALV 제어: DDIC 텍스트 참조 결정
SELDDICTXT
ALV 제어: DDIC 텍스트 참조 결정
TIPDDICTXT
ALV 제어: DDIC 텍스트 참조 결정



TECH_COL
ALV 컨트롤: 내부 사용
TECH_FORM
ALV 컨트롤: 내부 사용
TECH_COMP
ALV 컨트롤: 내부 사용
HIER_CPOS
ALV 제어: 계층구조적 열위치
H_COL_KEY
트리 컨트롤: 열 이름/항목 이름
H_SELECT
트리제어의 열을 선택할 수 있는지의 여부 지시
DD_ROLL
Data element (의미도메인)
DRAGDROPID
ALV 제어: 끌어옮기기 오브젝트에 대한 끌어옮기기 조정
MAC
문자 필드 길이 1
INDX_FIELD
정수
INDX_CFIEL
정수
INDX_QFIEL
정수
INDX_IFIEL
정수
INDX_ROUND
정수
INDX_DECML
정수
GET_STYLE
문자 필드 길이 1
MARK
문자 필드 길이 1