23 Temmuz 2013 Salı

AXAPTA - Lookup and sort

When creating lookup you will see lookup won't run with your selected sort field:

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


If you may do this change, you will see your lookup how  do you want to do:

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 - Setfocus to a specified control when opening form

Should write a setfocus for control at form's firstField method:

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

12 Temmuz 2013 Cuma

AXAPTA - Timezone difference when getting server datetime value

DateTimeUtil classes utcNow method gives time as  Greenwich time. When getting and setting datetime it needs convert:

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

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

11 Temmuz 2013 Perşembe

AXAPTA - Print barcode

Blogs about barcode printing with Axapta usually same each other. There are some problems with Axapta barcode printing and none of them mentioned these problems. I wrote tricks about them at this page:

Code 128:

display BarCodeString ServiceObjectbarCode()
{
    Barcode barcode;
    ;

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


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


After drag and drop this display method to report section:

Font - BC C128 Narrow

Width - This value shouldn't be auto. Axapta terminate label before needed length. Needed length can find with a few try. I used 10 cm with my sample.
Fontsize - 24 (I couldn't success write readable barcodes below 24. Some bigger font sizes cannot read with barcode reader too, need tries).

Code 39 :
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
I didn't have trouble when using Code39 about width property when selected Auto. Like Code 128 I had trouble with font sizes below 24 and some sizes upper 24. It may be about my barcode reader.

4 Temmuz 2013 Perşembe

AXAPTA - Set cursor to a record fast with grid

Findrecord and findvalue methods are so slow for set a record for current. Instead of these filter method can be use but with filter just filtered records can be view. If you want see all records and set cursor to a specific record can use this way which I found  at a blog uses from Axapta with also original lookup forms:

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

SMAServiceOrderTable_ds.executeQuery();


It's so fast but don't forget to use indexed field for search.