Saltar al contenido

Agregue anotaciones de interfaz de usuario para pantallas y listas específicas y enlace a tablas de texto

El último tutorial mostró cómo crear un objeto comercial de mantenimiento muy simple utilizando una sola tabla de base de datos. Como muestra la aplicación, la interfaz de usuario todavía estaba vacía y no se mostraban columnas de tabla ni campos de entrada.

Este tutorial es para explicar cómo extender el BO con notas de UI. La adición de anotaciones en la interfaz de usuario definirá la interfaz de usuario.

Aprenderá a definir las notas para la pantalla de detalles. Esta pantalla se utiliza para crear nuevos objetos y mostrar todos los detalles de los registros básicos. Además, aprenderá a definir las columnas en la lista de resultados de búsqueda. Después de completar ambas secciones, debe tener una aplicación actual para mantener la tabla de la base de datos.

Sugerencia: las anotaciones de la interfaz de usuario generalmente se almacenan en un objeto de extensión de metadatos, pero se pueden retener directamente en la vista de proyección de CDS.
Se puede encontrar más información sobre la definición de anotaciones CDS para interfaces controladas por metadatos. aquí


Paso 1: crea una página de detalles

  1. Haga clic con el botón derecho en la carpeta de definición de datos en el explorador de su proyecto, seleccione Nuevo > Nueva extensión de metadatos.

  2. Cree una nueva extensión de metadatos:

    • Nombre: ZCAL_C_HOLIDAY_XXX
    • Descripción: Extensión de interfaz de días festivos

    min

    Hacer clic Siguiente>.

  3. Hacer clic Siguiente>.

    min

  4. Escoger Ver anotación y haga clic en Finalizar.

    min

  5. Ingresar #CORE por @Metadata.layer, ZCAL_C_HOLIDAY_XXX para anotar una vista e insertar todos los elementos con CTRL + Espacio.

    min

  6. Cree la jerarquía de características y anote los campos en la lista de elementos:

    @Metadata.layer: #CORE
    annotate view ZCAL_C_HOLIDAY_XXX
       with
    {
     @UI.facet: [
       {
         id: 'PublicHoliday',
         purpose: #STANDARD,
         label: 'Public Holiday',
         type: #IDENTIFICATION_REFERENCE,
         position: 1
       }]
    
     @UI: {  identification: [ { position: 1 } ],
             lineItem:       [ { position: 1 } ] }
     HolidayId;
     @UI: {  identification: [ { position: 2 } ],
             lineItem:       [ { position: 2 } ] }
     MonthOfHoliday;
     @UI: {  identification: [ { position: 3 } ],
             lineItem:       [ { position: 3 } ] }
     DayOfHoliday;
     @UI.hidden: true
     last_changed_at;
     @UI.hidden: true
     local_last_changed_at;
    
    }
    
  7. Guardar y activar. Reinicie su aplicación, ahora puede ver una lista de entradas de configuración. Así abierto HolidayRoot en su conexión de servicio.

  8. Hacer clic Crear.

    min

  9. Crea una nueva entrada:

    min

    Hacer clic Crear.

  10. Complete los otros campos y haga clic en Salvar.

    min

Hecho

Inicie sesión para responder la pregunta

