SAP HANA CLOUD

[SAP RAP] unmanaged with 사용하여 Create 만들어보기 _1

선짱 2025. 11. 28. 10:27
반응형

 

계속 managed 를 써오다가 갑자기 로그 테이블이랑 일반 테이블이랑 두개를 넣으려고하니까

Managed 를 사용하면 안된다고한다.

그래서 unmanaged with 를 사용해서 코딩을해봄.

당장은 create 만 가능하게 만들었다.

 

 

 

로그 테이블 - zppt_0010_t

데이터 들어가는 테이블 - zppt_0030_t

 

LEFT OUTER JOIN 을 사용한 이유는 왼쪽에 있는 테이블 (_item > ZPPT_0010_T)의 모든 레코드를 결과에 포함헤서이다.

 

 

[ zppt_0010_t ]

 

@EndUserText.label : 'ROG_T'

@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE

@AbapCatalog.tableCategory : #TRANSPARENT

@AbapCatalog.deliveryClass : #A

@AbapCatalog.dataMaintenance : #RESTRICTED

define table zppt_0010_t {

 

  key client       : abap.clnt not null;

  key werks        : werks_d not null;

  key stlan        : stlan not null;

  key stlal        : abap.char(2) not null;

  key matnr        : matnr not null;

  zindex           : abap.numc(20) not null;

  idnrk            : idnrk;

  @Semantics.quantity.unitOfMeasure : 'zppt_0010_t.meins'

  menge            : menge_d;

  meins            : meins;

  lgort            : lgort_d;

  beikz            : beikz;

  alpgr            : cs_alpgr;

  alprf            : cs_alprf;

  ewahr            : ewahr;

  @EndUserText.label : 'Approval Ind(Y/N)'

  zappr            : abap.char(1);

  @EndUserText.label : 'PO Ind(Y/N)'

  zpoyn            : abap.char(1);

  stlnr            : pph_stnum;

  createdby        : abap.char(12);

  createdat        : abap.tims;

  lastchangedby    : abap.char(12);

  lastchangedat    : abap.tims;

  locallastchanged : abap.tims;

 

}

 

[ zppt_0030_t ]

 

@EndUserText.label : '실제 들어가는 T'

@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE

@AbapCatalog.tableCategory : #TRANSPARENT

@AbapCatalog.deliveryClass : #A

@AbapCatalog.dataMaintenance : #RESTRICTED

define table zppt_0030_t {

 

  key client         : abap.clnt not null;

  key werks          : werks_d not null;

  key stlnr          : pph_stnum not null;

  key stlan          : stlan not null;

  @EndUserText.label : 'Alternative BOM'

  key stlal          : abap.char(2) not null;

  key matnr          : matnr not null;

  @EndUserText.label : 'Index Key'

  zindex             : abap.numc(20) not null;

  ztype              : abap.char(1) not null;

  @EndUserText.label : 'Design Location 1'

  zloc1              : abap.char(200);

  @EndUserText.label : 'Design Location 2'

  zloc2              : abap.char(200);

  @EndUserText.label : 'Design Location 3'

  zloc3              : abap.char(200);

  @EndUserText.label : 'Design Location 4'

  zloc4              : abap.char(200);

  @EndUserText.label : 'Design Location 5'

  zloc5              : abap.char(200);

  @EndUserText.label : 'Design Location 6'

  zloc6              : abap.char(200);

  @EndUserText.label : 'Design Location 7'

  zloc7              : abap.char(200);

  @EndUserText.label : 'Design Location 8'

  zloc8              : abap.char(200);

  @EndUserText.label : 'Design Location 9'

  zloc9              : abap.char(200);

  @EndUserText.label : 'Design Location 10'

  zloc10             : abap.char(200);

  createdby          : abp_creation_user;

  createdat          : abp_creation_tstmpl;

  lastchangedby      : abp_lastchange_user;

  lastchangedat      : abp_lastchange_tstmpl;

  locallastchangedat : abp_locinst_lastchange_tstmpl;

 

}

 

 

 

 

[ ZR_PPT_0030_T] – Data Definition

 

@AccessControl.authorizationCheck:  #NOT_REQUIRED

@EndUserText.label: '##GENERATED ZPPT_0030_T'

define root view entity ZR_PPT_0030_T

  as select from zppt_0030_t

