10-29-2015 5:52 AM
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
11-06-2015 8:03 AM
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
10-29-2015 2:26 PM
Dear Siva,
ABAP CDS views can only be defined manually using The eclipse-based ABAP Development Tools.
Kind regards,
Carine
11-05-2015 1:31 PM
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| ).
11-06-2015 8:03 AM
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-06-2015 10:34 AM
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
11-06-2015 12:14 PM
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
11-06-2015 1:53 PM
Hi,
How can i find the class is released or not before using in my use case.
Regards,
Venkatesh
11-06-2015 1:54 PM
Hi,
Can you paste your code here? i will check myself.
Regards,
Venkatesh
11-06-2015 2:25 PM
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).
11-06-2015 2:53 PM
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
11-06-2015 2:58 PM
Hi
Remove the ## between statements and add space between statements. I hope it is working fine then.
Regards,
Venkatesh
11-07-2015 7:36 AM
Dear Venkatesh,
Yes I have removed ## between statements and applied spaces between statements. It is working fine.
Thank you sooo much...!!!
Regards,
Siva R