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!..