error : HTTP Error 503: Service unavailable when open EP site AX

the issue occur when i tried restarting IIS for updating new customize on EP portal.

not all the service on IIS pool are restarting due to some error.

so just head to IIS pool, make sure the service that you required is all on “STARTED” condition like picture below

Capture

convert null to 0 type BIGINT (INT64 on AX) when outer join on view using SysComputedColumn

public static server str DefaultDimension()
{

    str field = SysComputedColumn::returnField(tableStr(HRSJobPositionDefaultDimension),
                    identifierStr(HcmPositionDefaultDimension),
                    fieldStr(HcmPositionDefaultDimension, DefaultDimension));
    
    return SysComputedColumn::if(
        SysComputedColumn::isNullExpression(field),
        SysComputedColumn::cast("0",'BIGINT'),  
        SysComputedColumn::cast(field,'BIGINT'));
}

add new default dimension (financial dimension) on new table and form example tutorial

This example tutorial will guide you to add new default dim on table and forms.

1. Add new field with type Int64 and set the properties.
Capture

2. Add relation on table relation and set the properties.
Capture

3. on class declaration form , add code below :

public class FormRun extends ObjectRun
{
    DimensionDefaultingController   dimensionDefaultingController;
}

4. add tab page Financial Dimension on form design , and set properties like img below
Capture

5. on TabFinancialDimensions , override method pageActivated

public void pageActivated()
{
    dimensionDefaultingController.pageActivated();

    super();
}

6. on init form, like code below :

public void init()
{
    super();
    dimensionDefaultingController = DimensionDefaultingController::constructInTabWithValues(true, true, true, 0, this, TabFinancialDimensions, "@SYS138487", curext());
    dimensionDefaultingController.parmAttributeValueSetDataSource(HRSJobPowerPlan_ds, fieldStr(HRSJobPowerPlan, DefaultDimension));
}

7. finnaly, on datasource form method override method :
on active()

public int active()
{
    int ret;

    ret = super();
    dimensionDefaultingController.activated();

    return ret;
}

on write()

public void write()
{
    dimensionDefaultingController.writing();
    super();
}

on delete()

public void delete()
{
    dimensionDefaultingController.deleted();
    super();
}

8. preview example form:
Capture

calculate field on view with SysComputedColumn example code

public static server str getOutstanding()
{
    return strFmt("Sum(%1) + Sum(%2)",
            SysComputedColumn::returnField(
            tableStr(TIDIndentOrderUninvoiceTrans),
            identifierStr(TIDIndentOrderPaymentTrans),
            fieldStr(TIDIndentOrderPaymentTrans, amountTendered)),
            SysComputedColumn::returnField(
            tableStr(TIDIndentOrderUninvoiceTrans) ,
            identifierStr(TIDIndentOrderPaymentTrans),
            fieldStr(TIDIndentOrderPaymentTrans, grossAmount)));
}

add group by and ranges to Queries Forms example code

on form class declaration

public class FormRun extends ObjectRun
{
    QueryBuildRange             indentTransDateRange;
    QueryBuildRange             invoiceDateRange;

    QueryBuildRange             customerRange;
    QueryBuildRange             storeRange;
}

on init form method

public void init()
{
    super();

    indentTransDateRange = TIDIndentOrderUninvoiceTrans_ds.query().dataSourceTable(tablenum(TIDIndentOrderUninvoiceTrans))
    .addRange(fieldnum(TIDIndentOrderUninvoiceTrans, PaymentTransDate));

    invoiceDateRange = TIDIndentOrderUninvoiceTrans_ds.query().dataSourceTable(tablenum(TIDIndentOrderUninvoiceTrans))
    .addRange(fieldnum(TIDIndentOrderUninvoiceTrans, InvoicePostingDate));

    customerRange = TIDIndentOrderUninvoiceTrans_ds.query().dataSourceTable(tablenum(TIDIndentOrderUninvoiceTrans))
    .addRange(fieldnum(TIDIndentOrderUninvoiceTrans, CustAccount));

    storeRange = TIDIndentOrderUninvoiceTrans_ds.query().dataSourceTable(tableNum(TIDIndentOrderUninvoiceTrans))
    .addRange(fieldNum(TIDIndentOrderUninvoiceTrans, Store));

    TransactionDate.dateValue(systemdateGet());
}

on execute Query datasource form

