Filter the dialog field in ax 2012

Hi,

I have created the dialog field PurchAgreementId dialog field.That field values should be filtered according to enum Agreementstate effective.

Can anybody help me in this.

plz check i think this may help you

As you see below, the sales status drop down will only show the Canceled and Invoiced elements though the enum has more elements in it.

Now, lets see how to do this. Create class and methods as shown below.

public class SR_TestDialogEnumComboBox extends RunBaseBatch

{

DialogEnumComboBox dialogEnumComboBox;

DialogField dialogType;

DialogRunBase dialog;

SalesStatus salesStatus;

#define.FieldNoTmp(600)

}

public Object dialog()

{

Set enumSet = new Set(Types::Enum);

dialog = super();

dialogType = new DialogField(dialog, enumStr(SalesStatus), #FieldNoTmp);

dialog.addCtrlDialogField(dialogType.name());

dialogType.init(dialog);

dialogType.label(“Sales status”);

dialogType.helpText(“Select sales status.”);

dialogType.value();

enumSet.add(SalesStatus::Canceled);

enumSet.add(SalesStatus::Invoiced);

dialogEnumComboBox = DialogEnumComboBox::newParameters(null, dialogType.control().id(), enumNum(SalesStatus), enumSet, dialog.form());

return dialog;

}

public void dialogPostRun(DialogRunbase _dialog)

{

super(_dialog);

_dialog.dialogForm().formRun().controlMethodOverload(true);

_dialog.dialogForm().formRun().controlMethodOverloadObject(this);

_dialog.formRun().controlMethodOverload(true);

_dialog.formRun().controlMethodOverloadObject(this);

if (dialogEnumComboBox)

{

// Specify the formRun (at this point the formRun is already available)

// This is needed to track selection in the comboBox

dialogEnumComboBox.parmFormRun(dialog.dialogForm().formRun());

// Select a specific entry in the comboBox, if needed

dialogEnumComboBox.select(SalesStatus::Invoiced);

I am not adding the enum field in dialog.Only string field PurchagreementId.

Then how to do.

rather than enum type you can choose string type

I have created the class as below:-

class LinkPurchaseAgreement_halston extends runbase
{

PurchAgreementId purchAgreementId;
DialogField dialogpurchAgreementId;
FormStringControl purchAgreementIdControl;
AgreementHeader header;
PurchAgreementHeader agreement;
AgreementState agreementState;
FormStringControl agreementIdctrl;

#define.CurrentVersion(2)
#localmacro.CurrentList
purchAgreementId

#endmacro

}

Object dialog()
{
DialogRunbase dialog = super();
dialog.caption(“Do you want to use the purchase agreement”);
agreementIdctrl = dialog.formBuildDesign().addControl(FormControlType::String,‘PurchAgreementId’);
agreementIdctrl.extendedDataType(extendedTypeNum(‘PurchAgreementId’));
agreementIdctrl.visible(false);
dialogpurchAgreementId = dialog.addField(extendedTypeStr(PurchAgreementId));
return dialog;
}

public void dialogPostRun(DialogRunbase _dialogloc)
{
super(_dialogloc);
_dialogloc.dialogForm().formRun().controlMethodOverload(true);
_dialogloc.dialogForm().formRun().controlMethodOverloadObject(this);
_dialogloc.formRun().controlMethodOverload(true);
_dialogloc.formRun().controlMethodOverloadObject(this);
agreementIdctrl = _dialogloc.dialogForm().formRun().design().controlName(‘PurchAgreementId’);
}

void Fld1_1_lookup()
{

Query query = new Query();
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(PurchAgreementHeader), agreementIdctrl);

QueryBuildDataSource qbds;
QueryBuildRange qbr;
;
sysTableLookup.addLookupField(fieldNum(PurchAgreementHeader, PurchNumberSequence));
sysTableLookup.addLookupField(fieldNum(PurchAgreementHeader, VendAccount));
qbds = query.dataSourceTable(tableNum(PurchAgreementHeader));
qbds = query.addDataSource(tableNum(AgreementHeader));
qbds.relations(true);
qbr = qbds.addRange(fieldNum(AgreementHeader,AgreementState));
qbr.value(queryValue(enum2str(AgreementState::Effective)));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

}

public boolean getFromDialog()
{
purchAgreementId = dialogpurchAgreementId.value();

return true;
}

public container pack()
{
return [#CurrentVersion, #CurrentList];
}

ublic boolean unpack(container _packedClass)
{
Version version = RunBase::getVersion(_packedClass);

switch (version)
{
case #CurrentVersion:
[version, #CurrentList] = _packedClass;
break;

default :
return false;
}
return true;
}

Public static void main(Args _args)
{

LinkPurchaseAgreement_Halston PurchaseAgreement_Halston = new LinkPurchaseAgreement_Halston();

if (PurchaseAgreement_Halston.prompt())
{

PurchaseAgreement_Halston.run();

}

}

when I am opening this class and clicking the lookup the error is coming as “Failed to execute query because no root data source on the form matches the root datasource on the query.”

first you have to write getFromdialog method to take the value from dialog and in fetch method you can write code to filter data

public boolean getFromDialog()
{
;
itemGroup = dialogItemGroup.value();
return true;
}
public boolean fetch()
{
Query q;
QueryRun qr;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
;
q = new Query(this);
qbds = q.dataSourceTable(tablenum(InventTable));
qbr = qbds.addRange(fieldnum(InventTable,ItemGroupId));
qbr.value(itemgroup);
qr = new QueryRun(q);
while( qr.next() )
{
inventTable = qr.get(tablenum(InventTable));
this.send(inventTable);
}
return true;
}

It is not a report.It is a class in that class I added one dialog field PurchAgreementId.When we are cliking the lookup in dialog field it should filter it.from that dialog field filter values we need to select and get it from dialog.

did you put your class in your action of menuitem and tried

and also you you didnt write any filtering command to get you values

void Fld1_1_lookup()
{

Query query = new Query();
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(PurchAgreementHeader), agreementIdctrl);

QueryBuildDataSource qbds;
QueryBuildRange qbr;
;
sysTableLookup.addLookupField(fieldNum(PurchAgreementHeader, PurchNumberSequence));
sysTableLookup.addLookupField(fieldNum(PurchAgreementHeader, VendAccount));
qbds = query.dataSourceTable(tableNum(PurchAgreementHeader));
qbds = query.addDataSource(tableNum(AgreementHeader));
qbds.relations(true);
qbr = qbds.addRange(fieldNum(AgreementHeader,AgreementState));
qbr.value(queryValue(enum2str(AgreementState::Effective)));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

}

This is the method for filtering in dialog

did you put your class in action panel of menuitem and tried from there executing your code.

ya the same error is coming as “Failed to execute query because no root data source on the form matches the root datasource on the query.” when we clicking that dialog field lookup

My doubt is in this method.

void Fld1_1_lookup()
{

Query query = new Query();
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(PurchAgreementHeader), agreementIdctrl);

QueryBuildDataSource qbds;
QueryBuildRange qbr;
;
sysTableLookup.addLookupField(fieldNum(PurchAgreementHeader, PurchNumberSequence));
sysTableLookup.addLookupField(fieldNum(PurchAgreementHeader, VendAccount));
qbds = query.dataSourceTable(tableNum(PurchAgreementHeader));
qbds = query.addDataSource(tableNum(AgreementHeader));
qbds.relations(true);
qbr = qbds.addRange(fieldNum(AgreementHeader,AgreementState));
qbr.value(queryValue(enum2str(AgreementState::Effective)));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

}

because AgreementHeader is the master table for PurchAgreementHeader table.

I habe added two lookup field from PurchAgreementHeade(child table).

Based upon Agreementstate enum value in master table(AgreementHeader) it should filter in dialog.

instead of lookup give it in fetch method

Hi,

Can we write a fetch method in class ah.

some error is coming while declaration of your syntax

please check your code in job once

you will get to know

PurchAgreementId purchAgreementId;

is showing error in it.

i am checking your program and will respond you back after a while