21 Ocak 2019 Pazartesi

İş akışlarının ilerlememesi | Dynamics Ax

İş akışlarınız ilerlemiyorsa muhtemelen gereksiz kayıtlar kalmış ve ilgili tablolar şişmiş olabilir(gönderilmiş formdan silinmiş vs.). Aşağıdaki kod oluşan bu gereksiz kayıtları siler. İş akışlarınız çalışmaya devam eder.


static void workflowUndefinedRecords(Args args)
{
    Common                      buffer;
    SysDictTable                dictTable;
    SysWorkflowTable            workflowTable;
    WorkflowMessageTable        workflowMessageTable;
    WorkflowWorkItemTable       workflowWorkItemTable;
    WorkflowTrackingStatusTable trackingStatus;
    boolean                     deleteifNotExist = true;
    ;
    ttsbegin;
    deleteifNotExist = Box::yesNo('Hatalı bulunan iş akış kayıtları silinsin mi?',DialogButton::No) == DialogButton::Yes ? true : false;

    setPrefix('SysWorkflowTable');
    while select forupdate workflowTable
    {
        changecompany(workflowTable.ContextCompanyId)
        {
            dictTable = new SysDictTable(workflowTable.ContextTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == workflowTable.ContextRecId;

            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(workflowTable.ContextTableId),workflowTable.ContextRecId,workflowTable.ContextCompanyId));

                if(deleteifNotExist)
                {
                    trackingStatus = WorkflowTrackingStatusTable::findByCorrelation(workflowTable.RootCorrelationId,true);
                    trackingStatus.delete();

                    workflowTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowTable.RootCorrelationId));
                }
            }

        }
   }
   setPrefix('WorkflowMessageTable');
   while select forupdate workflowMessageTable
    where workflowMessageTable.MessageLifeCycleState == WorkflowMessageLifeCycleState::Queued
    {
        changecompany(workflowMessageTable.WorkflowContextCompanyId)
        {
            dictTable = new SysDictTable(workflowMessageTable.WorkflowContextTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == workflowMessageTable.WorkflowContextRecId;

            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(workflowMessageTable.workflowContextTableId),workflowMessageTable.workflowContextRecId,workflowMessageTable.workflowContextCompanyId));

                if(deleteifNotExist)
                {
                    trackingStatus = WorkflowTrackingStatusTable::findByCorrelation(workflowMessageTable.RootCorrelationId,true);
                    trackingStatus.delete();

                    workflowMessageTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowMessageTable.RootCorrelationId));
                }
            }

        }

    }
   setPrefix('WorkflowMessageTable&StatusTable');
   while select forupdate workflowMessageTable
   // where workflowMessageTable.MessageLifeCycleState == WorkflowMessageLifeCycleState::Queued
         notexists join trackingStatus
            where trackingStatus.CorrelationId == workflowMessageTable.WorkflowCorrelationId
    {
        changecompany(workflowMessageTable.WorkflowContextCompanyId)
        {

            info(strfmt('WorkMessage %1 için TrackingStatus kaydı yok. statü:%2',workflowMessageTable.WorkflowCorrelationId,workflowMessageTable.MessageLifeCycleState));

                if(deleteifNotExist)
                {
                    workflowMessageTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowMessageTable.WorkflowCorrelationId));
                }
        }
   }
   setPrefix('WorkflowWorkItemTable');
   while select forupdate workflowWorkItemTable
    {
        changecompany(workflowWorkItemTable.CompanyId)
        {
            dictTable = new SysDictTable(workflowWorkItemTable.RefTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == workflowWorkItemTable.RefRecId;
            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(workflowWorkItemTable.refTableId),workflowWorkItemTable.refRecId,workflowWorkItemTable.CompanyId));

                if(deleteifNotExist)
                {
                    trackingStatus = WorkflowTrackingStatusTable::findByCorrelation(workflowWorkItemTable.CorrelationId,true);
                    trackingStatus.delete();

                    workflowWorkItemTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowWorkItemTable.CorrelationId));
                }
            }

        }
   }
   setPrefix('WorkflowWorkItemTable&StatusTable');
   while select forupdate workflowWorkItemTable
        notexists join trackingStatus
            where trackingStatus.CorrelationId == workflowWorkItemTable.CorrelationId
    {
        changecompany(workflowWorkItemTable.CompanyId)
        {

            info(strfmt('WorkItem %1 için TrackingStatus kaydı yok. statü:%2',workflowWorkItemTable.CorrelationId,workflowWorkItemTable.Status));

                if(deleteifNotExist)
                {
                    workflowWorkItemTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowWorkItemTable.CorrelationId));
                }
        }
   }
   setPrefix('WorkflowtrackingStatusTable');
    while select forupdate trackingStatus
    {
        changecompany(trackingStatus.ContextCompanyId)
        {
            dictTable = new SysDictTable(trackingStatus.ContextTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == trackingStatus.ContextRecId;

            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(trackingStatus.ContextTableId),trackingStatus.ContextRecId,trackingStatus.ContextCompanyId));

                if(deleteifNotExist)
                {
                   trackingStatus.delete();
                   info(strfmt('%1 iş akış öğesi silindi',trackingStatus.RootCorrelationId));
                }
            }

        }
   }

   ttscommit;
}


8 Ocak 2019 Salı

JumpRef kullanımı | Dynamics Ax

Aşağıdaki kodla ana tablo formuna git dediğimizde direkt olarak ilgili kayda gider.

public void jumpRef() // ilgili kayda gider
{
    DRT_EnvanterTable EnvanterTable;
    Args            args;
    MenuFunction    menuFunction;
    Common rec;
    ;

    rec = DRT_EnvanterTable::find(this.valueStr());
    args = new Args();
    args.record(rec);
    args.caller(element);
    menuFunction = new     MenuFunction(menuitemdisplaystr(DRT_EnvanterTable),MenuItemType::Display);
    menuFunction.run(args);
}

Serbest metin fatura iptali | Ters kayıt


Sebest metin faturasından fatura iptali yapılamıyor.İptal etmeye çalıştığınızda;
"Sadece Satış Siparişlerinden yapılanlara otomatik ters kayıt atabilirsiniz.." Şeklinde hata alırsınız.

Bu işlemi gerçekleştirmek için: 

Serbest metin faturası > Sorgulamalar > Fatura > Hareketler > Ters hareket
Ya da kısa yolu > Müşterinin hareketlerinden ilgili hareketi bulup Ters hareket yapabilirsiniz.

Yapıldığında ilgili kayıt, ilişkili formlara ters kaydını atıyor.


Alınan hata!









Total ciro

static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...