{

  key werks              as Werks,

  key stlnr              as Stlnr,

  key stlan              as Stlan,

  key stlal              as Stlal,

  key matnr              as matnr,

      zindex             as Zindex,

      ztype              as Ztype,

      zloc1              as Zloc1,

      zloc2              as Zloc2,

      zloc3              as Zloc3,

      zloc4              as Zloc4,

      zloc5              as Zloc5,

      zloc6              as Zloc6,

      zloc7              as Zloc7,

      zloc8              as Zloc8,

      zloc9              as Zloc9,

      zloc10             as Zloc10,

     

      @Semantics.user.createdBy: true

      createdby          as Createdby,

      @Semantics.systemDateTime.createdAt: true

      createdat          as Createdat,

      @Semantics.user.lastChangedBy: true

      lastchangedby      as Lastchangedby,

      @Semantics.systemDateTime.lastChangedAt: true

      lastchangedat      as Lastchangedat,

      @Semantics.systemDateTime.localInstanceLastChangedAt: true

      locallastchangedat as Locallastchangedat

 

}

 

[ ZC_PPT_0030_T] – Data Definition

 

@AccessControl.authorizationCheck: #NOT_REQUIRED

@Metadata.allowExtensions: true

@EndUserText.label: 'Projection View for ZR_PPT_0030_T'

define root view entity ZC_PPT_0030_T

  provider contract transactional_query

  as projection on ZR_PPT_0030_T

{

  key Werks,

  key Stlnr,

  key Stlan,

  key Stlal,

  key matnr,

  Zindex,

  Ztype,

  Zloc1,

  Zloc2,

  Zloc3,

  Zloc4,

  Zloc5,

  Zloc6,

  Zloc7,

  Zloc8,

  Zloc9,

  Zloc10,

  Lastchangedat

 

}

 

 

[ ZI_PPT_0030_T] – Data Definition

: Interface View (데이터 소스를 직접 정의)

 

@AbapCatalog.viewEnhancementCategory: [#NONE]

@AccessControl.authorizationCheck: #NOT_REQUIRED

@EndUserText.label: 'BOM CREATE'

@Metadata.ignorePropagatedAnnotations: true

@UI: {

  headerInfo: {

    typeName: 'BOM CREATE',

    typeNamePlural: 'BOM CREATE',

    title: { value: 'zIndex' },

    description: { value: 'zIndex' }

  }

}

define view entity ZI_PPT0030_T as select from zppt_0010_t as _item

    left outer join zppt_0030_t as _loc on  _item.werks  = _loc.werks

                                        and _item.stlnr  = _loc.stlnr

                                        and _item.stlan  = _loc.stlan

                                        and _item.stlal  = _loc.stlal

                                        and _item.matnr  = _loc.matnr

{

     key _item.werks  as Plant,

     key _item.stlan  as zUsage,

     key _item.matnr  as matnr,

     key _item.idnrk  as Component,

     _item.zindex as zIndex,

     @Semantics.quantity.unitOfMeasure: 'ReqUnit'

     _item.menge      as ReqQty,    

     _item.meins      as ReqUnit,   

     _item.lgort      as StgeLoc,   

     _item.beikz      as ProInd,    

     _item.alpgr      as AltItemGrp,

     _item.alprf      as AltPR,     

     _item.ewahr      as AltUsage,  

     _item.zappr      as ApprInd,   

     _item.zpoyn      as PoInd,     

     _loc.zloc1       as Zloc1,

     _loc.zloc2       as Zloc2,

     _loc.zloc3       as Zloc3,

     _loc.zloc4       as Zloc4,

     _loc.zloc5       as Zloc5,

     _loc.zloc6       as Zloc6,

     _loc.zloc7       as Zloc7,

     _loc.zloc8       as Zloc8,

     _loc.zloc9       as Zloc9,

     _loc.zloc10      as Zloc10,   

    

      @Semantics.user.createdBy: true

      _item.createdby         as CreatedBy,

 

      @Semantics.systemDateTime.createdAt: true

      _item.createdat         as CreatedAt,

 

      @Semantics.user.lastChangedBy: true

      _item.lastchangedby     as LastChangedBy,

 

      @Semantics.systemDateTime.lastChangedAt: true

      _item.lastchangedat     as LastChangedAt,

 

      @Semantics.systemDateTime.localInstanceLastChangedAt: true

      _loc.locallastchangedat as LocalLastChangedAt

}

 

 

[ZR_PPT_0030_T] – Behavior

 

managed implementation in class ZBP_PPT_0030_T unique;

strict ( 2 );

 

define behavior for ZR_PPT_0030_T

etag master lastchangedat

lock master

authorization master( global )

with unmanaged save

 

{

  field ( mandatory : create )

   Werks,

   Stlnr,

   Stlan,

   Stlal;

 

  field ( readonly : update )

   Werks,

   Stlnr,

   Stlan,

   Stlal;

 

  create;

  update;

  delete;

 

 

}

 

[ZC_PPT_0030_T] – Behavior

 

projection;

strict ( 2 );

 

define behavior for ZC_PPT_0030_T

use etag

 

{

  use create;

  use update;

  use delete;

}

 

[ZUI_PPT_0030_T] – SERVICE DEFINITION

 

@EndUserText.label: 'Service definition for ZC_PPT_0030_T'

define service ZUI_PPT_0030_T_O4 {

  expose ZC_PPT_0030_T;

}

 

SERVICE BINDING

바인딩 만들때는 v2 로 진행한다.

Unmanaged 에서 create 가 안먹히기 때문

조회는 상관 없음

 

 

[ZBP_PPT_0030_T] CLASS

 

CLASS lsc_zr_ppt_0030_t DEFINITION INHERITING FROM cl_abap_behavior_saver.

  PROTECTED SECTION.

    METHODS save_modified REDEFINITION.

ENDCLASS.

 

CLASS lsc_zr_ppt_0030_t IMPLEMENTATION.

“Behavior 안에서 맵핑시키지 못해 따로 create 동작 코딩을 해줘야한다.

  METHOD save_modified.

    TYPES: tt_zppt_0030_t TYPE STANDARD TABLE OF zppt_0030_t WITH DEFAULT KEY.

 

    DATA lt_create TYPE TABLE FOR CREATE zr_ppt_0030_t.

    DATA lt_update TYPE TABLE FOR UPDATE zr_ppt_0030_t.

    DATA lt_delete TYPE TABLE FOR DELETE zr_ppt_0030_t.

 

    READ ENTITIES OF zr_ppt_0030_t IN LOCAL MODE

      ENTITY zr_ppt_0030_t

      ALL FIELDS

      WITH VALUE #( FOR item IN create-zr_ppt_0030_t ( %key = item-%key ) )

      RESULT DATA(lt_created).

 

    READ ENTITIES OF zr_ppt_0030_t IN LOCAL MODE

      ENTITY zr_ppt_0030_t

      ALL FIELDS

      WITH VALUE #( FOR item IN update-zr_ppt_0030_t ( %key = item-%key ) )

      RESULT DATA(lt_updated).

 

    IF lt_created IS NOT INITIAL.

 

      DATA lt_insert TYPE tt_zppt_0030_t.

 

      lt_insert = CORRESPONDING tt_zppt_0030_t( lt_created MAPPING

                  werks = werks

                  stlnr = stlnr

                  stlan = stlan

                  stlal = stlal

                  matnr = matnr

                  zindex = zindex

                  ztype = ztype

                  zloc1 = zloc1

                  zloc2 = zloc2

                  zloc3 = zloc3

                  zloc4 = zloc4

                  zloc5 = zloc5

                  zloc6 = zloc6

                  zloc7 = zloc7

                  zloc8 = zloc8

                  zloc9 = zloc9

                  zloc10 = zloc10

         ).

 

      INSERT zppt_0030_t FROM TABLE @lt_insert.

 

    ENDIF.

 

 

  ENDMETHOD.

 

ENDCLASS.

 

CLASS lhc_zr_ppt_0030_t DEFINITION INHERITING FROM cl_abap_behavior_handler.

  PRIVATE SECTION.

    METHODS:

      get_global_authorizations FOR GLOBAL AUTHORIZATION

        IMPORTING

        REQUEST requested_authorizations FOR zr_ppt_0030_t

        RESULT result.

ENDCLASS.

 

CLASS lhc_zr_ppt_0030_t IMPLEMENTATION.

  METHOD get_global_authorizations.

  ENDMETHOD.

ENDCLASS.

반응형