300x250
728x90

# 시작하기 전 


프로그램을 개발하면서 첨부파일을 올리는 경우가 있을 수가 있다.

예를 들어 회사 테이블에서 각 데이터마다 회사 이미지를 넣어줘야 하는 경우, 상품을 등록할 때 상품 이미지를 넣어줘야 하는 경우 등등.. 

 

여러 가지 경우들이 있을 것이다.  일단 시작해 보자.

 

기본 View에서 추가해야 할 것은 총 3가지이다.

필수) Attachment  : /dmo/attachment;

필수) mimetype : /dmo/mine_type;

선택) filename : /dmo/filename; 

 

 

# 예제, 첨부파일 설정

우리는 그룹 테이블 회사 이미지를 넣고 회사 이미지를 볼 수 있도록 요구사항이 왔다고 가정해보자. 


1. 우리는 Database Table에 위에서 추가해줘야 하는 필드들을 넣어줘야 한다. 

# 만약 Draft 기능이 추가된 상태라면 당연히 Draft Table에도 추가해줘야 한다. 

zattachment: /dmo/attachment;
zmimetype: /dmo/mime_type;
zfilename: /dmo/filename;


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


attachment            : abap.rawstring(0);
mime_type             : abap.char(128);
file_name             : abap.char(128);

# 혹시나 /dmo/* 가 없을 경우에는 밑에 타입을 사용하면 된다.

 

2. Root View entity에서 추가된 필드를 설정해 주고, @Semantics Annotation을 통해서 첨부파일속성을 설정해 주자. 

Data Definitions
ZI_CRUD_GJ

      @Semantics.largeObject: { mimeType: 'MimeType',  
                             fileName: 'FileName',   
                             acceptableMimeTypes: ['image/png', 'image/jpeg'],
                             contentDispositionPreference: #ATTACHMENT }
      zattachment            as Attachment,

      @Semantics.mimeType: true
      zmimetype              as MimeType,

      zfilename              as FileName,

@semantics.largeObject

- mimeType : MIME 객체의 타입을 담고 있는 필드명을 나타낸다. ( 대소문자를 구분한다 )

- fileName : MIME 객체의 파일명이 포함된 필드명을 나타낸다. ( 대소문자를 구분한다  )

- acceptableMimeTypes : 관련 스트림 속성에 허용되는 MIME 유형 목록을 제공하여 이에 따라 사용자 항목을 제한하거나 확인하며, 하위 유형이 허용되는 경우 *로 표시할 수 있다.

- contentDispositionPreference

#INLINE : 첨부파일클릭 할 때 새 창(브라우저)로 해당 파일이 열린다. 

#ATTACHMENT : 첨부파일클릭 할 때 다운로드 or 저장을 할 수 있다.


 

3. Behavior Definitions에서 Root View entity에 관한 Behavior에서도 Mapping for ...추가된 필드들맵핑해주어야 한다.

 

4. Root View entity 설정이 끝났다면, Projection View or Metadata extension에서 데이터를 넣을 수 있게 필드설정해 주고

 

# 헤더첨부파일 사진 보여주기


1. 요구사항에 맞게 사진을 보여주기 위해서Metadata extension에서 @UI. headerInfo를 설정해주어야 한다. 

Metadata Extensions

 

2. 첨부파일이 저장된 이미지 값을 가져오기 때문에 ( ImageUrl : 'Attachment' ) 설정을 해주면 된다. 

또한 HeadrInfo 안에 들어가는 것이 아닌 Title에서도 쓸 수 있기 때문에 참고 바란다. ( 지금은 간단한 예시

ZC_CRUD_GJ

 

실행시켜 보자.

 

# 실행( Odata V4 )


1. B2, 바나나라인에 대한 디테일 페이지에 들어가 보자.

 

2. 해당하는 그룹이미지 사진을 넣어보자. 파일을 넣으면 자동으로 타입, 파일명이 들어가진다.

 

3. 저장을 누르면 다음과 같이 나와있는 것을 볼 수가 있다. 

 

 

# 에러


# 만약 다음과 같은 에러가 뜨면 대소문자를 잘 써주었는지 확인해주어야 한다. 맞춤법 때문에 에러가 나는 경우이다.

Application Could not be stated due to technical issues.

Content-Disposition for non-stream property 'ATTACHMENT' is not alliowed.


 

끝.

 

 

도움이 되셨으면 클릭 한번 부탁드립니다!!

 

 

 

 

728x90