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 ");
}

     



Monday, 20 March 2017

select multiple calues in dialog for a report




for selecting multiple look up values.

UIbuilderclass is must and use list in contract class


class IntercompanyReportUIBuilder extends SysOperationAutomaticUIBuilder

{

    IntercompanyReportContract contract;

DialogField mainAccountLoc,fromdate,toDate;

SysLookupMultiSelectGrid grid;

}
private void accountNumLookup(FormStringControl _lookup)

{
Query query = new Query();


QueryBuildDataSource queryBuildDatasource,queryBuildDatasource1;

SysTableLookup sysTableLookup;

MainAccount MainAccount;
if(_lookup!= null)

{

grid = SysLookupMultiSelectGrid::construct(_lookup , _lookup);
//sysTableLookup = SysTableLookup::newParameters(tableNum(MainAccount), _lookup);

//sysTableLookup.addLookupfield(fieldNum(MainAccount,MainAccountId),true);

//sysTableLookup.addLookupfield(fieldNum(MainAccount,Name));

queryBuildDatasource = query.addDataSource(tableNum(MainAccount));

queryBuildDatasource1 =queryBuildDatasource.addDataSource(tableNum(LedgerChartOfAccounts));

queryBuildDatasource1.addRange( fieldNum( LedgerChartOfAccounts, Name)).value("India");

queryBuildDatasource1.joinMode(JoinMode::InnerJoin);//

queryBuildDatasource1.addLink(fieldNum(MainAccount, LedgerChartOfAccounts), fieldNum(LedgerChartOfAccounts, RecId));//MainAccount.LedgerChartOfAccounts == LedgerChartOfAccounts.RecId

query.dataSourceTable(tableNum(MainAccount)).addSelectionField(fieldNum(MainAccount, MainAccountId));

query.dataSourceTable(tableNum(MainAccount)).addSelectionField(fieldNum(MainAccount, Name));

//sysTableLookup.parmQuery(query);

grid.parmQuery(query);

grid.run();
//sysTableLookup.performFormLookup();



}

}
public void build()

{

Dialog dialogLoc = this.dialog();
contract = this.dataContractObject() as IntercompanyReportContract ;

this.addDialogField(methodStr(IntercompanyReportContract , parmAccountNumList), contract);

this.addDialogField(methodStr(IntercompanyReportContract , parmFromDate), contract);

this.addDialogField(methodStr(IntercompanyReportContract , parmToDate), contract);

// contract = this.dataContractObject();



}

public void postBuild()

{
 
//super();


mainAccountLoc = this.bindInfo().getDialogField(this.dataContractObject(),
 
methodStr(IntercompanyReportContract ,parmAccountNumList));

mainAccountLoc.registerOverrideMethod(methodStr(FormStringControl,lookup),methodStr(IntercompanyReportUIBuilder , accountNumLookup),this);

if (mainAccountLoc)

{
 
mainAccountLoc.lookupButton(2);

}

}

contract class
[DataMemberAttribute("AccountNumList"),

AifCollectionTypeAttribute("AccountNumList", Types::String),

SysOperationLabelAttribute(literalStr('Account number'))]

public List parmAccountNumList(List _accountNumList = accountNumList)

{

accountNumList = _accountNumList;
 
return accountNumList;



}


dpclass
[SysEntryPointAttribute]
in dp class use the list in process method as

public void processReport()

{

GeneralJournalAccountEntry GeneralJournalAccountEntry1;
   

MainAccount main;    
   
 
date periodStartDate;

str mainId;



ListIterator accountNumListIt;
 
container con;

contract = this.parmDataContract() as IntercompanyReportContract ;


fromDate = contract.parmFromDate();

toDate = contract.parmToDate();
 
//mainacc.MainAccountId = contract.parmAccountNum();

accountNumListIt = new ListIterator(contract.parmAccountNumList());


while (accountNumListIt.more())



{
mainacc.MainAccountId = accountNumListIt.value();
..
.. your code
//
intercompanyReportTemp.insert();

accountNumListIt.next();
 
 
}
 

Monday, 30 January 2017

offset account look up!!



get the look up of offset accounts.

public void lookup()


{
 
Query query = new Query();



QueryBuildDataSource qbds;

SysTableLookup sysTableLookup;

QueryBuildRange qbr;
 
sysTableLookup = SysTableLookup::newParameters(tablenum(MainAccount), this);

qbds = query.addDataSource(tableNum(MainAccount));

sysTableLookup.addLookupfield(fieldnum(MainAccount, MainAccountId), true); //

sysTableLookup.addLookupfield(fieldnum(MainAccount, Name));

qbr = qbds.addRange(fieldNum(MainAccount,LedgerChartOfAccounts));



qbr.value(queryValue(ledgerChartOfAccounts::current()));

sysTableLookup.parmQuery(query);

sysTableLookup.performFormLookup();

}