Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How to create CDS view dynamically without using Eclipse in SAP ABAP for HANA

former_member191161
Participant

Hi Gurus,

I am new to SAP ABAP for HANA.

I have a requirement about...

How to create CDS view dynamically without using Eclipse.

Could you please explain me in brief.

Please share me and waiting for your valuable information.

Regards,

Siva R

1 ACCEPTED SOLUTION

Hi Siva,

  Using methods in class CL_DD_DDL_HANDLER, we can create and delete CDS Views from ABAP.

Methods are like

IF_DD_DDL_HANDLER~SAVE

IF_DD_DDL_HANDLER~ACTIVATE

IF_DD_DDL_HANDLER~DELETE

Example:

ls_ddddlsrcv-ddtext = 'Test CDS View'.

ls_ddddlsrcv-ddlanguage = sy-langu.

ls_ddddlsrcv-ddlname = lv_ddl_source

ls_ddddlsrcv-source    = <CDS view code>

DATA(lref_dd_ddl_handler) = cl_dd_ddl_handler_factory=>create( ).

TRY.

     CALL METHOD lref_dd_ddl_handler->save

       EXPORTING

         name         = lv_ddl_source

         put_state    = lv_putstate

         ddddlsrcv_wa = ls_ddddlsrcv

*       prid         = -1

       .

   CATCH cx_dd_ddl_save .

ENDTRY.

TRY.

     CALL METHOD lref_dd_ddl_handler->activate

       EXPORTING

         name = lv_ddl_source

*       prid = -1

       .

   CATCH cx_dd_ddl_activate .

ENDTRY.

It will create both CDS entity and DDL SQL View in SE11.

Thanks,

Venkatesh

11 REPLIES 11

CarineTchoutouo
Product and Topic Expert
Product and Topic Expert
0 Kudos

Dear Siva,

ABAP CDS views can only be defined manually using The eclipse-based ABAP Development Tools.

http://scn.sap.com/community/abap/eclipse/blog/2014/02/04/new-data-modeling-features-in-abap-for-han...

Kind regards,

Carine

christian_seitel
Participant
0 Kudos

Hi,

what is your use case ?

If you are aiming solely at the DB-views (which are created from the CDS-Views) and your coding only needs to run on HANA then using ADBC might be an option.

If you have a CDS-view serving as a template this approach might look like:

NEW cl_sql_statement( )->execute_query( |select definition from views where view_name = 'ddic_name_of_template_cds_view'| ).

NEW cl_sql_statement( )->execute_ddl( |modified SQL-create-view command just retrieved| ).

Hi Siva,

  Using methods in class CL_DD_DDL_HANDLER, we can create and delete CDS Views from ABAP.

Methods are like

IF_DD_DDL_HANDLER~SAVE

IF_DD_DDL_HANDLER~ACTIVATE

IF_DD_DDL_HANDLER~DELETE

Example:

ls_ddddlsrcv-ddtext = 'Test CDS View'.

ls_ddddlsrcv-ddlanguage = sy-langu.

ls_ddddlsrcv-ddlname = lv_ddl_source

ls_ddddlsrcv-source    = <CDS view code>

DATA(lref_dd_ddl_handler) = cl_dd_ddl_handler_factory=>create( ).

TRY.

     CALL METHOD lref_dd_ddl_handler->save

       EXPORTING

         name         = lv_ddl_source

         put_state    = lv_putstate

         ddddlsrcv_wa = ls_ddddlsrcv

*       prid         = -1

       .

   CATCH cx_dd_ddl_save .

ENDTRY.

TRY.

     CALL METHOD lref_dd_ddl_handler->activate

       EXPORTING

         name = lv_ddl_source

*       prid = -1

       .

   CATCH cx_dd_ddl_activate .

ENDTRY.

It will create both CDS entity and DDL SQL View in SE11.

Thanks,

Venkatesh

0 Kudos

Dear Venkatesh,

Thank you so much for your response...

Exactly this is the one which I need.


The SAVE method is working fine, but while executing ACTIVATE method it is raising an exception due to global variable 'rc'(rc = 8). And view is not created.


So can you please help me out of this by providing more information.....




Regards,

Siva R

0 Kudos

Hi,

please note that class CL_DD_DDL_HANDLER is not released (and un-documented).

Depending on your use case usage of this class may not be a proper solution.

Regards, Christian

0 Kudos

Hi,

    How can i find the class is released or not before using in my use case.

Regards,

Venkatesh

0 Kudos

Hi,

  

    Can you paste your code here? i will check myself.

Regards,
Venkatesh

0 Kudos

e.g. run package check on

  cl_dd_ddl_handler_factory=>create( ).

  cl_abap_dbfeatures=>use_features( requested_features = VALUE #( ) ).

You will get a warning for cl_dd_ddl_handler_factory (but not for cl_abap_dbfeatures).

Triggering F1 for cl_abap_dbfeatures will show ABAP-documentation

(nothing for cl_dd_ddl_handler_factory).

0 Kudos

Hi Venkatesh,

Here is the code.

DATA : ls_ddddlsrcv TYPE DDDDLSRCV,

            lt_DDDLSRCV TYPE TABLE OF DDDDLSRCV,

            lv_ddl_source(40) TYPE c VALUE 'ZCDS_999'.

ls_ddddlsrcv-ddtext            = 'Test CDS View'.

ls_ddddlsrcv-ddlanguage    = sy-langu.

ls_ddddlsrcv-ddlname        = lv_ddl_source.

ls_ddddlsrcv-source         = '@AbapCatalog.sqlViewName: ''ZCDS_999''##define view zsp_CDS_999 as##select from sflight as soi##{##                                                 soi.connid as so_connid,##    soi.fldate as so_fldate,##    soi.price as so_price##}'.

DATA(lref_dd_ddl_handler) = cl_dd_ddl_handler_factory=>create( ).

DATA : lv_putstate TYPE OBJSTATE VALUE 'N',

            name         TYPE DDLNAME VALUE 'zsp_CDS_999'.

TRY.

    CALL METHOD lref_dd_ddl_handler->save

      EXPORTING

        name         = lv_ddl_source

        put_state    = lv_putstate

        ddddlsrcv_wa = ls_ddddlsrcv"ls_ddddlsrcv

*       prid         = -1

      .

  CATCH cx_dd_ddl_save .

ENDTRY.

TRY.

    CALL METHOD lref_dd_ddl_handler->activate

      EXPORTING

        name = lv_ddl_source

*       prid = -1

      .

  CATCH cx_dd_ddl_activate .

ENDTRY.

Regards,

Siva R

0 Kudos

Hi

    

     Remove the ## between statements and add space between statements. I hope it is working fine then.

Regards,

Venkatesh

0 Kudos

Dear Venkatesh,

Yes I have removed ## between statements and applied spaces between statements. It is working fine.

Thank you sooo much...!!!

Regards,

Siva R