Step 1: Create the RAP Project
-
In ABAP Development Tools (ADT):
-
Go to File → New → ABAP Project.
-
Connect to your system.
-
Create a new ABAP Package (e.g.,
Z_RAP_BUTTONS).
-
-
Create the RAP artifacts:
-
Business Object (BO):
-
Right-click the package → New → Other ABAP Repository Object → Business Object → RAP Business Object.
-
Example:
ZBO_SALESORDER.
-
-
Step 2: Define the Behavior (Behavior Definition)
-
In your Behavior Definition (
.behavior):
define behavior for ZI_SALESORDER
persistent table ZI_SALESORDER
lock master
{
create;
update;
delete;
// Add custom action button
action confirm order result [0..1];
}
Step 3: Implement the Behavior Logic
-
In Behavior Implementation (
.behavior.abap):
implementation in class zbp_i_salesorder unique;
method confirm_order.
” Your business logic goes here
loop at it_entity into data(ls_entity).
ls_entity-status = ‘CONFIRMED’.
modify table et_entity from ls_entity.
endloop.
endmethod.
endimplementation.
Step 4: Expose Action in Service Definition
-
Open Service Definition (
.service):
define service ZC_SALESORDER_SRV {
expose ZI_SALESORDER;
// Optionally expose action explicitly
action confirm order;
}
Step 5: Register & Test Service
-
Go to /IWFND/MAINT_SERVICE → register your RAP service.
-
Test via SAP Gateway Client (
/IWFND/GW_CLIENT) to see the metadata:-
You should see your
confirm orderaction exposed.
-
Step 6: Fiori/UI Integration
-
If you use Fiori Elements (List Report / Object Page):
-
The
action confirm orderwill automatically appear as a button in the Object Page or List Report. -
No extra UI5 code is required if you use standard Fiori Elements.
-
If you want custom UI5, you can bind a button like this:
-
<Button
text=”Confirm Order”
press=”.onConfirmOrder”
/>
And in your controller:
onConfirmOrder: function(oEvent) {
var oModel = this.getView().getModel();
var sPath = oEvent.getSource().getBindingContext().getPath();
oModel.callFunction(“/ConfirmOrder”, {
method: “POST”,
urlParameters: {
SalesOrderID: oModel.getProperty(sPath + “/SalesOrderID”)
},
success: function() {
MessageToast.show(“Order Confirmed!”);
},
error: function() {
MessageToast.show(“Error!”);
}
});
}