29 Kasım 2012 Perşembe

AXAPTA SysQuery ile Form ve Report'a Range Ekleme

Form için:
    SysQuery::findOrCreateRange(B_RMAOutTable_DS.query().dataSourceTable(tablenum(B_RMAOutTable)),        fieldnum(B_RMAOutTable,RMAIn)).
         value(QueryValue(NoYes::Yes));


Report için:

    SysQuery::findOrCreateRange(this.query().dataSourceTable(tablenum(SMAServiceOrderTable)),
        fieldnum(SMAServiceOrderTable,ItemSerialNum)).
 value(sysquery::valueNotEmptyString());


Run methoduna super'den önce yazabilirsiniz.

27 Kasım 2012 Salı

If ve like

Axapta'da like operatörü sadece sql - select cümleciklerinde değil, if komutunda da kullanılabilir:

if (ItemId like "WX*")

5 Kasım 2012 Pazartesi

AXAPTA - Excel Import

void clicked()
{
    SysExcelApplication application;
    SysExcelWorkbooks   workbooks;
    SysExcelWorkbook    workbook;
    SysExcelWorksheets  worksheets;
    SysExcelWorksheet   worksheet;
    SysExcelCells       cells;
    COMVariantType      type;
    int                 row;
    str                 line;
    Filename            Filename;
    ;
    super();
    Filename = WinApi::getOpenFileName(element.hWnd(),['XLS dosyaları','*.xls'],"","Serino dosyası");
    if (!Filename)
        return;

    application = SysExcelApplication::construct();
    workbooks = application.workbooks();
    try
    {
        workbooks.open(filename,0,true);
    }
    catch (Exception::Error)
    {
        throw error(strfmt("Dosya açılamıyor: %1",Filename));
    }

    element.lock();
    workbook = workbooks.item(1);
    worksheets = workbook.worksheets();
    worksheet = worksheets.itemFromNum(1);
    cells = worksheet.cells();
    do
    {
        row++;
        type = cells.item(row+1,1).value().variantType();

        switch(cells.item(row,1).value().variantType())
        {
            case COMVariantType::VT_BSTR:
                line = cells.item(row,1).value().bStr();
                break;
            case COMVariantType::VT_DECIMAL, COMVariantType::VT_R4, COMVariantType::VT_R8:
                line = strfmt("%1",any2int(cells.item(row,1).value().double()));
                break;
            case COMVariantType::VT_I1, COMVariantType::VT_I2, COMVariantType::VT_I4:
                line = strfmt("%1",cells.item(row,1).value().int());
                break;
            case COMVariantType::VT_UI1, COMVariantType::VT_UI2, COMVariantType::VT_UI4:
                line = strfmt("%1",cells.item(row,1).value().uLong());
                break;
            case (COMVariantType::VT_DATE):
                line = date2str(cells.item(row,1).value().date(),123,2,1,2,1,4);
             case COMVariantType::VT_EMPTY:
                line ="";
                break;
            default:
                line="";
}
        if (Line != "")
            element.insertSerial(line);
    }
    while (type != COMVariantType::VT_EMPTY);
    application.quit();
    element.unLock();
}

15 Ekim 2012 Pazartesi

AXAPTA - Client Arabelleğini Temizleme

Bazen yeni yazdığınız kodlar client'i resetleseniz bile client tarafında görünmeyebilir. Bu durumda client bilgisayarında aşağıdaki kodları çalıştırmanız işe yarayabilir:

xSession::removeAOC();
SysTreeNode::refreshAll();
SysFlushDictionary::doFlush();
SysFlushAOD::doFlush();
xSession::updateAOC();

9 Ekim 2012 Salı

AXAPTA - Empty compound statement uyarısı

Axapta derleme esnasında bu uyarıyı verir. Boş blokları temizleyerek bu uyarıdan kurtulunabilir. Ancak Try/Catch bloğunda bunu yapamazsınız. Bu durumda ne yapacaksınız?
catch (Exception::Error)
{
 exceptionTextFallThrough();
}


Uyarıyı kaldırmaktan başka bir işlevi olmayan bu fonksiyonu bir blogdan buldum.

8 Ekim 2012 Pazartesi

AXAPTA client ve server için ayrı ayrı bugünün tarihi

Bugünün datetime değerinin fonksiyonunu daha önce de vermiştim, ancak o sadece client içindi. Client ve server için ayrı ayrı:

warning(strfmt("Client datetime değeri: %1",DatetimeUtil::getSystemDateTime()));
warning(strfmt("Server datetime değeri: %1",DatetimeUtil::utcNow()));


12 Eylül 2012 Çarşamba

Axapta if ve parantez

Aşağıdaki blok hatalı mı?

            if (_ServiceShipment == B_SMAServiceShipment::B_Hand)
                if (!Personels.WithHand)
                    continue;
Ben hatalı olmadığını düşünüyodum. Çünkü ikinci if komutunun da continue ile birlikte tek komut olarak alınacağını sanıyordum. Ama öyle değilmiş. Parantez gerekiyor:

            if (_ServiceShipment == B_SMAServiceShipment::B_Hand)
            {
                if (!Personels.WithHand)
                    continue;
            }

4 Haziran 2012 Pazartesi

AXAPTA - Kontrolün lookup buttonunu gizlemek

Bir kontrolün lookup buttonu gizlemek için:

 DSerial.lookupButton(FormLookupButton::Never);

20 Nisan 2012 Cuma

AXAPTA - Common DLL kullanımı

Öncelikle DLL dosyasını Program Files altındaki Axapta klasöründe Client\Bin altına atın. Benim bilgisayarımda bu klasörün adı:
C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\

Arg methodu ile extTypes enum ile parametre tipleri belirtilir. Kullanımı:

void Test()
{
    DLL                 testDll;
    DLLFunction         test;
    ;

    testDll = new DLL("MyTestDLL.dll");
    test = new DLLFunction(printDLL, "MyTestingMethod");
    test.arg(extTypes::Word ,extTypes::String);
   test.call(12345,"ABCDE");
}

6 Nisan 2012 Cuma

AXAPTA - ascii yazdırma ve string boyu

mylen = StrLen("benim deneme stringim...");

alfabenin_ilk_harfi = num2char(65);

AXAPTA - Global fonksiyon tanımlama

Static methodunuzu AOT->classes->Global sınıfına ekleyin:

public static void Test()
{
;
info("my global function");
}

***
static void TestMyGlobalFunction(Args _args)
{
;
test();
}

AXAPTA - stringi trim etmek

static void Job47(Args _args)
{
str a;
;
a=StrRtrim("fdssf ");
a=StrLtrim(" fdssf");
}

7 Şubat 2012 Salı

AXAPTA Validate işleminde tek komutta mesaj verip false değer döndürmek

Checkfailed fonksiyonu bu işi yapıyor. Böylece iki satırda yapılabilecek bir işlem tek satıra iniyor.

if (b_SerialTrans.RefType !=B_SerialRefType::ServiceObjectRelation)
        return checkFailed("Bu kayıt silinemez!..");