When I need something, I look for it in the nearest place.
SAP standard codes are my main resource when it comes to ABAP development. That’s why I usually lose myself in SAP codes. It’s a kind of journey. The good thing is, I always get something useful from SAP at the end of every journey.
That’s why I’m a traveler.
* * *
Let me tell you about one of them. Before starting this journey, your SAP backpack should contain some ABAP knowledge, the POPUP_TO_CONFIRM
function module, and optionally the ARBFND_DETAILED_LONGTEXT
document object.
After you log in to your SAP system, you can check the existence of these objects in transactions SE37
for the function module and SE61
for the document object.
This journey will include the following sections including six campfire stories (two stories in each next post):
- Discovery
- What is POPUP_TO_CONFIRM?
- The Moment I Feel a Journey Approaching
- Experiment: Newline Character and HTML <br> Tag
- Function Interface (Parameters)
- Flow Logic
- Campfire
- Story 1: Changing the Popup Icon
- Story 2: Customizing the Icons and Quick Info of Buttons
- Story 3: Splitting Text into 48-Char Sentences and Starting on New Lines
- Story 4: Splitting Text into 57-Char Sentences and Starting on New Lines
- Story 5: Displaying an Unordered List
- Story 6: Displaying Longer Text Using a Document Object
🧭 Let’s start the journey!
Discovery
What is POPUP_TO_CONFIRM?
POPUP_TO_CONFIRM
is a standard function module used to display a message (question, document object text, or both) in a modal dialog box, and also to ask users to decide.
I recommend reading the documentation before using it. To do this, please follow the steps below.
- Launch transaction
SE37
. - Enter
POPUP_TO_CONFIRM
in the Function Module input field. - From the top menu, choose Goto → Documentation → Function Module Documentation.
💡 This is the first step in getting something from SAP.
The Moment I Feel a Journey Approaching
I was writing an ABAP program that reads spreadsheet data from a Microsoft Excel file and creates a Purchasing Contract² in an SAP S/4HANA 2020 On-Premise system.
The user selects a file, executes the program, and then the program uploads the file, displays the content, and performs an incompleteness check. If everything is fine, the user clicks the “Create Contract” button.
To prevent accidental button clicks, the program displays the following message and asks for a confirmation.
An example output of the POPUP_TO_CONFIRM function |
Since the second sentence was broken, a possible request would be:
“As a user, I want to see the sentences of the message start on new lines so I can read them easily”
Experiment: Newline Character and HTML <br> Tag
I wondered if I could make each sentence start on a new line. My first attempt was to insert a newline character (CL_ABAP_CHAR_UTILITIES=>NEWLINE
) between sentences (which is probably the first thing that comes to mind). Of course, it didn’t work! Then, I started to analyze the codes of the function.
When I understand the logic and noticed a few hard-coded values, I thought I could achieve something useful.
* * *
Welcome to the anatomy of the POPUP_TO_CONFIRM function module.
Function Interface (Parameters)
Let’s first explore some of the parameters.
TEXT_QUESTION Parameter
The POPUP_TO_CONFIRM
function displays the text in an HTML container. Therefore, it splits the TEXT_QUESTION
text into segments to populate an HTML table. The function uses the TEXT_SPLIT
function to do this but, sentences in the text do not start on new lines and there is no parameter to control this.
In the meantime, a quick note about the
TEXT_SPLIT
function. It splits the input text once in the specified line length word-compatibly. See the function’s documentation for more details.
⚠️ Here, we should keep in mind that we can send a maximum of 400 characters to the TEXT_QUESTION
parameter which is already mentioned in the function module documentation. That means more than 400 characters will be truncated. It is a possible risk that the last sentence is displayed incompletely.
USERDEFINED_F1_HELP Parameter
The USERDEFINED_F1_HELP
parameter is used to provide information from a document object. When used, a third button labeled “Info” appears.
If the USERDEFINED_F1_HELP
parameter has a value (even if it is invalid), the function splits the TEXT_QUESTION
text into 57-character-wide segments. Otherwise, the text is 48 characters wide.
48/57: Please note these numbers. They will be the key to our development.
IF userdefined_f1_id NE space.
textlength = 57.
ELSE.
textlength = 48.
ENDIF.
Also, the window size is adjusted based on the text length. See the formula in the CALCULATE_SCREEN_SIZE
subroutine:
end_spalte = start_spalte + textlength + 15.
Briefly, the text length increases when the info button is present, as the length of the text increases, the window size also increases.
DIAGNOSE_OBJECT Parameter
As mentioned in the function module documentation, in addition to TEXT_QUESTION
, a standard or custom document text that exists in the system can be displayed by setting the parameter DIAGNOSE_OBJECT
. (See transaction code SE61
, and database tables DOKHL
, and DOKTL
).
PARAMETER Parameter
If the DIAGNOSE_OBJECT
parameter contains placeholders and we populate the PARAMETER
table with the corresponding PARAM
and VALUE
values, the function replaces them in the DIAGNOSE_OBJECT
text.
Wait a minute! Does this only apply to the
DIAGNOSE_OBJECT
text?No, it also applies to the
TEXT_QUESTION
text. We can build a dynamicTEXT_QUESTION
using aDIAGNOSE_OBJECT
.
💡 Placeholders are useful when building dynamic text.
Flow Logic
Let’s review the flow logic of the function. When we use all these DIAGNOSE_OBJECT
, TEXT_QUESTION
, USERDEFINED_F1_HELP
, and PARAMETER
parameters, the function performs the following steps:
- Sets the icon of the popup (Form
TYPE_OF_POPUP
). - Sets the text width based on the presence of the
USERDEFINED_F1_HELP
value. - Reads the text of the document object in the
DIAGNOSE_OBJECT
parameter (Function moduleDOCU_GET_FOR_F1HELP
). - Replaces existing placeholders in the text with the corresponding values in the
PARAMETER
table (Function modulesTEXT_INCLUDE_REPLACE
andTEXT_CONTROL_REPLACE
). - Splits the final
DIAGNOSE_OBJECT
text into segments and fills theTEXT_TAB2
internal table. - Replaces existing placeholders in the
TEXT_QUESTION
text with the corresponding values in thePARAMETER
table. - Decides whether to include the ‘Cancel’ button.
- Decides whether to include the ‘Info’ button.
- Sets button icons and quick info.
- Splits final
TEXT_QUESTION
text into segments and fills theTEXT_TAB1
internal table (FormFORMAT_TEXT
). - Calculates the screen size (Form
CALCULATE_SCREEN_SIZE
). - Calls the screen
0700
(includes subscreen0702
). - Subscreen
0702
generates HTML content and fills HTML tables. Finally, HTML containers show generated data (FormBUILD_HTML
andSHOW_HTMLS
).- If the
DIAGNOSE_OBJECT
text is too long, a vertical scroll bar appears on the right. - If both
DIAGNOSE_OBJECT
andTEXT_QUESTION
are present, a line of 57 hyphens is displayed as a separator between the texts.
- If the
All this happens in a dialog screen with custom containers, using the CL_GUI_CUSTOM_CONTAINER
and CL_GUI_HTML_VIEWER
classes.
🗺️ Need a Map for Your Trip?
Flow logic of the Function Module POPUP_TO_CONFIRM |
Conclusion
In this blog post, you have learned how the POPUP_TO_CONFIRM
function works, information about some of its parameters, what kind of objects are behind it, how its size is determined, and its flow logic.
As you can see, we have a powerful function module that we can use for different scenarios.
Next Step?
Now that we’ve discovered how the function module works, I will build a campfire and tell the first 2 stories in the next chapter.
Upcoming stories:
- Story 1: Changing the Popup Icon
- Story 2: Customizing the Icons and Quick Info of Buttons
See you in the next chapter.
More Resources
|
Endnotes
Trademarks
Disclaimer
|