24 Ağustos 2011 Çarşamba

AXAPTA Çoklu tablo ile lookup

SysTableLookup sınıfını kullanarak Axapta'nın kendi lookupunu ezip kendimize özel lookup yazabiliyoruz ve iki tabloyu birleştirebiliyoruz. Peki lookup ekranında 2. tablodan bir field göstermek istersek? Axapta standart SysTableLookup sınıfı bunu sağlamıyor. Ancak SysTableLookup'tan türetilmiş ve bunu sağlayan bir class var: SysMultiTableLookup.

Verdiğim linkten indirip kolayca kullanabilirsiniz. Aşağıda bir örnek kullanmını da verdim:


public void Agreementlookup(FormControl _formControl, str _filterStr)
{
SMAAgreementTable SMAagreementTable;
Query query = new Query();
SysMultiTableLookup sysTableLookup;
QueryBuildDataSource queryBuildDataSource = query.addDataSource(tablenum(SMAAgreementTable));
QueryBuildDataSource qbds2;
QueryBuildRange qbr;
;

qbds2=queryBuildDataSource.addDataSource(tablenum(B_AgreementCustomerTable));
qbds2.relations(true);

qbr=qbds2.addRange(fieldnum(B_AgreementCustomerTable, num));

qbr.value(strfmt('((Num == "%1") && (AccountCode == TableGroupAll::Table)) || (AccountCode == TableGroupAll::All)',
QueryValue(salesTable.CustAccount)));

sysTableLookup = SysMultiTableLookup::newParameters(_formControl,query);
sysTableLookup.addLookupfield(fieldnum(SMAAgreementTable, AgreementId),1);
sysTableLookup.addLookupfield(fieldnum(SMAAgreementTable, AgreementDescription),1);
sysTableLookup.addLookupfield(fieldnum(SMAAgreementTable, ProjId),1);
sysTableLookup.addLookupfield(fieldnum(B_AgreementCustomerTable, AccountCode),2);
sysTableLookup.addLookupfield(fieldnum(B_AgreementCustomerTable, Num),2);

sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}

22 Ağustos 2011 Pazartesi

AXAPTA İlk bug

Bugün AXAPTA'da ilk bug'ımı keşfettim:

classDeclaration metodum aşağıdaki gibi olunca görünen hatayı  veriyor:
public class FormRun extends ObjectRun
{
    FormStringControl       lineAccountField;
    FormStringControl       lineAccountField2;
    NumberSeqFormHandler    numberSeqFormHandler;
    SMAAgreementId          agreementId;
}



Bu şekilde yazarsam hata filan yok:
public class FormRun extends ObjectRun
{
    FormStringControl       lineAccountField;
    NumberSeqFormHandler    numberSeqFormHandler;
    SMAAgreementId          agreementId;
    FormStringControl       lineAccountField2;
}





18 Ağustos 2011 Perşembe

AXAPTA "Ana tablo formuna git" kısayoluyla gönderilen değer

Bu değere args().record() metoduyla ulaşılabiliyor, ancak farklı farklı tablolardan farklı alan isimleriyle extend edilmiş değerler olunca switch case koymak pek te iyi bir çözüm değil.

FormStringControl   callerControl   = SysTableLookup::getCallerStringControl(element.args());
;
info(callercontrol.text());

Kod satırını Yakup Kirişçi'nin blogundan buldum. Standart lookup formlarında bulunan bir kodmuş. Benim çok işime yaradı. Kendisine teşekkürler...