https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/NW-ABAP-Business-Rule-Framework-(BRFplus)-blog-posts.xmlSAP Community - NW ABAP Business Rule Framework (BRFplus)2026-03-05T00:11:07.258852+00:00python-feedgenNW ABAP Business Rule Framework (BRFplus) blog posts in SAP Communityhttps://community.sap.com/t5/technology-blog-posts-by-members/utility-for-copying-mdg-brf-workflow-decision-tables/ba-p/13548921Utility for copying MDG BRF+ workflow Decision Tables2023-02-15T13:15:07+01:00wilbertsisonhttps://community.sap.com/t5/user/viewprofilepage/user-id/186461If for any reason, you have a fairly detailed segmentation of BP types and activities in MDG, there's a chance you have had to copy over BRF+ workflows.<BR />
<BR />
Now, this is not a terribly difficult thing to do as the Import/Export functionality in BRF+ is a great feature. However minor changes can be a headache and I was getting tired of clicking the Import/Export button every time that happens.<BR />
<BR />
Below is a little code I used to quickly copy over data the workflow BRF+ decision tables from one Change Request Workflow into another.<BR />
<BR />
It's obviously rough. The error management could be improved, but it's good enough for occasional adjustment activity.<BR />
<BR />
<STRONG>Helper Class </STRONG><BR />
<BR />
This is the local class I used as a helper.<BR />
<PRE class="language-abap"><CODE>CLASS lcl_brf DEFINITION.<BR />
PUBLIC SECTION.<BR />
METHODS get_reference_decision_tab<BR />
IMPORTING iv_crtype TYPE string<BR />
RAISING zcx_mdg.<BR />
METHODS get_decision_tab_object<BR />
IMPORTING iv_name TYPE string<BR />
RETURNING VALUE(ro_object) TYPE REF TO cl_fdt_decision_table<BR />
RAISING zcx_mdg.<BR />
METHODS get_decision_tab_data<BR />
IMPORTING iv_name TYPE string<BR />
RETURNING VALUE(rt_decision_tab) TYPE if_fdt_Decision_table=>ts_table_data<BR />
RAISING zcx_mdg.<BR />
METHODS copy_to<BR />
IMPORTING iv_crtype TYPE string<BR />
RAISING zcx_mdg.<BR />
METHODS copy_decision_table<BR />
IMPORTING iv_name TYPE string<BR />
it_decision_tab TYPE if_fdt_Decision_table=>ts_table_data<BR />
RAISING zcx_mdg.<BR />
<BR />
METHODS constructor.<BR />
<BR />
PRIVATE SECTION.<BR />
DATA mo_brf_query TYPE REF TO if_fdt_query.<BR />
DATA mo_brf_factory TYPE REF TO if_fdt_factory.<BR />
DATA mt_user_agent TYPE if_fdt_decision_table=>ts_table_data.<BR />
DATA mt_non_user_agent TYPE if_fdt_decision_table=>ts_table_data.<BR />
DATA mt_single_value TYPE if_fdt_decision_table=>ts_table_data.<BR />
ENDCLASS.<BR />
<BR />
CLASS lcl_brf IMPLEMENTATION.<BR />
METHOD constructor.<BR />
mo_brf_factory ?= cl_fdt_factory=>if_fdt_factory~get_instance( ).<BR />
mo_brf_query ?= mo_brf_factory->get_query( ).<BR />
ENDMETHOD.<BR />
METHOD get_decision_tab_data.<BR />
DATA : o_decision_table TYPE REF TO cl_fdt_decision_table.<BR />
mo_brf_query->get_ids(<BR />
EXPORTING<BR />
iv_name = CONV #( iv_name )<BR />
iv_object_type = if_fdt_constants=>gc_object_type_expression<BR />
IMPORTING<BR />
ets_object_id = DATA(app_ids) ).<BR />
o_decision_table ?= mo_brf_factory->get_expression( app_ids[ 1 ] ) .<BR />
o_decision_table->if_fdt_decision_table~get_table_data( IMPORTING ets_data = rt_decision_tab ).<BR />
ENDMETHOD.<BR />
METHOD get_reference_decision_tab.<BR />
DATA : o_ref_decision_table TYPE REF TO cl_fdt_decision_table.<BR />
mt_user_agent = get_decision_tab_data( |DT_USER_AGT_GRP_{ iv_crtype }| ).<BR />
mt_non_user_agent = get_decision_tab_data( |DT_NON_USER_AGT_GRP_{ iv_crtype }| ).<BR />
mt_single_value = get_decision_tab_data( |DT_SINGLE_VAL_{ iv_crtype }| ).<BR />
ENDMETHOD.<BR />
METHOD get_decision_tab_object.<BR />
mo_brf_query->get_ids(<BR />
EXPORTING<BR />
iv_name = CONV #( iv_name )<BR />
iv_object_type = if_fdt_constants=>gc_object_type_expression<BR />
IMPORTING<BR />
ets_object_id = DATA(app_ids) ).<BR />
ro_object ?= mo_brf_factory->get_expression( app_ids[ 1 ] ) .<BR />
ENDMETHOD.<BR />
METHOD copy_decision_table.<BR />
<BR />
<BR />
DATA : o_decision_table TYPE REF TO cl_fdt_decision_table.<BR />
TRY.<BR />
o_decision_table = get_decision_tab_object( iv_name ).<BR />
o_decision_table->if_fdt_transaction~enqueue( ).<BR />
o_decision_table->if_fdt_decision_table~set_table_data( EXPORTING its_data = it_decision_tab ).<BR />
o_decision_table->if_fdt_transaction~activate(<BR />
EXPORTING iv_deep = abap_true<BR />
IMPORTING et_message = DATA(messages)<BR />
ev_activation_failed = DATA(lv_actv_failed) ).<BR />
if lv_actv_failed = abap_true.<BR />
MESSAGE e000(zmdg) WITH 'Error updating' iv_name INTO zcl_messages=>sv_message_text.<BR />
RAISE EXCEPTION TYPE zcx_mdg<BR />
EXPORTING<BR />
mo_messages = NEW zcl_messages( )->set_system_message( ).<BR />
endif.<BR />
<BR />
o_decision_table->if_fdt_transaction~save( ).<BR />
o_decision_table->if_fdt_transaction~dequeue( ).<BR />
CATCH cx_fdt.<BR />
MESSAGE e000(zmdg) WITH 'Error updating' iv_name INTO zcl_messages=>sv_message_text.<BR />
RAISE EXCEPTION TYPE zcx_mdg<BR />
EXPORTING<BR />
mo_messages = NEW zcl_messages( )->set_system_message( ).<BR />
ENDTRY.<BR />
ENDMETHOD.<BR />
METHOD copy_to.<BR />
<BR />
copy_decision_table( iv_name = |DT_USER_AGT_GRP_{ iv_crtype }|<BR />
it_decision_tab = mt_user_agent ).<BR />
<BR />
copy_decision_table( iv_name = |DT_NON_USER_AGT_GRP_{ iv_crtype }|<BR />
it_decision_tab = mt_non_user_agent ).<BR />
<BR />
copy_decision_table( iv_name = |DT_SINGLE_VAL_{ iv_crtype }|<BR />
it_decision_tab = mt_single_value ).<BR />
<BR />
ENDMETHOD.<BR />
ENDCLASS.</CODE></PRE><BR />
<STRONG>Execution</STRONG><BR />
<BR />
Below is a sample code for using the class above.<BR />
<PRE class="language-abap"><CODE>START-OF-SELECTION.<BR />
TRY.<BR />
DATA(o_brf) = NEW lcl_brf( ).<BR />
<BR />
o_brf->get_reference_decision_tab( 'ZCR1' ).<BR />
o_brf->copy_to( 'ZCR2' ).<BR />
o_brf->copy_to( 'ZCR3' ).<BR />
CATCH /gerp/cx_mdg INTO DATA(o_error).<BR />
o_error->mo_messages->show_as_log( ).<BR />
ENDTRY.</CODE></PRE><BR />
<BR />
<BR />
With that utility, I can update one workflow and then use the utility to copy to all the others.<BR />
<BR />
This approach can be used in decision tables outside of MDG, but note that (1) the structure has to be the same and (2) you have to identify the application name is those situations as the Decision Table Name is not unique.<BR />
<BR />
<BR />
<BR />
2023-02-15T13:15:07+01:00https://community.sap.com/t5/supply-chain-management-blog-posts-by-sap/brf-new-output-management-use-ddic-interface-based-regular-custom-adobe/ba-p/13568423[BRF+ New Output Management]: Use DDIC Interface based Regular Custom Adobe Form – Handle ‘Spool request could not be found APOC_OR_MESSAGES 145’2023-03-10T22:34:24+01:00robinthakralhttps://community.sap.com/t5/user/viewprofilepage/user-id/801057<H2 id="toc-hId-963151584"><STRONG>INTRODUCTION</STRONG><STRONG>:</STRONG></H2><P>For the last few weeks, I have been working on a requirement that required a custom Adobe form for a standard <STRONG>GR label</STRONG> through NACE but later, we had to opt for new BRF+ O/P management. The ideal approach is to use fragmented Adobe form, but the number of fields was not there in the standard service interface. So, we opted for the <STRONG>DDIC interface option available in ‘Assign Form Templates’</STRONG>.<BR /><BR />Challenge: To achieve this requirement, I had faced a couple of challenges:</P><OL><OL><LI>Spool request could not be found - APOC_OR_MESSAGES (145): Discussed in this blog.</LI><LI>Dump - /BOBF/CX_FRW_FATAL – CLASS CL_APOC_OR_A_ITEM_GET_DOCUMENT: Create a Z* Driver program for the form individually and check the issue there – for my case, <A href="https://help.sap.com/saphelp_nwmobile71/helpdata/en/43/f0638873b56bede10000000a11466f/frameset.htm" target="_blank" rel="noopener noreferrer">ADS Configuration</A> was the issue, handled by me and basis tech guy</LI><LI>Bar code center alignment: <A href="https://blogs.sap.com/2023/03/16/adobe-form-centre-alignment-of-barcode-128-with-xml-schema/" target="_blank" rel="noopener noreferrer">Centre Alignment of BARCODE</A><SPAN> blog.</SPAN></LI></OL></OL><P><BR />In this blog post we will cover the steps to print GR Label and handle <STRONG>Spool request could not be found - APOC_OR_MESSAGES (145)</STRONG>.</P><H2 id="toc-hId-766638079"><STRONG>MAIN CONTENT</STRONG><STRONG>:</STRONG></H2><OL><OL><LI>Firstly, get the name of the standard program – subroutine (Form routine) that you would be triggered in the back-end from the business process. You can later, choose any other sub-routine as well, if that one has better parameters as per your requirement. Make sure the sub-routine you are choosing has *PDF or ADOBE* naming pattern to have the FP_JOB_OPEN/CLOSE else you must manually change the printout subroutine.</LI></OL></OL><P>** In my case, I have used Program – SAPM07DR, Routine - ENTRY_WE03_PDF.</P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;">2. Create an executable report ZAB_IM_SAPM07DR replicating subroutine-pool SAPM07DR, Includes ZIN_IM_M07DRTOP, ZIN_IM_M07DRSON_PDF from M07DRTOP, M07DRSON_PDF resp. and replace the std. includes with them in program ZAB_IM_SAPM07DR.</P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;">3. Go to SFP, create a DDIC interface as per the parameters exported in the sub-routine, handle the required processing logic, and create the required layout in ADOBE form to the interface.</P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><STRONG>4. Point of solution</STRONG>: In the subroutine, FORM_OPEN_PDF, just before FP_JOB_OPEN – handle the output parameters as below, as per <A href="https://me.sap.com/notes/0003016791" target="_blank" rel="noopener noreferrer">SAP KBA 3016791 - Error 'Spool request could not be found.'</A>:</P><P> </P><pre class="lia-code-sample language-abap"><code> gs_outputparams-getpdf = abap_false.
gs_outputparams-reqnew = abap_true.
gs_outputparams-covtitle = nast-tdcovtitle.
gs_outputparams-nodialog = abap_true.
gs_outputparams-preview = abap_false.</code></pre><P> </P><P><BR />Activate the program.</P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><BR />5. Share the name to functional or manage it in SPRO.<BR /><BR /></P><UL><UL><LI>Application Area: 'Cross-Application Components'</LI></UL></UL><P> </P><UL><UL><LI>Sub Application Area: 'Output Control'</LI></UL></UL><P> </P><UL><UL><LI>Select the configuration step 'Assign Form Templates' (SSCUI 102313)</LI></UL></UL><P> </P><UL><UL><LI>Maintain<BR /><BR /><UL><UL><LI>Application Object Type - GOODS_MOVEMENT</LI></UL></UL><BR /><UL><UL><LI>Output Type - GOODS_RECEIPT_LABEL</LI></UL></UL><BR /><UL><UL><LI>Form type – 2 – Output Forms (DDIC Interface)</LI></UL></UL><BR /><UL><UL><LI>Form Template ID - ZAF_IM_GR_LABEL</LI></UL></UL><BR /><UL><UL><LI>Program – ZAB_IM_SAPM07DR</LI></UL></UL><BR /><UL><UL><LI>Routine - ENTRY_WE03_PDF<IMG src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/assign-form-templates.png" border="0" /></LI></UL></UL></LI></UL></UL><P><EM>(Don’t forget to transport the config data with customizing transport in testing client – Tcode SCC1). </EM><BR /><BR /></P><OL><OL><LI>Now functional will go to transaction OPD or below process, that will trigger Fiori launchpad. <IMG src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/OPD.png" border="0" width="523" height="92" /></LI></OL></OL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">And edit the entry for the configured form under ‘Form Template’ for Rules for ‘GOODS_MOVEMENT’ replacing the standard form and activate it. </P><H2 id="toc-hId-570124574"><STRONG>Outcome</STRONG><STRONG>:</STRONG></H2><P>Now create a document in the test client for Material document and go to MIGO, enter MBLNR -> output-> Display Outputs.<BR /><BR />Enter a row with Preparation status & and details as per configuration.</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><IMG src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/MIGO-1.png" border="0" width="467" height="118" /></P><P>Select the row and click Display document (pdf icon)</P><P class="lia-indent-padding-left-180px" style="padding-left : 180px;"><IMG src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/output-1.png" border="0" width="424" height="181" /></P><P class="lia-align-center" style="text-align: center;">GR_LABEL - Z*FORM*</P><P><BR /><STRONG>Reference links</STRONG>:<BR /><BR /><A href="https://userapps.support.sap.com/sap/support/notes/2736938" target="_blank" rel="noopener noreferrer">2736938 - Settings for processing program and form templates in billing document in new output management</A><BR /><BR /><A href="https://me.sap.com/notes/2294198" target="_blank" rel="noopener noreferrer">2294198 - SAP S/4HANA output control - customized forms</A><BR /><BR /><A href="https://userapps.support.sap.com/sap/support/knowledge/en/2608890" target="_blank" rel="noopener noreferrer">2608890 - Standard S/4HANA Output Control settings for Purchasing (output forms and processing programs)</A><BR /><BR /><STRONG>Topic page</STRONG>:<BR /><BR />ABAP Topic: <A href="https://community.sap.com/topics/abap" target="_blank">https://community.sap.com/topics/abap</A>,<BR /><BR />post and answer questions <A href="https://answers.sap.com/tags/833755570260738661924709785639136" target="_blank" rel="noopener noreferrer">https://answers.sap.com/tags/833755570260738661924709785639136</A>.<BR /><BR /><BR />Follow me at <A href="https://www.linkedin.com/in/robinthakral/" target="_self" rel="nofollow noopener noreferrer">Robin Thakral</A></P>2023-03-10T22:34:24+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/idoc-configuration-for-sales-order-via-new-output-management/ba-p/13552496IDOC Configuration for Sales Order via New Output Management2023-05-16T10:08:34+02:00NishuBajpaihttps://community.sap.com/t5/user/viewprofilepage/user-id/128891In this blog I would like to share my knowledge and learning for triggering IDOCs for Sales Order using BRF+ OPD concept.<BR />
<BR />
The document will focus on following points<BR />
<OL><BR />
<LI>Configuring Output type</LI><BR />
<LI>Configuring Output type for Sales Order in OPD</LI><BR />
<LI>Required Custom Code Changes</LI><BR />
<LI>Mandatory system configuration</LI><BR />
<LI>Debugging hints</LI><BR />
</OL><BR />
<STRONG><U>Configuration steps for creating Z Output type</U></STRONG><BR />
<BR />
SPRO->Cross-Application Components->Output Control<BR />
<OL><BR />
<LI>Define Output Type<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture1-30.png" /><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture2-27.png" /></LI><BR />
</OL><BR />
2.Assign Output Channels<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture3-24.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture4-23.png" /></P><BR />
<U style="font-weight: bold">Configuration steps for Output Type via transaction code OPD.</U><BR />
<BR />
<BR />
<OL><BR />
<LI style="list-style-type: none"><BR />
<OL><BR />
<LI>Run transaction OPD, Select Determination Step as Output Type</LI><BR />
</OL><BR />
</LI><BR />
</OL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture5-15.png" /></P><BR />
2. Determination Step: Receiver<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture6-12.png" /></P><BR />
3. Determination Step: Channel<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture7-13.png" /></P><BR />
4. Determination step: Output Relevance<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture8-13.png" /></P><BR />
Output Relevance is based on the business requirement, but entry must exist in this step.<BR />
<BR />
If there is no specific business requirement, we can create it with generic condition like Overall Header = C (as mentioned in above screenshot).<BR />
<BR />
Output type is attached to Sales Order once above steps are complete.<BR />
<BR />
To enable new output management for sales order we need to activate it using following SPRO steps<BR />
<BR />
SPRO->Cross-Application Components->Output Control->Manage Application Object Type Activation<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture9-11.png" /></P><BR />
<BR />
<BR />
Mark status as Application Active for Sales Document.<BR />
<BR />
<STRONG><U>Custom Code Changes</U></STRONG><BR />
<BR />
At the time of defining Output Type, we can add a Z callback class. Create a Class by coyping standard class CL_SD_SLS_OUTPUT and add same under Z Output Type<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture10-11.png" /></P><BR />
In case of IDOC we need to modify method GET_LEGACY_DATA of class ZCL_CL_SD_SLS_OUTPUT<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture11-10.png" /></P><BR />
ET_LEGACY_DATA should be populated with Z output type.<BR />
<BR />
<BR />
<BR />
<STRONG><U>Mandatory System Configuration</U></STRONG><BR />
<OL><BR />
<LI>Customizing for SOMU</LI><BR />
</OL><BR />
<UL><BR />
<LI>Check if the Content Repository "SOMU_DB" exists in transaction OAC0.<BR />
The recommendation is the following:<BR />
Description: Output Management DB Storage<BR />
Storage type: SAP System Database<BR />
Storage subtype: Normal<BR />
Version: 0047<BR />
Content table: SFORM_A_STORAGE</LI><BR />
<LI>Check if the Content Repository "SOMU_DB" is assigned to Category "SOMU" in transaction OACT.</LI><BR />
</UL><BR />
Refer Note <STRONG><U>2279725</U></STRONG> for more details.<BR />
<BR />
2. Open transaction SBGRFCCONF to check if supervisor destination and Inbound destination is defined or not.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture12-9.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture13-8.png" /></P><BR />
<BR />
<BR />
Supervisor destination should exist in SM59.<BR />
<BR />
For detailed steps follow Note 2292571.<BR />
<BR />
<BR />
<BR />
Once above steps are followed, it will trigger IDOC for sales order.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture14-8.png" /></P><BR />
<STRONG><U>Debugging Hints</U></STRONG><BR />
<BR />
<STRONG><U> </U></STRONG><BR />
<BR />
Following are the debugging points which can be used if trigger output does not work for any reason<BR />
<OL><BR />
<LI>First and easiest: Breakpoint at constructor in call back class.</LI><BR />
</OL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/Picture15-7.png" /></P><BR />
2. Breakpoint at function module APOC_OR_ISSUE_OUTPUT. This will trigger in update task so update breakpoint should be activated first.<BR />
<BR />
<BR />
<BR />
I have tried covering all the issues which I have encountered during my Research. Hope it is helpful for you. Happy Learning!!<BR />
<BR />
<BR />
<BR />
2023-05-16T10:08:34+02:00https://community.sap.com/t5/technology-blog-posts-by-members/syniti-rdg-provides-a-new-functionality-importing-of-ui-field-property/ba-p/13576475Syniti RDG provides a new functionality-Importing of UI Field Property Rules by Change Request Step from one change request to another change request.2023-09-07T11:04:10+02:00former_member820385https://community.sap.com/t5/user/viewprofilepage/user-id/820385C<A href="https://www.sapappcenter.com/apps/59234" target="_blank" rel="nofollow noopener noreferrer">oncento Rapid Data Governance(RDG)</A> is a a SAP endorsed app based on SAP Master Data Governance. SAP Master Data Governance is a powerful solution to improve the quality and consistency of information across organizations by consolidating and centrally governing master data.<BR />
<BR />
This blog illustrates a copy feature in RDG. It involves multiple transactions and steps in SAP application for creating UI field rules in BRF+ and is considered as a complex process. With this feature, we can copy the field property rules from one change request to another change request type by change request step in a single screen.<BR />
<BR />
Below are the steps to copy the field property rules from one change request to another change request by CR step in RDG:<BR />
<UL><BR />
<LI>In the main RDG menu, select “Field Property Configuration.”</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog1.png" height="218" width="528" /></P><BR />
<BR />
<UL><BR />
<LI>Users must select the change request type to copy the field property rules from the existing change request type.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog2.png" height="263" width="534" /></P><BR />
<BR />
<UL><BR />
<LI>Select the “By CR Step Type” option in Select Rule Type dropdown.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog3.png" height="287" width="537" /></P><BR />
<BR />
<UL><BR />
<LI>After selecting the change request type, the user must select the CR step to copy the rules.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog4.png" height="270" width="541" /></P><BR />
<BR />
<UL><BR />
<LI>After selecting the CR Step, click on “Import” button to start the process of copying the rules.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog5.png" height="259" width="538" /></P><BR />
<BR />
<UL><BR />
<LI>After clicking on import button, select the source change request, source change request step and the entities and click on “Save”.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog6.png" height="269" width="544" /></P><BR />
<BR />
<UL><BR />
<LI>Select the suitable package.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog7.png" height="108" width="531" /></P><BR />
<BR />
<UL><BR />
<LI>The UI property rules are copied from source cr to target cr .</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog8.png" height="238" width="535" /></P><BR />
<BR />
<UL><BR />
<LI>The copied rule is generated in BRF+ automatically when we do the above process in RDG UI.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/blog9.png" height="247" width="538" /></P><BR />
<BR />
<BR />
<BR />
<BR />
<A href="https://store.sap.com/dcp/en/product/display-0000059234_live_v1" target="_blank" rel="noopener noreferrer">Concento RDG</A> is a certified SAP BTP solution and is available on <A href="https://store.sap.com/dcp/en/" target="_blank" rel="noopener noreferrer">SAP App Store</A><BR />
<BR />
Your opinions and feedback are highly appreciated, and feel free to post them in the comments section.<BR />
<BR />
Please follow and read more interesting blogs at <A href="https://blogs.sap.com" target="test_blank" rel="noopener noreferrer">https://blogs.sap.com</A><BR />
<BR />
You can also find and post questions about the product here: <A href="https://answers.sap.com/tags/67837800100800004488" target="_blank" rel="noopener noreferrer">SAP Master Data Governance Community</A>2023-09-07T11:04:10+02:00https://community.sap.com/t5/technology-blog-posts-by-members/mdg-s-mdg-rule-based-workflow/ba-p/13574512MDG-S: MDG rule-based workflow2023-10-01T11:29:15+02:00343929https://community.sap.com/t5/user/viewprofilepage/user-id/515729<H1 id="toc-hId-834874151"><STRONG><U>Introduction:</U></STRONG></H1><BR />
This blog post will describe in detail how to trigger email using using Rule Base Workflow(WS60800086)<BR />
<H1 class="dm-hd dm-align-left dm-section-hero__headline" id="toc-hId-638360646"><U>Requirement:</U></H1><BR />
<UL><BR />
<LI>Bank data in vendor master data when changed (Account no., IBAN, A/C holder name, etc), or deleted, an email notification to be triggered to the vendor</LI><BR />
<LI>Email available in the general section of vendor (LFA1) to be used to send the notification.</LI><BR />
<LI>Email to be triggered to the SPU owners.</LI><BR />
</UL><BR />
<H1 class="dm-hd dm-align-left dm-section-hero__headline" id="toc-hId-441847141"><U>Solution:</U></H1><BR />
For this requirement, I have enhanced the existing sub-workflow WS90100004 using transaction SWDD and the step already defined where BRFplus workflow (<STRONG>WS60800086</STRONG>) to call the sub-workflow. I did not pursue the BADI approach. Set up is already there I just enhance the existing subworkflow WS90100004<BR />
<BR />
<U>Steps to be followed:</U><BR />
<BR />
Tcode: MDGIMG<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/3-1.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/4.png" /></P><BR />
Based on the CR type check the decision table<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/5.png" /></P><BR />
<STRONG>Single Value Decision Table</STRONG><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/1.png" /></P><BR />
<STRONG>Non-User Agent Decision Table</STRONG><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/2.png" /></P><BR />
<BR />
<H2 id="toc-hId-374416355">Sub-workflow <STRONG>WS90100004</STRONG> Overview</H2><BR />
Enhance Subworkflow WS90100004<BR />
<UL><BR />
<LI>This WS90100004 workflow has 2 steps added:<BR />
<UL><BR />
<LI><STRONG>Check for CR Status</STRONG> – Condition steps: Check the status of the CR if status equal = 'AM' (changed by vendor MD team) then trigger email to Vendor and SPU owners</LI><BR />
<LI><STRONG>NOTIFICATION OF BANK ACCOUNT CHANGE</STRONG> – Activity steps: All the ABAP logic ( (Email recipient and email content) placed here in the class /BPMDG/SU_CL_BANK_CHANG_NOTIF and method SEND_NOTIF_BANK_ACCOUNT_CHANGE.</LI><BR />
<LI><STRONG>Workflow End</STRONG></LI><BR />
</UL><BR />
</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/8.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/6.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/7.png" height="114" width="495" /></P><BR />
<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/9.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/10-1.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/11.png" /></P><BR />
<BR />
<BR />
Created 1 Workflow containers: CR_STATUS<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/12.png" /></P><BR />
<BR />
<BR />
I hope this blog was useful for those of you trying to get email notification configured for MDG.2023-10-01T11:29:15+02:00https://community.sap.com/t5/technology-blog-posts-by-members/syniti-rdg-provides-a-new-functionality-copying-the-business-rules-from-one/ba-p/13575568Syniti RDG provides a new functionality-copying the business rules from one change request to another change request2024-01-15T16:04:05+01:00ashok704https://community.sap.com/t5/user/viewprofilepage/user-id/820390<A href="https://www.sapappcenter.com/apps/59234" target="_blank" rel="nofollow noopener noreferrer">Concento Rapid Data Governance(RDG)</A> is a SAP endorsed app based on Data Governance. It also helps business users to automate many of important steps to implement the MDG.<BR />
<BR />
For example, the user can create different types of business rules effectively to the respective change request in less amount of time. RDG provides a user-friendly interface where all its functionalities would be in a single screen.<BR />
<BR />
In traditional SAP MDG system, the user with low technical knowledge is considered as a high technical task of copying the business rules from one change request to another change request type. RDG is now capable to copy different types of rules in easier way and in less amount of time effectively.<BR />
<BR />
Below are the additional steps to copy the business rules from one change request to another change request in RDG:<BR />
<UL><BR />
<LI>In the main RDG menu, select “Manage Business Rules”.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/Screenshot-2024-01-15-125130.png" height="246" width="541" /></P><BR />
<BR />
<UL><BR />
<LI>Select change request type to which user want to copy the business rules from existing change request type.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/Screenshot-2024-01-15-125404.png" height="260" width="542" /></P><BR />
<BR />
<UL><BR />
<LI>After selecting the change request type, click on import button to copy the rules.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/rdg1.png" height="359" width="537" /></P><BR />
<BR />
<UL><BR />
<LI>After selecting the existing change request type, the different types of business rules present in that change request can be seen. Then we have to select the rules which we want to copy to the current change request type and click on save button.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/rdg2.png" height="361" width="530" /></P><BR />
<BR />
<UL><BR />
<LI>A status window will be popped up by displaying the status of business rules.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/rdg3.png" height="233" width="534" /></P><BR />
<BR />
<UL><BR />
<LI>The rules which we selected are copied from existing change request to current change request and got generated automatically in Business Rule Framework Plus to respective change request type.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/rdg4.png" height="246" width="537" /></P><BR />
<BR />
<UL><BR />
<LI>Below are the some standard screens related to brf+ where the copied rules generated automatically.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/rdg7.png" height="270" width="534" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2024/01/rdg5.png" height="251" width="524" /></P><BR />
<BR />
<BR />
<A href="https://store.sap.com/dcp/en/product/display-0000059234_live_v1" target="_blank" rel="noopener noreferrer"> Concento RDG</A> is certified SAP BTP solution and is available on <A href="https://store.sap.com/dcp/en/" target="_blank" rel="noopener noreferrer">SAP App Store</A><BR />
<BR />
2024-01-15T16:04:05+01:00https://community.sap.com/t5/technology-blog-posts-by-members/mdg-dqm-troubleshooting-dqm-validation-rules-for-central-governance-product/ba-p/13586688MDG DQM: Troubleshooting DQM validation rules for central governance - Product Master S/4 HANA2024-01-30T16:03:50.529000+01:000012anirbanhttps://community.sap.com/t5/user/viewprofilepage/user-id/39679<P><FONT face="arial,helvetica,sans-serif">Hi All,</FONT></P><P><FONT face="arial,helvetica,sans-serif">Season's greetings!! </FONT></P><P><FONT face="arial,helvetica,sans-serif">In 2023 I focussed on sharing my insights on the data quality management module of <a href="https://community.sap.com/t5/c-khhcw49343/SAP+Master+Data+Governance/pd-p/67837800100800004488" class="lia-product-mention" data-product="697-1">SAP Master Data Governance</a> through multiple blogs( "<STRONG><EM>as if it was used be called in the old website</EM></STRONG>"). If you have missed some of these then here is a quick link to all of the content published earlier.</FONT></P><OL><LI><FONT face="arial,helvetica,sans-serif"> <A class="" href="https://community.sap.com/t5/technology-blogs-by-members/mdg-dqm-enriching-product-master-data-with-derivation-rules-in-s-4-hana/ba-p/13568112" target="_blank">MDG DQM: Enriching product master data with derivation rules in S/4 HANA</A></FONT></LI><LI><FONT face="arial,helvetica,sans-serif"> <A class="" href="https://community.sap.com/t5/technology-blogs-by-members/mdg-dqm-employing-rules-in-central-governance-mass-processing-in-s-4-hana/ba-p/13554483" target="_blank">MDG DQM:Employing rules in central governance & mass processing in S/4 HANA</A></FONT></LI><LI><FONT face="arial,helvetica,sans-serif"> <A class="" href="https://community.sap.com/t5/technology-blogs-by-members/mdg-dqm-empowering-your-business-with-high-quality-data-in-s-4hana/ba-p/13548515" target="_blank">MDG DQM: Empowering Your Business with High-Quality Data in S/4HANA</A></FONT></LI></OL><P><FONT face="arial,helvetica,sans-serif">As I start 2024, I have delved a little deeper into this topic and with the new community platform launched, I was excited to share some of the insights from <a href="https://community.sap.com/t5/c-khhcw49343/SAP+Master+Data+Governance/pd-p/67837800100800004488" class="lia-product-mention" data-product="697-2">SAP Master Data Governance</a> data quality management on this new platform.</FONT></P><P><FONT face="arial,helvetica,sans-serif">So without further Adieu let's dive in !!</FONT></P><H2 id="toc-hId-964941157"><FONT face="arial,helvetica,sans-serif"><STRONG>INTRODUCTION</STRONG></FONT></H2><P><FONT face="arial,helvetica,sans-serif">In this blog post we will cover a few steps on how we can troubleshoot the BRF+ validations which is the underlying framework for MDG DQM. This module of MDG is still evolving rapidly as we move towards cloud first and a clean core approach. As MDG developers we are still pretty comfortable with classical BADI's for doing validations and we all know it's quite easy to troubleshoot the rules. But when it comes to DQM we might wonder how do my rules get called? how can i troubleshoot my rules if they are not working as expected? </FONT></P><P><FONT face="arial,helvetica,sans-serif">So let's see how we can troubleshoot the rules.</FONT></P><H2 id="toc-hId-768427652"><FONT face="arial,helvetica,sans-serif">MAIN CONTENT</FONT></H2><OL><LI><FONT face="arial,helvetica,sans-serif"> DQM rules will be triggered when we click the check button on our MDG UI.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_1-1706620006918.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56161i2F8C0441F1E7F1EE/image-size/large?v=v2&px=999" role="button" title="0012anirban_1-1706620006918.png" alt="0012anirban_1-1706620006918.png" /></span></FONT></LI><LI><FONT face="arial,helvetica,sans-serif"> Once click on check the MDQ adapter <STRONG>CL_MDQ_COMMON_ADAPTER_PROD</STRONG> class will be called which will in turn call the MDQ rule engine class <STRONG>CL_MDQ_RULE_ENGINE_CHECK</STRONG>. <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_2-1706620128164.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56163i456D911503E7AC1C/image-size/large?v=v2&px=999" role="button" title="0012anirban_2-1706620128164.png" alt="0012anirban_2-1706620128164.png" /></span></FONT></LI><LI><FONT face="arial,helvetica,sans-serif"> This rule engine check method will internally call many other methods and one of the methods which gets called is <STRONG>CL_MDQ_BRFPLUS_HANDLER, </STRONG>this class is responsible for executing the BRF+ functions by calling other standard methods. In this class, we can put a breakpoint in the execute_function method. <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_5-1706620872953.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56179i810EC7A5BBFEE045/image-size/large?v=v2&px=999" role="button" title="0012anirban_5-1706620872953.png" alt="0012anirban_5-1706620872953.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_6-1706622484448.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56219iBA157582A4B74FBC/image-size/large?v=v2&px=999" role="button" title="0012anirban_6-1706622484448.png" alt="0012anirban_6-1706622484448.png" /></span> </FONT></LI><LI><FONT face="arial,helvetica,sans-serif">Inside <STRONG>execute_function</STRONG> we will find an FDT method which processes the BRF+ function.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_8-1706622830964.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56227i3CE47A14CB6193FF/image-size/large?v=v2&px=999" role="button" title="0012anirban_8-1706622830964.png" alt="0012anirban_8-1706622830964.png" /></span></FONT></LI><LI><FONT face="arial,helvetica,sans-serif"> Inside the <STRONG>process</STRONG> method, we will get the class name associated with the BRF function ID. <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_10-1706622927337.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56231i6062B6E485D0A3F7/image-size/large?v=v2&px=999" role="button" title="0012anirban_10-1706622927337.png" alt="0012anirban_10-1706622927337.png" /></span></FONT></LI><LI><FONT face="arial,helvetica,sans-serif">Using this class name we will call the <STRONG>process_dynamic</STRONG> method of the FDT.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_11-1706623055370.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56235i15989F6C4614F121/image-size/large?v=v2&px=999" role="button" title="0012anirban_11-1706623055370.png" alt="0012anirban_11-1706623055370.png" /></span></FONT></LI><LI><FONT face="arial,helvetica,sans-serif"> Inside this method look for the <STRONG>process_pure</STRONG> method which will have the entire BRF+ generated code for a rule which you have created in DQM. <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0012anirban_12-1706623163317.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/56237i9DFD5FF5B0A7D512/image-size/large?v=v2&px=999" role="button" title="0012anirban_12-1706623163317.png" alt="0012anirban_12-1706623163317.png" /></span></FONT></LI></OL><P><FONT face="arial,helvetica,sans-serif">By following these steps you can easily navigate through the DQM validation rule framework troubleshoot your rules and make sure they are working perfectly fine.</FONT></P><H3 id="toc-hId-700996866"><FONT face="arial,helvetica,sans-serif">Scenarios which need troubleshooting:</FONT></H3><P><FONT face="arial,helvetica,sans-serif">1. You import your rule from one system to another, the rule is approved and enabled for check-in change requests but still doesn't work.</FONT></P><P><FONT face="arial,helvetica,sans-serif">2. You modified your BRF+ logic as per your requirements after the initial build, however, the latest rules don't reflect this.</FONT></P><H3 id="toc-hId-504483361"><FONT face="arial,helvetica,sans-serif">System details: </FONT></H3><P><FONT face="arial,helvetica,sans-serif">S/4 HANA 2023 FPS00.</FONT></P><H2 id="toc-hId-178887137"><FONT face="arial,helvetica,sans-serif">CONCLUSION</FONT></H2><P><FONT face="arial,helvetica,sans-serif">By following the above steps you will be easily able to troubleshoot DQM rules for <a href="https://community.sap.com/t5/c-khhcw49343/SAP+Master+Data+Governance/pd-p/67837800100800004488" class="lia-product-mention" data-product="697-3">SAP Master Data Governance</a> central governance.</FONT></P><P><FONT face="arial,helvetica,sans-serif">Hope you find this information useful.</FONT></P><P><FONT face="arial,helvetica,sans-serif">Regards</FONT></P><P><FONT face="arial,helvetica,sans-serif">Anirban</FONT></P>2024-01-30T16:03:50.529000+01:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/business-rule-framework-plus-brf/ba-p/13668731Business Rule Framework Plus(BRF+)2024-04-16T12:38:55.042000+02:00VaraPrasadT11https://community.sap.com/t5/user/viewprofilepage/user-id/38562<P class="lia-align-left" style="text-align : left;">What is BRF Plus? Why we need to use BRF+ ?</P><P>There will always be some amount of custom business logic available in the SAP system, even if we strive to minimize customization. Such ABAP-based customization must be handled carefully in order to prevent duplication of business logic and to keep it in line with other functional areas. Herein lies the value of SAP Business Rules Framework Plus (BRF Plus), a feature that enables centralized and reusable management of all custom business logic.</P><P>In general, BRF Plus features can be accessed on any SAP NetWeaver-based system with the relevant enhancement pack installed.</P><P>Both technical users (programmers, system administrators) and business users who manage operational business processes (like bidding, procurement, tax form validation, etc.) can benefit from BRF Plus's unified modeling and run-time environment for business rules.</P><P>The application programming interface and user interface that BRF+, or Business Rule Framework Plus, offers is extensive for defining business rules. We can define business rules with it without having to write ABAP code.</P><P><STRONG>Application :</STRONG> In BRF+, to start anything first we must have to create the application. <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_0-1713096869367.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96163iF6E46BBD527A1F9C/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_0-1713096869367.png" alt="VaraPrasadT_0-1713096869367.png" /></span></P><P><STRONG>Type of Storage Types : </STRONG></P><TABLE border="1" width="100%"><TBODY><TR><TD width="25%" height="30px">Storage Type</TD><TD width="25%" height="30px">Client</TD><TD width="25%" height="30px">Transport Request</TD><TD width="25%" height="30px">Cross-Application Usage</TD></TR><TR><TD width="25%" height="56px">System</TD><TD width="25%" height="56px">Client-Independent</TD><TD width="25%" height="56px">Transportable or Local</TD><TD width="25%" height="56px">Can use system objects.</TD></TR><TR><TD width="25%" height="56px">Customizing</TD><TD width="25%" height="56px">Client-Dependent</TD><TD width="25%" height="56px">Transportable or Local</TD><TD width="25%" height="56px">Can use system and<BR />customizing objects</TD></TR><TR><TD width="25%" height="30px">Master Data</TD><TD width="25%" height="30px">Client-Dependent</TD><TD width="25%" height="30px">Local</TD><TD width="25%" height="30px">Can use system, customizing,<BR />and master data objects</TD></TR></TBODY></TABLE><P><STRONG>Data Objects:</STRONG> Describes data types of the variable. They are the data carriers helping in signature or context of a function, variables in a rule or rulesets, building blocks for Decision tables, Etc. You can create data objects by defining attributes like element type, length, decimals or you can directly bind to existing DDIC elements.</P><P><STRONG>Expressions: </STRONG> Expressions are the computational units with well-defined logic. Usually, expressions are self-sustained and process the user input and gives result back to the caller.</P><P><STRONG>Rules:</STRONG> Rule is a central entity in BRF+ which builds the business logic. Evaluation of rule gives you the decision for the question in context</P><P><STRONG>Rule sets: </STRONG>Simply, collection of rules. Each rule set can be assigned to exactly one function. Priority can be set at rule set level for defining the order of execution.</P><P><STRONG>To Create Application :</STRONG> BRF+ or BRFPLUS is the transaction code to access the application. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_0-1713021847371.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96053i4D7208439612877A/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_0-1713021847371.png" alt="VaraPrasadT_0-1713021847371.png" /></span></P><P>Next, we click the <STRONG>Create Application</STRONG> Pushbutton. Below Pop-up will opened up and enter the required fields.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_2-1713022015549.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96055i1388EC4E301EEA56/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_2-1713022015549.png" alt="VaraPrasadT_2-1713022015549.png" /></span>Click on <STRONG>Create and Navigate To Object</STRONG> after filling out Name, Short Text, Text, and Development Package for Software Component. Another option is to store in the Temporary($tmp) Package.<BR />Next, we'll press the "Save & Activate" button.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_3-1713022097755.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96056iAE2AC8F413D3B329/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_3-1713022097755.png" alt="VaraPrasadT_3-1713022097755.png" /></span></P><P>Next, within this application, we will talk about the following elements.<BR />1. Create an element in the data object. <BR />2. Create a structure in the data object.<BR />3. Make a Table Data Object<BR />4. Produce a Decision Table Expression</P><P>There are 3 ways to bind the data object in Binding Type :</P><P><STRONG>Create an element in the data object : </STRONG>The following steps are shown in the figure below after you right-click on the application: After completing all the required fields, we will click the designated button.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_4-1713022397069.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96057iE77DA41271EC75C2/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_4-1713022397069.png" alt="VaraPrasadT_4-1713022397069.png" /></span>There are three options under this option, which is called Binding type.<BR /><STRONG>Bind to DDIC Element:</STRONG> Select a DDIC Element that shares your attributes.</P><P><STRONG>Bind to an Existing BRF+ Element:</STRONG> Select an Existing BRF+ Element that possesses the same attributes.</P><P><STRONG>No Binding: </STRONG>Maintain the details freely.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_5-1713022564894.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96058i49E7CA7020E7F3BA/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_5-1713022564894.png" alt="VaraPrasadT_5-1713022564894.png" /></span>Therefore, in this case, if we select any of the first two options 1 or 2 Name, Text, Element Length, and Element Type will be automatically filled in from the DDIC element or an already-existing BRF+ element.<BR />However, if we select the No Binding option, we will have to enter all necessary information, including the element name, text, short text, element length, and element type.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_6-1713022749060.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96059i4FEA522B90642A4A/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_6-1713022749060.png" alt="VaraPrasadT_6-1713022749060.png" /></span></P><P>After entered all the required fields, click on <STRONG>Create and Navigate To Object</STRONG> button and then click Save & Activate buttons to activate it.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_7-1713022846835.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96060i1A92C4536E44FF8D/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_7-1713022846835.png" alt="VaraPrasadT_7-1713022846835.png" /></span></P><P><STRONG>Structure Creation:</STRONG> The same application should be used to create the structure.<BR />It is not necessary to build a structure if our result contains just one column. There is also no need to create a structure if the output for a single condition is a single row. If more than one column appears in our result, we should make a structure with all of those columns. Additionally, a structure must be shown if the output consists of multiple rows. The generated structure must be used to create a table in order to produce multiple rows as output.</P><P>To Create a Structure, Select our application and follow the instructions shown in the figure below <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_8-1713022930354.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96061iF9BBE39A5AC524EC/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_8-1713022930354.png" alt="VaraPrasadT_8-1713022930354.png" /></span>After that, we must complete the required fields to create the structure. However, before that once more, there is a choice named Binding Type, which has the following options:- </P><P>a) Bind to Structure Type (DDIC)<BR />b) No Binding<BR />c) Binding to CDS View: Not to be used</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_9-1713012449124.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95987iFC0858846B45FC5F/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_9-1713012449124.png" alt="VaraPrasadT_9-1713012449124.png" /></span></P><P>For Option a & c, The required fields (Name, Short Text, Text) will automatically be filled in from the DDIC structure or the CDS View.<BR />However, if we select option b, which is No Binding, we will have to manually fill in every required field.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_9-1713023124169.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96062iF04832DA0A125913/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_9-1713023124169.png" alt="VaraPrasadT_9-1713023124169.png" /></span>Once all of these have been filled out, click <STRONG>Create And Navigate To Object</STRONG>, and lastly Save and Activate this structure.</P><P><STRONG>Table Creation:</STRONG> In order to have multiple result rows based on a single condition in our decision table, we can create a table in the same application. Therefore, table creation is necessary in our case.<BR />Select our application, then follow the instructions shown in the figure below.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_0-1713023441506.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96065i493BFA7D25F4459F/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_0-1713023441506.png" alt="VaraPrasadT_0-1713023441506.png" /></span>After that, fill out the fields required to create the table. We must first verify the Binding Type.<BR />There are two options for creating tables in Binding Type:<BR />a) No Binding<BR />b) Binding to Table Type (DDIC)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_0-1713174547254.png" style="width: 271px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96523i046F80EE6D798540/image-dimensions/271x221?v=v2" width="271" height="221" role="button" title="VaraPrasadT_0-1713174547254.png" alt="VaraPrasadT_0-1713174547254.png" /></span>If we select option b "Binding to Table Type (DDIC)" All required fields (Name, Short Text, Text, Table Line Type) from the DDIC Table Type are automatically filled.<BR />If we select option a "No Binding" then it will have to manually fill out all required fields.<BR />Therefore, choose Table line from the application in order to display Multiple Rows. <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_1-1713023706302.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96066i1742F791BB33A72A/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_1-1713023706302.png" alt="VaraPrasadT_1-1713023706302.png" /></span>Once all required fields have been filled out, click <STRONG>Create And Navigate To Object</STRONG>, and then save and activate this table.</P><P><STRONG>Decision Table Creation :</STRONG><BR />The next important step is to construct our Decision Table using our application as well. Select the Decision Table and follow the steps outlined in the figure below.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_2-1713023796943.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96068i557BCD23E9E235EE/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_2-1713023796943.png" alt="VaraPrasadT_2-1713023796943.png" /></span></P><P>Once Name, Short Text, and Text are entered, click on the Highlighted button.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_3-1713023892828.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96069i3AA694319C0CD364/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_3-1713023892828.png" alt="VaraPrasadT_3-1713023892828.png" /></span>In the table settings, we can do the below enablement. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_4-1713024095580.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96070i8052F269FC8EFCD3/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_4-1713024095580.png" alt="VaraPrasadT_4-1713024095580.png" /></span>There is a checkbox labeled "Return all matches found" in Settings. If we don't select this option, even though multiple rows may exist based on the same condition, only one row will ever display for that condition.<BR />Select the Result Data Object located in the same application as our recently created Table. Next, include the Condition Column.<BR />Select the Application Data Element's Column:<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_5-1713024147277.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96071i7DE8ED06879F8A79/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_5-1713024147277.png" alt="VaraPrasadT_5-1713024147277.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_6-1713025855102.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96072iC922602E87464ABE/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_6-1713025855102.png" alt="VaraPrasadT_6-1713025855102.png" /></span>To Select an object as the Condition Column, select it and then click OK. Declare a field as required in the condition column, indicating which column's value will be used to retrieve the value of the result columns.<BR />Thus, the Condition Column's input needs to be required and selected columns comes as result.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_7-1713026013941.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96073i5891C767E8180A87/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_7-1713026013941.png" alt="VaraPrasadT_7-1713026013941.png" /></span>Select these components from the table.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_8-1713026073702.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96074iF0F8A27592ECEAB3/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_8-1713026073702.png" alt="VaraPrasadT_8-1713026073702.png" /></span>Click OK once all of the table's objects have been selected.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_9-1713026104123.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96075i3086E70B8122797A/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_9-1713026104123.png" alt="VaraPrasadT_9-1713026104123.png" /></span>Click the OK button to proceed. All of the selected columns now appear as Result Columns.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_10-1713026165037.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96076iA2553F764D678218/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_10-1713026165037.png" alt="VaraPrasadT_10-1713026165037.png" /></span>Save and Activate all Decision Table modifications after adding Table Contents. Now update this Decision Table with the Table Contents and Next, select "Start Simulation" to see if our decision table functions.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_1-1713092277220.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96145i963E0BB405495E0E/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_1-1713092277220.png" alt="VaraPrasadT_1-1713092277220.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_3-1713092447800.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96147iD408A11C987A4937/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_3-1713092447800.png" alt="VaraPrasadT_3-1713092447800.png" /></span>After entering the program name, select Execute. Will get the matched records as output.</P><P><STRONG>Use of Decision Table in ABAP Program:</STRONG> In order to obtain the required output rows, we must now use our Decision Table in an ABAP program and pass the condition column value from the program.<BR />In the same application, a function must be created for that.</P><P><STRONG>Function Creation:</STRONG> To begin, right-click on the application, then follow the instructions in the figure below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_4-1713092824406.png" style="width: 308px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96148i21342E0F40754AD0/image-dimensions/308x278?v=v2" width="308" height="278" role="button" title="VaraPrasadT_4-1713092824406.png" alt="VaraPrasadT_4-1713092824406.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_5-1713092910328.png" style="width: 361px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96149iF0664F9AC6B3A321/image-dimensions/361x158?v=v2" width="361" height="158" role="button" title="VaraPrasadT_5-1713092910328.png" alt="VaraPrasadT_5-1713092910328.png" /></span>After entering the Name, Short Text, and text, press the Create and Navigate To Object button.<BR />Next, fill in the remaining necessary fields, as indicated in the figure below<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_7-1713093308614.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96151iA62D7AE8F89CFCB0/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_7-1713093308614.png" alt="VaraPrasadT_7-1713093308614.png" /></span>Select our created Decision Table in Expression and Mode as Functional Mode. Next, select the Data Element for the Condition Column and the Table of Result Columns after adding the Context from existing Data Object. Next, select our result columns, which are tables from the same application that we created, under Result Data Object then save and activate every modification.</P><P>After that, we must select Create Code Template, copy the sample code, and utilize it in our ABAP program<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_8-1713093364737.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96152iC8552BC082009868/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_8-1713093364737.png" alt="VaraPrasadT_8-1713093364737.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_9-1713093386386.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96153iB2AD9B7957BD9B55/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_9-1713093386386.png" alt="VaraPrasadT_9-1713093386386.png" /></span>At last, we need to save and apply all of the modifications. Following the use of this template in an ABAP program, all of the resultant columns and expected result values should appear in the program.</P><P><STRONG>Rules and RuleSets : </STRONG>It contains set of rules which can be executed as soon as our BRF+ application Function is getting executed. Rules must be contained in the ruleset, as expressions (IF-THEN-ELSE logic). If-THEN rules are another name for plain rules. <BR />A ruleset is an assemblage of rules. Select Event Mode by default. The Assign Ruleset option is under Event Mode. <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_10-1713093500474.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96154i8C2821067C40D32F/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_10-1713093500474.png" alt="VaraPrasadT_10-1713093500474.png" /></span>The function must then be given a ruleset. Please select the "Create Ruleset" button after selecting the "Assigned Rulesets" tab in the screenshot above. After giving the new ruleset a name, the screen below will appear. Following the creation of the ruleset, fill in the Name, Short Text, and Text fields. Then, click the <STRONG>Create and Navigate To Object</STRONG> button below.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_11-1713093565290.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96155i23CBB0C12F6A7142/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_11-1713093565290.png" alt="VaraPrasadT_11-1713093565290.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_12-1713093665007.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96156i6C9471F82CA1EC42/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_12-1713093665007.png" alt="VaraPrasadT_12-1713093665007.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_14-1713094058126.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96158iE0262FDFA6B3F202/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_14-1713094058126.png" alt="VaraPrasadT_14-1713094058126.png" /></span>Save and Activate the Ruleset function.<BR />Next, utilize this ruleset in ABAP code from the function using the Code Generation Template.</P><P><STRONG>Decision Tree:</STRONG> A binary tree of expressions can be defined using a decision tree expression. Condition Nodes are non-leaf nodes. The result is a Boolean. Left & Right nodes will move forward in accordance with the outcome. When a leaf node is reached, the designated expression is executed, and the result of the entire expression is returned as the corresponding result. A decision tree has two nodes at all times: left and right. Every node has decisions that are True (Yes) or False (No). Depending on that new branches (nodes) will proceed. <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_15-1713094204964.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/96159i8D3142C1DFE34FF0/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_15-1713094204964.png" alt="VaraPrasadT_15-1713094204964.png" /></span></P><P>We can define business rules using the BRF+ interface without having to write ABAP code. These generated business rules can be used as substitution/validation rules or integrated into other SAP programs.</P><P><STRONG>Use cases of BRF+ that can be used into S4HANA: </STRONG><BR />Output management for Billing and Purchasing – Output determination (SAP S/4HANA).<BR />Integration with IMG transaction.<BR />SAP business Workflows.<BR />Cloud based Environment.</P><P><STRONG>Conclusion on BRF+ : </STRONG></P><UL><LI>It enables us to represent rules in an understandable manner and apply them again in various contexts. </LI><LI>BRF+ eliminates the need to create and maintain custom tables for validation. It also does away with the traditional developer approach of hardcoding values.</LI><LI>In essence, BRF+ is used to make decisions, and decision input and output values are kept up to date in Decision Tables, which have sophisticated validation features.</LI></UL><P class="lia-align-left" style="text-align : left;"><STRONG>Roles that are required </STRONG><BR />SAP_BC_FDT_ADMINISTRATOR<BR />WD Configuration :<BR />/sap/bc/webdynpro/sap/fdt_wd_workbench<BR />/sap/bc/webdynpro/sap/fdt_wd_object_manager<BR />/sap/bc/webdynpro/sap/fdt_wd_catalog_browser</P>2024-04-16T12:38:55.042000+02:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/application-exit-class-in-brf-plus-brf/ba-p/13714663Application Exit Class in BRF Plus(BRF+)2024-05-30T10:31:30.139000+02:00VaraPrasadT11https://community.sap.com/t5/user/viewprofilepage/user-id/38562<P>An application exit class in BRF+ (Business Rule Framework Plus) is a custom ABAP class that we can create and use to add custom logic to expand BRF+'s functionality. Using this class, you can add custom methods that can be called when BRF+ rules are being executed. This way, we can handle particular business needs that aren't addressed by the standard BRF+ functionality and also helps to maintain the entries as system specific entries similar like SM30 t-code.</P><P>To achieve, we need to create a class by using SE24 t-code and add interface IF_FDT_APPLICATION_SETTINGS in the class.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_0-1716898702510.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/116530i12F2D3A4FF660A04/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_0-1716898702510.png" alt="VaraPrasadT_0-1716898702510.png" /></span></P><P>After adding the interface IF_FDT_APPLICATION_SETTINGS, below methods will be added.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_0-1716901386874.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/116584i94FDA3692D514F9D/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_0-1716901386874.png" alt="VaraPrasadT_0-1716901386874.png" /></span></P><P>Execute the required procedures from the interface. The custom logic you wish to use with the BRF+ framework will be contained in these methods.</P><P><U><STRONG>Implement the custom logic :</STRONG></U></P><P>Within the ABAP class's methods, we can write our own logic. This could include complicated computations, data validation, or any other rules unique to your business.</P><P>In my scenario, BRF+ Decision table should work like SM30 in higher systems like Quality and Production. To do, we have written logic in AUTHORITY_CHECK method in the global class which we created.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_1-1716898971516.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/116539iDAE502C7B48129D1/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_1-1716898971516.png" alt="VaraPrasadT_1-1716898971516.png" /></span></P><P><STRONG>EV_SKIP_CHECK</STRONG> -> flag if set to TRUE, will skip standard authorization checks and will consider custom authorization check.<BR /><STRONG>EV_PASSED</STRONG> -> Indication of whether the check was passed successfully</P><P>In the constructor class, pass<!-- StartFragment --> <SPAN>gv_authority_check equal to abap_true.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_2-1716899064037.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/116541i09749CB09E8C812B/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_2-1716899064037.png" alt="VaraPrasadT_2-1716899064037.png" /></span></P><P>To register the global class in BRF+ transaction, open BRF+ and double click on the Application component.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VaraPrasadT_1-1716901676719.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/116585i97C167F70389F2A0/image-size/medium?v=v2&px=400" role="button" title="VaraPrasadT_1-1716901676719.png" alt="VaraPrasadT_1-1716901676719.png" /></span></P><P>In this manner, application exits in a non-development or production environment can be used for decision table maintenance. I hope this blog was also helpful in providing information about BRFPlus application exits.</P><P>Conclusion :</P><P>BRF+'s application exit classes offer an effective way to increase the platform's built-in capabilities. You can modify the BRF+ framework to satisfy complex business requirements by adding additional logic to the rule processing flow through the creation of unique ABAP classes and the implementation of particular interfaces.</P>2024-05-30T10:31:30.139000+02:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/output-management-in-s-4hana/ba-p/13762541Output management in S/4HANA2024-07-17T17:21:59.714000+02:00Ambarish_adhttps://community.sap.com/t5/user/viewprofilepage/user-id/1484050<P class="lia-align-justify" style="text-align : justify;"><FONT size="6">Output Management in S/4HANA</FONT></P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Introduction to output management</FONT></P><P class="lia-align-justify" style="text-align : justify;">After working with many clients in different fields, I've noticed that most businesses struggle with output management. Each client has their own idea of what output means, whether it's PDF documents, forms, emails, or iDocs. While these views are somewhat correct, I think output management is about effectively communicating with customers or vendors using the right channels and documents.</P><P class="lia-align-justify" style="text-align : justify;">When we talk about output management, I see it as combining "output" (like print, email, iDoc) with "management" (how we set it up to reuse the functionality). Output management in SAP S/4HANA is a big improvement in how businesses generate and distribute documents. This new framework solves the complexities and inefficiencies of the many old output solutions in previous SAP systems. This blog will mostly cover the output management features in on-premises S/4HANA.</P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Legacy Output Solutions</FONT></P><P class="lia-align-justify" style="text-align : justify;">Historically, SAP provided several output management tools tailored to specific business areas:</P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG>SD Output Control (NAST)</STRONG>: Used primarily for sales and distribution processes.</LI><LI><STRONG>FI Correspondence</STRONG>: Handles financial document communications.</LI><LI><STRONG>FI-CA Print Workbench</STRONG>: Manages print jobs for contract accounts receivable and payable.</LI><LI><STRONG>CRM Post-Processing Framework (PPF)</STRONG>: Deals with post-processing activities in customer relationship management.</LI></UL><P class="lia-align-justify" style="text-align : justify;">While these tools were effective, they required customers to learn and maintain distinct frameworks for each business area. This led to a high total cost of ownership (TCO) and varied user experiences.</P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">What is NAST</FONT></P><P class="lia-align-justify" style="text-align : justify;">NAST is a central component in SAP for managing and controlling the output of documents. It is part of the SAP Output Control framework and is used primarily in the Sales and Distribution (SD) module, but its functionality extends to other areas such as Materials Management (MM) and Financial Accounting (FI).</P><P class="lia-align-justify" style="text-align : justify;">Key features of NAST include:</P><UL class="lia-align-justify" style="text-align : justify;"><LI>Message control</LI><LI>Output type</LI><LI>Condition record</LI><LI>Processing routine</LI><LI>Transmission medium</LI><LI>Scheduling</LI></UL><P class="lia-align-justify" style="text-align : justify;">NAST operates using the condition technique, which is the traditional method of working in SAP.</P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">The Need for a Unified Solution</FONT></P><P class="lia-align-justify" style="text-align : justify;">In SAP S/4HANA projects, the fragmentation of output management tools presented several challenges:</P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG>Complexity</STRONG>: Customers had to navigate and master different frameworks for different tasks.</LI><LI><STRONG>Maintenance</STRONG>: Each framework required separate setup and ongoing maintenance.</LI><LI><STRONG>User Experience</STRONG>: Disparate tools resulted in inconsistent user experiences across the SAP ecosystem.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">What is Output Management in S/4HANA?</FONT></P><P class="lia-align-justify" style="text-align : justify;">Output Management in SAP S/4HANA is a comprehensive framework designed to streamline the creation, formatting, and distribution of business documents. It modernizes and centralizes outdated output mechanisms, effectively meeting the diverse needs of various business processes.</P><P class="lia-align-justify" style="text-align : justify;">Key features of S/4HANA Output Management include:</P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG>Centralized Configuration</STRONG>: Offers a single point of configuration for all output types, reducing complexity and easing maintenance. This common setup point can be used across different modules.</LI><LI><STRONG>Flexibility and Scalability</STRONG>: Supports various output channels and formats, making it adaptable to diverse business needs and scalable for future growth.</LI><LI><STRONG>Enhanced User Experience</STRONG>: Provides consistent and intuitive user interfaces, improving efficiency and satisfaction across different modules.</LI><LI><STRONG>Simplified Maintenance</STRONG>: Eliminates the need for complex master data maintenance and extensive cutover activities.</LI><LI><STRONG>Advanced Output Channels</STRONG>: Supports modern output channels like email, print, fax, and electronic data interchange (EDI), in addition to traditional methods.</LI><LI><STRONG>Improved Template Management</STRONG>: Utilizes advanced tools for designing and managing document templates, such as Adobe Forms, enhancing document consistency and branding.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Different between NAST and Output management in S/4HAN</FONT></P><P class="lia-align-justify" style="text-align : justify;"><STRONG>NAST (Legacy Output Control)</STRONG></P><P class="lia-align-justify" style="text-align : justify;">NAST is the traditional output control functionality used in earlier versions of SAP, such as SAP ECC. It manages the output of business documents through various channels like print, email, fax, and EDI. Key characteristics of NAST include:</P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG>Decentralized Configuration</STRONG>: Each application module (e.g., SD, MM, FI) has its own configuration, leading to complexity and redundancy.</LI><LI><STRONG>Limited Flexibility</STRONG>: Customization and enhancement of output processes require significant effort and often involve custom ABAP development.</LI><LI><STRONG>Condition Records</STRONG>: Utilizes condition records to determine when and how outputs are triggered.</LI><LI><STRONG>Processing Routines</STRONG>: Depends on traditional forms like SAP script and Smart Forms for document formatting.</LI><LI><STRONG>Separate Handling</STRONG>: Each business area (e.g., sales orders, invoices) has its own output determination and processing logic</LI><LI>It also covers Multiple Output Mediums and Error Handling and Monitoring</LI></UL><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Output Management in SAP S/4HANA</FONT></P><P class="lia-align-justify" style="text-align : justify;">The new Output Management framework in SAP S/4HANA is designed to overcome the limitations of NAST and provide a more streamlined and efficient approach. Its key features include:</P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG>Centralized Configuration</STRONG>: Provides a unified setup for all output types, reducing complexity and maintenance efforts.</LI><LI><STRONG>Enhanced Flexibility</STRONG>: Supports various output channels and formats with easier customization options.</LI><LI><STRONG>Advanced Template Management</STRONG>: Uses Adobe Forms for designing and managing document templates, offering more sophisticated formatting and branding capabilities.</LI><LI><STRONG>Output Parameter Determination</STRONG>: Utilizes a modern method for determining output parameters based on business context, simplifying the output determination process.</LI><LI><STRONG>Improved User Experience</STRONG>: Consistent and user-friendly interfaces across different modules enhance operational efficiency.</LI><LI><STRONG>Integration</STRONG>: Seamlessly integrates with other SAP S/4HANA components and external systems, improving overall document management and processing.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Key Differences</FONT></P><TABLE width="642"><TBODY><TR><TD><P><STRONG>Feature</STRONG></P></TD><TD width="224"><P><STRONG>NAST (Legacy Output Control)</STRONG></P></TD><TD width="243"><P><STRONG>Output Management in SAP S/4HANA</STRONG></P></TD></TR><TR><TD><P><STRONG>Configuration</STRONG></P></TD><TD width="224"><P>Decentralized, specific to each module</P></TD><TD width="243"><P>Centralized, unified for all output types</P></TD></TR><TR><TD><P><STRONG>Flexibility</STRONG></P></TD><TD width="224"><P>Limited, requires custom ABAP development</P></TD><TD width="243"><P>Enhanced, easier customization</P></TD></TR><TR><TD><P><STRONG>Forms and Templates</STRONG></P></TD><TD width="224"><P>SAP script, Smart Forms</P></TD><TD width="243"><P>Adobe Forms</P></TD></TR><TR><TD><P><STRONG>Output Parameter Determination</STRONG></P></TD><TD width="224"><P>Condition records</P></TD><TD width="243"><P>Modern, context-based parameter determination</P></TD></TR><TR><TD><P><STRONG>User Experience</STRONG></P></TD><TD width="224"><P>Inconsistent across modules</P></TD><TD width="243"><P>Consistent and user-friendly</P></TD></TR><TR><TD><P><STRONG>Integration</STRONG></P></TD><TD width="224"><P>Separate handling for each business area</P></TD><TD width="243"><P>Seamless integration with S/4HANA components</P></TD></TR><TR><TD><P><STRONG>Maintenance</STRONG></P></TD><TD width="224"><P>Complex, higher total cost of ownership (TCO)</P></TD><TD width="243"><P>Simplified, lower TCO</P></TD></TR></TBODY></TABLE><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Advantages and features of Output management</FONT></P><P class="lia-align-justify" style="text-align : justify;">SAP S/4 HANA Output Management has the below features</P><UL class="lia-align-justify" style="text-align : justify;"><LI>Operates seamlessly in both cloud and on-premises environments.</LI><LI>Offers a unified solution for all output related tasks across the product and modules<BR />Reduce master data maintenance and relatively less time consuming for activation</LI><LI>Supports standard extensibility for configuration documents</LI><LI>Offers central monitoring tools for key users, enhancing oversight and control.</LI></UL><P class="lia-align-justify" style="text-align : justify;">Based on Business Rule Framework (BRF), offering greater flexibility in managing output processes.</P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">How it works?</FONT></P><P class="lia-align-justify" style="text-align : justify;">For determining output types in transactions, we can utilize Output Parameter Determination (OPD). Maintenance of OPD can function similarly to master data or be set up via transport management. I recommend using OPD as a client-specific change. Using transports can lead to confusion, especially if other rollouts are occurring simultaneously.</P><P class="lia-align-justify" style="text-align : justify;">Prerequisites –</P><P class="lia-align-justify" style="text-align : justify;">There are few back-end changes you need to do it before maintenance of OPD setup.</P><UL class="lia-align-justify" style="text-align : justify;"><LI>Check if your application object type is active</LI><LI>Check if your Output type is available and if you want to use your own output then create new one by doing copy of standard output type.</LI><LI>Assign channel to your Output type.</LI><LI>Assign Form Template to Output Type</LI><LI>Assign Email template to output type.</LI></UL><P class="lia-align-justify" style="text-align : justify;">To use Output management, we need to activate the required object and if we activate Output management then system will redirect output always to Output management and not to NAST.</P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Main parameters in OPD (Output Parameter Determination)</FONT></P><P class="lia-align-justify" style="text-align : justify;">Below are the key parameters,</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_0-1721660845027.png" style="width: 754px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/140061i9C2FDE486999E181/image-dimensions/754x343?v=v2" width="754" height="343" role="button" title="Ambarish_ad_0-1721660845027.png" alt="Ambarish_ad_0-1721660845027.png" /></span></P><P class="lia-align-justify" style="text-align : justify;">Output management is BRF based functionality which can be setup by using below 7 steps in the SAP using OPD.</P><P class="lia-align-justify" style="text-align : justify;"><FONT size="5">Let’s check in the system –</FONT></P><P class="lia-align-justify" style="text-align : justify;"><STRONG>OPD (Output parameter determination) screen</STRONG></P><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_14-1721159564276.png" style="width: 767px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137320iE9D20C1018D2FDFB/image-dimensions/767x412?v=v2" width="767" height="412" role="button" title="Ambarish_ad_14-1721159564276.png" alt="Ambarish_ad_14-1721159564276.png" /></span></P><P class="lia-align-justify" style="text-align : justify;">There are multiple steps (as per above screenshot) which should be maintained to determine output in billing document as per this example, here we will take billing output type as an example.</P><P><STRONG>1. Output Type – </STRONG></P><P class="lia-align-justify" style="text-align : justify;">This step begins by deciding whether to process the output immediately or later via a job. As shown below, for the combination of billing type F2 and output type BILLING_DOCUMENT, we can choose to process the output type immediately or through a background job (VF31F) at the time of billing document creation. Additionally, in the billing document, we can manually add the output type and set the dispatch time manually.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_15-1721159564278.png" style="width: 727px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137317iEFD44BA0825D5CD7/image-dimensions/727x169?v=v2" width="727" height="169" role="button" title="Ambarish_ad_15-1721159564278.png" alt="Ambarish_ad_15-1721159564278.png" /></span></P><P><STRONG>2. Receiver –</STRONG></P><P>In this step, we can determine the output type for a specific role (partner function). If we have four lines with different roles and want to consider only the first two, we will mark the Exclusive indicator 'X' for the second line. This way, the system will only consider the first two entries and ignore any entries after the second line.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_16-1721159564279.png" style="width: 751px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137323i55FF32F634862C8B/image-dimensions/751x87?v=v2" width="751" height="87" role="button" title="Ambarish_ad_16-1721159564279.png" alt="Ambarish_ad_16-1721159564279.png" /></span></P><P><STRONG>3. Channel – </STRONG></P><P>In this stage, the 'Channel' will be defined. The channel could be IDoc, Print, Email, etc. This stage will also include an exclusive indicator.</P><P>For instance, if the exclusive indicator 'X' is set for IDoc as shown below, the system will not search for or determine the PRINT and EMAIL channels.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_17-1721159564283.png" style="width: 758px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137322i85F6F752DF7B4044/image-dimensions/758x218?v=v2" width="758" height="218" role="button" title="Ambarish_ad_17-1721159564283.png" alt="Ambarish_ad_17-1721159564283.png" /></span></P><P><STRONG>4. Printer setting – </STRONG></P><P>In this phase, we can specify the printer and the number of copies to be printed after creating the document. Before setting up the printer in this phase, it is necessary to install the printer in SAP.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_18-1721159564284.png" style="width: 767px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137321i01AF65A7128CE29A/image-dimensions/767x46?v=v2" width="767" height="46" role="button" title="Ambarish_ad_18-1721159564284.png" alt="Ambarish_ad_18-1721159564284.png" /></span></P><P>Additionally, please be aware that the new output management system supports Printer Spool Devices limited to PDF device types only (PDFUC: PDF Unicode 1.3 / PDF1: PDF ISO Latin1 4.60+).</P><P>This restriction is detailed under the Symptoms section in note 268480 and SAP Note. 2294198</P><P><STRONG>5. Email setting – </STRONG></P><P>In this phase, the sender's email ID can be configured. This means that when an email is sent to the customer, the sender's email will be set up here, and the recipient's email will be the customer's email address.</P><P>Additionally, we can also establish the email template in this phase. An email template specifies the format and content that the customer will receive from us via email.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_19-1721159564286.png" style="width: 756px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137326iA4CB1B5B78345C83/image-dimensions/756x104?v=v2" width="756" height="104" role="button" title="Ambarish_ad_19-1721159564286.png" alt="Ambarish_ad_19-1721159564286.png" /></span></P><P><STRONG>6. Email recipient – </STRONG></P><P>The email address (recipient address) retrieved in the billing document is sourced from BP master data or determined through this step.</P><P>If you have configured an email address here, this setting takes precedence.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_20-1721159564287.png" style="width: 757px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137325i727262A153A0E074/image-dimensions/757x70?v=v2" width="757" height="70" role="button" title="Ambarish_ad_20-1721159564287.png" alt="Ambarish_ad_20-1721159564287.png" /></span></P><P>Multiple email addresses can be maintained in this determination step by separating them with ';'.<BR />You can also define the email type code with TO, CC, BCC.</P><P><STRONG>7. Form Template – </STRONG></P><P>This step is intended for maintaining the form template used for each output. Ensure that the form template maintained here has been assigned to the output type in SPRO -> Cross-Application Components -> Output Control -> Assign Form Templates.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_21-1721159564288.png" style="width: 754px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137324i79CC4E3E681E6C34/image-dimensions/754x66?v=v2" width="754" height="66" role="button" title="Ambarish_ad_21-1721159564288.png" alt="Ambarish_ad_21-1721159564288.png" /></span></P><P>If the language is not specified in OPD, it will be retrieved from the customer master data of the output recipient.</P><P><STRONG>8. Output Relevance –</STRONG></P><P>This step verifies if the output item is flagged as relevant for output.</P><P>If the relevance indicator is not set to 'X - true', the output item determined in the billing document will not be considered relevant for output.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_22-1721159564289.png" style="width: 764px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137327iD29C8385D6899A1E/image-dimensions/764x86?v=v2" width="764" height="86" role="button" title="Ambarish_ad_22-1721159564289.png" alt="Ambarish_ad_22-1721159564289.png" /></span></P><P>Consequently, its status will remain 'In preparation' in the billing document under the output section.</P><P><FONT size="5">OPD functionalities –</FONT></P><P><STRONG>Adding extra predefined standard fields</STRONG></P><P>Adding new columns or fields: OPD provides default fields that cover all necessary steps we've discussed. However, often after client discussions, we realize additional parameters are needed to define our objects in OPD differently.</P><P>In OPD, there are additional fields available that we can add as columns on the main OPD screen. These can then be utilized in determination combinations as needed.</P><P>To do this, navigate to Edit -> Table settings -> Insert column -> From context data object -> Search.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_23-1721159564296.png" style="width: 739px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137329i57FE4BEB932D0F76/image-dimensions/739x458?v=v2" width="739" height="458" role="button" title="Ambarish_ad_23-1721159564296.png" alt="Ambarish_ad_23-1721159564296.png" /></span></P><P>Click on search</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_24-1721159564303.png" style="width: 730px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137328i3E19CF58B392A466/image-dimensions/730x555?v=v2" width="730" height="555" role="button" title="Ambarish_ad_24-1721159564303.png" alt="Ambarish_ad_24-1721159564303.png" /></span></P><P>Following this step, a list of standard additional fields will be available for us to add and utilize in OPD. If the required field is still not available, we can proceed with an enhancement to add the necessary field to this list. This process requires the involvement of an ABAP specialist.</P><P><STRONG>Simulation functionality</STRONG></P><P>Having reviewed all seven steps, we can use them to determine the output type in the transaction.</P><P>To preview the output in simulation mode, use the highlighted option below. This allows us to simulate the output effectively.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ambarish_ad_25-1721159564306.png" style="width: 759px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/137330i31B1CECAFC47FBA7/image-dimensions/759x224?v=v2" width="759" height="224" role="button" title="Ambarish_ad_25-1721159564306.png" alt="Ambarish_ad_25-1721159564306.png" /></span></P><P><FONT size="5">Key points and learnings –</FONT></P><P><STRONG>Pros</STRONG></P><UL><LI>As OPD is BRF based functionality, we can import and export data using predefined template.</LI><LI>New column (fields) can be added and can be removed as per requirement.</LI><LI>SAP S/4HANA output management is recommended but not mandatory.</LI><LI>The scope of SAP S/4HANA output management is not comparable with the scope of NAST.</LI><LI>SAP S/4HANA output control is not designed to completely replace NAST.</LI><LI>Innovations will only be made in the new framework (SAP S/4HANA output management)</LI></UL><P><STRONG>Cons</STRONG> –</P><UL><LI>It will only cover the output part of NAST (print, email, partly EDI).</LI><LI>The rest – like system integration, workflow, or special function – is not (and will not be) in the scope of SAP S/4HANA output control.</LI><LI>Customers will lose all NAST features when switching to SAP S/4HANA Output Control. Using S/4HANA Output Control for applications that previously relied on NAST is only advisable in exceptional cases</LI><LI>iDocs are not fully supported by the new output management. There are few restrictions as compared to NAST.</LI><LI>NO ALE is supported in Output management.</LI><LI>No tool is available for conversion from NAST to Output management.</LI></UL><P><FONT size="5">Reference –</FONT></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/output-management-in-sap-s-4hana/ba-p/13492419" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/output-management-in-sap-s-4hana/ba-p/13492419</A></P><P><A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/a630d57fc5004c6383e7a81efee7a8bb/d7bd4b5d70d94f09bcf99b221a7a1688.html" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/SAP_S4HANA_CLOUD/a630d57fc5004c6383e7a81efee7a8bb/d7bd4b5d70d94f09bcf99b221a7a1688.html</A></P><P><FONT size="5">Check out SAP notes related to the topic -</FONT><BR /><BR /></P><UL><LI>SAP Note 2292539 - SAP S/4HANA output control – configuration</LI><LI>2843926 - It is not possible to activate rules in App 'Output Parameter Determination' - SAP S/4HANA Cloud</LI><LI>SAP Note 2228611 –Output Management in S/4HANA </LI><LI>SAP Note 2248229 –SAP S/4HANA output control - download XML file</LI><LI>SAP Note <STRONG>2292571 </STRONG>–SAP S/4HANA output control -technical setup </LI><LI>SAP Note 2292646 –SAP S/4HANA output control -form templates with fragments </LI><LI>SAP Note 2292681 –SAP S/4HANA output control –master form templates </LI><LI>SAP Note 2294198 –SAP S/4HANA output control -customized forms </LI><LI>SAP Note 2367080 –SAP S/4HANA output control -customized master forms</LI></UL>2024-07-17T17:21:59.714000+02:00https://community.sap.com/t5/supply-chain-management-blog-posts-by-members/leveraging-brf-decision-tables-for-flexible-route-determination-in-sap/ba-p/13805972Leveraging BRF+ Decision Tables for Flexible Route Determination in SAP S4HANA2024-08-26T12:24:49.653000+02:00nagaraju_boyuduhttps://community.sap.com/t5/user/viewprofilepage/user-id/456387<P><STRONG>Use Case-</STRONG></P><P><STRONG>Discover how to streamline your sales order and stock transfer order (STO) processes in SAP S4HANA by replacing standard route determination with powerful BRF+ decision tables</STRONG>. This innovative approach empowers your business to integrate seamlessly with Excel, enabling efficient import and export of route data without IT intervention. Learn how to enhance flexibility, reduce manual effort, and gain valuable insights into your supply chain operations.</P><P><STRONG>Perquisites</STRONG><STRONG>:</STRONG></P><UL><LI>Basic knowledge on ABAP concepts</LI><LI>Basic knowledge on BRF+ framework in S4 HANA 1709 and above</LI><LI>Knowledge on Route determination rules</LI></UL><P><STRONG>What is BRF+ </STRONG></P><P>BRF+ is an ABAP based framework and part of the NetWeaver stack. BRF+ stands for Business Rule Framework Plus and it provides a comprehensive application programming interface and user interface for defining business rules. It enables you to define business rules without the need of wiring ABAP code. The generated Business Rules can be incorporated into other SAP programs or Substitution/Validation rules.</P><P><STRONG>Services for BRF+ Activation in S4 HANA</STRONG></P><P>In order to use BRF+ the following services need to be activated through transaction SICF:</P><UL><LI><STRONG>/SAP/BC/WEBDYNPRO/SAP/FDT_WD_WORKBENCH</STRONG></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nagaraju_boyudu_0-1724519317542.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/157074i4FA47AAEE11B8D7F/image-size/medium?v=v2&px=400" role="button" title="nagaraju_boyudu_0-1724519317542.jpeg" alt="nagaraju_boyudu_0-1724519317542.jpeg" /></span></P><UL><LI><STRONG>/SAP/BC/WEBDYNPRO/SAP/FDT_WD_OBJECT_MANAGER</STRONG></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nagaraju_boyudu_1-1724519317543.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/157075i526C24CA0C00D630/image-size/medium?v=v2&px=400" role="button" title="nagaraju_boyudu_1-1724519317543.jpeg" alt="nagaraju_boyudu_1-1724519317543.jpeg" /></span><STRONG> </STRONG></P><UL><LI><STRONG>–/SAP/BC/WEBDYNPRO/SAP/FDT_WD_CATALOG_BROWSER</STRONG></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nagaraju_boyudu_2-1724519317543.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/157076i9B68184B7D5E7404/image-size/medium?v=v2&px=400" role="button" title="nagaraju_boyudu_2-1724519317543.jpeg" alt="nagaraju_boyudu_2-1724519317543.jpeg" /></span></P><P><STRONG>You can launch BRF+ UI afterwards by entering t-code BRF+ or BRFplus. </STRONG>Further technical and functional detail about BRF+ is available at SAP help via this<SPAN> </SPAN><A href="https://help.sap.com/docs/SAP_DECISION_SERVICE_MANAGEMENT/90c77b45fd0f42febd69eea239037688/9a6b67ce7c26446483af079719edf679.html" target="_blank" rel="noopener noreferrer">link</A>.</P><P><STRONG>Functional Configuration using BRF+</STRONG></P><P>The steps in the BRF+ UI will consist of the follow steps:</P><OL><LI>Application creation- Create an Application using t-code BRF+.</LI><LI>Data Object Creation- Data Object Creation consists of all the variables used , which will be used for processing. These variables are basically input data to the BRF+ to process and to generate the output/result. In this use Case- We need to add relevant for Route determination- like Shipping point(TVST/Shipping condition(VSBED)/Country(LAND1)/Route(ROUTE)- Our Decision.</LI><LI>Function Creation- Next step , is to create Functions which is the core component - where the actual processing of the functionality gets executed.</LI><LI>Ruleset Creation- Inside the Functions we have a Rule Set , which is basically a container which holds all Set of Rules and these Rules are processed based on the decision tables.</LI><LI>Decision Table Creation- Decision tables are going to hold the data which consists of all possible Inputs & corresponding Output values- in this case our Decision is always “ROUTE”. Basically , the Data Objects import parameters validate against the Decision Tables and these Decision table will generate the outcome/result.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nagaraju_boyudu_3-1724519317543.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/157077i2AD96FD5644E5F1B/image-size/medium?v=v2&px=400" role="button" title="nagaraju_boyudu_3-1724519317543.png" alt="nagaraju_boyudu_3-1724519317543.png" /></span></P><UL><LI>Simulation of the Business Rule- It is possible and recommended to simulate the Rule Set to see if your function is working fine. Go to the Function and navigate to the simulation screen</LI></UL><P><SPAN> </SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nagaraju_boyudu_4-1724519317543.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/157078iF1A927F309A6DE61/image-size/medium?v=v2&px=400" role="button" title="nagaraju_boyudu_4-1724519317543.png" alt="nagaraju_boyudu_4-1724519317543.png" /></span></P><UL><LI>Now the Question is?- how to call this decision tables <SPAN> </SPAN>in SAP Sales order creation in place of Standard Route Determination.?In the function component . you have an option called Create Code Template - after selecting this , it shows the generated code template. The generated code is the one which you need to place in the EXIT_SAPL0VRF_001, Include ZXV00U01- Customer specific Route determination <SPAN> </SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nagaraju_boyudu_5-1724519317543.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/157079iA91ABC9AA55CA2A7/image-size/medium?v=v2&px=400" role="button" title="nagaraju_boyudu_5-1724519317543.png" alt="nagaraju_boyudu_5-1724519317543.png" /></span></LI></UL><H3 id="toc-hId-1172496216"><STRONG>Enhanced Efficiency and Flexibility</STRONG></H3><UL><LI><STRONG>Direct Data Access:</STRONG><SPAN> View and modify decision table data directly from your preferred environment (development,/</SPAN><SPAN>quality,</SPAN><SPAN> or production) without requiring BRF+ API logins.</SPAN></LI><LI><STRONG>Simplified :</STRONG><SPAN> Streamline the process of creating and moving transport requests for new rule updates,</SPAN><SPAN> saving time and effort.</SPAN></LI><LI><STRONG>Version Comparison:</STRONG><SPAN> Gain a clear understanding of rule changes with the version comparison feature,</SPAN><SPAN> facilitating effective tracking and analysis.</SPAN></LI><LI><STRONG>Granular Access Control:</STRONG><SPAN> Implement robust security measures by defining specific authority checks and roles to control access to BRF+ decision tables.</SPAN></LI><LI><STRONG>Comprehensive Change History:</STRONG><SPAN> Maintain a detailed record of rule modifications with the change log history feature,</SPAN><SPAN> providing valuable reference</SPAN></LI></UL><P><STRONG>Looking to implement customer-specific route determination in SAP S4HANA without extensive coding?</STRONG><SPAN> This use case demonstrates how BRF+ decision tables can provide a flexible and efficient solution.</SPAN><SPAN> By leveraging BRF+,</SPAN><SPAN> you can easily configure and manage route determination rules,</SPAN><SPAN> enabling greater customization and integration with external systems like Excel.</SPAN><SPAN> Share your thoughts and potential use cases for BRF+ in the comments below!</SPAN></P><P> </P>2024-08-26T12:24:49.653000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/how-to-display-alv-grid-with-only-structure/ba-p/13864946How to display ALV GRID with only structure2024-09-13T10:39:24.855000+02:00mark_fryuhttps://community.sap.com/t5/user/viewprofilepage/user-id/7099772024-09-13T10:39:24.855000+02:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/brf-output-determination/ba-p/14057057BRF+ Output Determination2025-03-26T10:03:16.339000+01:00VKR_23https://community.sap.com/t5/user/viewprofilepage/user-id/136870<H1 id="toc-hId-1577469732">BRF+ - Business Rule Framework Plus</H1><P><STRONG>Introduction:</STRONG></P><UL><LI>BRF+ stands for Business Rule Framework plus which Provides a comprehensive application programming interface and user interface for defining business rules.</LI><LI>It enables you to define business rules without the need of writing ABAP Code.</LI><LI>BRF+ Function provides an interface between a business rule modelled with BRF+ and an application using that rule. The BRF+ function serves as a container for the entire business logic of a rule.</LI><LI>BRF+ is not new and even not directly related to SAP S/4HANA, but with the release of SAP S/4HANA 1610, BRF+ gained more attention since it is launched as the go-to solution for some business processes. The most important ones are the changes in Output Management for purchasing and Billing.</LI><LI>In order to use BRF+ with your SAP ECC system, your system must be on SAP NetWeaver 7.02 SP6 or above.</LI><LI>BRF+ supports features such as simulation, trace, transport, XML, export and import.</LI><LI>With SAP S/4 HANA a new Output Management Approach is in place. The complete configuration differs from the configuration that is used when Output Management is based on NAST (condition technique). The configuration is based on BRF+ in SAP S/4HANA is the target architecture is based on Adobe Document server and Adobe forms only. For the Form Determination Rules (along with other output parameters) BRF+ functionality is used.</LI><LI>Rules are Implemented as expressions which are assigned to the function. The rule input is known as <STRONG>“Context </STRONG>”, and the rule output is called <STRONG>“Result”</STRONG>.</LI><LI>It is a part of SAP NetWeaver ABAP Stack.</LI></UL><P>Key Benefits:</P><P>All output parameters can be automatically determined via a configuration activity based on BRFplus. The benefits are:</P><UL><LI>You can send multiple messages to multiple recipients using multiple channels at the same time.</LI><LI>You can configure anything without the need for ABAP exits.</LI><LI>You can use each determination step on application-specific fields that can be extended.</LI><LI>You can use predelivered content/determination rules to simply run output control out of the box.</LI><LI>Extensibility via CDS is supported.</LI></UL><P><STRONG>Important Note:</STRONG> Basis Team need to upload Standard XML Forms in SAP system. They import the forms by using BRF+ Transaction code.</P><P>If the forms aren't uploaded, we won't be able to see the Output Type in the <STRONG>OPD Transaction</STRONG>. We can get the details of Form from <STRONG>SAP Note: 2248229 </STRONG>with the help of Basis download the note.</P><P><STRONG>Limitations in BRF+:</STRONG></P><UL><LI>Idocs are not fully supported by the New Output Management. Their use is restricted to business applications that previously used NAST.</LI><LI>Only output types which can be mapped 1:1 to the NAST-KSCHL can use IDoc.</LI><LI>Only business partner-based communication is supported, but no communication to logical systems.</LI><LI>No ALE supports.</LI><LI>BRF+ doesn't fully integrate with the document management features provided by earlier SAP systems like SAP script or Smart Forms.</LI><LI>Compared to older output management solutions, error handling and debugging can be a bit more complex or less intuitive in BRF+.</LI><LI>It requires better integration of monitoring tools and workflows to identify issues with output processes, especially when compared to more established NAST error handling.</LI></UL><P><STRONG>NAST to BRF+ Conversion Overview: </STRONG>There are several updates and enhancements in SAP regarding the conversion from NAST to BRF+ for output management.</P><P><STRONG>1. Mandatory Use of BRF+ for Certain Documents:</STRONG> With the release of SAP S/4HANA 1511, output management using BRF+ became mandatory for Purchase Orders. Similarly, in later versions, BRF+ is required for managing outputs of Sales Orders and Billing documents, replacing the traditional NAST-based output management. <BR /><STRONG>2. Increased Number of Supported XML Forms:</STRONG> In earlier versions like SAP S/4HANA 1709, over 12 XML forms were supported. This number has significantly increased in subsequent versions, with SAP S/4HANA 1909 supporting over 20 XML forms. This expansion allows for a broader range of output types and formats to be managed using BRF+.<BR /><STRONG>3. Simplified Configuration and Integration:</STRONG> The configuration process for BRF+ has been streamlined to reduce complexity. It allows for the easy import of XML files for output determination, simplifying the setup and customization of output types.<BR /><STRONG>4. Integration with SAP Fiori and Other UI Technologies:</STRONG> BRF+ integrates seamlessly with SAP Fiori applications and other UI technologies like SAP GUI and SAP UI5. This integration ensures a consistent and modern user experience across different platforms.</P><P>In NAST, the configuration path that needs to be maintained is quite complex. The steps need to be followed are:</P><OL><LI>Condition Table</LI><LI>Access Sequence</LI><LI>Condition Type</LI><LI>Output Type</LI><LI>Condition Record</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_58-1742978404073.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242693iCD7848C4043D1769/image-size/medium?v=v2&px=400" role="button" title="VKR_23_58-1742978404073.png" alt="VKR_23_58-1742978404073.png" /></span></P><P>For the BRF+ in S/4 HANA it is even simplified even business user can maintain Decision Table.</P><P>The steps need to follow are:</P><OL><LI>Output Type</LI><LI>Receiver</LI><LI>Channel</LI><LI>Printer Settings</LI><LI>Email Settings</LI><LI>Form Template</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_59-1742978419380.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242694iBBC39E8D67ADE995/image-size/medium?v=v2&px=400" role="button" title="VKR_23_59-1742978419380.png" alt="VKR_23_59-1742978419380.png" /></span></P><P><STRONG>Activate or Deactivate SAP S/4HANA-Based Output Management:</STRONG></P><P>We maintain this configuration because it enables the use of SAP S/4HANA-based output management for <STRONG>Purchase Orders (POs)</STRONG>, which is necessary for integrating with other systems like the <STRONG>Ariba Network</STRONG> and managing output messages efficiently in the SAP environment.</P><UL><LI>Even if you do not activate the specific step for <STRONG>SAP S/4HANA-Based Output Management</STRONG> related to integration with the Ariba Network, <STRONG>BRF+</STRONG> (Business Rule Framework Plus) can still be used in SAP.</LI></UL><P><STRONG>Configuration Path:</STRONG> SPRO→ IMG → Integration with Other SAP Components → Business Network Integration → Integration with the Ariba Network Application-specific settings → Define Message Output Control → Method 2: Use SAP S/4HANA-Based Output Management → Activate or Deactivate SAP S/4HANA-Based Output Management</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_60-1742978439460.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242695i0E7015127C19BC4D/image-size/medium?v=v2&px=400" role="button" title="VKR_23_60-1742978439460.png" alt="VKR_23_60-1742978439460.png" /></span></P><P>If you need to activate select the Mode: New output management is active and click on save.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_3-1742976667804.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242626iB85A66920352F917/image-size/medium?v=v2&px=400" role="button" title="VKR_23_3-1742976667804.png" alt="VKR_23_3-1742976667804.png" /></span></P><P><STRONG>Configuration steps:</STRONG></P><OL><LI>Storage repository settings</LI><LI>Manage Application Object Type Activation</LI><LI>Define Output Types</LI><LI>Assign Output Channels</LI><LI>Define Rules for Determination of Master Form Template</LI><LI>Assign Form Templates</LI><LI>Assign Email Templates</LI><LI>Define Business Rules for Output Parameter Determination </LI></OL><P><SPAN><STRONG>1. Storage repository settings:</STRONG> Configuration: SPRO > Cross-Application Components > Document Management > General Data > Settings for Storage Systems > Maintain Storage System<BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_61-1742978463495.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242696i3DD853EF304C2AC3/image-size/medium?v=v2&px=400" role="button" title="VKR_23_61-1742978463495.png" alt="VKR_23_61-1742978463495.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_5-1742976667823.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242628i3BB74E7EE47CC871/image-size/medium?v=v2&px=400" role="button" title="VKR_23_5-1742976667823.png" alt="VKR_23_5-1742976667823.png" /></span></P><P><STRONG>SOMU_DB </STRONG> is a standard content Repository for Output Management DB Storage. If you can’t find the standard content Repository, click on the create tab and maintain the data mentioned below:</P><P> Content Repository: SOMU_DB Storage Type: SAP System Version: 0047</P><P>If you want to customize, select the standard one and click on Copy as tab as shown change the content Repository name and click on save.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_6-1742976667829.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242629i867BDFCD50B6DA5F/image-size/medium?v=v2&px=400" role="button" title="VKR_23_6-1742976667829.png" alt="VKR_23_6-1742976667829.png" /></span></P><P><STRONG>2. Manage Application Object Type Activation </STRONG>Configuration: SPRO –> IMG –> Cross-Application Components -> Output Control -> Manage Application Object Type Activation</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_62-1742978556071.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242697i4E43260889036CDE/image-size/medium?v=v2&px=400" role="button" title="VKR_23_62-1742978556071.png" alt="VKR_23_62-1742978556071.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_8-1742976667841.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242630i3C868539BE3E6C79/image-size/large?v=v2&px=999" role="button" title="VKR_23_8-1742976667841.png" alt="VKR_23_8-1742976667841.png" /></span></P><P>If you can’t see the standard Application object type in the screen, just click on Entries and click on Help button and select the required Application object type as per the requirement and maintain status as active and click on save.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_9-1742976667858.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242633iB1221331C640DAB6/image-size/medium?v=v2&px=400" role="button" title="VKR_23_9-1742976667858.png" alt="VKR_23_9-1742976667858.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_10-1742976667865.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242634iC4CDC88380FD5C92/image-size/medium?v=v2&px=400" role="button" title="VKR_23_10-1742976667865.png" alt="VKR_23_10-1742976667865.png" /></span></P><P><STRONG>3. Define Output Types: </STRONG>Configuration: SPRO –> IMG –> Cross-Application Components -> Output Control -> Define Output Types</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_50-1742977032560.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242673i7835F8BB53C152B7/image-size/medium?v=v2&px=400" role="button" title="VKR_23_50-1742977032560.png" alt="VKR_23_50-1742977032560.png" /></span></P><P>The standard configuration is already set up. If the standard option is not visible, you can add it by clicking on "New Entries." To modify the output type, select the standard one, click "Copy As," assign the output type to the Application Object Type, and then save the changes.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_12-1742976667881.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242635i43967B09C273FD56/image-size/medium?v=v2&px=400" role="button" title="VKR_23_12-1742976667881.png" alt="VKR_23_12-1742976667881.png" /></span> </P><P><STRONG>4. Assign Output Channels: </STRONG>Configuration: SPRO –> IMG –> Cross-Application Components –> Output Control –> Assign Output Channels</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_51-1742977112341.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242675i64C76367557ABDE1/image-size/medium?v=v2&px=400" role="button" title="VKR_23_51-1742977112341.png" alt="VKR_23_51-1742977112341.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_14-1742976667902.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242637i33F24C1C2B6FA23B/image-size/medium?v=v2&px=400" role="button" title="VKR_23_14-1742976667902.png" alt="VKR_23_14-1742976667902.png" /></span></P><P>In this step we can assign output channels to application object type and output type.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_15-1742976667906.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242638iBF7CEFBCC9FCAE90/image-size/medium?v=v2&px=400" role="button" title="VKR_23_15-1742976667906.png" alt="VKR_23_15-1742976667906.png" /></span></P><P><STRONG>5. Define Rules for Determination of Master Form Template </STRONG>Configuration: : SPRO –> IMG –> Cross-Application Components –> Output Control –> Define Rules for Determination of Master Form Template</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_52-1742977190251.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242676iE5D59956CFD53395/image-size/medium?v=v2&px=400" role="button" title="VKR_23_52-1742977190251.png" alt="VKR_23_52-1742977190251.png" /></span></P><P>This step is used to establish rules that determine which master form template should be applied based on specific conditions or criteria.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_17-1742976667917.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242640i60D17638C7B9B818/image-size/medium?v=v2&px=400" role="button" title="VKR_23_17-1742976667917.png" alt="VKR_23_17-1742976667917.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_18-1742976667932.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242641iDB956ABBFF5F8DE8/image-size/medium?v=v2&px=400" role="button" title="VKR_23_18-1742976667932.png" alt="VKR_23_18-1742976667932.png" /></span></P><P>In the "Define Rules for Determination of Master Form Template" step in BRF+, we maintain the rules and conditions that link specific criteria, such as document type, application area, or other relevant factors, to determine the appropriate master form template to be used.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_19-1742976667937.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242642i1D4B0394180E8D96/image-size/medium?v=v2&px=400" role="button" title="VKR_23_19-1742976667937.png" alt="VKR_23_19-1742976667937.png" /></span></P><P><STRONG>6. Assign Form Templates: </STRONG>Configuration: SPRO –> IMG –> Cross-Application Components –> Output Control –> Assign Form Templates</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_53-1742977258717.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242678i725D7306B82E5130/image-size/medium?v=v2&px=400" role="button" title="VKR_23_53-1742977258717.png" alt="VKR_23_53-1742977258717.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_21-1742976667954.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242646i2E6E3BCA088F6C44/image-size/medium?v=v2&px=400" role="button" title="VKR_23_21-1742976667954.png" alt="VKR_23_21-1742976667954.png" /></span></P><P>This step is used to link specific form templates to the rules or processes defined in BRF+. This step ensures that the correct form template is associated with a particular business scenario or document type based on the logic defined in the earlier steps, such as the "Define Rules for Determination of Master Form Template" step.</P><P>It enables the system to dynamically assign the appropriate form template for generating documents, reports, or outputs based on the conditions set in the rule framework.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_22-1742976667958.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242644i9D9CB54B275502A2/image-size/medium?v=v2&px=400" role="button" title="VKR_23_22-1742976667958.png" alt="VKR_23_22-1742976667958.png" /></span></P><P>After Maintaining the data click on save.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_23-1742976667972.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242645i3740BF0E38D60D4A/image-size/medium?v=v2&px=400" role="button" title="VKR_23_23-1742976667972.png" alt="VKR_23_23-1742976667972.png" /></span></P><P><STRONG>7. Assign Email Template: </STRONG>Configuration: SPRO –> IMG –> Cross-Application Components –> Output Control –> Assign Form Template</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_54-1742977315080.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242679i7F565966E99A34FB/image-size/medium?v=v2&px=400" role="button" title="VKR_23_54-1742977315080.png" alt="VKR_23_54-1742977315080.png" /></span></P><P>This step ensures that the correct form template is associated with a particular business scenario or document type based on the logic defined in the earlier steps, such as the "Define Rules for Determination of Master Form Template" step.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_25-1742976667983.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242648i5FC19C2FE1FF6D42/image-size/medium?v=v2&px=400" role="button" title="VKR_23_25-1742976667983.png" alt="VKR_23_25-1742976667983.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_26-1742976667986.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242649i36211E84FAC135A5/image-size/medium?v=v2&px=400" role="button" title="VKR_23_26-1742976667986.png" alt="VKR_23_26-1742976667986.png" /></span> After Maintaining the data click on save.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_27-1742976667991.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242650i39E29B51322091C0/image-size/medium?v=v2&px=400" role="button" title="VKR_23_27-1742976667991.png" alt="VKR_23_27-1742976667991.png" /></span></P><P><STRONG>8. Define Business Rules for Output Parameter Determination: </STRONG>Configuration: Configuration: SPRO –> IMG –> Cross-Application Components –> Output Control –> Define Business Rules for Output Parameter Determination</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_55-1742977366428.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242680iA194266FA02DC3C1/image-size/medium?v=v2&px=400" role="button" title="VKR_23_55-1742977366428.png" alt="VKR_23_55-1742977366428.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_29-1742976668001.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242652iAD6E25FD65BBB2FD/image-size/medium?v=v2&px=400" role="button" title="VKR_23_29-1742976668001.png" alt="VKR_23_29-1742976668001.png" /></span></P><P>I won’t see the option for Purchase contract. So, I need to add template related to purchase contract in BRF+ Transaction code.</P><P>In settings select User Mode: Expert</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_30-1742976668013.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242655iAA37205C73D794DD/image-size/medium?v=v2&px=400" role="button" title="VKR_23_30-1742976668013.png" alt="VKR_23_30-1742976668013.png" /></span></P><P>In the Tools tab, choose the XML import, add the standard XML form for the Purchase contract, and include the transport requests.<BR />The <STRONG>Customizing Request </STRONG>will store all the configuration settings for BRF+ that have been maintained.<BR />The <STRONG>Workbench Request</STRONG> will store the configuration settings for Output Types.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_31-1742976668021.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242656iE53F5C19E5865C4B/image-size/medium?v=v2&px=400" role="button" title="VKR_23_31-1742976668021.png" alt="VKR_23_31-1742976668021.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_32-1742976668027.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242654iD155E716F9482FDB/image-size/medium?v=v2&px=400" role="button" title="VKR_23_32-1742976668027.png" alt="VKR_23_32-1742976668027.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_33-1742976668037.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242658i998B01EF5C4DD7B4/image-size/medium?v=v2&px=400" role="button" title="VKR_23_33-1742976668037.png" alt="VKR_23_33-1742976668037.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_34-1742976668040.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242657i08CC678524B40C23/image-size/medium?v=v2&px=400" role="button" title="VKR_23_34-1742976668040.png" alt="VKR_23_34-1742976668040.png" /></span></P><P>Now, the Purchase Contract option is visible in the Output Parameter Determination.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_35-1742976668050.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242659i333414440AF427E5/image-size/medium?v=v2&px=400" role="button" title="VKR_23_35-1742976668050.png" alt="VKR_23_35-1742976668050.png" /></span></P><P>For each step, click on <STRONG>Edit Tab</STRONG> and Maintain the appropriate data and click on <STRONG>Activate button</STRONG>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_36-1742976668057.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242661iA275E649BA1ECD0A/image-size/medium?v=v2&px=400" role="button" title="VKR_23_36-1742976668057.png" alt="VKR_23_36-1742976668057.png" /></span></P><P>The system will display a pop-up tab like want to activate the Output Type click on yes.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_37-1742976668060.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242660i19B8C194869CDCA9/image-size/medium?v=v2&px=400" role="button" title="VKR_23_37-1742976668060.png" alt="VKR_23_37-1742976668060.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_38-1742976668068.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242662i847114593DAF17DB/image-size/medium?v=v2&px=400" role="button" title="VKR_23_38-1742976668068.png" alt="VKR_23_38-1742976668068.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_39-1742976668079.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242663iA7E50EC855093A6E/image-size/medium?v=v2&px=400" role="button" title="VKR_23_39-1742976668079.png" alt="VKR_23_39-1742976668079.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_40-1742976668086.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242664i578D684FBC173576/image-size/medium?v=v2&px=400" role="button" title="VKR_23_40-1742976668086.png" alt="VKR_23_40-1742976668086.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_41-1742976668096.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242665i8C55F2D8F7FD99BB/image-size/medium?v=v2&px=400" role="button" title="VKR_23_41-1742976668096.png" alt="VKR_23_41-1742976668096.png" /></span></P><P>It will remain empty because the Email Recipient will be selected from the vendor master data maintained during vendor creation.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_42-1742976668106.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242667iB08D8DD6C0787687/image-size/medium?v=v2&px=400" role="button" title="VKR_23_42-1742976668106.png" alt="VKR_23_42-1742976668106.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_43-1742976668114.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242666i5B95F768751994D4/image-size/medium?v=v2&px=400" role="button" title="VKR_23_43-1742976668114.png" alt="VKR_23_43-1742976668114.png" /></span></P><P>All the configuration settings have been done. Now create the contract in ME31K Transaction code with the Agreement Type <STRONG>“WK.”</STRONG></P><P><STRONG>The Agreement Number – 4600000002</STRONG></P><P>Go the Change mode in ME32K enter the Agreement Number and click on Message Tab as shown.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_44-1742976668122.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242668i158D53DFE89EC19A/image-size/medium?v=v2&px=400" role="button" title="VKR_23_44-1742976668122.png" alt="VKR_23_44-1742976668122.png" /></span></P><P>The status will display as <STRONG>In Preparation</STRONG> to set the status to complete, select the line and click on the send Output tab as shown.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_45-1742976668128.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242671i932F4C3DD57355E5/image-size/medium?v=v2&px=400" role="button" title="VKR_23_45-1742976668128.png" alt="VKR_23_45-1742976668128.png" /></span></P><P>The status will change to <STRONG>“To be Output”</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_56-1742978250875.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242689iE237B87BA65AD928/image-size/medium?v=v2&px=400" role="button" title="VKR_23_56-1742978250875.png" alt="VKR_23_56-1742978250875.png" /></span></P><P>After completion of this step come back and click on save the status will change to <STRONG>completed</STRONG>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_57-1742978276561.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242690iA394D1B2A14331CC/image-size/medium?v=v2&px=400" role="button" title="VKR_23_57-1742978276561.png" alt="VKR_23_57-1742978276561.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_46-1742976668133.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242670iACED45BA51865226/image-size/medium?v=v2&px=400" role="button" title="VKR_23_46-1742976668133.png" alt="VKR_23_46-1742976668133.png" /></span></P><P>To check the print preview, click on the Display Document tab as shown.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_47-1742976668142.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242669i4161F6B0FEA3D50E/image-size/medium?v=v2&px=400" role="button" title="VKR_23_47-1742976668142.png" alt="VKR_23_47-1742976668142.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VKR_23_48-1742976668152.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/242672i7AC23183D948C758/image-size/medium?v=v2&px=400" role="button" title="VKR_23_48-1742976668152.png" alt="VKR_23_48-1742976668152.png" /></span></P><P>In conclusion, <STRONG>BRF+ (Business Rule Framework Plus)</STRONG> for output management in SAP is a powerful tool that helps automate and control the way documents are generated and managed. It allows businesses to set up rules for different types of outputs, ensuring consistency and efficiency. By using BRF+, companies can reduce manual work, improve document formatting, and make smarter decisions on how to handle outputs. Overall, it helps streamline processes, making them faster and more flexible while improving business performance.</P><P> </P>2025-03-26T10:03:16.339000+01:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/a-little-glance-at-s-4-hana-output-management-and-compare-its-to-our-old/ba-p/14176742A little glance at S/4 Hana OUTPUT MANAGEMENT and compare its to our old friend NAST2025-08-10T09:44:01.457000+02:00DAVE_VUONGhttps://community.sap.com/t5/user/viewprofilepage/user-id/2213211<P>As we already know, NAST output has been used over time, from ECC to S4/HANA, due to its reliability and its customization. Based on NAST, we could generate tons of outputs with different types, from simple PDF form or Adobe form to more complex output like EDI/IDOC or even XML.<BR /><BR />However, Output management is introduced in S/4 HANA as S/4 HANA OUTPUT MANAGEMENT, as more “centralized” approach to output, based on BRF+ (business rule framework). FYI, BRF+ has been on SAP from ECC, which supported users specific customizations, based on the role, but applying this for S/4 HANA output management is new thing. Using S/4 HANA Output Management is a less-coding approach, compares to NAST, when you need to do bunches of customizations, which is prefer for consultants than end users.</P><P>For short, you can check out this table from our friend :</P><P><A href="https://community.sap.com/t5/supply-chain-management-blog-posts-by-sap/s-4hana-output-management-vs-nast-when-to-choose-which/ba-p/13889623" target="_blank">S/4HANA Output Management vs. NAST: When to Choose... - SAP Community</A></P><P> </P><TABLE><TBODY><TR><TD><P><STRONG>Technology</STRONG></P></TD><TD><P><STRONG>BRF+</STRONG></P></TD><TD><P><STRONG>SAPscript / Smart Forms</STRONG></P></TD></TR><TR><TD><P><STRONG>Customization Flexibility</STRONG></P></TD><TD><P>Limited by service nodes</P></TD><TD><P>Customizable to your heart’s content</P></TD></TR><TR><TD><P><STRONG>Form Type</STRONG></P></TD><TD><P><STRONG>Adobe Forms</STRONG></P></TD><TD><P><STRONG>SAPscript, Smart Forms</STRONG></P></TD></TR><TR><TD><P><STRONG>Output Types</STRONG></P></TD><TD><P>Print, Email, XML, EDI</P></TD><TD><P>Print, Email, Fax, EDI</P></TD></TR><TR><TD><P><STRONG>Multiple Outputs per Document</STRONG></P></TD><TD><P>BRF+ (but expect headaches)</P></TD><TD><P>Easier management with condition records</P></TD></TR><TR><TD><P><STRONG>Learning Curve</STRONG></P></TD><TD><P>Steep—better grab some coffee </P></TD><TD><P>Familiar, like catching up with an old friend</P></TD></TR><TR><TD><P><STRONG>Centralized Management</STRONG></P></TD><TD><P>Yes—streamlined oversight</P></TD><TD><P>Traditional, less streamlined</P></TD></TR><TR><TD><P><STRONG>Future-Proofing</STRONG></P></TD><TD><P>Yes—leverages the latest technology</P></TD><TD><P>No—legacy technology means potential obsolescence</P></TD></TR><TR><TD><P><STRONG>Recommended Use Case</STRONG></P></TD><TD><P>Standard scenarios, new systems</P></TD><TD><P>Custom-heavy projects, legacy systems</P></TD></TR></TBODY></TABLE><P>For short, we can understand that, using NAST is like our reliable, multi functional car that can ramp up anything, just look not really good, but Output Management is introduced as sport cars, like a F1 Mercedes AMG W16, that could only drive on an F1 track.</P><P>The purpose of this blog is not to deep dive on theoretical questions how better or how worse of each method, but to know how the configuration of output management, is it much easier than a NAST approach?<BR /><BR />Let I guide you steps by steps<BR /><BR /><FONT size="5"><STRONG>HOW SETUP OF OUTPUT MANAGEMENT</STRONG></FONT><BR /><BR />To check out our Output Management, lets come to <STRONG><EM>our SPRO -> Cross-Application Components -> Output Control<BR /></EM></STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_19-1754811728263.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298993iC24580E0B594CB3B/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_19-1754811728263.png" alt="DAVE_VUONG_19-1754811728263.png" /></span></P><P>As we can see, there are bunches of configurations, that are very easy to recognize than our NACE t-code setup. As we know, NACE t-code is follow based on our condition technique setup, which it takes the combinations of key index and cross-check the condition record, then the medium things and routine things follow up.<BR /><BR />Lets look how can activate the Output Management before NAST</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_1-1754810572860.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298974iFA3791B5DB6D8276/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_1-1754810572860.png" alt="DAVE_VUONG_1-1754810572860.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_20-1754811767129.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298994iEFEF0E508FF54592/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_20-1754811767129.png" alt="DAVE_VUONG_20-1754811767129.png" /></span></P><P>Next step, we can go to <STRONG><EM>Define Output Types</EM></STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_3-1754810572871.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298978iB9E2C2323E8C9C0A/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_3-1754810572871.png" alt="DAVE_VUONG_3-1754810572871.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_4-1754810572881.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298979i3F56A5916937F57E/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_4-1754810572881.png" alt="DAVE_VUONG_4-1754810572881.png" /></span><BR /><BR /><BR />As we can see, for each Object Types, Output Management support not only different ranges of Output Type but also the variance of the Output, which is different approach from NAST. </P><P>Let’s take the Change for example. In NAST, we can retrigger the old output by in case of changes. The same output will be trigger once again when we hit save on the document. But for the Output Management, we could have our own “changes” output here.<BR /><BR />Let’s check this output type for “Cash Sales Changes” as below</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_5-1754810572883.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298977i928955B7715BF0A4/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_5-1754810572883.png" alt="DAVE_VUONG_5-1754810572883.png" /></span><BR /><BR />Double click on the Callback Class.<BR /><BR />As we can see just one type of Output, we can see the API information or type of forms/mediums that the output can support in this case</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_6-1754810572889.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298982iB3C2B0ACB9E98450/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_6-1754810572889.png" alt="DAVE_VUONG_6-1754810572889.png" /></span></P><P>Next step, as we remember from our Friend NAST, in order to generate an output , we need to know which medium (EDI, Printer, Email, Tax).. For each type of output, if you remember, we have this screen in NACE:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_7-1754810572891.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298980i42BFB1201809C7E3/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_7-1754810572891.png" alt="DAVE_VUONG_7-1754810572891.png" /></span><BR /><BR />For Output Management, we follow BRF+ (Business Rule Framework), so we do not follow Condition Technique.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_8-1754810572893.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298981i78DC15E685CA0BA1/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_8-1754810572893.png" alt="DAVE_VUONG_8-1754810572893.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_9-1754810572898.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298985iE15CF231ADBC1843/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_9-1754810572898.png" alt="DAVE_VUONG_9-1754810572898.png" /></span></P><P>So it means that for each output type, you have different means of Channel (or Medium if you are in NACE/NAST). Each Output type has their own channel, and each output type has their own form templates or their own email templates. We can check at detail at “Assign Form Template” or ”Assign Email Template”<BR /><BR />Enough for the setup, let’s get to the most important part of our Output Management.</P><P>instead of Output procedure or condition technique we have to deal with, Output management with the help of BRF+, use the “Business Rules for Output Determination”<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_10-1754810572900.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298983iAF9FD3C451D6DD90/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_10-1754810572900.png" alt="DAVE_VUONG_10-1754810572900.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_11-1754810572902.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298984i8C7D07CA235FC70B/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_11-1754810572902.png" alt="DAVE_VUONG_11-1754810572902.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_12-1754810572908.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298987i7D935F085BB05EA2/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_12-1754810572908.png" alt="DAVE_VUONG_12-1754810572908.png" /></span></P><P>As you can see, since its not follow the Condition Technique, Output Management helps user to setup the rule with friendly UI. However, for me Condition Technique is less complex than, because it is used not only for Output but also for Pricing for Sales, Pricing for Purchasing or Tax Determination (just my 2 cents).<BR /><BR />Let’s get back to our<EM><STRONG> Business rule:</STRONG></EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_13-1754810572921.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298988iC8F03EACE614DF7E/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_13-1754810572921.png" alt="DAVE_VUONG_13-1754810572921.png" /></span></P><P>For Output type, we can input the combinations we like (of course base on the table related to the situations, again, more user-friendly, less consultant-friendly (your pick)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_14-1754810572927.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298986i9FAEFD5E870C7B4E/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_14-1754810572927.png" alt="DAVE_VUONG_14-1754810572927.png" /></span></P><P>For other’s determination, these can base on the same rule for Receiver, Printer Settings, etc. Just the same as Condition Record, but at more “user-friendly”</P><P>After all the setup, get back to how our Output type working in Transactional situation, in this case is the Purchase Order:<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_15-1754810572929.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298989i17DD1308124CF7BE/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_15-1754810572929.png" alt="DAVE_VUONG_15-1754810572929.png" /></span></P><P>As you can see, when we activate the Output Management, the old screen of NAST is no longer, instead, its now generate new type of screen. In this screen, we input PRINT “channel” as our medium in this case. Click on line, choose button ”Display Details”:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_16-1754810572931.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298990i0ADE18A42981B98A/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_16-1754810572931.png" alt="DAVE_VUONG_16-1754810572931.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_17-1754810572933.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298991i3CDA8D0EFE5179B8/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_17-1754810572933.png" alt="DAVE_VUONG_17-1754810572933.png" /></span></P><P>Or we can look <FONT size="3">over </FONT>if we use “EMAIL” channel, you can easily put CC or BCC for email address</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DAVE_VUONG_18-1754810572941.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/298992iEE311CE235E602B5/image-size/medium?v=v2&px=400" role="button" title="DAVE_VUONG_18-1754810572941.png" alt="DAVE_VUONG_18-1754810572941.png" /></span></P><P><FONT size="5"><STRONG>CONCLUSIONS</STRONG></FONT></P><P>As we can see how easily that users can access to their output and adjust their output with just simple modifications, even add emails for CC or BCC purposes. However, we also see that how frustration Output Management can bring out whenever if we want to have new type of forms, or any new heavy-customized oriented conditions, while NAST can provide us with just few clicks. So we surely know that S/4 Hana Output Management could be used in the situations that are more centralized, more " basic" and less "complicated", while our NAST could be trustworthy at all the time, but both of them are solutions to different scenarios so don't just stick to only one. Be flexible within the situation.</P>2025-08-10T09:44:01.457000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/function-expression-in-business-rule-framework-brf/ba-p/14156170Function Expression in Business Rule Framework (BRF+)2025-08-12T11:28:52.458000+02:00manoharreddy478https://community.sap.com/t5/user/viewprofilepage/user-id/152690<P>Function in BRF+:</P><P><SPAN>A function is the </SPAN>rule interface<SPAN> in BRF+ and acts as a link between the application code and the BRF+ code. A function carries a context and a result. It imports the context from the calling application and passes the context data to the assigned top expression or ruleset for further processing.</SPAN></P><P><SPAN>Create an BRF+ application or chose the application in which you wanted to add function Expression.</SPAN><SPAN> </SPAN></P><P><SPAN>Right click on the application and select create > Function</SPAN><SPAN> </SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_0-1752824529026.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288460i61EA79C34E910895/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_0-1752824529026.png" alt="manoharreddy478_0-1752824529026.png" /></span></P><P> </P><P><SPAN>Provide the function name, text and short text.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_1-1752824529027.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288459iB99FA991E1A5E86A/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_1-1752824529027.png" alt="manoharreddy478_1-1752824529027.png" /></span></P><P><SPAN>Click on create and </SPAN><SPAN>navigate to object to save and activate the object. </SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_2-1752824529029.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288461iF1CC269E100DFB38/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_2-1752824529029.png" alt="manoharreddy478_2-1752824529029.png" /></span></P><P> </P><P><SPAN>Once clicked, it will navigate to the above screen. Here you have to assign the result data object based on the context data objects.</SPAN><SPAN> </SPAN></P><P><SPAN>Types of Mode:</SPAN><SPAN> </SPAN></P><P><SPAN>Function mode:</SPAN><SPAN> </SPAN></P><P><SPAN>In functional mode, function execution starts with the assigned top expression. From this top expression, the processing may run through any number of nested subexpressions until a result is returned. </SPAN><SPAN> </SPAN></P><P><SPAN>Event mode:</SPAN><SPAN> </SPAN></P><P><SPAN>In event mode, the function is associated with a list of rulesets that are executed according to their execution priority and their position in the list.</SPAN><SPAN> </SPAN></P><P><SPAN>Function and Event mode:</SPAN></P><P><SPAN>This mode is a combination of the modes mentioned above. At runtime, the function starts processing the assigned top expression. Once the expression evaluation is finished, function execution continues with the associated rulesets.</SPAN><SPAN> </SPAN></P><P><SPAN>Analytical Mode:</SPAN><SPAN> </SPAN></P><P><SPAN>It is mainly related to the Hana rules framework which is relevant to the runtime operations.</SPAN><SPAN> </SPAN></P><P><SPAN> Signature</SPAN></P><P><SPAN>The function signature consists of two parts:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Context</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>The context is a container for data objects that you can assign as import parameters for the function. You choose the context data objects of a function according to the requirements of the calling application by which the BRF+ function is invoked. Also, the context data objects of a function define the scope of objects that can be accessed by the expressions that are evaluated during function execution.</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Result</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>The result data object returns a result value that has been calculated by the expressions of which the function consists .</SPAN><SPAN> </SPAN></P><P><SPAN>Note: For further in event mode, the result object is automatically set to the predefined actions table where the actions are recorded that have been triggered by the assigned rulesets.</SPAN><SPAN> </SPAN></P><P><SPAN>Code Generation:</SPAN></P><P><SPAN>BRF+ provides a built-in code generation facility used to compile source code for as many rule constructs in a function as possible. With the help of generated code, BRF+ rules can be executed significantly faster than in interpretation mode.</SPAN><SPAN> </SPAN></P><P><SPAN>Simulation:</SPAN><SPAN> </SPAN></P><P><SPAN>You can simulate the function processing to test the function's behavior in a sandbox environment. Here, you can gain an in-depth insight into the system status for every single step the system takes during function processing.</SPAN><SPAN> </SPAN></P><P><SPAN>Trace</SPAN></P><P><SPAN>In BRF+, you can request the system to create a processing log to keep track of all processing steps during function execution. The trace information is stored in the system and can be reviewed at any point in time.</SPAN><SPAN> </SPAN></P><P><SPAN>Trace will be stored in Trace tables FDT_TRACE_* </SPAN></P><P><SPAN>Generation Services</SPAN></P><P><SPAN>For a BRF+ function, you can take advantage of different services that automatically generate code and other objects that are needed to bridge the gap between the ABAP backend system where a BRF+ function is hosted and other systems or environments that wish to access BRF+. The different services available address different usage scenarios. These can be categorized as follows:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Code Templates</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>A code template is a predefined snippet of ABAP code that you can use to call a BRF+ function from your application in the same system.</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Generate </SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Function Module</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>You can use a generated RFC-enabled function module to call a BRF+ function that resides in a remote backend system. This is useful in cases where you cannot bring BRF+ and the calling application into the same system — be it for technical reasons (for example, different releases) or for organizational reasons (for example, missing authorization to develop in the remote system).</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Web Service</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>You can use a generated web service to call a BRF+ function from a web application that is not ABAP-based, or that you can only integrate via its exposed services interface. From a technical point of view, web service generation is reusing the function module generation component of BRF+ and generates additional system objects needed for service enablement.</SPAN><SPAN> </SPAN></P><P><SPAN>Here we will work on Function mode example:</SPAN><SPAN> </SPAN></P><P><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_3-1752824529030.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288463i1191B0572209180D/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_3-1752824529030.png" alt="manoharreddy478_3-1752824529030.png" /></span></P><P><SPAN>Assign the top expression and in context add the required objects and finally assign result object suitable.</SPAN><SPAN> </SPAN></P><P><SPAN>Top Expression: </SPAN><SPAN> </SPAN></P><P><SPAN>Its is pre-condition of the function which will evaluate the number of nested expressions to find the result.</SPAN><SPAN> </SPAN></P><P><SPAN>To execute the function click on simulation.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_4-1752824529031.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288462i84A6CAE70B8E7C9C/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_4-1752824529031.png" alt="manoharreddy478_4-1752824529031.png" /></span></P><P><SPAN>Click on continue</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_5-1752824529032.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288464iE75AFDCD26B125E5/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_5-1752824529032.png" alt="manoharreddy478_5-1752824529032.png" /></span></P><P><SPAN>Select the input true or false and click on execute</SPAN><SPAN> </SPAN></P><P><SPAN>Result :</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_6-1752824681872.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/288466i7DB353D19356CE45/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_6-1752824681872.png" alt="manoharreddy478_6-1752824681872.png" /></span></P><P>Note : All the objects created will be stored in FDT_* tables </P><P>Conclusion: </P><P>Function provides a built-in code generation facility used to compile source code for as many rule constructs in a function as possible<BR />Function is the most important BRF+ object and it represents a decision service , which is the element that is in fact invoked by the application and the entire application is invoked by function to stimulate and provide the output we can invoke using the code generation to create report program for executing in GUI.<BR />we can perform pre-conditional and event of action related condition's like rules for executing in the based on the specified rule using the type of modes in the function expression.</P><P><SPAN> </SPAN></P><P><SPAN> </SPAN></P>2025-08-12T11:28:52.458000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/creating-a-formula-expression-in-brf/ba-p/14160043Creating a Formula Expression in BRF+2025-08-21T08:12:50.267000+02:00sumantha_llhttps://community.sap.com/t5/user/viewprofilepage/user-id/2144445<P><STRONG>Business Scenario</STRONG><BR />We want to determine the Pension Bonus Amount based on:<BR />Employee Service Years<BR />Pension Bonus Base Amount<BR />The formula might look like:<BR />Pension Bonus Amount = Pension Bonus Base Amount x Service Years</P><P>Step-by-Step: Creating the Formula Expression in BRF+<BR />Step 1: Create a Formula Expression<BR />Navigate to your BRF+ Application.<BR />Click on Create -> Expression -> Formula.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_3-1753261496166.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290218i43951458481A6D73/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_3-1753261496166.png" alt="sumantha_ll_3-1753261496166.png" /></span></P><P>Enter a name for the formula, e.g., Formula_1, and click Create.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_4-1753261534625.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290219i157AB5773817DC44/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_4-1753261534625.png" alt="sumantha_ll_4-1753261534625.png" /></span></P><P> </P><P>Formula Expression is created here we can create formula by two modes Normal mode and Expert mode</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_5-1753261570579.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290220i251440DA9CFEF156/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_5-1753261570579.png" alt="sumantha_ll_5-1753261570579.png" /></span></P><P> </P><P><STRONG>Normal Mode and Expert Mode</STRONG><BR />Normal Mode<BR />User-Friendly Interface: Designed for users who prefer a simplified, guided way of creating formulas.<BR />Predefined Options: You select from predefined functions, operators, and variables.<BR />Limited Flexibility: Less control over complex logic; suitable for straightforward formulas.<BR />Use Case: Ideal for users who want to quickly create formulas without delving into intricate details or custom logic.<BR />Expert Mode<BR />Advanced Features: Offers a more powerful and flexible environment.<BR />Direct Formula Editing: You can directly write and edit the formula expressions, often in a text-based way.<BR />Greater Control: Supports complex logic, nested functions, and custom expressions.<BR />Customization: Allows more detailed and precise formula definitions.<BR />Use Case: Suitable for advanced users or scenarios requiring complex logic that cannot be easily achieved in normal mode.</P><P><BR />Step 2: Define Data Elements (Mass Creation)<BR />We need to define three key data elements:<BR />Pension Bonus Amount (Result)<BR />Pension Bonus Base Amount<BR />Service Years<BR />To create these:<BR />Go to Application -> Create -> Data Object -> Element (Mass Creation).<BR />Define each required element with the appropriate data type (e.g., Amount, Integer, etc.).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_6-1753261677988.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290225i3B0D10DBA1814B61/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_6-1753261677988.png" alt="sumantha_ll_6-1753261677988.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_7-1753261821555.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290226iA7433B67AF02DEC8/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_7-1753261821555.png" alt="sumantha_ll_7-1753261821555.png" /></span></P><P> </P><P>Add resultant data object</P><P>click on result data object click on `Search'<BR />Select required field</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_8-1753261881502.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290227i3CBF04D95AB6A457/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_8-1753261881502.png" alt="sumantha_ll_8-1753261881502.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_9-1753261956152.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290228iAFE10788EDC88BDD/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_9-1753261956152.png" alt="sumantha_ll_9-1753261956152.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_10-1753261981179.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290229iBBD4E4DE8F0415FB/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_10-1753261981179.png" alt="sumantha_ll_10-1753261981179.png" /></span></P><P> </P><P>Step 3: Build the Formula<BR />Place your cursor after the | next to the Result Data Object.<BR />Click on Insert Data Object and select:<BR />Pension Bonus Base Amount and Service Years</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_11-1753262011820.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290230i07B5B73F49BBEEC5/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_11-1753262011820.png" alt="sumantha_ll_11-1753262011820.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_12-1753262032043.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290231i5A1BA07CF2F5613D/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_12-1753262032043.png" alt="sumantha_ll_12-1753262032043.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_13-1753262135993.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290233i1973750CFB0CAF87/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_13-1753262135993.png" alt="sumantha_ll_13-1753262135993.png" /></span></P><P> </P><P>Step 4: Test the Expression (Simulation)<BR />Click Start Simulation.<BR />Enter test values for:<BR />Pension Bonus Base Amount (e.g., 300)<BR />Service Years (e.g., 10)<BR />Click Execute. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_14-1753262194636.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290234i1FA8E2CAEFAC422B/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_14-1753262194636.png" alt="sumantha_ll_14-1753262194636.png" /></span>You should see the calculated Pension Bonus Amount<BR />We get the output</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sumantha_ll_15-1753262252214.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/290236i6A3252C13572FED4/image-size/large?v=v2&px=999" role="button" title="sumantha_ll_15-1753262252214.png" alt="sumantha_ll_15-1753262252214.png" /></span></P><P> </P><P> </P><P><STRONG>Conclusion</STRONG><BR />Formula Expressions in BRF+ are a powerful tool for creating dynamic business rules and performing calculations using business context data. With both Normal and Expert modes available, users at any skill level can build and manage rules effectively—often without needing to write custom ABAP code.</P><P>In our example, we used a Formula Expression to calculate the Pension Bonus Amount based on an employee’s years of service and a base bonus value—something commonly needed in HR and payroll systems.</P>2025-08-21T08:12:50.267000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/how-to-create-a-decision-tree-in-brf/ba-p/14214027How to Create a Decision Tree in BRF+2025-09-11T08:13:51.501000+02:00sumantha_llhttps://community.sap.com/t5/user/viewprofilepage/user-id/2144445<P>How to Create a Decision Tree in BRF+<BR />1. Introduction</P><P>The Business Rule Framework Plus (BRF+) in SAP allows business users and developers to define and maintain business rules without extensive ABAP coding.<BR />A Decision Tree is a graphical way of modeling conditional logic where each branch represents a decision point.</P><P>This manual explains how to create and test a Decision Tree in BRF+.</P><P>2. Launch BRF+ Workbench</P><P>Open SAP GUI.</P><P>Enter Transaction Code: BRF+ (or BRFPLUS).</P><P>The BRF+ Workbench opens in a browser-based window.</P><P>3. Create an Application</P><P>In the Workarea, select Create → Application.</P><P>Enter details such as:</P><P>Application Name: Z_DEMO_APP</P><P>Description: Demo application for decision tree</P><P>Package: $TMP (for local) or assign to a transport request</P><P>Save the application.</P><P>4. Create a Function</P><P>Inside the application, right-click and choose Create → Function.</P><P>Maintain the following:</P><P>Name: Z_DECISION_TREE_FUNC</P><P>Mode: Event Mode</P><P>Save the function.</P><P>5. Create a Decision Tree Object</P><P>Right-click on the function.</P><P>Select Create → Expression → Decision Tree.</P><P>Provide details:</P><P>Name: Z_DECISION_TREE</P><P>Description: Example for discount calculation</P><P>Save the object.</P><P>6. Define Input and Output Data Objects</P><P>Create input data objects for decision making, for example:</P><P>Order_Type (Data Type: CHAR)</P><P>Customer_Category (Data Type: CHAR)</P><P>Define an output object to hold the decision result, for example:</P><P>Discount_Value (Data Type: NUMC).</P><P>7. Model the Decision Tree Logic</P><P>Open the Decision Tree in the graphical editor.</P><P>Add branches and maintain conditions:</P><P>IF Order_Type = 'ONLINE' → Assign Discount_Value = 10.</P><P>IF Order_Type = 'RETAIL' → Assign Discount_Value = 5.</P><P>ELSE → Assign Discount_Value = 0.</P><P>Save and activate the decision tree.</P><P>8. Test the Decision Tree</P><P>Right-click on the decision tree and choose Test.</P><P>Enter test values, for example:</P><P>Order_Type = ONLINE</P><P>Customer_Category = GOLD</P><P>Execute and verify the result returned in Discount_Value.</P><P>9. Conclusion</P><P>We have successfully created a Decision Tree in BRF+.<BR />This object can now be used in business functions to replace hard-coded logic, making it easier to maintain and update rules without changing ABAP code.</P><P>For complex business rules, you may also explore Decision Tables or Formulas in BRF+.</P>2025-09-11T08:13:51.501000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/creation-of-value-range-in-business-rule-framework-plus-brf/ba-p/14212116Creation of Value Range in Business Rule Framework Plus(BRF+)2025-09-24T06:59:09.471000+02:00manoharreddy478https://community.sap.com/t5/user/viewprofilepage/user-id/152690<P><SPAN>In Business Rule Framework plus (BRF+), a Value Range refers to an expression used to check if a specific value falls within a defined range or set of values. The outcome of a value range expression is always a Boolean (true or false), indicating whether the value meets the specified range condition.</SPAN></P><P><SPAN>Steps to create Value range in BRF+</SPAN><SPAN> .</SPAN></P><P><SPAN>Right click on application and followed with image attached.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_8-1757421668516.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311703i86E5BC2B50490175/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_8-1757421668516.png" alt="manoharreddy478_8-1757421668516.png" /></span></P><P><SPAN>Provide name, short description and click on create and navigate to object. </SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_9-1757421668518.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311702i05E16B7B821FA03E/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_9-1757421668518.png" alt="manoharreddy478_9-1757421668518.png" /></span></P><P><SPAN>Create a data object of date and add in the condition and provide the condition if the input date is equal to fixed date and result will be displayed in true or false</SPAN><SPAN> .</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_10-1757421668520.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311701iCB3BA6E68727527C/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_10-1757421668520.png" alt="manoharreddy478_10-1757421668520.png" /></span></P><P><SPAN>Save and activate . Now click on start stimulation and in next screen click on continue.</SPAN><SPAN> </SPAN></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_11-1757421668521.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311706iA866469EA7E2E880/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_11-1757421668521.png" alt="manoharreddy478_11-1757421668521.png" /></span></P><P><SPAN>Select the date and click on execute .</SPAN><SPAN> </SPAN></P><P><SPAN>If the selected date is in range it will be true</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_12-1757421668521.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311704i82569A42684DB749/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_12-1757421668521.png" alt="manoharreddy478_12-1757421668521.png" /></span></P><P><SPAN> Select the date and click on execute . </SPAN></P><P><SPAN>If the selected date is not in the range it will be false</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_13-1757421668522.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311705iD9E160A4E5DE108A/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_13-1757421668522.png" alt="manoharreddy478_13-1757421668522.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="manoharreddy478_14-1757421668523.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/311707i56D3919AA460FFA0/image-size/large?v=v2&px=999" role="button" title="manoharreddy478_14-1757421668523.png" alt="manoharreddy478_14-1757421668523.png" /></span></P><P>Conclusion:</P><UL><LI><DIV class=""><DIV><DIV class=""><DIV class=""><SPAN><STRONG>Flexibility in Definition:</STRONG></SPAN></DIV><DIV class=""><SPAN>BRF+ offers the flexibility to define value ranges explicitly as reusable expressions or implicitly directly within other expressions like decision tables. </SPAN><SPAN>The choice between explicit and implicit ranges depends on the need for reusability across different parts of a BRF+ application.</SPAN></DIV></DIV></DIV></DIV></LI><LI><DIV class=""><DIV><DIV class=""><DIV class=""><SPAN><STRONG>Boolean Result:</STRONG></SPAN></DIV><DIV class=""><SPAN>Value range expressions in BRF+ always yield a Boolean result, returning true if the tested value lies within the defined range and false otherwise. </SPAN><SPAN>This makes them suitable for use in conditions within decision tables, loops, or other expressions that require a true/false evaluation.</SPAN></DIV></DIV></DIV></DIV></LI><LI><DIV class=""><DIV><DIV class=""><DIV class=""><SPAN><STRONG>Support for Various Operators and Types:</STRONG></SPAN></DIV><DIV class=""><SPAN>BRF+ value ranges support various comparison operators (e.g., equals, not equals, greater than, less than, between) and can be applied to different data types, including numeric values, text, and dates. </SPAN><SPAN>This allows for comprehensive and precise rule modeling.</SPAN></DIV></DIV></DIV></DIV></LI><LI><DIV class=""><DIV><DIV class=""><DIV class=""><SPAN><STRONG>Enhancing Decision Logic:</STRONG></SPAN></DIV><DIV class=""><SPAN>Value ranges are crucial for building robust decision logic in BRF+. </SPAN><SPAN>They enable the creation of rules that categorize or process data based on specific thresholds, intervals, or sets of allowed values, thereby automating and streamlining business processes.</SPAN></DIV></DIV></DIV></DIV></LI><LI><DIV class=""><DIV><DIV class=""><DIV class=""><SPAN><STRONG>Impact on Performance and Maintainability:</STRONG></SPAN></DIV><DIV class=""><SPAN>While implicit ranges offer quick implementation for ad-hoc conditions, explicit, reusable value range expressions contribute to better performance and maintainability in complex BRF+ applications by promoting consistency and reducing redundancy in rule definitions.</SPAN></DIV></DIV></DIV></DIV></LI><LI><DIV class=""><DIV><DIV class=""><DIV class=""><SPAN><STRONG>Limitations and Workarounds:</STRONG></SPAN></DIV><DIV class=""><SPAN>There can be limitations, such as the number of entries in a single decision table cell when defining ranges or sets of values. </SPAN><SPAN>Workarounds, like using patterns or grouping properties, may be necessary to overcome such limitations and effectively model complex business rules.</SPAN></DIV></DIV></DIV></DIV></LI></UL><P><SPAN> </SPAN></P>2025-09-24T06:59:09.471000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/brf-object-creation-using-abap-z-report/ba-p/14190153BRF+ Object Creation using ABAP Z-Report2025-09-24T07:11:38.092000+02:00manoj_smhttps://community.sap.com/t5/user/viewprofilepage/user-id/151098<H2 id="toc-hId-1738668106"><SPAN>Introduction</SPAN></H2><P><SPAN>When working with SAP BRF+ (Business Rule Framework Plus), </SPAN><SPAN><STRONG>Elements</STRONG></SPAN><SPAN> are the most basic building blocks. They represent data fields such as numbers, text, or dates, and act as reusable components for structures, tables, functions, and rules. Without elements, we cannot define or process rules effectively in BRF+.</SPAN></P><P><SPAN>In this blog, we will learn how to create </SPAN><SPAN><STRONG>BRF+ Elements programmatically</STRONG></SPAN><SPAN> using ABAP. This provides a scalable way to automate the creation of data objects and integrate them into larger rule frameworks.</SPAN></P><H2 id="toc-hId-1542154601"><SPAN>Why Elements?</SPAN></H2><P><SPAN>Describes data types of the variable. They are the data carriers helping in signature or context of a function, variables in a rule or rulesets, building blocks for Decision tables, Etc. You can create data objects by defining attributes like element type, length, decimals or you can directly bind to existing DDIC elements.</SPAN></P><UL><LI><P><SPAN><STRONG>Reusability</STRONG></SPAN><SPAN>: Once created, elements can be used in multiple structures and rules.</SPAN></P></LI><LI><P><SPAN><STRONG>Flexibility</STRONG></SPAN><SPAN>: Programmatic creation ensures consistency across environments.</SPAN></P><H2 id="toc-hId-1345641096"><SPAN>ABAP Program to Create Elements</SPAN></H2><P><SPAN>Below is a sample ABAP program (</SPAN><SPAN>ZDEMO_BRF_APP</SPAN><SPAN>) that:</SPAN></P><OL><LI><P><SPAN>Creates a BRF+ Application.</SPAN></P></LI><LI><P><SPAN>Defines three Elements (</SPAN><SPAN>ELEMENT_1</SPAN><SPAN>, </SPAN><SPAN>ELEMENT_2</SPAN><SPAN>, and </SPAN><SPAN>CARRID</SPAN><SPAN>).</SPAN></P></LI></OL></LI></UL><pre class="lia-code-sample language-abap"><code>*&---------------------------------------------------------------------*
*& Report ZDEMO_BRF_APP
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zdemo_brf_app.
DATA: lo_factory TYPE REF TO if_fdt_factory,
lo_application TYPE REF TO if_fdt_application,
lt_message TYPE if_fdt_types=>t_message,
lv_message TYPE string,
lv_boolean TYPE abap_bool,
lv_demo_appl_id TYPE if_fdt_types=>id,
lv_string TYPE string,
lo_element_1 TYPE REF TO if_fdt_element,
lo_element_2 TYPE REF TO if_fdt_element,
lo_element_3 TYPE REF TO if_fdt_element,
lo_table TYPE REF TO if_fdt_table,
lo_table_1 TYPE REF TO if_fdt_table,
lo_structure TYPE REF TO if_fdt_structure,
lv_element1_id TYPE if_fdt_types=>id,
lv_element2_id TYPE if_fdt_types=>id,
lv_element3_id TYPE if_fdt_types=>id,
lv_input_number_id TYPE if_fdt_types=>id,
lv_result_counter_id TYPE if_fdt_types=>id,
FIELD-SYMBOLS:
<ls_message> TYPE if_fdt_types=>s_message,
<lv_value> TYPE any.
PARAMETERS: pv_lcl TYPE abap_bool RADIOBUTTON GROUP r00 DEFAULT 'X',
pv_sys TYPE abap_bool RADIOBUTTON GROUP r00,
pv_mstr TYPE abap_bool RADIOBUTTON GROUP r00,
pv_name TYPE char30.
* p_ele_01 TYPE i DEFAULT 5,
* p_ele_02 TYPE i DEFAULT 4,
* p_ele_03 TYPE i DEFAULT 8,
* p_ele_04 TYPE i DEFAULT 3,
* p_ele_05 TYPE i DEFAULT 13,
* p_ele_06 TYPE i DEFAULT 2.
* pv_ele TYPE char20,
* pv_str TYPE char20,
* pv_tab TYPE char20.
IF pv_name IS NOT INITIAL AND pv_lcl IS NOT INITIAL OR pv_sys IS NOT INITIAL OR pv_mstr IS NOT INITIAL.
* get a reference to the instance of the factory
lo_factory = cl_fdt_factory=>if_fdt_factory~get_instance( ).
* =============================================================
* definition of the new application:
* get an initial application object from the factory
lo_application = lo_factory->get_application( ).
lo_application->if_fdt_transaction~enqueue( ).
* set values for the application, especially the name is important
* You need to have a unique name for each application, here we use the
* FDT Service class method to get the unique name.
lo_application->set_application_component( 'BC' ). "#EC NOTEXT
lo_application->set_software_component( 'SAP_BASIS' ). "#EC NOTEXT
lo_application->set_development_package( '$TMP' ). "#EC NOTEXT
*lo_application->if_fdt_admin_data~set_name( cl_fdt_services=>get_unique_name( ) ).
lo_application->if_fdt_admin_data~set_name( pv_name ).
* In FDT terms there are 3 different type of Applications, Local application,
* system pplication and MasterData Application. The following lines shows how you
* can create local Application, masterdata Application and system Application.
IF pv_lcl EQ abap_true.
lo_application->create_local_application( ).
ELSEIF pv_sys EQ abap_true.
lo_application->create_system_application( ).
ELSEIF pv_mstr EQ abap_true.
lo_application->create_masterdata_application( ).
ENDIF.
lo_application->if_fdt_transaction~activate(
IMPORTING et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_application->if_fdt_transaction~dequeue( ).
ELSE.
lo_application->if_fdt_transaction~save( ).
lo_application->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
lv_demo_appl_id = lo_application->mv_id.
ENDIF.
WRITE: 'The ID of the application created is: ', lv_demo_appl_id. "#EC NOTEXT
ELSE.
MESSAGE 'Provide all the required information' TYPE 'E'.
ENDIF.
*for creating Element,Structure,Table by Data Object
lo_factory = cl_fdt_factory=>if_fdt_factory~get_instance( lv_demo_appl_id ).
* if_fdt_constants=>gc_application_tmp ).
* Note, that you are not required to use an application as input; however,
* we recommend to do so and work with a specific application instead of
* the generic local FDT applications.
*------------Element
lo_element_1 ?= lo_factory->get_data_object(
iv_data_object_type = if_fdt_constants=>gc_data_object_type_element ).
lo_element_1->if_fdt_transaction~enqueue( ).
lo_element_1->if_fdt_admin_data~set_name( 'ELEMENT_1' ).
* set the element-type (see if_fdt_constants=>gc_element_type_* for
* a list of available element types)
lo_element_1->set_element_type( if_fdt_constants=>gc_element_type_number ).
******************************************************************************
* Alternately user can create an element using the service clas method
* CL_FDT_CONVENIENCE=>CREATE_ELEMENT as follows.
*
* cl_fdt_convenience=>create_element( EXPORTING iv_name = 'DEMO_ELEMENT_1'
* iv_application_id = if_fdt_constants=>gc_application_tmp
* iv_element_type = if_fdt_constants=>gc_element_type_number
* iv_activate = ABAP_false
* IMPORTING
* eo_element = lo_element ).
*******************************************************************************
* Set some attributes for the element.
lo_element_1->set_element_type_attributes(
EXPORTING
iv_length = 6
iv_decimals = 2
iv_only_positive = abap_false ).
lo_element_1->if_fdt_transaction~activate(
IMPORTING
et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_element_1->if_fdt_transaction~dequeue( ).
ELSE.
lo_element_1->if_fdt_transaction~save( ).
lo_element_1->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access
lv_element1_id = lo_element_1->mv_id.
ls_element-position = 1.
ls_element-element_id = lv_element1_id.
APPEND ls_element TO lts_element.
ENDIF.
* Create another element
lo_element_2 ?= lo_factory->get_data_object(
iv_data_object_type = if_fdt_constants=>gc_data_object_type_element ).
lo_element_2->if_fdt_transaction~enqueue( ).
lo_element_2->if_fdt_admin_data~set_name( 'ELEMENT_2' ).
* set the element-type (see if_fdt_constants=>gc_element_type_* for
* a list of available element types)
lo_element_2->set_element_type( if_fdt_constants=>gc_element_type_number ).
lo_element_2->if_fdt_transaction~activate(
IMPORTING
et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_element_2->if_fdt_transaction~dequeue( ).
ELSE.
lo_element_2->if_fdt_transaction~save( ).
lo_element_2->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
lv_element2_id = lo_element_2->mv_id.
ls_element-position = 2.
ls_element-element_id = lv_element2_id.
APPEND ls_element TO lts_element.
ENDIF.
* create a third element
lo_element_3 ?= lo_factory->get_data_object(
iv_data_object_type = if_fdt_constants=>gc_data_object_type_element ).
lo_element_3->if_fdt_transaction~enqueue( ).
lo_element_3->if_fdt_admin_data~set_name( ' CARRID ' ).
lo_element_3->set_element_type( if_fdt_constants=>gc_element_type_number ).
lo_element_3->if_fdt_transaction~activate(
IMPORTING
et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_element_3->if_fdt_transaction~dequeue( ).
ELSE.
lo_element_3->if_fdt_transaction~save( ).
lo_element_3->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
lv_element3_id = lo_element_3->mv_id.
ls_element-position = 3.
ls_element-element_id = lv_element3_id.
APPEND ls_element TO lts_element.
ENDIF.
* WRITE: / lo_element->mv_id .
lv_string = lo_element_1->if_fdt_admin_data~to_string( iv_mode = if_fdt_constants=>gc_tostring_mode_complete ).
WRITE : / 'The result of to string method call Element: ' , lv_string. "#EC NOTEXT</code></pre><H2 id="toc-hId-1149127591"><SPAN>Execution & Output</SPAN></H2><P><SPAN>When you execute the above ABAP report, the newly created </SPAN><SPAN><STRONG>Application and Elements</STRONG></SPAN><SPAN> will immediately be reflected in the BRF+ Workbench (/nBRF+). You can navigate to the workbench to verify that the application </SPAN><SPAN>ZDEMO_APP</SPAN><SPAN> and its elements have been created successfully.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 183254.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/315883iB6D2B340C3182643/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 183254.png" alt="Screenshot 2025-09-17 183254.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 183237.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/315886i6FC868376F4CF813/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 183237.png" alt="Screenshot 2025-09-17 183237.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 183157.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/315885i9101A9EC7B85CA3E/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 183157.png" alt="Screenshot 2025-09-17 183157.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 183106.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/315887iA7BBC93F259DB8BD/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 183106.png" alt="Screenshot 2025-09-17 183106.png" /></span></SPAN></P><P><SPAN>After running the program, you will see system-generated IDs for each element created. These IDs are crucial when referencing the elements in Structures, Rules, or Functions.</SPAN></P><P> </P><H2 id="toc-hId-952614086"><SPAN>Conclusion</SPAN></H2><P><SPAN>In the next part of this blog series, we will explore how to create </SPAN><SPAN><STRONG>Structures</STRONG></SPAN><SPAN> using these Elements. Subsequent blogs will also cover </SPAN><SPAN><STRONG>Table, DB Lookup, Loop, Formula, Rule, and Function</STRONG></SPAN><SPAN> in detail.</SPAN></P><P> </P>2025-09-24T07:11:38.092000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/brf-object-creation-using-abap-z-report-part-2/ba-p/14220395BRF+ Object Creation using ABAP Z-Report, Part 22025-09-25T06:39:29.292000+02:00manoj_smhttps://community.sap.com/t5/user/viewprofilepage/user-id/151098<P><SPAN>To create <STRONG>BRF+ Elements programmatically</STRONG> using ABAP Refer Previous blog</SPAN></P><P><SPAN>BRF+ Object Creation using ABAP Z-Report</SPAN></P><P><SPAN>In this blog, we will learn how to create </SPAN><SPAN><STRONG>BRF+ Structures and Table type programmatically</STRONG></SPAN><SPAN> using ABAP. This provides a scalable way to automate the creation of data objects and integrate them into larger rule frameworks.</SPAN></P><P><SPAN><STRONG>Structure Creation:</STRONG> The same application should be used to create the structure.<BR />It is not necessary to build a structure if our result contains just one column. There is also no need to create a structure if the output for a single condition is a single row. If more than one column appears in our result, we should make a structure with all of those columns. Additionally, a structure must be shown if the output consists of multiple rows. </SPAN></P><P><SPAN><STRONG>Table type Creation:</STRONG> In order to have multiple result rows based on a single condition in our decision table, we can create a table in the same application. Therefore, table creation is necessary in our case.<BR /><BR /></SPAN></P><H2 id="toc-hId-1345641096" id="toc-hId-1760834658"><SPAN>ABAP Program to Create Structure and Table type</SPAN></H2><P><SPAN>Below is a sample ABAP program (</SPAN><SPAN>ZDEMO_BRF_APP</SPAN><SPAN>) </SPAN></P><pre class="lia-code-sample language-abap"><code>REPORT zdemo_brf_app.
DATA: lo_factory TYPE REF TO if_fdt_factory,
lo_application TYPE REF TO if_fdt_application,
lt_message TYPE if_fdt_types=>t_message,
lv_message TYPE string,
lv_boolean TYPE abap_bool,
lv_demo_appl_id TYPE if_fdt_types=>id,
lv_string TYPE string,
lo_element_1 TYPE REF TO if_fdt_element,
lo_element_2 TYPE REF TO if_fdt_element,
lo_element_3 TYPE REF TO if_fdt_element,
lo_table TYPE REF TO if_fdt_table,
lo_table_1 TYPE REF TO if_fdt_table,
lo_structure TYPE REF TO if_fdt_structure,
lv_element1_id TYPE if_fdt_types=>id,
lv_element2_id TYPE if_fdt_types=>id,
lv_element3_id TYPE if_fdt_types=>id,
lv_input_number_id TYPE if_fdt_types=>id,
lv_result_counter_id TYPE if_fdt_types=>id,
FIELD-SYMBOLS:
<ls_message> TYPE if_fdt_types=>s_message,
<lv_value> TYPE any.
PARAMETERS: pv_lcl TYPE abap_bool RADIOBUTTON GROUP r00 DEFAULT 'X',
pv_sys TYPE abap_bool RADIOBUTTON GROUP r00,
pv_mstr TYPE abap_bool RADIOBUTTON GROUP r00,
pv_name TYPE char30.
* p_ele_01 TYPE i DEFAULT 5,
* p_ele_02 TYPE i DEFAULT 4,
* p_ele_03 TYPE i DEFAULT 8,
* p_ele_04 TYPE i DEFAULT 3,
* p_ele_05 TYPE i DEFAULT 13,
* p_ele_06 TYPE i DEFAULT 2.
* pv_ele TYPE char20,
* pv_str TYPE char20,
* pv_tab TYPE char20.
IF pv_name IS NOT INITIAL AND pv_lcl IS NOT INITIAL OR pv_sys IS NOT INITIAL OR pv_mstr IS NOT INITIAL.
* get a reference to the instance of the factory
lo_factory = cl_fdt_factory=>if_fdt_factory~get_instance( ).
* =============================================================
* definition of the new application:
* get an initial application object from the factory
lo_application = lo_factory->get_application( ).
lo_application->if_fdt_transaction~enqueue( ).
* set values for the application, especially the name is important
* You need to have a unique name for each application, here we use the
* FDT Service class method to get the unique name.
lo_application->set_application_component( 'BC' ). "#EC NOTEXT
lo_application->set_software_component( 'SAP_BASIS' ). "#EC NOTEXT
lo_application->set_development_package( '$TMP' ). "#EC NOTEXT
*lo_application->if_fdt_admin_data~set_name( cl_fdt_services=>get_unique_name( ) ).
lo_application->if_fdt_admin_data~set_name( pv_name ).
* In FDT terms there are 3 different type of Applications, Local application,
* system pplication and MasterData Application. The following lines shows how you
* can create local Application, masterdata Application and system Application.
IF pv_lcl EQ abap_true.
lo_application->create_local_application( ).
ELSEIF pv_sys EQ abap_true.
lo_application->create_system_application( ).
ELSEIF pv_mstr EQ abap_true.
lo_application->create_masterdata_application( ).
ENDIF.
lo_application->if_fdt_transaction~activate(
IMPORTING et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_application->if_fdt_transaction~dequeue( ).
ELSE.
lo_application->if_fdt_transaction~save( ).
lo_application->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
lv_demo_appl_id = lo_application->mv_id.
ENDIF.
WRITE: 'The ID of the application created is: ', lv_demo_appl_id. "#EC NOTEXT
ELSE.
MESSAGE 'Provide all the required information' TYPE 'E'.
ENDIF.
*for creating Element,Structure,Table by Data Object
lo_factory = cl_fdt_factory=>if_fdt_factory~get_instance( lv_demo_appl_id ).
* =============================================================
* definition of a data object structure:
* get an initial data object structure from the factory
lo_structure ?= lo_factory->get_data_object(
iv_data_object_type = if_fdt_constants=>gc_data_object_type_structure ).
lo_structure->if_fdt_transaction~enqueue( ).
lo_structure->if_fdt_admin_data~set_name( 'STRUCTURE' ).
lo_structure->set_elements( lts_element ).
**********************************************************************************
* Alternately user can create a structure by using the service class method,
* CL_FDT_CONVENIENCE=>CREATE_STRUCTURE as follows.
* Cl_fdt_convenience=>create_structure( EXPORTING iv_name = 'DEMO_STRUCTURE_1'
* iv_application_id = if_fdt_constants=>gc_application_tmp
* it_element = lts_element
* iv_activate = ABAP_false
* IMPORTING
* eo_structure = lo_structure ).
***********************************************************************************
lo_structure->if_fdt_transaction~activate(
IMPORTING
et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
LOOP AT lt_message ASSIGNING <ls_message>.
MESSAGE ID <ls_message>-msgid TYPE <ls_message>-msgty NUMBER <ls_message>-msgno
WITH <ls_message>-msgv1 <ls_message>-msgv2 <ls_message>-msgv3 <ls_message>-msgv4
INTO lv_message.
ENDLOOP.
WRITE : lv_message.
* for some reason the activation failed -> individual handling needed
lo_structure->if_fdt_transaction~dequeue( ).
ELSE.
lo_structure->if_fdt_transaction~save( ).
lo_structure->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
lv_structure_id = lo_structure->mv_id.
ENDIF.
* WRITE: / lo_structure->mv_id .
lv_string = lo_structure->if_fdt_admin_data~to_string( iv_mode = if_fdt_constants=>gc_tostring_mode_complete ).
WRITE : / 'The result of to string method call Structure: ' , lv_string. "#EC NOTEXT
* =============================================================
* definition of a data object table:
* get an initial data object Table from the factory
lo_table ?= lo_factory->get_data_object(
iv_data_object_type = if_fdt_constants=>gc_data_object_type_table ).
lo_table->if_fdt_transaction~enqueue( ).
lo_table->if_fdt_admin_data~set_name( 'TABLE' ).
lo_table->set_structure( lv_structure_id ).
INSERT lo_table->mv_id INTO TABLE lts_context_id.
***********************************************************************
* Alternately user can create a Table by using the service class method,
* CL_FDT_CONVENIENCE=>CREATE_TABLE as follows.
* cl_fdt_convenience=>create_table( EXPORTING iv_name = 'DEMO_TABLE_1'
* iv_structure_name = 'DEMO_STRUCTURE_1'
* iv_application_id = if_fdt_constants=>gc_application_tmp
* it_element = its_element
* iv_activate = ABAP_false
* IMPORTING
* eo_table = lo_table ).
***********************************************************************
lo_table->if_fdt_transaction~activate(
IMPORTING
et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_table->if_fdt_transaction~dequeue( ).
ELSE.
lo_table->if_fdt_transaction~save( ).
lo_table->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
ENDIF.
* WRITE: / lo_table->mv_id .
lv_string = lo_table->if_fdt_admin_data~to_string( iv_mode = if_fdt_constants=>gc_tostring_mode_complete ).
WRITE : / 'The result of to_string method call Table: ' , lv_string. "#EC NOTEXT
* cl_fdt_convenience=>create_table( EXPORTING iv_application_id = if_fdt_constants=>gc_application_tmp
* iv_element_type = if_fdt_constants=>gc_data_object_type_table
* iv_activate = abap_false
* iv_name = 'RESULT_COUNTER'
* IMPORTING eo_element = lo_result_counter ).
*
* INSERT lo_result_counter->mv_id INTO TABLE lts_context_id.
*TYPES: BEGIN OF ty_element ,
* name TYPE if_fdt_types=>name,
* lv_element type if_fdt_types=>element_type,
* END OF ty_element.
*DATA: lt_element TYPE TABLE OF ty_element,
* lss_element TYPE ty_element.
* lss_element-name = 'SFLIGHT_TAB'.
* lss_element-lv_element = if_fdt_constants=>gc_data_object_type_table.
* APPEND lss_element TO lt_element.
lo_table_1 ?= lo_factory->get_data_object(
iv_data_object_type = if_fdt_constants=>gc_data_object_type_table ).
lo_table_1->if_fdt_transaction~enqueue( ).
lo_table_1->if_fdt_admin_data~set_name( 'SFLIGHT_TAB' ).
lo_table_1->set_structure( lv_result_table_id ).
APPEND lo_table_1->mv_id TO lts_context_id.
lo_table_1->if_fdt_transaction~activate(
IMPORTING
et_message = lt_message
ev_activation_failed = lv_boolean ).
IF lv_boolean EQ abap_true.
* for some reason the activation failed -> individual handling needed
lo_table_1->if_fdt_transaction~dequeue( ).
ELSE.
lo_table_1->if_fdt_transaction~save( ).
lo_table_1->if_fdt_transaction~dequeue( ).
* usually it makes sense to store the id for later access to the application
ENDIF.
* WRITE: / lo_table->mv_id .
lv_string = lo_table_1->if_fdt_admin_data~to_string( iv_mode = if_fdt_constants=>gc_tostring_mode_complete ).
WRITE : / 'The result of to_string method call Table: ' , lv_string. "#EC NOTEXT
*
* cl_fdt_convenience=>create_table(
* EXPORTING
* iv_name = 'RESULT_TABLE' " Name
* iv_structure_name = lv_name
* iv_application_id = if_fdt_constants=>gc_application_tmp " Universal Unique Identifier
* it_element = lt_element " Elements
* iv_activate = abap_true " Activate changes?
* IMPORTING
** ev_table_id = " Universal Unique Identifier
* eo_table = lo_result_table " FDT: Data Object of Type Table
* ).
* CATCH cx_fdt_input. " FDT: Invalid Input</code></pre><H2 id="toc-hId-1149127591" id="toc-hId-1564321153"><SPAN>Execution & Output</SPAN></H2><P><SPAN>When you execute the above ABAP report, the newly created </SPAN><SPAN><STRONG>Application , Structure and Table </STRONG></SPAN><SPAN> will immediately be reflected in the BRF+ Workbench (/nBRF+). You can navigate to the workbench to verify that the application </SPAN><SPAN>ZDEMO_APP</SPAN><SPAN> and its elements have been created successfully.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 183106.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/316035i340B5B5D75B3E0F2/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 183106.png" alt="Screenshot 2025-09-17 183106.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 220313.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/316034iB705E65CA51EB4DB/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 220313.png" alt="Screenshot 2025-09-17 220313.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 220331.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/316037iD47E80206F81B84C/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 220331.png" alt="Screenshot 2025-09-17 220331.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-09-17 220409.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/316038iCC9677B2BEC3EEAA/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-09-17 220409.png" alt="Screenshot 2025-09-17 220409.png" /></span></SPAN></P><P><SPAN>After running the program, you will see system-generated IDs for each element created. These IDs are crucial when referencing the elements in Structures, Rules, or Functions.</SPAN></P><P> </P><H2 id="toc-hId-952614086" id="toc-hId-1367807648"><SPAN>Conclusion</SPAN></H2><P><SPAN>In the next part of this blog series, we will explore how to create <STRONG>DB Lookup, Loop, Formula, Rule, and Function in</STRONG></SPAN><SPAN> Subsequent blogs </SPAN><SPAN>in detail.</SPAN></P><P> </P><P> </P>2025-09-25T06:39:29.292000+02:00