How to Close the Window in which the Component is Shown

Description

A UX or Grid component opened in a window in a Desktop application can close the window when the component is submitted or a button is clicked.

Discussion

If you use a Grid or UX component in a Desktop Application and you open an Xdialog window that hosts a component, a common use case is to automatically close the host Xdialog window when data in the Grid is submitted or when a button is pressed in a UX.

Here is how you can do this:

This will only work in a desktop application. If the component can be used in both a desktop and web application, you will need to add additional checks to ensure that the JavaScript is not executed in a web environment.

Close the Window on Submit

First, add this code to the Javascript Functions section in the component:

function closeXdialog() {
    var xb = [];
    xb.push('dim dlgtitle as c');
    xb.push('dlg_title = ui_dlg_query("dialog")');
    xb.push('dlg_title = filter_string(dlg_title,"GridComponentInXdialog_",crlf())');
    xb.push('ui_modeless_dlg_close(dlg_title)');
    xb = xb.join(';');
    genericXbasicUIFromWorkingPreview(xb);
}

Then, for a Grid component, add this code to the afterGridSubmit and afterRowSubmit Client-side events:

if(e.hasErrors == false) {
    closeXdialog();
}

If wanting to close a UX component after data is submitted, add this to the JavaScript returned by the afterDialogValidate event:

e.javascript = e.javascript + "closeXdialog();"

Close the Window when a Button is Clicked

Add the closeXdialog() javascript function from the example above to the Javascript Functions of the component.

Then, add this code to a button in the component:

closeXdialog();

This method will work for buttons placed in both UX and Grid components.

Limitations

Desktop Applications Only