sysoperation etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
sysoperation etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Eylül 2014 Cuma

AX 2012 - Batch joblar bir türlü başlamıyorsa?

Home->Inquiries->Batch jobs->My batch jobs 'a girince jobların başlamadığını görürseniz.

System administration->Setup->System->Server configuration'a girip Batch server schedule'de uygun saatlerde (00-23:59) kayıt olduğuna ve Maximum batch threads değerinin sıfırdan farklı olmasına dikkat edin.

Ayrıca sorun batch gruplarına hiç server atanmamasıyla da ilgili olabilir:

Administration -> setup -> Batch Groups

Buradaki boş batch group için Batch Servers tabına girip Selected server alanında doğru sunucu seçili mi onu da kontrol edin.


25 Haziran 2014 Çarşamba

AX 2012 - Form datasını yenilemek

Çağırdığınız bir alt rutin ekrandaki datayı yeniliyor. Formda data yenilenmiyor. Bunu çözmek için önce research, sonra refresh metodlarını çağırmanız en uygun yoldur. Research mevcut query filtrelerinizi bozmaz ve true parametresiyle çağırdığınızda önceki kayda konumlanır:

    LedgerJournalTrans_DS.research(true);
    LedgerJournalTrans_DS.refresh();


Çağırdığınız rutin bir SysOperation class rutiniyse ve ekran halen yenilenmiyorsa controller classda bunu yapmayı unutmayın:

 controller.parmExecutionMode(SysOperationExecutionMode::Asynchronous);

Aksi takdirde classın işi bitmeden research ve refresh çalıştırmış ve dataları yenilememiş olursunuz.


17 Haziran 2014 Salı

AX - 2012 Sysoperation class örneği

Contract Class:
classDeclaration metodu:

[DataContractAttribute]
class myTestContract
{
    TransDate       transDate;
    str             packedQuery;
    LedgerJournalId JournalId;
}


Diğer metodlar:
//------ Query almak için -------------
public Query getQuery()
{
    return new Query(SysOperationHelper::base64Decode(packedQuery));
}


//---------- bir parm metod örneği --------------
[DataMemberAttribute
, SysOperationControlVisibilityAttribute(false)]
public LedgerJournalId parmJournalId(LedgerJournalId _JournalId = JournalId)
{
    JournalId = _JournalId;

    return JournalId;
}

//--------------------- parmQuery ile bir query çağır ----------------
[DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', querystr(myQuery))
]
public str parmQuery(str _packedQuery = packedQuery)
{
    packedQuery = _packedQuery;
    return packedQuery;
}

//-------------- SetQuery ile query ver -----------------------
public void setQuery(Query _query)
{
    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}



DataService Class:


ClassDeclaration metodu:
class myDataService
{
}


Batch job metodu:

[SysEntryPointAttribute]
public void Go(myContract _contract)
{
    QueryRun                            qRun;
    Query                               query;
    QueryBuildDataSource                QBDS;
    QueryBuildRange                     QBR,QBR2;
    CustTable               CustTable;
    LedgerJournalId                     JournalId;
    TransDate                           PaymDate;
    LedgerJournalTrans                  journalTrans;

    JournalId = _contract.parmJournalId();
 

    query = _contract.getQuery();
    QBDS = query.dataSourceTable(tablenum(CustTable));
    QBR = QBDS.findRange(fieldnum(CustTable,CustAccount));
    if (!QBR)
        QBR = QBDS.addRange(fieldnum(CustTable,CustAccount));
    QBR.value(queryValue("000001"));

    qRun = new QueryRun(query);

    while(qRun.next())
    {
        CustTable = qRun.get(tableNum(CustTable));
      ...
    }


Controller Class:
class declaration:
 

class MyController extends SysOperationServiceController
{
}


public static MyController newFromArgs(Args _args)
{
    MyController    controller;
    MyContract      contract;
    LedgerJournalTable             LedgerJournalTable;

    if ( !_args || !_args.caller() )
        throw error("This class needs parameter!..");

    ledgerJournalTable = _args.caller().ledgerJournalTable();
    controller = new ETGVendAdvanceReqController();

    controller.initializeFromArgs(_args);

    contract = Controller.getDataContractObject("_contract");
    contract.parmPaymDate(today());
    contract.parmJournalId(ledgerJournalTable.JournalNum);

    return Controller;
}


public static void main(Args _args)
{
    MyController controller;

    controller = MyController::newFromArgs(_args);

    controller.parmExecutionMode(SysOperationExecutionMode::Asynchronous);
    controller.startOperation();
}

 
Menu item parametreleri:

Object - MyController
ObjectType - class
Parameters - MyDataService.Go