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

1 Ekim 2013 Salı

AXAPTA - Web servisi "CLR nesnesi Microsoft Dynamics anytype için sıralanamıyor." hatası

SenderTel2      = line.get_senderTel2();

 Axapta ile web servisi geliştirirken yukarıdaki gibi bir satırla servisten property okumaya çalışırken null değerler için "CLR nesnesi Microsoft Dynamics anytype için sıralanamıyor." hatası alıyorsanız ve hata veren satırı try/catch içine aldığınız halde hata mesajı yine de ekrana geliyorsa yapmanız gereken:

SenderTel2      = CLRInterop::isNull(line.get_senderTel2()) ? "" : line.get_senderTel2();


23 Temmuz 2013 Salı

AXAPTA - Lookup ve sort

Lookup oluşturduğunuzda sort eklediğiniz halde lookup'ın sizin belirlediğiniz sırada çıkmadığını görürsünüz:

public void lookup()
{
    SysTableLookUp          sysTableLookUp = SysTableLookup::newParameters(tablenum(SMARepairStage),RepairStageId);
    Query                   query = new Query();
    QueryBuildDataSource    qbds = query.addDataSource(tablenum(SMARepairStage));
        qbds.addSortField(fieldnum(SMARepairStage,Name));
        qbds.orderMode(OrderMode::OrderBy);
    sysTableLookup.addLookupfield(fieldnum(SMARepairStage,RepairStageId));
    sysTableLookup.addLookupfield(fieldnum(SMARepairStage,Name));
    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();
}


Aşağıdaki değişikliği yaparsanız lookup'ın sizin belirlediğiniz sırada çıktığını göreceksiniz:

public void lookup()
{
    SysTableLookUp          sysTableLookUp = SysTableLookup::newParameters(tablenum(SMARepairStage),RepairStageId);
    Query                   query = new Query();
    QueryBuildDataSource    qbds = query.addDataSource(tablenum(SMARepairStage));
        qbds.addSortField(fieldnum(SMARepairStage,Name));
        qbds.orderMode(OrderMode::OrderBy);
    sysTableLookup.addLookupfield(fieldnum(SMARepairStage,RepairStageId));
    sysTableLookup.addLookupfield(fieldnum(SMARepairStage,Name));
    sysTableLookup.parmQuery(query);
    sysTableLookup.parmUseLookupValue(false);
    sysTableLookup.performFormLookup();
}

22 Temmuz 2013 Pazartesi

AXAPTA - Form açılırken istenen bir kontrole set focus

Formun firstField metoduna ilgili kontrol için bir setfocus yazmak gerekiyor:

public void firstField(int _flags=1)
{
    super(_flags);
    EmplId2.setFocus();
}

12 Temmuz 2013 Cuma

AXAPTA - Server tarih-saat değerini alırken saat dilimi farkı

DateTimeUtil classının utcNow  methodu saati Greenwich olarak verir. Alırken ve verirken çevirmek gerekir:

CallDateTime.value(DateTimeUtil::applyTimeZoneOffset(DateTimeUtil::utcNow(),DateTimeUtil::getCompanyTimeZone()));
...

...
JournalLines.CallDateTime = DateTimeUtil::removeTimeZoneOffset(CallDateTime.value(),DateTimeUtil::getCompanyTimeZone());

11 Temmuz 2013 Perşembe

AXAPTA - Barkod yazdırma

İnternette bulduğum Axapta barkod yazdırma konusundaki blogların çoğunun denenmemiş ve birbirinden kopya olduğunu sanıyorum. Çünkü bazı sıkıntılar var ki bunlardan hiç bahsedilmemiş. Ben aşağıda bunlara da değindim:

Code 128 için:

display BarCodeString ServiceObjectbarCode()
{
    Barcode barcode;
    ;

    barcode = BarcodeCode128::construct();
    barcode = Barcode::construct(BarcodeType::Code128);


    barcode.string(true, ServiceObject.ItemSerialNum);
    barcode.encode();
    return barcode.barcodeStr();
}


Bu display alanı sürükledikten sonra özellikleri:

Font - BC C128 Narrow

Width - Bu değer auto olmamalı. Code 128 ile auto yapıldığında Axapta etiketi olması gerektiğinden erken sonlandırıyor. Deneme ile gerekli alan uzunluğu bulunabilir. Ben kendi örneğimde 10 cm yaptım.
Fontsize - 24 (24'ten düşük bir fontla yazdırmayı başaramadım. Daha büyük fontlar denerken de arada bazı boyutları yazıyor ama okuyucu okumuyor, deneme yanılma yöntemiyle bulmak gerekiyor malesef).

Code 39 için:
display BarCodeString ServiceOrderbarCode()
{
    Barcode barcode;
    ;

    barcode = Barcode::construct(BarcodeType::Code39);
    barcode.string(true, ServiceOrder.ServiceOrderId);
    barcode.encode();

    return barcode.barcodeStr();
}


Font - BC C39 3 to 1 HD Wide
Code39 ile width Auto olduğunda bir sıkıntı yaşamadım.
Aynı şekilde bunda da font 24'ten küçük olduğunda ve arada bazı boyutlarda okuma sorunu yaşadım. Benim yaşadığım okuma sorunları okuyucu kaynaklı da olabilir tabii.

4 Temmuz 2013 Perşembe

AXAPTA - Gridde bir kayda hızlı konumlanmak

Kayda konumlanmak için findrecord ve findvalue methodları çok yavaş. Bunun yerine filter kullanılabiliyor ancak o zaman da ekranda sadece istenen kayıtlar görüntülenebiliyor. Eğer tüm kayıtlar görüntülensin ve cursor de istediğimiz kayıtta konumlansın istiyorsanız  bir blogda rastladığım orijinal lookup formlarında da kullanılan aşağıdaki yöntemi kullanabilirsiniz:

element.args().lookupField(fieldnum(SMAServiceOrderTable, ServiceOrderId));
element.args().lookupValue(_order.ServiceOrderId);
 

SMAServiceOrderTable_ds.executeQuery();

Not: Arama için kullandığınız alanın indeksli olması gerektiğini unutmayın!..