
Hola a todos,
Hemos leído de varias publicaciones de blog anteriores: RAP para principiantes, Modernización con RAP, RAP gestionado.
RAP es un marco que aún permitiría usar ABAP para desarrollar aplicaciones modernas.
Con el blog a continuación, quiero mostrar un caso de uso de la vida real que demuestra el poder y la facilidad de uso de RAP no administrado.
Con la siguiente demostración, desarrollamos una aplicación RAP no administrada que utiliza API estándar de SAP y EML para permitir usos para crear y actualizar solicitudes de SAP.
Modelo RAP no administrado para solicitud de compra
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'PR Header root view'
define root view entity YRAP_RV_PRHEADER
as select from I_PurchaseRequisitionItemAPI01 //as _prhead
{
key PurchaseRequisition as prnum,
key PurchaseRequisitionItem,
PurchaseReqnItemUniqueID,
PurchasingDocument,
PurchasingDocumentItem,
PurReqnReleaseStatus,
PurchaseRequisitionType,
PurchasingDocumentSubtype,
PurchasingDocumentItemCategory,
PurchaseRequisitionItemText,
AccountAssignmentCategory,
Material,
MaterialGroup,
PurchasingDocumentCategory,
RequestedQuantity,
BaseUnit,
PurchaseRequisitionPrice,
PurReqnPriceQuantity,
MaterialGoodsReceiptDuration,
ReleaseCode,
PurchaseRequisitionReleaseDate,
PurchasingOrganization,
PurchasingGroup,
Plant,
OrderedQuantity,
DeliveryDate,
CreationDate,
CreatedByUser,
PurReqCreationDate,
PurReqnItemCurrency,
/* Associations */
_PurchaseRequisition,
_PurReqnAcctAssgmt
}
@EndUserText.label: 'Projection view for PR Header'
@Metadata.allowExtensions: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@Search.searchable: true
define root view entity YRAP_PV_PRHEADER
provider contract transactional_query
as projection on YRAP_RV_PRHEADER
{
key prnum,
key PurchaseRequisitionItem,
PurchaseReqnItemUniqueID,
PurchasingDocument,
PurchasingDocumentItem,
PurReqnReleaseStatus,
PurchaseRequisitionType,
PurchasingDocumentSubtype,
PurchasingDocumentItemCategory,
PurchaseRequisitionItemText,
@Consumption.valueHelpDefinition: [{
entity: {
name: 'I_AccountAssignmentCategory',
element: 'AccountAssignmentCategory'
}}]
@ObjectModel.text.element: ['AccountAssignmentCategory']
@Search.defaultSearchElement: true
AccountAssignmentCategory,
Material,
@Consumption.valueHelpDefinition: [{
entity: {
name: 'I_ProductGroup_2',
element: 'ProductGroup'
}}]
@ObjectModel.text.element: ['MaterialGroup']
@Search.defaultSearchElement: true
MaterialGroup,
PurchasingDocumentCategory,
RequestedQuantity,
BaseUnit,
PurchaseRequisitionPrice,
PurReqnPriceQuantity,
MaterialGoodsReceiptDuration,
ReleaseCode,
PurchaseRequisitionReleaseDate,
PurchasingOrganization,
@Consumption.valueHelpDefinition: [{
entity: {
name: 'I_PURCHASINGGROUP',
element: 'PurchasingGroup'
}}]
@ObjectModel.text.element: ['PurchasingGroup']
@Search.defaultSearchElement: true
PurchasingGroup,
@Consumption.valueHelpDefinition: [{
entity: {
name: 'I_PLANT',
element: 'Plant'
}}]
@ObjectModel.text.element: ['Plant']
@Search.defaultSearchElement: true
Plant,
OrderedQuantity,
DeliveryDate,
CreationDate,
CreatedByUser,
PurReqCreationDate,
PurReqnItemCurrency,
/* Associations */
_PurchaseRequisition,
_PurReqnAcctAssgmt
}
unmanaged implementation in class zbp_rap_rv_prheader unique;
strict ( 2 );
define behavior for YRAP_RV_PRHEADER alias prhead
late numbering
lock master
authorization master ( instance )
etag master PurReqCreationDate
{
field ( readonly )
prnum;
// PurchaseRequisitionItem;
create;
update;
delete;
}
projection;
strict ( 2 );
define behavior for YRAP_PV_PRHEADER alias prhead
{
use create;
use update;
use delete;
}
METHOD create.
**** Custom Create
LOOP AT entities ASSIGNING FIELD-SYMBOL(<fs_prs>).
*** now try to post
MODIFY ENTITIES OF i_purchaserequisitiontp
ENTITY purchaserequisition
CREATE FIELDS ( purchaserequisitiontype )
WITH VALUE #( ( %cid = 'My%CID_1'
purchaserequisitiontype="NB" ) )
CREATE BY \_purchaserequisitionitem
FIELDS ( plant
purchaserequisitionitemtext
accountassignmentcategory
requestedquantity
baseunit
purchaserequisitionprice
purreqnitemcurrency
materialgroup
purchasinggroup
)
WITH VALUE #(
( %cid_ref="My%CID_1"
%target = VALUE #(
( %cid = 'My%ItemCID_1'
plant = <fs_prs>-plant
purchaserequisitionitemtext = <fs_prs>-purchaserequisitionitemtext
accountassignmentcategory = <fs_prs>-accountassignmentcategory
requestedquantity = <fs_prs>-requestedquantity
baseunit = <fs_prs>-baseunit
purchaserequisitionprice = <fs_prs>-purchaserequisitionprice
purreqnitemcurrency = <fs_prs>-purreqnitemcurrency
materialgroup = <fs_prs>-materialgroup
purchasinggroup = <fs_prs>-purchasinggroup
)
)
)
)
ENTITY purchaserequisitionitem
CREATE BY \_purchasereqnitemtext
FIELDS ( plainlongtext )
WITH VALUE #( ( %cid_ref="My%ItemCID_1"
%target = VALUE #( (
%cid = 'MyTargetCID_2'
textobjecttype="B01"
language="E"
plainlongtext="item text created from PR Unmanaged APP"
) (
%cid = 'MyTargetCID_3'
textobjecttype="B02"
language="E"
plainlongtext="item2 text created from PR Unmanaged APP"
) )
) )
REPORTED DATA(ls_reported)
MAPPED DATA(ls_mapped)
FAILED DATA(ls_failed).
ENDLOOP.
ENDMETHOD.
METHOD update.
LOOP AT entities ASSIGNING FIELD-SYMBOL(<fs_prs>).
*** Update values
MODIFY ENTITIES OF i_purchaserequisitiontp
ENTITY purchaserequisitionitem UPDATE
SET FIELDS WITH VALUE #( (
purchaserequisition = <fs_prs>-prnum
purchaserequisitionitem = <fs_prs>-purchaserequisitionitem
purchaserequisitionitemtext = <fs_prs>-purchaserequisitionitemtext
requestedquantity = <fs_prs>-requestedquantity
baseunit = <fs_prs>-baseunit
) ) .
ENDLOOP.
ENDMETHOD.
Con el ejemplo anterior, podemos usar otras API estándar de SAP con RAP y crear aplicaciones que nos permitan resolver problemas de trabajo reales.
Espero que todos encuentren útil el blog y les pidamos que brinden sus pensamientos o comentarios como comentarios a este blog.
Si tiene alguna pregunta relacionada con RAP, utilice lo siguiente: –
También únase a la comunidad para obtener otra información maravillosa sobre este tema:- https://blogs.sap.com/tags/7e44126e-7b27-471d-a379-df205a12b1ff/
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