Skip to Content
Technical Articles
Author's profile photo Andi Mauersberger

SAP S/4HANA Business Partner Toolset (BDT) at Business Partner

At almost all S/4HANA preparation projects the question comes up, how the BP transaction works together with BDT. In this Blog I would like to give a short introduction and share some knowledge of understanding BDT.

Sources are the very old CRM course CR590 and my experience in this area.

This blog is relevant for all releases working with Business Partner, meaning ECC 6.0 onwards. Main focus is SAP S/4HANAon-premise and private cloud edition, which is the most relevant working with Business Partner.


What is the BDT?

BDT stands for “Business Data Toolset” and is a central tool for maintaining master data and simple transactional data. In this context I will focus on Business Partner transaction and Business Partner Relationship.

BDT has following key design targets:

  1. Extensibility
    modification-free extension of various dialog parts, for example screen layout, screen sequence, program logic, menu, field grouping, etc. via several layers.
  2. Configurability
    application developers (maintenance of the control tables of the BDT) can adapt screen layout and screen sequence
  3. Divisibility
    the maintenance of larger object parts can be split into smaller sections
  4. Quicker development
    the dialog control is carried out via the BDT. The business functions are realized by the applications. In addition the BDT provides several services in which the applications can include themselves
  5. Generic Object Services
    direct input, transfer mode, field control, etc

BDT – Business Data Toolset

Access BDT menu

  1. /n (to get back into main menu)
  2. transaction BUPT (call BDT-Menu)


BDT Objects

BDT Processing Logic

Fixed program logic is reading control tables from customizing.


Program Logic

The program logic of the BDT is static (fixed). Events call dynamically customized Function Modules and Screens.


Every object of master data and document data, which could be maintained using BDT, is defined as an Application Object

BUP    – General Business Partner

BUB    – Business Partner Relationship

BUA    – Addresses

CVIC – Customer Link

CVIV – Vendor Link

Applications can be switched on or off separately.


Application data is kept in memory objects instead of structures. To access data you have to read data from memory objects into local structures. After changing data these data have to write back into memory objects. Foundation for saving data to the database are memory objects.

From Development perspective each application is clustered in a separate Function Group. In this context all applications are decoupled. The communication between applications is using GET- and COLLECT function modules or GET and SET methods.

Screens (type subscreen), PBO and PAI modules and function modules for events (for each application, table and view) are created in the function group.

The PBO module calls only the service function module BUS_PBO for executing the field status.

The PAI module calls only the service function module BUS_PAI for getting the cursor position.


