Sunday, November 25, 2012

Using a form for building a lookup


1. In the AOT, create a new form named CustLookup. Add a new data source with the
following properties:
Property              Value
Name                  CustTable
Table                   CustTable
Index                   AccountIdx
AllowCheck          No
AllowEdit             No
AllowCreate         No
AllowDelete         No
OnlyFetchActive  Yes

2. Change the properties of the form's design as follows:
Property             Value
Frame                Border
WindowType       Popup

3. Add a new Grid control to the form's design, with the following properties:
Property             Value
Name                 Customers
ShowRowLabels No
DataSource        CustTable

4. Add a new StringEdit control to the grid, with the following properties:
Property             Value
Name                 AccountNum
AutoDeclaration Yes
DataSource        CustTable
DataField           AccountNum


5. Add a new ReferenceGroup control to the grid with the following properties, right
after the AccountNum:
Property             Value
Name                 Name
DataSource        CustTable
ReferenceField   Party

6. Add one more StringEdit control to the grid with the following properties, right
after the Name:
Property             Value
Name                 Phone
DataSource        CustTable
DataMethod       phone

7. Add a new ComboBox control with the following properties to the end of the
Customers grid:
Property             Value
Name                 Blocked
DataSource        CustTable
DataField            Blocked

8. Override the form's init() method with the following code:
public void init()
{
    super();
    element.selectMode(AccountNum);
}

9. Override the form's run() method with the following code:
public void run()
{
    FormStringControl callingControl;
    boolean filterLookup;
    callingControl = SysTableLookup::getCallerStringControl(
    element.args());

    filterLookup = SysTableLookup::filterLookupPreRun(callingControl, AccountNum, CustTable_ds);
    super();
    SysTableLookup::filterLookupPostRun(filterLookup, callingControl.text(), AccountNum, CustTable_ds);
}

10. Finally, override the init() method of the CustTable data source with the
following code:
public void init()
{
    Query query;
    QueryBuildDataSource qbds;
    QueryBuildRange qbr;
    query = new Query();
    qbds = query.addDataSource(tableNum(CustTable));
    qbr = qbds.addRange(fieldNum(CustTable,Blocked));
    qbr.value(queryvalue(CustVendorBlocked::No));
    this.query(query);
}

11. The form in the AOT should look similar to the following screenshot:



12. Locate the CustAccount extended data type in the AOT, and change its property
as follows:

Property     Value
FormHelp   CustLookup

13. To test the results, open Sales and marketing | Common | Sales orders | All sales
orders, and start creating a new sales order. Notice that now the Customer account
lookup is different, and it includes only active customers:





No comments: