Quantcast
Channel: Microsoft Dynamics 365 Community
Viewing all articles
Browse latest Browse all 10657

[D365/AX7] How to: Create simple Dialog using RunBase

$
0
0

A few year ago, I made a post about How to: Create a simple Dialog through X++, today I will review my code and make it work on D365FO.

Add a new Runnable class and rename it CustTableDlg:

class CustTableDlg extends RunBase
{
    // User Input fields
    DialogField     fieldAccount;
    DialogField     fieldName;

    // Variables to store user input
    CustTable   custTable;
    CustAccount custAccount;

    // pack() and unpack() methods are used to load the last value from user
    // for our simple example we are not going to use them.
    public container pack()
    {
        return conNull();
    }

    public boolean unpack(container packedClass)
    {
        return true;
    }
}

Create a dialog method to capture runtime user inputs for customer details:

// Dialog method to capture runtime user inputs for customer details
public Object dialog()
{
    Dialog dialog = super();

    // Set a title for dialog
    dialog.caption( 'Simple Dialog');

    // Add a new field to Dialog
    fieldAccount = dialog.addField(extendedTypeStr(CustAccount), 'Customer account');

    return dialog;
}

Override the method getFromDialog, the code below will be used to retrieve the Dialog field values:

// Retrieve values from Dialog
public boolean getFromDialog()
{
    custAccount = fieldAccount.value();
    return super();
}

Override the method run, use it to process whatever you want to. On my example I will use it to show the customer account information on infolog.

public void run()
{
    // Set Dialog field value to find CustTable
    custTable = CustTable::find(custAccount);

    if (custTable)
    {
	info(strFmt('%1 -- %2', custTable.AccountNum, custTable.name()));
    }
    else
    {
	error( 'Customer Account not found!');
    }
}

Create a new main method to execute your class and build it:

public static void main(Args _args)
{
    CustCreateDialog custCreate = new CustCreateDialog();

    // Prompt the dialog, if user clicks in OK it returns true
    if (custCreate.prompt())
    {
        custCreate.run();
    }
}

Here you can find the full snippet:

class CustTableDlg extends RunBase
{
    // User Input fields
    DialogField     fieldAccount;
    DialogField     fieldName;

    // Variables to store user input
    CustTable   custTable;
    CustAccount custAccount;

    // pack() and unpack() methods are used to load the last value from user
    // for our simple example we are not going to use them.
    public container pack()
    {
        return conNull();
    }

    public boolean unpack(container packedClass)
    {
        return true;
    }

    // Dialog method to capture runtime user inputs for customer details
    public Object dialog()
    {
        Dialog dialog = super();

        // Set a title for dialog
        dialog.caption( 'Simple Dialog');

        // Add a new field to Dialog
        fieldAccount = dialog.addField(extendedTypeStr(CustAccount), 'Customer account');

        return dialog;
    }

    // Retrieve values from Dialog
    public boolean getFromDialog()
    {
        custAccount = fieldAccount.value();
        return super();
    }

    public void run()
    {
        // Set Dialog field value to find CustTable
        custTable = CustTable::find(custAccount);

        if (custTable)
        {
            info(strFmt('%1 -- %2', custTable.AccountNum, custTable.name()));
        }
        else
        {
            error( 'Customer Account not found!');
        }
    }

    public static void main(Args _args)
    {
        CustTableDlg custTableDlg = new CustTableDlg();

        // Prompt the dialog, if user clicks OK it returns true
        if (custTableDlg.prompt())
        {
            custTableDlg.run();
        }
    }

}

Set your runnable class as startup object and press F5:
2018-01-29 00_00_55-Class runner -- Finance and Operations - Internet Explorer

Press OK and check infolog:
2018-01-29 00_01_21-Class runner -- Finance and Operations - Internet Explorer


Viewing all articles
Browse latest Browse all 10657

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>