public void executeQuery()
{
    this.Query().clearGroupBy();

    indentTransDateRange.value(strFmt('<%1',(TransactionDate.dateValue() + 1)));
    invoiceDateRange.value(strFmt('>%1',TransactionDate.dateValue()));

    customerRange.value(strFmt(customer.text()+'*'));
    storeRange.value(strFmt(StoreId.text()+'*'));

    this.Query().DataSourceNo(1).addGroupByField(fieldNum(TIDIndentOrderUninvoiceTrans,Store));
    this.Query().DataSourceNo(1).addGroupByField(fieldNum(TIDIndentOrderUninvoiceTrans,CustAccount));
    this.Query().DataSourceNo(1).addGroupByField(fieldNum(TIDIndentOrderUninvoiceTrans,SalesId));
    this.Query().DataSourceNo(1).addGroupByField(fieldNum(TIDIndentOrderUninvoiceTrans,GrossAmount));
    this.Query().DataSourceNo(1).addSelectionField(fieldNum(TIDIndentOrderUninvoiceTrans,SumOfamountTendered),SelectionField::Sum);
    this.Query().DataSourceNo(1).addSelectionField(fieldNum(TIDIndentOrderUninvoiceTrans,OutstandingAmount),SelectionField::Sum);

    super();
}

Capture

Formating cells when export to excel example code

private void setInvoiceHeader(SysExcelWorkSheet    xlsWorkSheet,CustInvoiceJour custInvoiceJour)
{
    xlsWorkSheet.cells().item(row,1).value("FK");
    xlsWorkSheet.cells().item(row,2).value(str2num(CustTable::find(custInvoiceJour.InvoiceAccount).TECFakturPajakTypeId));
    xlsWorkSheet.cells().range(strFmt("B%1:B%1",row)).numberFormat("00");
    xlsWorkSheet.cells().item(row,3).value(enum2int(custInvoiceJour.TECIsSubtitute));
    xlsWorkSheet.cells().item(row,4).value(str2num(strFmt("%1", strRem(custInvoiceJour.TECFakturPajakListId, ".-"))));
    xlsWorkSheet.cells().range(strFmt("D%1:D%1",row)).numberFormat("0000000000000");
    xlsWorkSheet.cells().item(row,5).value(mthOfYr(custInvoiceJour.InvoiceDate));
    xlsWorkSheet.cells().item(row,6).value(year(custInvoiceJour.InvoiceDate));
    xlsWorkSheet.cells().item(row,7).value(date2str(custInvoiceJour.InvoiceDate, 213, 1, 4, 1, 4, 4));
    xlsWorkSheet.cells().item(row,8).value(str2num(strFmt("%1", strRem(custInvoiceJour.custTable_InvoiceAccount().TECNPWP, ".-"))));
    xlsWorkSheet.cells().range(strFmt("H%1:H%1",row)).numberFormat("00000000000000");
    xlsWorkSheet.cells().item(row,9).value(CustTable::find(custInvoiceJour.InvoiceAccount).name());
    xlsWorkSheet.cells().item(row,10).value(strRTrim(CustTable::find(custInvoiceJour.InvoiceAccount).postalAddress().Street));
    xlsWorkSheet.cells().item(row,11).value(round(custInvoiceJour.SalesBalance,0));
    xlsWorkSheet.cells().range(strFmt("K%1:K%1",row)).numberFormat("0");
    xlsWorkSheet.cells().item(row,12).value(round(custInvoiceJour.SumTax,0));
    xlsWorkSheet.cells().range(strFmt("L%1:L%1",row)).numberFormat("0");
    xlsWorkSheet.cells().item(row,13).value(0);
    xlsWorkSheet.cells().item(row,14).value("");
    xlsWorkSheet.cells().item(row,15).value(0);
    xlsWorkSheet.cells().item(row,16).value(0);
    xlsWorkSheet.cells().item(row,17).value(0);
    xlsWorkSheet.cells().item(row,18).value(0);
    xlsWorkSheet.cells().item(row,19).value(custInvoiceJour.InvoiceId);
    row++;
    totalCount++;
}

Capture

more example and source :
http://patrikluca.blogspot.cz/2010/04/export-to-excel-with-x-code-sequel.html

Job upload Fixed Asset Journal

