31 Ocak 2013 Perşembe

AXAPTA - Send alert to a user

static void sendAlertToUser(UserId _UserId,EventSubject _Subject,EventMessage _Message)
{
    EventInbox        inbox;
    EventInboxId      inboxId;
    SysClientSessions sessions;
    ;
    inboxId = EventInbox::nextEventId();
    inbox.initValue();
    inbox.ShowPopup            = NoYes::Yes;
    inbox.Subject              = _Subject;
    inbox.Message              = _Message;
    inbox.SendEmail            = true;
    inbox.UserId               = _UserId;
    inbox.InboxId              = inboxId;
    inbox.AlertCreatedDateTime = DateTimeUtil::getSystemDateTime();
    inbox.insert();
}

AXAPTA - Create Sales Order with X++

...
    SalesTable                  salesTable;
    NumberSeq                   NumberSeq;
    SalesLine                   salesLine;
    AxSalesLine                 axSalesLine = new axSalesLine();
    AxSalesTable                axsalesTable = new axSalesTable();
    ;
...
    ttsbegin;
    axsalesTable.parmSalesId();
    if (ServiceOrder.CustName == "")
        axsalesTable.parmCustAccount(ServiceOrder.CustAccount);// Cust Account
    else
        axsalestable.parmOneTimeCustomer(Dialog_OneTime.value());

    axsalesTable.parmDlvMode(Dialog_DLVMode.value());
    axsalesTable.parmDlvTerm(Dialog_DLVTerm.value());
    axsalesTable.save();
    while select forupdate Lines where Lines.RepairJournalId == _RepairJournalId && Lines.SalesId == "" &&
        Lines.CSApproval == B_Approval::Approved && Lines.ItemId != "" && Lines.Qty > 0
    {
        axSalesLine = AxSalesLine::construct();
        axSalesLine.parmSalesId(axsalesTable.parmSalesId());
        axSalesLine.parmItemId(Lines.ItemId);
        axSalesLine.parmSalesQty(Lines.Qty);
        axSalesline.parmSalesPrice(Lines.ProjSalesPrice);
        axSalesline.parmCurrencyCode(Lines.ProjCurrencyCode);
        axSalesline.parmSalesUnit(Lines.Unit);
        Lines.SalesId = axsalesTable.parmSalesId();
        Lines.update();
        axSalesLine.save();
    }
    ttscommit;
...

29 Kasım 2012 Perşembe

AXAPTA Add Range with SysQuery to Form & Report

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


For Report:

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



Run methoduna super'den önce yazabilirsiniz.
You may add this code to before run method's  super() call.

27 Kasım 2012 Salı

If and like

In axapta like operator can use with if command like sql - select command :

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 files','*.xls'],"","Filename");
    if (!Filename)
        return;

    application = SysExcelApplication::construct();
    workbooks = application.workbooks();
    try
    {
        workbooks.open(filename,0,true);
    }
    catch (Exception::Error)
    {
        throw error(strfmt("File cannot open: %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 - clear client cache

Sometimes your new codes don't update at client side even you reset client computer. In this case this code part may help you:

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

9 Ekim 2012 Salı

AXAPTA - Empty compound statement warning

Axapta generates this warning when compiling. To avoid this warning empty blocks may be remove. But when issue Try/Catch block you can't do this. Well, what do you do?
catch (Exception::Error)
{
 exceptionTextFallThrough();
}


I found this function from a  blog, it does nothing except supress warning.