Wednesday 31 May 2017

open form through code

write the below code in class or form(A)

   Args                        args;
    FormRun                     formRun;
    super();

    args = new args();
    args.name(formstr(FormBName));
    args.record(tablename);// pasing record
    formrun = classfactory.formrunclass(args);
    formrun.init();
    formrun.run();
    formrun.wait();

write below code in init method of formB

     super();
    if(element.args().caller() && element.args().caller().name() == formStr(FormA))
    {
        tablebuffer = element.args().record();      
        Table_ds.query().dataSourceNo(1).addRange(fieldnum(table,field)).value(queryValue(table.field));
     
    }

Tuesday 30 May 2017

allow edit only few fields in a form grid

Make only few fields  editable/ uneditable on form grid

DictTable dictTable = new DictTable(TableName.TableId);
    int i;
    int fieldNumber;
;
    if (CONDITION)
    {      
        for(i = 1;i <= dictTable.fieldCnt();i++)
        {
            fieldNumber = dictTable.fieldCnt2Id(i);
            if(Table_DS.object(fieldNumber) && fieldNumber !=    fieldNum(Table, Field) )
            {
                Table_DS.object(fieldNumber).allowEdit(false);
            }          
        }
       
    }

look up for item id

public void lookup()
{
    Query query = new Query();
    QueryBuildDataSource qbds,qbds1;
    SysTableLookup sysTableLookup;
    QueryBuildRange qbr;
   Parameter      parameter;
    //super();
    sysTableLookup = SysTableLookup::newParameters(tablenum(InventTable), this);

    qbds = query.addDataSource(tableNum(InventTable));
    qbds1 = qbds.addDataSource(tableNum(InventItemGroupItem));
    qbds1.relations(true);

    qbds1.joinMode(JoinMode::InnerJoin);

    select ItemGroupId from parameter;

    qbr = qbds1.addRange(fieldNum(InventItemGroupItem,ItemGroupId));
    qbr.value(parameter.ItemGroupId);
    sysTableLookup.parmQuery(query);
    sysTableLookup.addLookupfield(fieldnum(InventTable, ItemId), true);
    sysTableLookup.addSelectionField(fieldNum(InventTable,Product));
    sysTableLookup.addLookupMethod(tableMethodStr(InventTable,defaultProductName));



    sysTableLookup.performFormLookup();
}

Wednesday 24 May 2017

Hide or lock the query range in form

Table_DS.query().dataSourceNo(1).addRange(fieldnum(Table,Date)).status(RangeStatus::Hidden);
    Table_DS.query().dataSourceNo(1).addRange(fieldnum(Table,Status)).status(RangeStatus::Locked);

the same can be used in query framework.

qbr.status(RangeStatus::Locked);

Select multiple values in lookup in a dropdialog

Use SysLookupMultiSelectCtrl

declare SysLookupMultiSelectCtrl        multiSelectCtrl;

in init method of form write the following code

Query query = new Query();
    QueryBuildDataSource qbds;

    super();

    qbds = query.addDataSource(tableNum(Table));
    qbds.fields().addField(fieldNum(Table,Field));

    multiSelectCtrl = SysLookupMultiSelectCtrl::constructWithQuery(element, ControlName, query);

make control propery auto declartion to Yes.

To Get the values use the below code as per your requirement.

    int                          i;
    container                   values;
    int64                         IdLoc;
    values = multiSelectCtrl.get(); to get the selected values from lookup
    for(i=1; i<=conLen(values) ; i++)
    {
        IdLoc = conPeek(values,i);
        info("IdLoc ");
}