• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
SAP ABAP

ABAP Restful Application Programming Model (RAP), ABAP RAP – Acciones de fábrica

By s4pcademy 


Hola,

En esta publicación de blog para principiantes, veremos cómo podemos crear acciones de fábrica en el modelo de programación de aplicaciones ABAP Restful.

Árbitro: https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenbdl_action_nonfactory.htm

NOTA:

Estamos usando la misma base de código de aplicación que hemos usado para la demostración de objetos grandes (LOB) o el blog de carga de archivos. Consulte la siguiente URL:

https://blogs.sap.com/2023/02/13/abap-restful-application-programming-model-rap-abap-rap-file-upload-large-objects-lob/

Antes de comenzar con Factory Actions, comprendamos qué son las acciones en ABAP RAP:

Comportamiento:

Una acción puede ser una operación personalizada que se utiliza para realizar cambios en los datos de la instancia de BO. Las acciones RAP son operaciones no estándar que se utilizan para modificar la instancia de la entidad.

La acción se define en la definición de comportamiento y debe implementarse en la lógica personalizada debe implementarse en la clase de implementación de comportamiento.

Las acciones se pueden clasificar en dos tipos principales:

Acciones no de fábrica:

Para usar acciones que no sean de fábrica, la lógica personalizada debe implementarse y usarse para cambia el estado de la instancia.

Acción de fábrica:

Las acciones de fábrica se utilizan para crear instancias de entidad RAP BO.

    1. Acciones vinculadas a instancias: una acción de fábrica vinculada a instancias que se utiliza para copiar una o más instancias de BO y crea nuevas instancias basadas en los datos copiados.
    2. Acciones estáticas: las acciones de fábrica estáticas se pueden usar para crear instancias con valores predeterminados.
    3. Factory Actions no tiene ningún parámetro de retorno.

Agregar acción de fábrica a la definición de comportamiento

managed implementation in class zbp_student_hdr_tab_i unique;
strict ( 1 ); with draft;
define behavior for zstudent_hdr_tab_I alias Student
persistent table zstudent_hdr_tab
draft table zstudent_h_d_tab
lock master
total etag Locallastchangedat
authorization master ( global )
etag master Lastchangedat
{
  create;
  update;
  delete;
  association _Attachments { create; with draft; }
  field ( numbering : managed, readonly ) Id;
  draft action Edit;
  draft action Activate;
  draft action Discard;
  draft action Resume;
  draft determine action Prepare;

  //ADDING FACTORY ACTION FOR COPY
  factory action copyStudent[1];

  mapping for zstudent_hdr_tab
  {
    Id = id;
    Firstname = firstname;
    Lastname = lastname;
    Age = age;
    Course = course;
    Courseduration = courseduration;
    Dob = dob;
    Gender = gender;
    Lastchangedat = lastchangedat;
    Locallastchangedat = locallastchangedat;
    Status = status;
  }
}

define behavior for zstudent_att_tab_i alias Attachments
persistent table zstudent_att_tab
draft table zstudent_a_d_tab
lock dependent by _Student
authorization dependent by _Student
etag master LastChangedat
{
  update;
  delete;
  field ( readonly ) Id;
  association _Student { with draft; }
  mapping for zstudent_att_tab{
    AttachId    = attach_id;
    Attachment  = attachment;
    Comments    = comments;
    Filename    = filename;
    Id          = id;
    Mimetype    = mimetype;
  }
}

Crear implementación de método en la clase de implementación de comportamiento

Se crea la implementación del método.

Referir completo copiaEstudiante código de método

  1. Se creó una tabla interna de tipo Vista de interfaz para Entidad. Esta tabla interna almacenará el registro seleccionado desde la interfaz.
  2. Entidades de lectura si se selecciona Valores clave de Frontend.
  3. Agregue los valores seleccionados a la tabla interna para su uso posterior.
  4. Finalmente, use Modificar y establezca un nuevo registro en MAPPED.
CLASS lhc_Student DEFINITION INHERITING FROM cl_abap_behavior_handler.
  PRIVATE SECTION.

    METHODS get_global_authorizations FOR GLOBAL AUTHORIZATION
      IMPORTING REQUEST requested_authorizations FOR Student RESULT result.

    METHODS copyStudent FOR MODIFY
      IMPORTING keys FOR ACTION Student~copyStudent.



ENDCLASS.

CLASS lhc_Student IMPLEMENTATION.

  METHOD get_global_authorizations.
  ENDMETHOD.


  METHOD copyStudent.

    DATA: lt_student TYPE TABLE FOR CREATE zstudent_hdr_tab_I.

    " Reading selected data from frontend

    READ ENTITIES OF zstudent_hdr_tab_I IN LOCAL MODE
    ENTITY Student
    ALL FIELDS WITH CORRESPONDING #( keys )
    RESULT DATA(students)
    FAILED failed.

    LOOP AT students ASSIGNING FIELD-SYMBOL(<lfs_students>).

      APPEND VALUE #( %cid = keys[ KEY entity %key = <lfs_students>-%key ]-%cid
                      %is_draft = keys[ KEY entity %key = <lfs_students>-%key ]-%param-%is_draft
                      %data = CORRESPONDING #( <lfs_students> EXCEPT id )

       )  TO lt_student ASSIGNING FIELD-SYMBOL(<lfs_newStudent>).

    ENDLOOP.

    "Create BO Instance by COpy

    MODIFY ENTITIES OF zstudent_hdr_tab_I IN LOCAL MODE
    ENTITY Student
    CREATE FIELDS ( Firstname Lastname Age Course Courseduration Status Gender Dob )
    WITH lt_student
    MAPPED DATA(mapped_create).

    mapped-student = mapped_create-student.

  ENDMETHOD.

ENDCLASS.

Agregar botón Copiar a la aplicación de informe de lista Fiori

Todo listo…

Validación de cambios:

Vamos a validar la acción de copia de la aplicación

El botón Copiar estudiante está disponible, consulte la captura de pantalla a continuación.

Seleccione un registro para copiar y haga clic en el botón Copiar estudiante.

Dado que estamos utilizando la capacidad Draft en esta aplicación y hemos mencionado %is_borrador y establecer su valor dinámicamente (00 o 01)

Referirse %is_borrador línea en el código de abajo…

APPEND VALUE #( %cid = keys[ KEY entity %key = <lfs_students>-%key ]-%cid
                      %is_draft = keys[ KEY entity %key = <lfs_students>-%key ]-%param-%is_draft
                      %data = CORRESPONDING #( <lfs_students> EXCEPT id )

       )  TO lt_student ASSIGNING FIELD-SYMBOL(<lfs_newStudent>).

Cuando el usuario haga clic en el botón Copiar estudiante, se creará un nuevo registro en modo borrador (modo de edición), O se creará una nueva entrada de borrador. Los controles estarán abiertos para editar los valores en la página de objetos.

Cuando la aplicación no utiliza la funcionalidad de borrador, el registro copiado se guardará directamente en la tabla persistente, el registro no irá a la tabla de borrador.

Consulte el código a continuación, comentó %is_draft

APPEND VALUE #( %cid = keys[ KEY entity %key = <lfs_students>-%key ]-%cid
                      "%is_draft = keys[ KEY entity %key = <lfs_students>-%key ]-%param-%is_draft
                      %data = CORRESPONDING #( <lfs_students> EXCEPT id )

       )  TO lt_student ASSIGNING FIELD-SYMBOL(<lfs_newStudent>).

La salida se ve a continuación:

Vuelva a la página de lista y el nuevo registro copiado está disponible.

Anterior

Gracias-

Abhishek




Flujo de trabajo entre sistemas para soluciones SAP SuccessFactors
Previo
Desmitificando la detección de demanda en SAP IBP: cómo aporta valor a su cadena de suministro
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.