Paso 2: agregue notas adicionales de la interfaz de usuario

  1. Abra la extensión de metadatos ZCAL_C_HOLIDAY_XXX Para editar.

  2. Para habilitar una columna HolidayId como un campo de búsqueda, agregue la nota @Search.searchable: true con el objeto de extensión de metadatos y @Search.defaultSearchElement: true al parque HolidayId.

    @Search.searchable: true
    
    @Search.defaultSearchElement: true
    HolidayId;
    
  3. Agregue información de encabezado para mostrar el título de página correcto
    El resultado de la lista se puede ordenar usando la nota presentationVariant en el encabezado.

    presentationVariant: [{ sortOrder: [{ by: 'HolidayId', direction:  #ASC }] }] }
    
  4. Tu código debería verse así:

    @Metadata.layer: #CORE
    @Search.searchable: true
    @UI: {
      headerInfo: { typeName: 'Public Holiday',
                    typeNamePlural: 'Public Holidays',
                    title: { type: #STANDARD, label: 'Public Holiday', value: 'HolidayId' } },
      presentationVariant: [{ sortOrder: [{ by: 'HolidayId', direction:  #ASC }] }] }
    annotate view ZCAL_C_HOLIDAY_XXX with
    {
      @UI.facet: [
        {
          id: 'PublicHoliday',
          purpose: #STANDARD,
          label: 'Public Holiday',
          type: #IDENTIFICATION_REFERENCE,
          position: 1
        }]
    
      @UI: {  identification: [ { position: 1 } ],
              lineItem:       [ { position: 1 } ] }
      @Search.defaultSearchElement: true
      HolidayId;
      @UI: {  identification: [ { position: 2 } ],
              lineItem:       [ { position: 2 } ] }
      MonthOfHoliday;
      @UI: {  identification: [ { position: 3 } ],
              lineItem:       [ { position: 3 } ] }
      DayOfHoliday;
      @UI.hidden: true
      last_changed_at;
      @UI.hidden: true
      local_last_changed_at;
    
    }
    
  5. Guardar y activar.

  6. Reinicie su aplicación para ver los cambios en la interfaz de usuario. Si está siendo abandonado en la vista previa, asegúrese de que todas las cosas estén activadas.

  7. Comprueba tu resultado.

    min

Hecho

Inicie sesión para responder la pregunta

Paso 3: cree comentarios de CDS para la tabla de texto

  1. En el explorador de proyectos, haga clic con el botón derecho en Definiciones de datos y seleccione Nuevo > Definición de datos.

    min

  2. Cree una nueva definición de datos:

    • Nombre: ZCAL_I_HOLIDAYTXT_XXX
    • Descripción: Ver CDS para texto de vacaciones

    min

    Hacer clic Siguiente>.

  3. Escoger Definir entidad de visualización con asociación principal como plantilla y haga clic en Finalizar.

    min

  4. Ahora defina la conexión al nodo raíz. Ingrese su vista raíz de CDS como un nombre de fuente de datos de destino. Nombra la asociación _Public_Holiday y el campo central HolidayId como característica de asociación. Categorice la vista del CDS como vista de texto.

    @AccessControl.authorizationCheck: #CHECK
    @EndUserText.label: 'Public Holiday Text'
    @ObjectModel.dataCategory: #TEXT
    define view entity ZCAL_I_HOLIDAYTXT_XXX
      as select from zcal_holitxt_xxx
      association to parent ZCAL_I_HOLIDAY_XXX as _Public_Holiday on $projection.HolidayId = _Public_Holiday.HolidayId
    {
          @Semantics.language: true
      key spras            as Language,
      key holiday_id       as HolidayId,
          @Semantics.text: true
          fcal_description as HolidayDescription,
          _Public_Holiday
    }
    
  5. Guardar y activar.

  6. Abrir vista de CDS ZCAL_I_HOLIDAY_XXX acuerdo CTRL y haga clic izquierdo en el nombre. Agregue la composición a la vista de texto:

    @AccessControl.authorizationCheck: #CHECK
    @EndUserText.label: '<span class="sapedia-acronym" data-template="sapediaAdCDS" aria-expanded="false">CDS</span> View for public holidays'
    define root view entity ZCAL_I_HOLIDAY_XXX
      as select from zcal_holiday_xxx
      composition [0..*] of ZCAL_I_HOLIDAYTXT_XXX           as _HolidayTxt
    {
      key holiday_id       as HolidayId,
          @Semantics.calendar.month: true
          month_of_holiday as MonthOfHoliday,
          @Semantics.calendar.dayOfMonth: true
          day_of_holiday   as DayOfHoliday,
          @Semantics.systemDateTime.lastChangedAt: true
          last_changed_at,
          @Semantics.systemDateTime.localInstanceLastChangedAt: true
          local_last_changed_at,
          _HolidayTxt
    }
    
    
  7. Guardar y activar.

  8. Haga clic derecho en la definición de datos ZCAL_I_HOLIDAYTXT_XXXy seleccione Nueva definición de datos.

    min

  9. Cree una nueva vista de proyección:

    • Nombre: ZCAL_C_HOLIDAYTXT_XXX
    • Descripción: Ver proyección para texto de vacaciones

    min

    Hacer clic Siguiente>.

  10. Hacer clic Siguiente>.

    min

  11. Escoger Definir vista de proyección como plantilla y haga clic en Finalizar.

    min

  12. Agregar la nota : redirected to parent ZCAL_C_HOLIDAY_XXX para la sociedad _Public_Holiday. Agregar la nota @Metadata.allowExtensions: true.

    @EndUserText.label: 'Projection view for public holiday text'
    @AccessControl.authorizationCheck: #CHECK
    @Metadata.allowExtensions: true
    define view entity ZCAL_C_HOLIDAYTXT_XXX
      as projection on ZCAL_I_HOLIDAYTXT_XXX
    {
      key Language,
      key HolidayId,
          HolidayDescription,
          _Public_Holiday : redirected to parent ZCAL_C_HOLIDAY_XXX
    }
    
  13. Guardar y activar.

  14. Abra la vista CDS ZCAL_C_HOLIDAY_XXX. Agregar la asociación _HolidayTxt : redirected to composition child ZCAL_C_HOLIDAYTXT_XXX

    @EndUserText.label: 'Projection view for public holidays'
    @AccessControl.authorizationCheck: #CHECK
    @Metadata.allowExtensions: true
    define root view entity ZCAL_C_HOLIDAY_XXX
      provider contract transactional_query
      as projection on ZCAL_I_HOLIDAY_XXX
    {
      key HolidayId,
          MonthOfHoliday,
          DayOfHoliday,
          last_changed_at,
          local_last_changed_at,
          _HolidayTxt : redirected to composition child ZCAL_C_HOLIDAYTXT_XXX
    }
    
  15. Guardar y activar.

Hecho

Inicie sesión para responder la pregunta

Paso 4: cree una definición de comportamiento para la tabla de texto

Consejo: Tenga en cuenta que la API Configure Business Configurations solo admite un nivel de subnodos, es decir, la raíz de su entidad puede tener una asociación con un tamaño arbitrario de entidades, pero esas subentidades no pueden tener asociaciones con subentidades adicionales.

  1. Definición de comportamiento abierto ZCAL_I_HOLIDAY_XXX. Agregue la definición de comportamiento a la vista de proyección de texto. Debido a que el nodo de texto es un subnodo de la entidad raíz, debe definirlo como dependiente de bloqueo. Habilite el nodo para actualizaciones y eliminaciones. La creación no se puede realizar aquí porque está definida por la composición de la que proviene el subnodo. Establecer campos HolidayId y Language como readonly:update para leerlo solo para actualizaciones. También asocie el nodo de texto en el nodo raíz.

    managed implementation in class zbp_cal_i_holiday_xxx unique;
    with draft;
    
    define behavior for ZCAL_I_HOLIDAY_xxx alias HolidayRoot
    lock master total etag last_changed_at
    persistent table zcal_holiday_xxx
    draft table zcal_d_holi_xxx
    {
      create;
      update;
      delete;
    
      field ( readonly : update ) HolidayId;
    
      association _HolidayTxt { create; with draft; }
    
      mapping for zcal_holiday_xxx corresponding
      {
        HolidayId = holiday_id;
        MonthOfHoliday = month_of_holiday;
        DayOfHoliday = day_of_holiday;
      }
    }
    
    define behavior for ZCAL_I_HOLIDAYTXT_XXX alias HolidayText
    persistent table zcal_holitxt_xxx
    draft table zcal_d_holit_xxx
    lock dependent by _Public_Holiday
    {
      update;
      delete;
      field ( readonly : update ) HolidayId;
      field ( readonly : update ) Language;
    
      association _Public_Holiday { with draft; }
    
      mapping for zcal_holitxt_xxx corresponding
      {
        Language = spras;
        HolidayId = holiday_id;
        HolidayDescription = fcal_description;
      }
    }
    
  2. Enciende el cursor zcal_d_holit_xxx y usa la ayuda rápida (CTRL + 1) para crear la tabla de borrador.

    min

  3. Cree una nueva tabla de borrador:

    • Nombre: ZCAL_D_HOLIT_XXX
    • Descripción: Borrador de tabla para la entidad. ZCAL_I_HOLIDAYTXT_XXX

    min

    Hacer clic Siguiente>.

  4. Hacer clic Finalizar.

    min

  5. Guarde y active la tabla de borradores ZCAL_D_HOLIT_XXX.

  6. Guarde y active la definición de comportamiento ZCAL_I_HOLIDAY_XXX.

  7. Abra la definición de comportamiento. ZCAL_C_HOLIDAY_XXX. Incluir la siguiente proyección de transporte y la asociación en la proyección de transporte existente.

    projection;
    use draft;
    
    define behavior for ZCAL_C_HOLIDAY_XXX alias HolidayRoot
    {
      use create;
      use update;
      use delete;
    
      use association _HolidayTxt { create; with draft; }
    }
    
    define behavior for ZCAL_C_HOLIDAYTXT_XXX alias HolidayText
    {
      use update;
      use delete;
    
      use association _Public_Holiday { with draft; }
    }
    
  8. Guardar y activar.

  9. Definición de servicio abierto ZCAL_UI_HOLIDAY_XXX y añadir expose ZCAL_C_HOLIDAYTXT_XXX as HolidayText;.

    @EndUserText.label: 'Service Definition for Public Holiday'
    define service ZCAL_UI_HOLIDAY_XXX {
      expose ZCAL_C_HOLIDAY_XXX as HolidayRoot;
      expose ZCAL_C_HOLIDAYTXT_XXX as HolidayText;
    }
    
  10. Guardar y activar.

Hecho

Inicie sesión para responder la pregunta

Paso 5: agregue anotaciones de IU a la tabla de texto

  1. Abra la extensión de metadatos ZCAL_C_HOLIDAY_XXX, agregue un nuevo elemento de función. Tipo de uso #LINEITEM_REFERENCE.

    @Metadata.layer: #CORE
    @Search.searchable: true
    @UI: {
      headerInfo: { typeName: 'Public Holiday',
                    typeNamePlural: 'Public Holidays',
                    title: { type: #STANDARD, label: 'Public Holiday', value: 'HolidayId' } },
      presentationVariant: [{ sortOrder: [{ by: 'HolidayId', direction:  #ASC }] }] }
    annotate view ZCAL_C_HOLIDAY_XXX with
    {
      @UI.facet: [
        {
          id: 'PublicHoliday',
          purpose: #STANDARD,
          label: 'Public Holiday',
          type: #IDENTIFICATION_REFERENCE,
          position: 1
        },
        {
          id: 'Description',
          label: 'Description',
          type: #LINEITEM_REFERENCE,
          position: 2,
          targetElement: '_HolidayTxt'
         }
        ]
    
      @UI: {  identification: [ { position: 1 } ],
              lineItem:       [ { position: 1 } ] }
      @Search.defaultSearchElement: true
      HolidayId;
      @UI: {  identification: [ { position: 2 } ],
              lineItem:       [ { position: 2 } ] }
      MonthOfHoliday;
      @UI: {  identification: [ { position: 3 } ],
              lineItem:       [ { position: 3 } ] }
      DayOfHoliday;
      @UI.hidden: true
      last_changed_at;
      @UI.hidden: true
      local_last_changed_at;
    }
    
  2. Guardar y activar.

  3. Clic derecho en Extensiones de metadatos, Seleccione Nuevo > Extensión de metadatos.

    min

  4. Cree una nueva extensión de metadatos:

    • Nombre: ZCAL_C_HOLIDAYTXT_XXX
    • Descripción: extensión de metadatos de texto libre

    min

    Hacer clic Siguiente>.

  5. Hacer clic Finalizar.

    min

  6. Edite su extensión de metadatos:

    @Metadata.layer: #CORE
    @UI: {
      headerInfo: { typeName: 'Description',
                    typeNamePlural: 'Descriptions',
                    title: { type: #STANDARD, value: 'Language' } } ,
      presentationVariant: [{ sortOrder: [{ by: 'Language', direction:  #ASC }] }] }
    annotate view ZCAL_C_HOLIDAYTXT_XXX with
    {
      @UI.facet: [
        {
          id: 'HolidayText',
          purpose: #STANDARD,
          type: #IDENTIFICATION_REFERENCE,
          label: 'Description',
          position: 1
        }
      ]
    
      @UI: { identification: [ { position: 1 } ],
             lineItem:   [ { position: 1 } ] }
      Language;
      @UI.hidden: true
      HolidayId;
      @UI: { identification: [ { position: 2 } ],
             lineItem:   [ { position: 2, label: 'Description' } ] }
      HolidayDescription;
    }
    
  7. Guardar y activar.

  8. Reinicie su aplicación y abra los detalles para salir. Ahora puede ver una nueva descripción de función que muestra todos los textos traducidos disponibles.

    min

    Donde no haya textos traducidos, cree uno con el botón crear después de hacer clic en el botón editar.

  9. Editar vista de CDS ZCAL_I_HOLIDAYTXT_XXX. Agregue asociación a la vista de texto de idioma.

    @AccessControl.authorizationCheck: #CHECK
    @EndUserText.label: 'Public Holiday Text'
    @ObjectModel.dataCategory: #TEXT
    define view entity ZCAL_I_HOLIDAYTXT_XXX
      as select from zcal_holitxt_xxx
      association        to parent ZCAL_I_HOLIDAY_XXX as _Public_Holiday on $projection.HolidayId = _Public_Holiday.HolidayId
      association [0..*] to I_LanguageText            as _LanguageText   on $projection.Language  = _LanguageText.LanguageCode
    {
          @Semantics.language: true
      key spras            as Language,
      key holiday_id       as HolidayId,
          @Semantics.text: true
          fcal_description as HolidayDescription,
          _Public_Holiday,
          _LanguageText
    }
    
  10. Guardar y activar.

  11. Vista de proyección abierta ZCAL_C_HOLIDAYTXT_XXX.

  12. Agregar la nota @Consumption.valueHelpDefinition: [ {entity: {name: 'I_Language', element: 'Language' }} ] al campo del idioma y la nota @ObjectModel.text.element:['LanguageDescription']. Agregar un nuevo campo LanguageDescription utilizando la localized sintaxis:

    @EndUserText.label: 'Projection view for public holiday texts'
    @AccessControl.authorizationCheck: #CHECK
    @Metadata.allowExtensions: true
    define view entity ZCAL_C_HOLIDAYTXT_XXX
      as projection on ZCAL_I_HOLIDAYTXT_XXX
    {
          @Consumption.valueHelpDefinition: [ {entity: {name: 'I_Language', element: 'Language' }} ]
          @ObjectModel.text.element:['LanguageDescription']
      key Language,
      key HolidayId,
          HolidayDescription,
          _LanguageText.LanguageName as LanguageDescription : localized,
          _Public_Holiday : redirected to parent ZCAL_C_HOLIDAY_XXX
    }
    
  13. Guardar y activar. Al reiniciar su aplicación, se muestra la descripción de la clave de idioma y la ayuda de entrada está disponible para la clave de idioma al crear un nuevo informe.

Hecho

Inicie sesión para responder la pregunta

Paso 6: vincule la descripción predeterminada a la entidad raíz

La lista de entradas de configuración existentes debe mostrar la descripción en el idioma de inicio de sesión, si se mantiene. Además, al crear una nueva entrada de configuración, se debe crear automáticamente un informe en el idioma de registro y se puede editar directamente.

  1. Vista de proyección abierta ZCAL_C_HOLIDAY_XXX y agrega el campo HolidayDescription de la composición a la vista Texto usando el localized syntax

    @EndUserText.label: 'Projection view for public holidays'
    @AccessControl.authorizationCheck: #CHECK
    @Metadata.allowExtensions: true
    define root view entity ZCAL_C_HOLIDAY_XXX
     provider contract transactional_query
     as projection on ZCAL_I_HOLIDAY_XXX
    {
     key HolidayId,
         MonthOfHoliday,
         DayOfHoliday,
         _HolidayTxt.HolidayDescription as HolidayDescription : localized,
         last_changed_at,
         local_last_changed_at,
         _HolidayTxt : redirected to composition child ZCAL_C_HOLIDAYTXT_XXX
    }
    
  2. Guardar y activar.

  3. Agregue el nuevo campo a la función en la extensión de metadatos ZCAL_C_HOLIDAY_XXX. El campo debe estar oculto en una página de objeto porque es comestible en la función de descripción.

    @Metadata.layer: #CORE
    @Search.searchable: true
    @UI: {
      headerInfo: { typeName: 'Public Holiday',
                    typeNamePlural: 'Public Holidays',
                    title: { type: #STANDARD, label: 'Public Holiday', value: 'HolidayId' } },
      presentationVariant: [{ sortOrder: [{ by: 'HolidayId', direction:  #ASC }] }] }
    annotate view ZCAL_C_HOLIDAY_XXX with
    {
      @UI.facet: [
        {
          id: 'PublicHoliday',
          purpose: #STANDARD,
          label: 'Public Holiday',
          type: #IDENTIFICATION_REFERENCE,
          position: 1
        },
        {
          id: 'Description',
          label: 'Description',
          type: #LINEITEM_REFERENCE,
          position: 2,
          targetElement: '_HolidayTxt'
         }
        ]
    
      @UI: {  identification: [ { position: 1 } ],
              lineItem:       [ { position: 1 } ] }
      @Search.defaultSearchElement: true
      HolidayId;
      @UI: {  identification: [ { position: 2, hidden: true } ],
              lineItem:       [ { position: 2 } ] }
      HolidayDescription;
      @UI: {  identification: [ { position: 3 } ],
              lineItem:       [ { position: 3 } ] }
      MonthOfHoliday;
      @UI: {  identification: [ { position: 4 } ],
              lineItem:       [ { position: 4 } ] }
      DayOfHoliday;
      @UI.hidden: true
      last_changed_at;
      @UI.hidden: true
      local_last_changed_at;
    
    }
    
  4. Guardar y activar.

  5. Si inicia su aplicación ahora, tendrá una nueva columna para la descripción. Si no guardó ninguna descripción en el idioma de inicio de sesión, el campo estará vacío incluso si contiene texto para otro idioma.

    min

  6. Edita la proyección de transporte ZCAL_C_HOLIDAY_XXX. Pon el augment anotar para crear y actualizar una acción de HolidayRoot.

    use create(augment);
    use update(augment);
    
  7. Agregar la nota implementation in class zbp_cal_c_holiday_xxx unique; a projection. Agregar field ( modify ) HolidayDescription; para la entidad raíz.

    projection implementation in class zbp_cal_c_holiday_XXX unique;
    use draft;
    
    define behavior for ZCAL_C_HOLIDAY_XXX alias HolidayRoot
    {
      use create(augment);
      use update(augment);
      use delete;
    
      use association _HolidayTxt { create; with draft; }
    
      field ( modify ) HolidayDescription;
    }
    
    define behavior for ZCAL_C_HOLIDAYTXT_XXX alias HolidayText
    {
      use update;
      use delete;
    
      use association _Public_Holiday { with draft; }
    }
    
  8. Guardar y activar.

  9. El cursor en el nombre de la clase, por favor ZBP_CAL_C_HOLIDAY_XXX y presione CTRl+1 utilice la solución rápida para crear la clase de implementación de comportamiento.

    minminmin

  10. Sustituye tu código por lo siguiente.

    CLASS lhc_holidayroot DEFINITION INHERITING FROM cl_abap_behavior_handler.
      PRIVATE SECTION.
    
        METHODS augment_create FOR MODIFY
          IMPORTING entities FOR CREATE holidayroot.
    
        METHODS augment_update FOR MODIFY
          IMPORTING entities FOR UPDATE holidayroot.
    
    ENDCLASS.
    
    CLASS lhc_holidayroot IMPLEMENTATION.
    
      METHOD augment_create.
        DATA: text_cba TYPE TABLE FOR CREATE zcal_i_holiday_xxx_holidaytxt,
              myrelates         TYPE abp_behv_relating_tab.
    
        LOOP AT entities INTO DATA(entity).
          APPEND sy-tabix TO myrelates.
          APPEND VALUE #( %cid_ref           = entity-%cid
                          %key-holidayid     = entity-%key-holidayid
                          %is_draft          = entity-%is_draft
                          %target            = VALUE #( ( %cid               = |CREATETEXTCID{ sy-tabix }|
                                                          %is_draft          = entity-%is_draft
                                                          language           = sy-langu
                                                          holidayid          = entity-holidayid
                                                          holidaydescription = entity-holidaydescription
                                                          %control           = VALUE #( holidayid          = if_abap_behv=>mk-on
                                                                                        language           = if_abap_behv=>mk-on
                                                                                        holidaydescription = entity-%control-holidaydescription ) ) ) )
            TO text_cba.
        ENDLOOP.
    
        MODIFY AUGMENTING ENTITIES OF zcal_i_holiday_xxx ENTITY holidayroot CREATE BY _holidaytxt
        FROM text_cba
        RELATING TO entities BY myrelates.
      ENDMETHOD.
    
      METHOD augment_update.
        DATA: text_update TYPE TABLE FOR UPDATE zcal_i_holidaytxt_xxx,
              text_cba   TYPE TABLE FOR CREATE zcal_i_holiday_xxx_holidaytxt.
        DATA: myrelates_update TYPE abp_behv_relating_tab,
              myrelates_cba   TYPE abp_behv_relating_tab.
    
        READ ENTITIES OF zcal_i_holiday_xxx
          ENTITY holidayroot BY _holidaytxt
            FROM VALUE #( FOR holiday_entity IN entities ( %tky = holiday_entity-%tky ) )
            LINK DATA(link).
    
        LOOP AT entities INTO DATA(entity) WHERE %control-holidaydescription = if_abap_behv=>mk-on.
          DATA(tabix) = sy-tabix.
    
          "If a Description with sy-langu already exists, perform an update. Else perform a create-by-association.
          IF line_exists( link[ KEY entity source-holidayid  = entity-%key-holidayid
                                           target-holidayid  = entity-%key-holidayid
                                           target-language = sy-langu ] ).
            APPEND tabix TO myrelates_update.
    
            APPEND VALUE #( %key-holidayid     = entity-%key-holidayid
                            %key-language      = sy-langu
                            %is_draft          = entity-%is_draft
                            holidaydescription = entity-holidaydescription
                            %control           = VALUE #( holidaydescription = entity-%control-holidaydescription ) )
             TO text_update.
          ELSE.
    
            APPEND tabix TO myrelates_cba.
    
            APPEND VALUE #( %tky         = entity-%tky
                            %target      = VALUE #( ( %cid               = |UPDATETEXTCID{ tabix }|
                                                      holidayid          = entity-holidayid
                                                      language           = sy-langu
                                                      %is_draft          = entity-%is_draft
                                                      holidaydescription = entity-holidaydescription
                                                      %control           = VALUE #( holidayid          = if_abap_behv=>mk-on
                                                                                    language           = if_abap_behv=>mk-on
                                                                                    holidaydescription = entity-%control-holidaydescription ) ) ) )
              TO text_cba.
          ENDIF.
        ENDLOOP.
    
        MODIFY AUGMENTING ENTITIES OF zcal_i_holiday_xxx
          ENTITY holidaytext UPDATE FROM text_update RELATING TO entities BY myrelates_update
          ENTITY holidayroot CREATE BY _holidaytxt FROM text_cba RELATING TO entities BY myrelates_cba.
      ENDMETHOD.
    
    ENDCLASS.   
    
  11. Guardar y activar.

  12. Si crea una nueva entrada ahora, puede definir directamente la descripción en el idioma de inicio de sesión.

    min

Hecho

Inicie sesión para responder la pregunta