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;
}


Hiç yorum yok:

Yorum Gönder

Total ciro

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