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.
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:
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.
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
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…
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.
Gracias-
Abhishek
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073