2

I'm joining a table to itself, in an ABAP CDS view, and would like to create a unique GUID per row. Is that possible?

Something like:

select from my_view as a
  inner join my_view as b
    on a.ContextKey = b.ContextKey and
       a.DbKey != b.DbKey
{
    key sysuuid as MAPPING_ID,
    a.SomeField AS A,
    b.SomeField AS B
}
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
Florian
  • 4,821
  • 2
  • 19
  • 44
  • Already asked [here](https://answers.sap.com/questions/12628234/can-i-create-a-guid-in-an-abap-cds-view.html) – Jagger Mar 11 '19 at 18:24

1 Answers1

2

I am not aware any UUID function in CDS. You need to use CDS Table Function and AMDP.

Your Table Function view.

define table function ZP_TF_TEST
with parameters @Environment.systemField: #CLIENT mandt : mandt
returns
{
    mandt : mandt;
    ID    : uuid;
    A     : type_a; 
    B     : type_b;
}
implemented by method zcl_tf_test=>get_data;

Your CDS view.

define view ZZ_TF_TEST as select from ZP_TF_TEST( mandt : $session.client )
{
   key ID,
       A,
       B,
}

Your AMDP class .

CLASS zcl_tf_test DEFINITION PUBLIC FINAL CREATE PUBLIC .

PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb .

CLASS-METHODS get_data
    FOR TABLE FUNCTION ZP_TF_TEST.

PROTECTED SECTION.
PRIVATE SECTION.

ENDCLASS.

Implement method get_data and use SELECT sysuuid FROM dummy

METHOD get_data BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING my_table.

    RETURN SELECT 
                 a.mandt,
                 ( SELECT sysuuid FROM dummy  ) as id,
                 a.SomeField AS A,
                 b.SomeField AS B
               from my_table as a inner join my_table as b
                     on a.ContextKey = b.ContextKey and a.DbKey != b.DbKey
               where a.mandt= :mandt;

ENDMETHOD.
Haojie
  • 5,665
  • 1
  • 15
  • 14