Progress Windows, Message, Error, and Confirm Methods

You can use several specialized methods to display messages and gather input. We recommend that you use pages to ensure that your application has a consistent user interface. However, there are situations where you may want to use the dialog methods instead of pages. The most important uses of the dialog methods are as follows:

  • To display a window that indicates the progress of some processing that may take a long time.

  • To stop the running program to display an error message.

  • To let the user confirm a choice before the program continues running.

You can also use the StrMenu method to create pages that present options to the user. It's much faster to use this method than to design a page, which only presents a limited set of options to the user. For more information about the StrMenu method, see StrMenu Method.

Best practices for user messages

We recommend the following guidelines for writing messages for end users:

  • Write messages correctly according to the grammatical rules for your language.

  • Don't use backslashes to indicate line breaks in a message. Line formatting is completed automatically. The only exception is in the Open Method). You must use backslashes for the message to be aligned correctly.

  • Use the FieldCaption Method) and TableCaption Method) whenever possible to return names of fields and tables as strings. It's so that the user can always recognize a term that indicates a field or table name. The only exception to this is in Open Method) where you can use the field name directly. Otherwise, it can be difficult to align correctly. If you refer to a field name without using the FieldCaption method, then type the field name without any single or double quotation marks.

  • Try to write all messages on only one line. If you want to use more than one line, then start a new line after a period instead of in the middle of a sentence.

  • Don't enter the text directly in the AL code. Instead, enter it as a label so that the message can be translated.

Creating a window to indicate progress

If you have an application whose processing can take a long time to complete, then you should consider displaying a window that informs the user of the progress that is being made. It's always a good idea to inform the user that processes are still running.

A Cancel button is automatically added to every dialog window and gives user the opportunity to stop the processing.

In some applications, you may want to create a window in which each field is updated when the program is running. For example, the fields in the window, display the count of the postings made. In another application, you may want to display information about the record that is currently being processed. For example, the field in the window, displays the number of the account that is currently being processed.

To create this kind of progress window, you use the Dialog data type.

Message method

The Message Method) displays a message in a window that remains open until the user chooses the OK button.

The Message method has the following syntax.

message(String [, Value1, ...]);  

The Message method runs asynchronously, which means that the message isn't run until the method from which it was called ends or another method requests user input. The method is useful for notifying the user that some processing has been successfully completed.

For an example of the Message method, see codeunit 83 in the CRONUS International Ltd. demonstration database. The code in the OnRun trigger converts a quote into a sales order and then displays a message. The message is generated by the following code.

var
    Text001 : Label 'Quote %1 has been changed to order %2';

message(Text001,"No.",SalesHeader2."No.");  

Note

Unlike the progress window, the Message method doesn't require that you first declare a variable of the type Dialog. The Message method creates a window of its own.

Error method

The Error Method is similar to the Message method except that when the user has acknowledged the message from an Error method, AL execution ends. The Error method is also similar to the FieldError method. For more information on the FieldError method, see CalcFields, CalcSums, FieldError, FieldName, Init, TestField, and Validate Methods.

The Error method has the following syntax:

procedure MyProc()
var
    MyErrorInfo: ErrorInfo;
begin
    // setup ErrorInfo
    MyErrorInfo.Title('Error message title that the user sees.');
    MyErrorInfo.Message('Error message the user sees.');
    MyErrorInfo.DetailedMessage('(Hidden) error details for the person who needs to troubleshoot.');
    // add more properties for ErrorInfo depending on the scenario

    Error(MyErrorInfo);

    // no more AL code runs after the Error method
end;

For more information about error handling in AL, see Error handling overview.

Confirm method

The Confirm Method) is used just like the Message method to display a message. However, unlike the Message method, the Confirm method has a required return value.

The Confirm method has the following syntax.

Ok := Dialog.Confirm(String [, Default] [, Value1] ,...);  

The following example shows how to use the Confirm method.

if confirm('Do you want to post the journal lines and print report %1?', False, ReportID) then
    message('Posting')
else begin
    message('No Posting');
    exit;
end;

The false parameter in the confirm statement means that No is the default.

Error handling overview
Dialog data type