This tutorial can be used in both SAP S/4HANA Cloud, private edition system and SAP S/4HANA on-premise system with release 2022 FPS01. We suggest using a Fully-Activated Appliance in SAP Cloud Appliance Library for an easy start without the need for system setup.
For SAP S/4HANA on-premise, create developer user with full development authorization
managedimplementationinclassZBP_SHOPCARTTP_###unique;strict(2);withdraft;definebehaviorforZR_SHOPCARTTP_###aliasShoppingCartpersistenttablezashopcart_###drafttableZDSHOPCART_###etagmasterLocalLastChangedAtlockmastertotaletagLastChangedAtauthorizationmaster(global){field(readonly)OrderUUID,CreatedAt,CreatedBy,LastChangedAt,LastChangedBy,LocalLastChangedAt,PurchaseRequisition,PrCreationDate,DeliveryDate;field(numbering:managed)OrderUUID;create;update(features:instance);delete;draftaction(features:instance)Edit;draftactionActivate;draftactionDiscard;draftactionResume;draftdetermineactionPrepare{validationcheckOrderedQuantity;validationcheckDeliveryDate;} determination setInitialOrderValues on modify {create;} determination calculateTotalPrice on modify {create;fieldPrice;} validation checkOrderedQuantity on save {create;fieldOrderQuantity;} validation checkDeliveryDate on save {create;fieldDeliveryDate;} validation checkPurchaseRequisition on save {fieldOverallStatus;} action ( features : instance ) createPurchaseRequisitionItem result [1] $self;
mapping for ZASHOPCART_###
{OrderUUID=order_uuid;OrderID=order_id;OrderedItem=ordered_item;Price=price;TotalPrice=total_price;Currency=currency;OrderQuantity=order_quantity;DeliveryDate=delivery_date;OverallStatus=overall_status;Notes=notes;CreatedBy=created_by;CreatedAt=created_at;LastChangedBy=last_changed_by;LastChangedAt=last_changed_at;LocalLastChangedAt=local_last_changed_at;PurchaseRequisition=purchase_requisition;PrCreationDate=pr_creation_date;}}
Save and activate.
Step 2Enhance behavior definition of projection view
+
Open your behavior definition ZC_SHOPCARTTP_### to enhance it. Add action createPurchaseRequisitionItem to your behavior definition.
In our scenario, we want to integrate the released purchase requisition API during the save sequence.
Open the behavior definition ZR_SHOPCARTTP_###, delete the following line:
ABAP
persistenttablezashopcart_###
In your behavior definition ZR_SHOPCARTTP_### add the with unmanaged save statement.
ABAP
withunmanagedsave
So that it looks as follows:
ABAP
managedimplementationinclassZBP_SHOPCARTTP_###unique;strict(2);withdraft;definebehaviorforZR_SHOPCARTTP_###aliasShoppingCartdrafttableZDSHOPCART_###etagmasterLocalLastChangedAtlockmastertotaletagLastChangedAtauthorizationmaster(global)withunmanagedsave{field(readonly)OrderUUID,CreatedAt,CreatedBy,LastChangedAt,LastChangedBy,LocalLastChangedAt,PurchaseRequisition,PrCreationDate,DeliveryDate;field(numbering:managed)OrderUUID;create;update(features:instance);delete;draftaction(features:instance)Edit;draftactionActivate;draftactionDiscard;draftactionResume;draftdetermineactionPrepare{validationcheckOrderedQuantity;validationcheckDeliveryDate;} determination setInitialOrderValues on modify {create;} determination calculateTotalPrice on modify {create;fieldPrice;} validation checkOrderedQuantity on save {create;fieldOrderQuantity;} validation checkDeliveryDate on save {create;fieldDeliveryDate;} validation checkPurchaseRequisition on save {fieldOverallStatus;} action ( features : instance ) createPurchaseRequisitionItem result [1] $self;
mapping for ZASHOPCART_###
{OrderUUID=order_uuid;OrderID=order_id;OrderedItem=ordered_item;Price=price;TotalPrice=total_price;Currency=currency;OrderQuantity=order_quantity;DeliveryDate=delivery_date;OverallStatus=overall_status;Notes=notes;CreatedBy=created_by;CreatedAt=created_at;LastChangedBy=last_changed_by;LastChangedAt=last_changed_at;LocalLastChangedAt=local_last_changed_at;PurchaseRequisition=purchase_requisition;PrCreationDate=pr_creation_date;}}
Save and activate it. Position the cursor on the with unmanaged save statement and use the shortcut ctrl + 1 to load the quick assist proposals, then double-click on Add required method save_modified in new local saver class to automatically create an empty implementation for the method. Implement it as follows:
ABAP
METHODsave_modified.DATA:lt_shopping_cart_asTYPE STANDARD TABLE OFzashopcart_###.IFcreate-shoppingcartIS NOT INITIAL.lt_shopping_cart_as=CORRESPONDING#(create-shoppingcartMAPPINGFROMENTITY).INSERTzashopcart_###FROMTABLE@lt_shopping_cart_as.ENDIF.IFupdateIS NOT INITIAL.CLEARlt_shopping_cart_as.lt_shopping_cart_as=CORRESPONDING#(update-shoppingcartMAPPINGFROMENTITY).LOOP AT update-shoppingcartINTODATA(shoppingcart)WHEREOrderUUIDIS NOT INITIAL.MODIFYzashopcart_###FROMTABLE@lt_shopping_cart_as.ENDLOOP.ENDIF.IFupdateIS NOT INITIAL.DATA(creation_date)=cl_abap_context_info=>get_system_date().LOOP AT update-shoppingcartINTODATA(OnlineOrder1)WHERE%control-OverallStatus=if_abap_behv=>mk-on.LOOP AT zbp_shopcarttp_###=>purchase_requisition_detailsINTODATA(purchase_reqn_via_eml)WHEREpidIS NOT INITIALANDorder_uuid=onlineorder1-OrderUUID.CONVERTKEYOFi_purchaserequisitiontpFROMpurchase_reqn_via_eml-pidTODATA(ls_pr_key1).UPDATEzashopcart_###SETpurchase_requisition=@ls_pr_key1-PurchaseRequisition,pr_creation_date=@creation_dateWHEREorder_uuid=@purchase_reqn_via_eml-Order_UUID.ENDLOOP.ENDLOOP.ENDIF.LOOP AT delete-shoppingcartINTODATA(shoppingcart_delete)WHEREOrderUUIDIS NOT INITIAL.DELETEFROMzashopcart_###WHEREorder_uuid=@shoppingcart_delete-OrderUUID.DELETEFROMzdshopcart_###WHEREorderuuid=@shoppingcart_delete-OrderUUID.ENDLOOP.ENDMETHOD.
Save, don’t activate it yet!
We use the unmanaged save option for our scenario, rather than the additional save option. This is because the additional save should only be used in case data needs to be saved in addition to BO data in a persistence outside the BO, as stated in the Additional Save documentation. Since this is not our use case (the purchase requisition is created and saved in the persistency of the shopping cart BO), we rely on the unmanaged save option.
Step 5Enhance behavior implementation
+
Hint: Please replace ### with your ID.
For S/4HANA on premise: Material D001 or similar needs to be created in system if S/4HANA on-premise is used. More information
In your Global Class, replace your code with following:
Add the missing constant to your implementation, the createPurchaseRequisitionItem action and enhance the save_modified method. In your Local Types, replace your code with following:
ABAP
CLASSlsc_zr_shopcarttp_###DEFINITIONINHERITING FROMcl_abap_behavior_saver.PROTECTED SECTION.METHODSsave_modifiedREDEFINITION.ENDCLASS.CLASSlsc_zr_shopcarttp_###IMPLEMENTATION.METHODsave_modified.DATA:lt_shopping_cart_asTYPE STANDARD TABLE OFzashopcart_###.IFcreate-shoppingcartIS NOT INITIAL.lt_shopping_cart_as=CORRESPONDING#(create-shoppingcartMAPPINGFROMENTITY).INSERTzashopcart_###FROMTABLE@lt_shopping_cart_as.ENDIF.IFupdateIS NOT INITIAL.CLEARlt_shopping_cart_as.lt_shopping_cart_as=CORRESPONDING#(update-shoppingcartMAPPINGFROMENTITY).LOOP AT update-shoppingcartINTODATA(shoppingcart)WHEREOrderUUIDIS NOT INITIAL.MODIFYzashopcart_###FROMTABLE@lt_shopping_cart_as.ENDLOOP.ENDIF.*************Add CONVERT KEY statement for Purchase Requisition create in case of EML implementation type**********IFupdateIS NOT INITIAL.DATA(creation_date)=cl_abap_context_info=>get_system_date().LOOP AT update-shoppingcartINTODATA(OnlineOrder1)WHERE%control-OverallStatus=if_abap_behv=>mk-on.LOOP AT zbp_shopcarttp_###=>purchase_requisition_detailsINTODATA(purchase_reqn_via_eml)WHEREpidIS NOT INITIALANDorder_uuid=onlineorder1-OrderUUID.CONVERTKEYOFi_purchaserequisitiontpFROMpurchase_reqn_via_eml-pidTODATA(ls_pr_key1).UPDATEzashopcart_###SETpurchase_requisition=@ls_pr_key1-PurchaseRequisition,pr_creation_date=@creation_dateWHEREorder_uuid=@purchase_reqn_via_eml-Order_UUID.ENDLOOP.ENDLOOP.ENDIF.************END of CONVER KEY EML code snippet******************LOOP AT delete-shoppingcartINTODATA(shoppingcart_delete)WHEREOrderUUIDIS NOT INITIAL.DELETEFROMzashopcart_###WHEREorder_uuid=@shoppingcart_delete-OrderUUID.DELETEFROMzdshopcart_###WHEREorderuuid=@shoppingcart_delete-OrderUUID.ENDLOOP.ENDMETHOD.ENDCLASS.CLASSlhc_shopcartDEFINITIONINHERITING FROMcl_abap_behavior_handler.PRIVATE SECTION.CONSTANTS:BEGIN OFc_overall_status,newTYPE stringVALUE'New / Composing',submittedTYPE stringVALUE'Submitted / Approved',cancelledTYPE stringVALUE'Cancelled',END OFc_overall_status.METHODS:get_global_authorizationsFORGLOBALAUTHORIZATIONIMPORTINGREQUESTrequested_authorizationsFORShoppingCartRESULT result,get_instance_featuresFORINSTANCEFEATURESIMPORTINGkeysREQUESTrequested_featuresFORShoppingCartRESULT result.METHODScalculateTotalPriceFORDETERMINEONMODIFYIMPORTINGkeysFORShoppingCart~calculateTotalPrice.METHODSsetInitialOrderValuesFORDETERMINEONMODIFYIMPORTINGkeysFORShoppingCart~setInitialOrderValues.METHODScheckDeliveryDateFORVALIDATEONSAVEIMPORTINGkeysFORShoppingCart~checkDeliveryDate.METHODScheckOrderedQuantityFORVALIDATEONSAVEIMPORTINGkeysFORShoppingCart~checkOrderedQuantity.METHODScreatePurchaseRequisitionItemFORMODIFYIMPORTINGkeysFORACTIONShoppingCart~createPurchaseRequisitionItemRESULT result.METHODScheckPurchaseRequisitionFORVALIDATEONSAVEIMPORTINGkeysFORShoppingCart~checkPurchaseRequisition.ENDCLASS.CLASSlhc_shopcartIMPLEMENTATION.METHODget_global_authorizations.ENDMETHOD.METHODget_instance_features." read relevant olineShop instance data
READENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartFIELDS(OverallStatus)WITHCORRESPONDING#(keys)RESULT DATA(OnlineOrders)FAILEDfailed." evaluate condition, set operation state, and set result parameter
" update and checkout shall not be allowed as soon as purchase requisition has been created
result=VALUE#(FOROnlineOrderINOnlineOrders(%tky=OnlineOrder-%tky%features-%update=COND#(WHENOnlineOrder-OverallStatus=c_overall_status-submittedTHENif_abap_behv=>fc-o-disabledWHENOnlineOrder-OverallStatus=c_overall_status-cancelledTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled)%action-Edit=COND#(WHENOnlineOrder-OverallStatus=c_overall_status-submittedTHENif_abap_behv=>fc-o-disabledWHENOnlineOrder-OverallStatus=c_overall_status-cancelledTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled)%action-createPurchaseRequisitionItem=COND#(WHENOnlineOrder-OverallStatus=c_overall_status-submittedOROnlineOrder-%is_draft=if_abap_behv=>mk-onTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled))).ENDMETHOD.METHODcalculateTotalPrice." read transfered instances
READENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartFIELDS(OrderIDTotalPricePriceOrderQuantity)WITHCORRESPONDING#(keys)RESULT DATA(OnlineOrders).LOOP AT OnlineOrdersASSIGNINGFIELD-SYMBOL(<OnlineOrder>)." calculate total value
<OnlineOrder>-TotalPrice=<OnlineOrder>-Price*<OnlineOrder>-OrderQuantity.ENDLOOP."update instances
MODIFYENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartUPDATEFIELDS(TotalPrice)WITHVALUE#(FOROnlineOrderINOnlineOrders(%tky=OnlineOrder-%tkyTotalPrice=<OnlineOrder>-TotalPrice)).ENDMETHOD.METHODsetInitialOrderValues.DATAdelivery_dateTYPE I_PurchaseReqnItemTP-DeliveryDate.DATA(creation_date)=cl_abap_context_info=>get_system_date()."set delivery date proposal
delivery_date=cl_abap_context_info=>get_system_date()+14."read transfered instances
READENTITIESOFZR_shopcarttp_###INLOCALMODEENTITYShoppingCartFIELDS(OrderIDOverallStatusDeliveryDateOrderQuantity)WITHCORRESPONDING#(keys)RESULT DATA(OnlineOrders)."delete entries with assigned order ID
DELETEOnlineOrdersWHEREOrderIDIS NOT INITIAL.CHECKOnlineOrdersIS NOT INITIAL." **Dummy logic to determine order IDs**
" get max order ID from the relevant active and draft table entries
SELECTMAX(order_id)FROMzashopcart_###INTO@DATA(max_order_id)."active table
SELECTSINGLEFROMzdshopcart_###FIELDSMAX(orderid)INTO@DATA(max_orderid_draft)."draft table
IFmax_orderid_draft>max_order_id.max_order_id=max_orderid_draft.ENDIF."set initial values of new instances
MODIFYENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartUPDATEFIELDS(OrderIDOverallStatusDeliveryDate)WITHVALUE#(FORorderINOnlineOrdersINDEXINTOi(%tky=order-%tkyOrderID=max_order_id+iOverallStatus=c_overall_status-new"'New / Composing'
* Price = COND #( WHEN order-OrderedItem = 'desktop' then 1500* when order-OrderedItem = 'laptop' then 2### )DeliveryDate=delivery_dateCreatedAt=creation_date)).ENDMETHOD.METHODcheckDeliveryDate.* " read transfered instancesREADENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartFIELDS(DeliveryDate)WITHCORRESPONDING#(keys)RESULT DATA(OnlineOrders).DATA(creation_date)=cl_abap_context_info=>get_system_date()."raise msg if 0 > qty <= 10
LOOP AT OnlineOrdersINTODATA(online_order).IFonline_order-DeliveryDateIS INITIALORonline_order-DeliveryDate=' '.APPENDVALUE#(%tky=online_order-%tky)TOfailed-ShoppingCart.APPENDVALUE#(%tky=online_order-%tky%state_area='VALIDATE_DELIVERYDATE'%msg=new_message_with_text(severity=if_abap_behv_message=>severity-errortext='Delivery Date cannot be initial'))TOreported-ShoppingCart.ELSEIF((online_order-DeliveryDate)-creation_date)<14.APPENDVALUE#(%tky=online_order-%tky)TOfailed-ShoppingCart.APPENDVALUE#(%tky=online_order-%tky%state_area='VALIDATE_DELIVERYDATE'%msg=new_message_with_text(severity=if_abap_behv_message=>severity-errortext='Delivery Date should be atleast 14 days after the creation date')%element-orderquantity=if_abap_behv=>mk-on)TOreported-ShoppingCart.ENDIF.ENDLOOP.ENDMETHOD.METHODcheckOrderedQuantity."read relevant order instance data
READENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartFIELDS(OrderIDOrderedItemOrderQuantity)WITHCORRESPONDING#(keys)RESULT DATA(OnlineOrders)."raise msg if 0 > qty <= 10
LOOP AT OnlineOrdersINTODATA(OnlineOrder).APPENDVALUE#(%tky=OnlineOrder-%tky%state_area='VALIDATE_QUANTITY')TOreported-ShoppingCart.IFOnlineOrder-OrderQuantityIS INITIALOROnlineOrder-OrderQuantity=' '.APPENDVALUE#(%tky=OnlineOrder-%tky)TOfailed-ShoppingCart.APPENDVALUE#(%tky=OnlineOrder-%tky%state_area='VALIDATE_QUANTITY'%msg=new_message_with_text(severity=if_abap_behv_message=>severity-errortext='Quantity cannot be empty')%element-orderquantity=if_abap_behv=>mk-on)TOreported-ShoppingCart.ELSEIFOnlineOrder-OrderQuantity>10.APPENDVALUE#(%tky=OnlineOrder-%tky)TOfailed-ShoppingCart.APPENDVALUE#(%tky=OnlineOrder-%tky%state_area='VALIDATE_QUANTITY'%msg=new_message_with_text(severity=if_abap_behv_message=>severity-errortext='Quantity should be below 10')%element-orderquantity=if_abap_behv=>mk-on)TOreported-ShoppingCart.ENDIF.ENDLOOP.ENDMETHOD.METHODcreatepurchaserequisitionitem.READENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartALLFIELDSWITHCORRESPONDING#(keys)RESULT DATA(OnlineOrders).***Integrate EML statement for Purchase Requisition create in case of released API implementation scenario ***************Begin of Code Snippet********DATA:purchase_requisitionsTYPE TABLEFORCREATEI_PurchaserequisitionTP,purchase_requisitionTYPE STRUCTUREFORCREATEI_PurchaserequisitionTP,purchase_requisition_itemsTYPE TABLEFORCREATEi_purchaserequisitionTP\_PurchaseRequisitionItem,purchase_requisition_itemTYPE STRUCTUREFORCREATEi_purchaserequisitiontp\\purchaserequisition\_purchaserequisitionitem,delivery_dateTYPE I_PurchaseReqnItemTP-DeliveryDate,nTYPE i.LOOP AT onlineordersINTODATA(onlineorder)WHEREOverallStatus=c_overall_status-new.* SQL statement to include product and productgroupSELECTSINGLEFROMzi_products_###FIELDSproduct,productgroupWHEREProductText=@onlineorder-OrderedItemINTO@DATA(productdata).** delivery_date = cl_abap_context_info=>get_system_date( ) .delivery_date=cl_abap_context_info=>get_system_date()+14.n+=1."purchase requisition
DATA(cid)=onlineorder-OrderID&&'_'&&n.purchase_requisition=VALUE#(%cid=cidpurchaserequisitiontype='NB').APPENDpurchase_requisitionTOpurchase_requisitions."purchase requisition item
purchase_requisition_item=VALUE#(%cid_ref=cid%target=VALUE#((%cid=|My%ItemCID_{n}|plant='1010'"Plant 01 (DE)
accountassignmentcategory='U'"unknown
* PurchaseRequisitionItemText = . "retrieved automatically from maintained MaterialInforequestedquantity=onlineorder-OrderQuantitypurchaserequisitionprice=onlineorder-Pricepurreqnitemcurrency=onlineorder-CurrencyMaterial=productdata-Productmaterialgroup=productdata-Productgroup* Material = 'laptop'* materialgroup = 'system'purchasinggroup='001'* purchasingorganization = '1010'DeliveryDate=delivery_date"delivery_date "yyyy-mm-dd (at least 10 days)
CreatedByUser=OnlineOrder-CreatedBy))).APPENDpurchase_requisition_itemTOpurchase_requisition_items.ENDLOOP.IFkeysIS NOT INITIAL."purchase requisition
MODIFYENTITIESOFi_purchaserequisitiontpENTITYpurchaserequisitionCREATEFIELDS(purchaserequisitiontype)WITHpurchase_requisitions"purchase requisition item
CREATEBY\_purchaserequisitionitemFIELDS(plant* purchaserequisitionitemtextaccountassignmentcategoryrequestedquantitybaseunitpurchaserequisitionpricepurreqnitemcurrencyMaterialmaterialgrouppurchasinggrouppurchasingorganizationDeliveryDate)WITHpurchase_requisition_itemsREPORTEDDATA(reported_create_pr)MAPPEDDATA(mapped_create_pr)FAILEDDATA(failed_create_pr).READENTITIESOFI_PurchaseRequisitionTPENTITYPurchaseRequisitionALLFIELDSWITHCORRESPONDING#(mapped_create_pr-purchaserequisition)RESULT DATA(pr_result)FAILEDDATA(pr_failed)REPORTEDDATA(pr_reported).ENDIF.IFmapped_create_prIS NOT INITIAL.LOOP AT onlineordersINTODATA(onlineorder1)WHEREOverallStatus=c_overall_status-new.LOOP AT mapped_create_pr-purchaserequisitionINTODATA(purchaserequisition_details).IFonlineorder1-OrderID=substring_before(val=purchaserequisition_details-%cidsub='_').APPENDVALUE#(cid=purchaserequisition_details-%cidpid=purchaserequisition_details-%pidorder_uuid=onlineorder1-OrderuuID)TOzbp_shopcarttp_###=>purchase_requisition_details.DELETE ADJACENT DUPLICATES FROMzbp_shopcarttp_###=>purchase_requisition_detailsCOMPARINGpid.ENDIF.ENDLOOP.ENDLOOP.ENDIF.***End of EML Code Snippet********MODIFYENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartUPDATEFIELDS(OverallStatus)WITHVALUE#(FORkeyINkeys(OrderUUID=key-OrderUUIDOverallStatus=c_overall_status-submitted))."Read the changed data for action result
READENTITIESOFzr_shopcarttp_###INLOCALMODEENTITYShoppingCartALLFIELDSWITHCORRESPONDING#(keys)RESULT DATA(result_read)."return result entities
result=VALUE#(FORresult_orderINresult_read(%tky=result_order-%tky%param=result_order)).ENDMETHOD.METHODcheckpurchaserequisition.ENDMETHOD.ENDCLASS.
Save and activate.
HINT: The option internal can be set before the action name to only provide an action for the same BO. An internal action can only be accessed from the business logic inside the business object implementation such as from a determination or from another action.
Go back to your behavior definition ZR_SHOPCARTTP_### and activate it again, if needed.
Step 6Open documentation
+
You have 2 options to open the documentation inside ADT.
Option 1:
Open your ABAP class zbp_shopcarttp_###, search for i_purchaserequisitiontp, press CTRL and click on it.service
Now you are in the released object i_purchaserequisitiontp.
Click Open Documentation to open it.service
Now you are able to read the documentation.serviceHINT: You can also open the Element Info by clicking i_purchaserequisitiontp and pressing F2.serviceYou can also switch to different layers inside the Element Info. service
Option 2:
Go back to tab i_purchaserequisitiontp. You are now able to see the behavior definition folder of the released object i_purchaserequisitiontp in the project explorer. Now navigate to the documentation i_purchaserequisitiontp and open it.serviceHINT: You can also check the API State of released object and see its visibility by selecting the properties.
Now you can see the documentation.service
Step 7Run SAP Fiori Elements preview
+
Open the SAP Fiori preview, select your order entry and click Create purchase requisition item.
preview
Now a purchase requisition item got created. Copy the purchase requisition item number for later use.
preview
Step 8Check purchase requisition
+
In the Project Explorer, select your system and right click on Properties.
preview
Select ABAP Development and copy the system URL without -api, paste it in a browser and log in.
preview
Select the Manage Purchase Requisitions tile.
preview
Search for your purchase requisition id and select your purchase requisition.
Share feedback on this tutorial or join the conversation in SAP Community.
Submit detailed feedbackDiscuss in Community
Steps
Step 1 of 9
1. Enhance behavior definition of data model2. Enhance behavior definition of projection view3. Enhance metadata extension4. Implement unmanaged save and save_modified5. Enhance behavior implementation6. Open documentation7. Run SAP Fiori Elements preview8. Check purchase requisition9. Test yourself
Joule
AI Notice
Joule is an AI assistant. Generative AI may produce inaccurate, incomplete, or biased information. Always verify important details before acting on them.
Conversations are sent to SAP-hosted large language models for processing. Do not include personal data, credentials, or confidential information in your messages.
Joule's responses are based on the SAP tutorial catalog and may not reflect the latest product changes. For authoritative guidance, consult the linked tutorials and official SAP documentation.