Custom modal forms can be used to collect parameters from the user and pass them to business rules for processing.
A custom data controller without a command can define fields, presentation views, and actions. Such controllers may be used as confirmations for actions for the purpose of collecting input parameters.
Let’s consider the steps involved in the creation of a confirmation data controller using a Northwind sample application.
Child views in a master/detail relationship will automatically hide the foreign key field to prevent duplicate display of the field value. This means that the Supplier Company Name field in the list of supplier products controller is hidden.

However, sometimes the user may want to change the foreign key of a child record. This may occur if a product is incorrectly associated with a supplier. One solution is to navigate to the standalone Products page where the supplier lookup is visible. A better alternative would be to create a custom action displaying a modal form that will allow the user to change the foreign key field in the child list of products.
Start the Project Designer. In the Project Explorer, switch to the Controllers tab. On the toolbar, press New Controller icon.

Give this controller the following name:
Property | Value |
Name | SupplierSelector |
Press OK to save the controller. In the Project Explorer, right-click on SupplierSelector / Fields node, and select New Field option.

Give this field the following properties:
Property | Value |
Name | ProductName |
Type | String |
Length | 40 |
Label | Product |
Values of this field cannot be edited | True |
Press OK to save. Create another field:
Property | Value |
Name | SupplierCompanyName |
Type | String |
Length | 40 |
Label | Supplier |
Values of this field cannot be edited | True |
Save this field, and create one more.
Property | Value |
Name | SupplierID |
Type | int32 |
Label | New Supplier |
Items Style | Lookup |
Items Data Controller | Suppliers |
Items Value Field | SupplierID |
Items Text Field | CompanyName |
Save the field. Right-click on SupplierSelector / Business Rules node, and select New Business Rule option.

Give this business rule the following properties:
Property | Value |
Type | SQL |
Command Name | New |
Phase | Execute |
Script | set @ProductName = @Context_ProductName
set @SupplierCompanyName = @Context_SupplierCompanyName
|
Press OK to save.

In the Project Explorer, right-click on Products / Actions / ag1 (Grid) node and select New Action option.

Give this action the following properties:
Property |
Value |
Command Name |
Custom |
Command Argument |
CustomModalForm |
Header Text |
Change Supplier |
Confirmation |
_controller=SupplierSelector
_title=Select a New Product Supplier
_width=500
|
Press OK to save. Right-click on Products / Business Rules node, and select New Business Rule option.

Use the following properties:
Property |
Value |
Type |
SQL |
Command Name |
Custom |
Command Argument |
CustomModalForm |
Phase |
Execute |
Script |
--update the product supplier
update Products
set SupplierID = @Parameters_SupplierID
where ProductID = @ProductID
--'forget' the previously selected product
set @ProductID = null
--force the data view to refresh
set @Result_Refresh = 1
|
Press OK to save.

On the toolbar, press Browse.
Navigate to the Suppliers page, and select a supplier. In the context menu of a product, select Change Supplier.

A custom modal form will open, displaying the current Product and Supplier.

Use the lookup to select a new supplier.

Press OK to confirm, and the supplier of the product will change to the new supplier.