Program logic:

  • Events for each application (read data, check data, save data)
  • Events for tables (communication between applications / function groups
  • Events per view
    • PBC Event for preparing tables (sorting, etc)
    • PBO Event prior to data entry Reading of texts from Customizing tables, formatting of the date etc.
    • PAI Event following data entry. Checking of the entry values. Conversion of the date

Note: The same coding is carried out in the maintenance mode without dialog (e.g. direct input). There is no redundant coding.



The BDT uses fixed events within the dialog flow. All applications are able to extend the object by their own program logic. The BDT calls application-specific function modules dynamically. The most important events are displayed below

ISSTA – Initialization

ISDAT – Read data from DB

ISDST – Distribute data to participating application

FCODE – Process own function code

XCHNG – Check whether data changed

DCHCK – Check data

DSAVB – Collect data from owning app.

DTAKE – Note data in global memory

DSAVC – Complete data (internal number)

DSAVE – Save data on DB

DLVE1 – Initialize current memory

DLVE2 – Initialize global memory


Screen Layout (OK-Code: bdt_analyzer)

A description how to use BDT Analyzer can be found at my blog

SAP S/4HANA Business Partner BDT Analyzer usage


BP transaction dialog has a hierarchical structure built based on following elements which are set up in BDT.

  • Screen Sequence
  • Screen
  • Section
  • View
  • Field Group
  • Field


Screen Sequence (transaction BUS6)

A Screen Sequence represents the number of shown tabs and contains one or more screens


Screen (transaction BUS5)

A Screen represents a tab and contains one or more Sections


Section (transaction BUS4)

A Section represents a screen area and contains one or more Views


View (transaction BUS3)

A View represents a technical screen (Dynpro) and contains one or more Field Groups


Field Groups (transaction BUS2)

A Field Group contains one or more Fields



The View is one of the most important elements at the BDT. It is the connection between configuration (Customizing Objects) and Workbench Objects like PBO/PAI Function Modules.



View Definition

Fields a collected at one View if the:

  • Content has the same context
  • Checks are the same


Fields at a View are located at a Subscreen and each View is assinged to a technical subscreen. The View is assigned to an Application and contains Field Groups. A View can be used in multipple Objects (BP Roles).


View Attributes

Function Modules of Events

  • Before Output (PBO): e.g. select and show texts
  • After Input (PAI): Field checks
  • Before Screen Callup (PBC): sort tables, display of 1st entry


Show View only if

  • Application of View is active
  • View is assigned to objects which are going to maintain


Flow Logic of Subscreen

  • Call Function Module BUS_PBO in PBO (field modification, messages)
  • Call Function Module BUS_PAI in PAI (determine cursor position)


Special importance of Data Set

An another interesting point is how the connection between the roles and the technical elements are handled. Remember to BP transaction, each selected role is shown with a different screen layout (visible tabs). How the system is managing this?


Each View is assigned to a Data Set in View definition. Selected Data Sets are assigned to so called BP-Views (transaction BUSD). Remember, at view definition Data Set BUP010 is assigned to view BUP240 (Organization: Legal Form).


If you have a look at BP-View FLCU01 (Customer/Vendor Integration: Customer) you will find Data Set BUP010 (Central Data).



At Role Definition in Customizing you will find the assignment of BP-View to BP-Role.

Customizing: Cross-Application Components->SAP Business Partner->Business Partner->Basic Settings->Business Partner Roles->Define BP Roles


As you can see, BP-View FLCU01 is assigned to BP Role FLCU01.

Whenever you choose role FLCU01 in BP transaction, BP-View FLCU01 is called with all assigned Data Sets and Views with fields.



This full bunch of field groups is now controlled by field modification (display/mandatory/hide/optional) from Customizing. At this customizing step you will find again Data Sets (unfortunately a bit hidden).

e.g. Customizing: Customizing: Cross-Application Components->SAP Business Partner->Business Partner->Basic Settings->Field Groupings->Configure Field Attributes per BP Role



By the way, all this information can be captured from BDT_Analyzer as well.

And another feature is the navigation into customizing settings directly from BDT Analyzer by clicking on specific Screen name, View Name, Section Name, ……


Field Group

Field Groups are representing a collection of fields which are in a strong relation. Keep in mind, field modification is based on field group. That means if a field group is set as mandatory the all fields which are part of this field group are mandatory (similar to field modification based on Account Group).

Function Module CVIV_BUPA_EVENT_FMOD2_ENH is responsible for field status determination (hidden, optional, mandatory). With pushing the button you can navigate into Function Module coding.

With double-click on ‘Field Group -> Fields’ you can navigate into field assignment.

You can see 3 fields assigned to field group 3379:

  • SPERQ_TXT – Text field for field value description
  • GS_LFA1-SPERQ – technical screen field (Input Field)
    with navigating into screen painter of view CVIV60 you can see technical screen fields (see next picture)
  • LFA1-SPERQ – technical table field

I hope this blog post was helpful for you. If so, click on “like” or “share”. Please explore the links below for any further clarification.

Helpful links:

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Srini Narahari
      Srini Narahari

      Thanks, Andi. Nice to know how BDT can still be used in S/4.

      Author's profile photo Günter Lidl
      Günter Lidl

      Hi Andi,

      thanks a lot for your good description!

      One question, maybe you can help me? I created my own folder in Z-namespace and added it to the business partner company code view with my own fields (table append in LFB1)!

      This works fine and the fields will be switched on/off and so by using this function module CVIV_BUPA_EVENT_FMOD2_ENH. So far so good!

      But after a couple of month i had to had an additional field, so i added this field in teh table append as well and placed it as GS_LFB1-ZZxxx and LFB1-ZZxxx on my screen within my function group.

      THe field appears and the behavior seems first good, but i cannot save the entry as after pressing SAVE the field content disappears and nothing is saved! But this behabior is only for the new added field! The old ones works perfectly!

      Can you tell me what is missing? Do i have to generate soomething?

      Looking forward to having an answer from you 🙂

      Thanks and regards


      Author's profile photo Tulasi Deepthi Loya
      Tulasi Deepthi Loya

      Hello Günter,

      I am also facing similar issue. Were you able to find any solution for this.

      Author's profile photo Günter Lidl
      Günter Lidl

      Hi Tulasi,

      the error was been made by myself as ii forgot to extend my table append structure for

      VMDS_EI_COMPANY_DATA and/or VMDS_EI_COMPANY_DATAX. Theses structrures you have to extend by an append with your custom fields!




      Author's profile photo Sreenivas Reddy Maddi
      Sreenivas Reddy Maddi

      Hi, I have similar requirement of adding one additional field to the already existing field-group. But, my newly added field is not visible on the screen. Do we need to add the field manually in the corresponding dynpro screen - SE51 / from Function group? (or) It will be shown automatically after the BDT config?

      Author's profile photo Luiz Souza
      Luiz Souza

      Hi, perfect.

      What is the best way to extend a information into BP (BUT000) in S/4HANA ?

      Should I keep using the EEWB ?

      Thank you!

      Author's profile photo Andi Mauersberger
      Andi Mauersberger
      Blog Post Author

      Hi Luiz,

      using EEWB is the easiest way to extent BUT000.

      For Z-fields at customer/vendor tables have a look at this blog post.

      Best Regards

      Author's profile photo Enno Wulff
      Enno Wulff

      Thanks Andi Mauersberger for this detailed and well documented overview!

      Can you pls explain how the naming conventions for "items" are interpreted?

      I don't understand which numbers I can use as a customer or development partner.




      /update: is it meant that as a customer (central) you can use any numbers from 0000010 to 0000099 (Places 6 and 7)?



      Author's profile photo Andi Mauersberger
      Andi Mauersberger
      Blog Post Author

      Hello Enno,

      at most of BDT settings customer name space <> 0 at last digit (right one). e.g. 100001

      Exeption is field group where customer name space is 600-699.

      I hope this helps.

      Best Regards


      Author's profile photo Enno Wulff
      Enno Wulff

      Thanks for your fast reply! I think, this helps 😀 Thanks a lot

      Author's profile photo Enno Wulff
      Enno Wulff

      How can it be, that there are no explicit naming conventions e.g. for screens?





      It's all the same for SAP, partners and customers.

      Plus: Can it be that the naming conventions for partners are not caught correctly in the maintenance views? Or is there any setting to do to mark a system as "partner"?

      thanks for any hint!


      Author's profile photo Daniel Paals
      Daniel Paals

      Dear Andi,

      thank you for this blog. It helped me a lot to understand the BDT.

      I have one question to which I cannot find the answer. Maybe you can helo me...

      With the help of the BDT I have added a new section with some custom KNVV-fields to the sales tab "additional data".

      Everything works fine... saving, reading, value help....

      But why are the fields in my new section not disabled when the business partner is shown in display mode?
      I want them to be read-only until the user clicks the edit-button.

      Can you give me any clue, what function or setting I am missing?

      Best regards


      Author's profile photo Andi Mauersberger
      Andi Mauersberger
      Blog Post Author

      Hi Daniel,

      nice to see that my description is helpful. From the distance I guess you forgot to assign field status function module to Field Group. see this step

      Best Regards

      Author's profile photo Sanket Chougule
      Sanket Chougule

      Hello Andi ,

      Thank you for your blog series on BDT.

      We are trying to use the DSAVE event for the BUB application. everything is fine on the GUI.

      The problem is  when the BP is interfaced with the SAP system via the API

      API_BUSINESS_PARTNER . The event method is not called.

      However,  I see one event in the trace with the event: APPLC - FM  XO_GENERIC_EVENT_APPLC

      Not sure what am I missing. OR is it that the BDT event will trigger for GUI .

      Basically, we are trying to do some postprocessing on the BP once it's created which we are unable to do via API.

      Any hint of help on the scenario.

      Thanks in Advance.

      Author's profile photo Andi Mauersberger
      Andi Mauersberger
      Blog Post Author

      Hello Sanket,

      BDT is the foundation for GUI transaction only. There is no connection to API or Fiori Apps.

      To have full customer/vendor access you should use API CL_MD_BP_MAINTAIN

      Best Regards

      Author's profile photo Patrick Rohner
      Patrick Rohner

      Dear Andi,

      This is a very informative blog.

      We are using even ISSTA with a function module in order to default some values for the general data.

      But I cannot figure out what event is available to define values for company code data (right after the entry of a company code). Ist that not possible or can we only a "check/validation" event to determine whether an entry is correct?



      -> I have found the solution. In SPRO, there is BADI: Defaults for Creating Data from BP to Customer/Vendor . It works like a charm to define default values, whether it is for general data, company code data etc.



      Author's profile photo R. Krishnan
      R. Krishnan

      Hi Andi,

      Thanks for the nice explanation.  I am trying to add a new Relationship Category and unfortunately when trying to maintain the same via Relationship section, I see only a single-entry field for email address i.e., the relationship category is using table BUT051 to store address data whereas I would like to use Central Address Management and use table ADR6 for the same.  Any pointers?



      Author's profile photo Andi Mauersberger
      Andi Mauersberger
      Blog Post Author

      Hi Ram,

      relationship is using Central Address Management but in standard there is only one field for email implemented. If you need additional fields try to use Easy Enhancement Workbench (EEWB).

      Best Regards


      Author's profile photo Archana Pradhan
      Archana Pradhan

      Hello Andi,

      Thank you so much for the explanation. It really helps a lot to understand the BDT.

      I have a question. We have a requirement from client to create a maintenance role where all the data in BP screens (Address, Address Overview , Control, Identification and others ) will be greyed out except EmailID and Bank details fields. User only allow to change EmailID and Bank details. I tried to do it by using Fields Groups but in that case a lot of customizing need to be done in SPRO which client doesnt like to do. Is there any better approach to solve this ?


      Your response will be very helpful

      Best Regards,


      Author's profile photo madjid khanevadegi
      madjid khanevadegi

      thank you Andi Mauersberger for your good description and detailed and well documented in this blog
      It helped me a lot to understand the BDT.


      Best Regards,