iki etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
iki etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Ekim 2013 Perşembe

AXAPTA - Join A tablosunu B tablosuna ve yine A tablosunu C tablosuna bağlamak

Bir forumda öğrendiğim yöntemle bunu yapabiliyorum. Püf noktası fetchMode komutu. Eğer fetchMode komudunu kullanmazsanız düzgün bir select oluşmaz. 
Query query = new Query();
QueryBuildDataSource qbds,qbds1,qbds2;
;
qbds = query.addDataSource(tableNum(SMAServiceOrderTable));
qbds1 = qbds.addDataSource(tableNum(B_RepairJournal));
qbds1.fetchMode(QueryFetchMode::One2One);
qbds1.addLink(fieldNum(B_RepairJournal,ServiceOrderId),fieldNum(SMSServiceOrderTable,ServiceOrderId));
qbds2 = qbds.addDataSource(tableNum(InventTable));
qbds2.fetchMode(QueryFetchMode::One2One);
qbds2.addLink(fieldNum(SMAServiceOrderTable,ItemId),fieldNum(InventTable,ItemId));

info(qbds.toString());

6 Eylül 2011 Salı

AXAPTA Modified methodu bazen iki kez çalışıyor

Combobox değeri lookup ile seçilirse ve modified methodu içinde data source yenileme yapılırsa modified method'u iki defa çağrılıyor. Aynı durumla bir kişi daha karşılaşmış ve malesef sorusuna bir cevap alamamış.
public void modified()
{
    ;
    super();
    info("111");
    salesLine_DS.research(true);
    salesLine_DS.refresh();
    info("222");
}
Benzer durumla ilgili bir sayfa daha buldum ve oradaki çözümü kendime uyguladım. Class declaration methoduna bir kontrol değişkeni tanımladım ve:

public void modified()
{
    ;
    super();
    if (hasChanged) //çift çağırma bugını gidermek için.
        return;
    hasChanged=true;
    info("111");
    salesLine_DS.research(true);
    salesLine_DS.refresh();
    hasChanged=false;
    info("222");
}

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