Skip to main content

What does this mean: "The form datasource query object does not support changing its AllowCrossCompany property after the form has executed the query."?

I have made a form with datasources vendtable and vendtrans.

Inside vendtable_ds.executequery() looks like this:

QueryBuildDataSource queryBuildDatasource ,queryBDS_VendTrans_Invoice;

;

queryBuildDatasource = this.query().dataSourceTable(tablenum(vendtable));

queryBDS_VendTrans_Invoice = this.query().dataSourceTable(tablenum(vendtrans));

if (curext() == "MASTERCOMP")
{
this.query().allowCrossCompany(true);
}
else
{
this.query().allowCrossCompany(false);
}

//FilterVendorName = stringedit control on form

if (FilterVendorName.text())
{
queryBuildDatasource.addRange(fieldNum(VendTable,Name)).value(strfmt("*%1*", FilterVendorName.text()));
}
else

{
queryBuildDatasource.clearRange(fieldNum(VendTable,Name));
}

//FilterInvoiceNumber = stringedit control on form

if (FilterInvoiceNumber.valueStr() == "")
{
queryBDS_VendTrans_Invoice.enabled(false);
}
else
{
queryBDS_VendTrans_Invoice.enabled(true);
queryBDS_VendTrans_Invoice.clearRange(fieldnum(VendTrans, invoice));

}

if (FilterInvoiceNumber.text())
{
queryBDS_VendTrans_Invoice.relations(true);
queryBDS_VendTrans_Invoice.addRange(fieldnum(VendTrans, invoice)).value(strfmt("*%1", FilterInvoiceNumber.text()));

}

super();

If FilterVendorName is empty and ,FilterInvoiceNumber is empty there is NO ERROR.

If FilterVendorName is NOT empty and ,FilterInvoiceNumber is empty there is NO ERROR.

If curext() is NOT "MASTERCOMP", there is NO ERROR.

The error only occurs when FilterInvoiceNumber has a value AND (curext() == "MASTERCOMP").

However, the error only happens on the first time vendtable_ds.executequery() is run. If I run vendtable_ds.executequery() a second time or third or fourth, there is no error.

Despite the error message, correct results are returned from vendtable_ds.executequery() .

I've stepped through this code and the error happens inside the super() of vendtable_ds.executequery() .

There is NO other place in that form where AllowCrossCompany is being set. The ONLY place it is referenced is in vendtable_ds.executequery().

Popular posts from this blog

Dynamics Axapta: Sales Orders & Business Connector

Well, again folllowing my same idea of writting close to nothing and pasting code, I'll paste in some code to create a sales order from some basic data and the invoice it. I'll try to explain more in the future. AxaptaObject axSalesTable = ax.CreateAxaptaObject("AxSalesTable"); AxaptaRecord rcInventDim = ax.CreateAxaptaRecord("InventDim"); AxaptaRecord rcCustTable = ax.CreateAxaptaRecord("CustTable"); rcCustTable.ExecuteStmt("select * from %1 where %1.AccountNum == '" + MySalesOrderObject.CustAccount + "'"); if (MySalesOrderObject.CurrencyCode.Trim().Length == 0) MySalesOrderObject.CurrencyCode = rcCustTable.get_Field("Currency").ToString().Trim(); string sTaxGroup = rcCustTable.get_Field("taxgroup").ToString().Trim(); //set header level fields axSalesTable.Call("parmSalesName", MySalesOrderObject.SalesName.Trim()); axSalesTable.Call("parmCustAccount", M

Passing values between form and class

Class name is EmplDuplication and Form is EmplTable . void clicked() {    MenuFunction mf;    args args = new Args();    ;     args.record(EmplTable);     mf = new menufunction(identifierstr(EmplDuplication), MenuItemType::Action); mf.run(args); } Meanwhile, in the main() method of the EmplDuplication class, we need to put this Axapta x++ code to get the datasource: static void main(Args args) {     EmplDuplication EmplDuplication; EmplTable localEmplTable; ;     if(args.record().TableId == tablenum(EmplTable)) localEmplTable = args.record();     ... }