static void TIDF_UploadFAJournal(Args _args)
{
    container                       accEntryPattern;
    container                       offSetEntryPattern;
    //for default dimension
    container                       financialDimensionFromExcel;
    DimensionDefault                defaultDimension;
    int                             countLedger;
    int                             countCon;

    AssetBookTable                  _AssetBookTable;
    AssetBookId                     _AssetBookId;
    LedgerJournalTrans_Asset        _LedgerJournalTrans_Asset;
    LedgerJournalTrans              _LedgerJournalTrans;
    LedgerJournalTable              _LedgerJournalTable;

    AssetBookTableDerived           _AssetBookTableDerived;
    AssetBookTableDerivedJournal    _AssetBookTableDerivedJournal;
    AssetTransTypeJournal           _AssetTransTypeJournal;
    AssetTransType                  _AssetTransType;

    LedgerJournalACType             LedgerJournalACType;
    ledgerJournalName               ledgerJournalName;
    journalID                       JournalID;
    LedgerJournalId                 _journalId;
    axLedgerJournalTable            axLedgerJournalTable;
    axledgerJournalTrans            axLedgerJournalTrans;
    LedgerJournalType               JournalType = ledgerJournalType::Daily;


    TransDate                       _TransDate;
    LedgerTransType                 _LedgerTransType;
    str                             AccountNum;
    LedgerJournalACType             _AccountType;
    CurrencyCode                    _CurrencyCode;
    real                            _ExhcangeRate;
    real                            _AmountCurDebit;
    real                            _AmountCurCredit;
    str                             _InvoiceId;
    TransTxt                        _TransTxt;
    DueDate                         _DueDate;
    DocumentNum                     _DoucumentNum;
    DocumentDate                    _DocumentDate;
    str                             Branch;
    str                             Departement;
    str                             Product;
    str                             Project;
    TaxGroupJournal                 _TaxJournal;
    TaxGroupJournal                 _TaxItemJournal;
    NoYes                           _Transferred;
    BankTransactionType             _BankTransactionType;
    TaxCode                         _TaxCode;
    LedgerJournalACType             _OffsetAccountType;
    str                             _OffsetAcountNum;
    VendPostingProfile              _PostingProfile;


    SysExcelApplication                         application = SysExcelApplication::construct();
    SysExcelWorkbooks                           workbooks   = application.workbooks();
    SysExcelWorkbook                            workbook;
    SysExcelWorksheets                          workSheets;
    SysExcelWorksheet                           workSheet;
    SysExcelCells                               cells;
    SysExcelCell                                cell;
    int                                         row;
    str                                         filename, numSeq;
    str                                         strAccount,strAccountOffset;
    Name                                        dimensionName1,dimensionName2,dimensionName3,dimensionName4;
    str                                         MainAcc,Dim1,Dim2,Dim3,Dim4,OffsetAcc;
    str                                         AccountType,OffsetAccountType;
    str                                         PayReff,BankTransType,DocNo,PostingProfile,noInvoice, transType;
    TransDate                                   DocDate;
    str                                         StrDate;

    boolean         _return = true;
    container dimensionAttrName = Global::TIDgetDimensionName();
    _OffsetAcountNum    = '9900-0000';
    startLengthyOperation();
    filename = @"C:\\#Tectura#\fanddy\UploadFAJournal";//FA Dep Commercial.xlsx";//Depreciation commercial
    //filename = _filePath;
    try
    {
        if (workbooks.open(filename, false /*Update links*/, true /*Read only*/))
        {
            workbook   = workbooks.item(1);
            workSheets = workbook.worksheets();
            workSheet  = workSheets.itemFromNum(1); //worksheet keberapa dari excel di mulai dari angka 1
            cells      = workSheet.cells();

            row = 6;

            ttsBegin;

            while (cells.item(row,5).value().bStr() != '' )
            {
                //financial dimension
                financialDimensionFromExcel = conNull();
                //dimension value 1
                financialDimensionFromExcel += cells.item(row,10).value().bStr();
                if(cells.item(row,10).value().bStr() != '' ) {countLedger++;}
                //dimension value 2
                financialDimensionFromExcel += cells.item(row,11).value().bStr();
                if(cells.item(row,11).value().bStr() != '' ) {countLedger++;}
                //dimension value 3
                financialDimensionFromExcel += cells.item(row,12).value().bStr();
                if(cells.item(row,12).value().bStr() != '' ) {countLedger++;}
                //dimension value 4
                financialDimensionFromExcel += cells.item(row,13).value().bStr();
                if(cells.item(row,13).value().bStr() != '' ) {countLedger++;}
                //dimension value 5
                financialDimensionFromExcel += cells.item(row,14).value().bStr();
                if(cells.item(row,14).value().bStr() != '' ) {countLedger++;}
                //dimension value 6
                financialDimensionFromExcel += cells.item(row,15).value().bStr();
                if(cells.item(row,15).value().bStr() != '' )  {countLedger++;}

                //start from A
                _journalId          = cells.item(row,1).value().bStr();
                _TransDate          = cells.item(row,2).value().date();
                AccountNum          = cells.item(row,3).value().bStr();
                transType           = cells.item(row,4).value().bStr();
                _AssetBookId        = cells.item(row,5).value().bStr();
                _CurrencyCode       = cells.item(row,6).value().bStr();
                _ExhcangeRate       = cells.item(row,7).value().double();
                _AmountCurDebit     = cells.item(row,8).value().double();
                _AmountCurCredit    = cells.item(row,9).value().double();

                //_TransDate          = str2Date(StrDate, 123);
                defaultDimension    = TIDcreateDefaultDimension(dimensionAttrName,financialDimensionFromExcel);

                offSetEntryPattern =
                [   _OffsetAcountNum,
                    _OffsetAcountNum,
                    countLedger
                ];
                countCon = 1;
                while(countCon <= countLedger)
                {
                    offSetEntryPattern += conPeek(dimensionAttrName,countCon);
                    offSetEntryPattern += conPeek(financialDimensionFromExcel,countCon);
                    countCon++;
                }

                _AssetTransType             = str2enum(_AssetTransType, transType);
                _AssetTransTypeJournal      = str2enum(_AssetTransTypeJournal, transType);

                _LedgerJournalTable         = LedgerJournalTable::find(_journalId);
                if (_LedgerJournalTable)
                {
                    _LedgerJournalTrans.clear();
                    _LedgerJournalTrans.JournalNum          = _journalId;
                    _LedgerJournalTrans.TransDate           = _TransDate;
                    _LedgerJournalTrans.AccountType         = LedgerJournalACType::FixedAssets;
                    _LedgerJournalTrans.LedgerDimension     = DimensionStorage::getDynamicAccount(AccountNum, LedgerJournalACType::FixedAssets);
                    _LedgerJournalTrans.DefaultDimension    = defaultDimension;
                    _LedgerJournalTrans.CurrencyCode        = _CurrencyCode;
                    _LedgerJournalTrans.ExchRate            = _ExhcangeRate;
                    _LedgerJournalTrans.PostingProfile      = _PostingProfile;

                    if(_AmountCurDebit != 0)
                    {
                        _LedgerJournalTrans.AmountCurDebit  = _AmountCurDebit;
                    }

                    if(_AmountCurCredit != 0)
                    {
                        _LedgerJournalTrans.AmountCurCredit = _AmountCurCredit;
                    }

                    if(_OffsetAcountNum != "")
                    {
                        _LedgerJournalTrans.OffsetAccountType       = LedgerJournalACType::Ledger;
                        _LedgerJournalTrans.OffsetLedgerDimension   = AxdDimensionUtil::getLedgerAccountId(offSetEntryPattern);
                    }

                    _LedgerJournalTrans.Voucher = NumberSeq::newGetNumFromId(_LedgerJournalTable.ledgerJournalName().NumberSequenceTable).num();
                    _LedgerJournalTrans.insert();

                    if (_LedgerJournalTrans)
                    {
                        if (_AssetBookId)
                        {
                            _AssetBookTable = AssetBookTable::find(_AssetBookId);

                            if (_AssetBookTable)
                            {
                                _LedgerJournalTrans_Asset.clear();
                                _LedgerJournalTrans_Asset.RefRecId      = _LedgerJournalTrans.RecId;
                                _LedgerJournalTrans_Asset.AssetId       = AccountNum;
                                _LedgerJournalTrans_Asset.TransType     = _AssetTransTypeJournal;
                                _LedgerJournalTrans_Asset.BookId        = _AssetBookTable.BookId;
                                _LedgerJournalTrans_Asset.insert();
                            }



                            select firstOnly _AssetBookTableDerived
                                where _AssetBookTableDerived.BookId == _AssetBookId
                                   && _AssetBookTableDerived.AssetTransType == _AssetTransType;

                            if (_AssetBookTableDerived)
                            {
                                _AssetBookTableDerivedJournal.clear();
                                _AssetBookTableDerivedJournal.RefRecId  = _LedgerJournalTrans.RecId;
                                _AssetBookTableDerivedJournal.AssetBookId = _AssetBookTableDerived.BookIdDerived;

                                if (_LedgerJournalTrans.AmountCurCredit > 0)
                                {
                                    _AssetBookTableDerivedJournal.AmountCur = _LedgerJournalTrans.AmountCurCredit;
                                }
                                else if (_LedgerJournalTrans.AmountCurDebit > 0)
                                {
                                    _AssetBookTableDerivedJournal.AmountCur = _LedgerJournalTrans.AmountCurDebit;
                                }

                                _AssetBookTableDerivedJournal.insert();
                            }

                        }
                    }
                    print strFmt('Row Number %1 - Asset ID : %2', row,AccountNum);
                    row++;
                }
            }

            info(strFmt('Imported  %1 Items, Journal Numbers : %2',row ,_journalId));
             ttsCommit;
        }
    }
    catch(Exception::Error)
    {
        _return = false;
    }

    application.quit();
}