close

Batch Job Keep Continues instead of Retry!

 

class DGS_PostPurchaseReceiptServiceTask extends RunBaseBatch
{
    str packedQuery ;
    ItemId qryItemid;
    str errorMsg;


    #define.CurrentVersion(1)
    #define.Version1(1)
 

    public boolean canGoBatchJournal()
    {
        return true;
    }

    public boolean init()
    {
        return true;
    }

    protected void new()
    {
        super();
    }

    public container pack()
    {
        return [#CurrentVersion];
    }

    // This method unpacks the query and returns it as query object.
    public Query getQuery()
    {
        return
    new Query(SysOperationHelper::base64Decode(packedQuery));
    }

    // This method takes a query object, encodes it and stores the packed query.
    public void setQuery(Query _query)
    {
        packedQuery = SysOperationHelper::base64Encode(_query.pack());
    }

    public boolean Update()
    {
        PurchFormLetter purchFormLetter;
        PurchTable  purchTable;
        PurchLine purchLine;
        InventTrans inventtrans;
        InventTransOrigin inventTransOrigin;
        WMSJournalTable wmsJournalTable;
        boolean isError = false;

        NumberSeq DGS_PackingSlipIdSeq;
        DGS_PackingSlipId _PackingSlipId;
        boolean requireNewId = true;

        Query query = this.getQuery();
        QueryRun        qr;
        // Executing our query.
        qr = new QueryRun(query);
     
        // Looping through query results.
        while (qr.next())
        {
            purchTable = qr.get(tableNum(PurchTable));
            wmsJournalTable = qr.get(tableNum(WMSJournalTable));

            //info(strFmt("Log:: %1", PurchTable.PurchId ));

            try
            {
                ttsbegin;

                if(requireNewId)
                {                    
                    DGS_PackingSlipIdSeq = NumberSeq::newGetNum(DGS_NumberSeqModulePackingSlip::numRefDGS_PackingSlipId());
                    _PackingSlipId = DGS_PackingSlipIdSeq.num();
                }
                requireNewId = this.makCreatePostProductReceipt(purchTable.PurchId, wmsJournalTable.journalId, _PackingSlipId );
                ttscommit;

            }
            catch (Exception::Error)
            {
                isError = true;
                errorMsg = strFmt("%1 || PurchId: %2 - %3", errorMsg,purchTable.PurchId,Exception::Error);
                continue;
            }
        }
       
        if(isError)
        {
            return false;
        }

        return true;
    }

    public void run()
    {
        #OCCRetryCount
        if (! this.validate())
            throw error("");

        try
        {
            this.Update();
        }
        catch (Exception::Deadlock)
        {
            retry;
        }
        catch (Exception::UpdateConflict)
        {
            if (appl.ttsLevel() == 0)
            {
                if (xSession::currentRetryCount() >= #RetryNum)
                {
                    throw Exception::UpdateConflictNotRecovered;
                }
                else
                {
                    retry;
                }
            }
            else
            {
                throw Exception::UpdateConflict;
            }
        }
        catch (Exception::Error)
        {
            throw Error(errorMsg);
        }

    }

    public boolean runsImpersonated()
    {
        return true;
    }

    public boolean unpack(container packedClass)
    {
        Version version = RunBase::getVersion(packedClass);
        ;
        switch (version)
        {
            case #CurrentVersion:
                [version] = packedClass;
                break;
            default:
                return false;
        }

        return true;
    }

    public boolean validate(Object _calledFrom = null)
    {
        if (false)
            return checkFailed("");

        return true;
    }

    server static DGS_PostPurchaseReceiptServiceTask construct()
    {
        return new DGS_PostPurchaseReceiptServiceTask();
    }

    static ClassDescription description()
    {
        return "Auto Update Purchase Receipt.";
    }

    static void main(Args args)
    {
    }

    protected boolean canRunInNewSession()
    {
        return false;
    }

    public static DGS_PostPurchaseReceiptServiceTask newTask(DGS_PostPurchaseReceiptContract _dataContract)
    {
        DGS_PostPurchaseReceiptServiceTask task;
        task = DGS_PostPurchaseReceiptServiceTask::construct();
        task.parmPackedQuery(_dataContract.parmQuery());     
        task.runOperation();

        return task;
    }

    public str parmPackedQuery(str _packedQuery = packedQuery)
    {
        packedQuery = _packedQuery;

        return packedQuery;
    }

    public boolean makCreatePostProductReceipt(PurchId purchId,JournalId journalId, DGS_PackingSlipId _PackingSlipId )
    {
        PurchFormLetter             purchFormLetter;
        PurchFormletterParmData     purchFormLetterParmData;
        PurchParmUpdate             purchParmUpdate;
        PurchParmTable              purchParmTable , delpurchParmTable;
        PurchParmLine               purchParmLine;
        PurchTable                  purchTable;
        PurchLine                   purchLine;        
        InventDim                   inventDim;
        WMSJournalTable             wmsJournalTable;
        WMSJournalTrans             wmsJournalTrans;

        InventTrans inventtrans;
        InventTransOrigin inventTransOrigin;

        boolean requireNewId = true;
        boolean hasRecords = false;
        purchTable = PurchTable::find(purchId);
        wmsJournalTable = WMSJournalTable::find(journalId);

            // info(strFmt("Log (PurchLine) :: %1 - %2 - %3", PurchTable.PurchId, PurchLine.LineNumber ,PurchLine.ItemId ));

            // Create PurchParamUpdate table
            purchFormLetterParmData = PurchFormletterParmData::newData(
            DocumentStatus::PackingSlip,
            VersioningUpdateType::Initial);
    
            purchFormLetterParmData.parmOnlyCreateParmUpdate(true);
            purchFormLetterParmData.createData(false);
            purchParmUpdate = purchFormLetterParmData.parmParmUpdate();

            // Set PurchParmTable table
            purchParmTable.clear();
            purchParmTable.TransDate                = SystemDateGet();
            purchParmTable.Ordering                 = DocumentStatus::PackingSlip;
            purchParmTable.ParmJobStatus            = ParmJobStatus::Waiting;
            purchParmTable.Num                      = _PackingSlipId;
            purchParmTable.PurchId                  = purchTable.PurchId;
            purchParmTable.PurchName                = purchTable.PurchName;
            purchParmTable.DeliveryName             = purchTable.DeliveryName;
            purchParmTable.DeliveryPostalAddress    = purchTable.DeliveryPostalAddress;
            purchParmTable.OrderAccount             = purchTable.OrderAccount;
            purchParmTable.CurrencyCode             = purchTable.CurrencyCode;
            purchParmTable.InvoiceAccount           = purchTable.InvoiceAccount;
            purchParmTable.ParmId                   = purchParmUpdate.ParmId;

            purchParmTable.THK_CarrierCode          = TMSPurchTable::find(purchTable.PurchId).CarrierCode;

            if(wmsJournalTable.ReturnItemNum)
            {
                purchParmTable.THK_ReturnItemNum           = wmsJournalTable.ReturnItemNum;
            }
            else
            {
                purchParmTable.THK_ReturnItemNum           = purchTable.ReturnItemNum;
            }
     
            if(wmsJournalTable.THK_AirwayBill)
            {
                purchParmTable.THK_AirwayBill           = wmsJournalTable.THK_AirwayBill;
            }
            else
            {
                purchParmTable.THK_AirwayBill           = purchTable.THK_AirwayBill;
            }

            purchParmTable.THK_DeliveryNote         = wmsJournalTable.THK_DeliveryNote;
            purchParmTable.DGS_JournalId            = wmsJournalTable.JournalId;

            purchParmTable.insert();

            // Set PurchParmLine table
            while select purchLine
            where purchLine.PurchId == purchTable.purchId && purchLine.DataAreaId == curExt()
            {
                // count registed item
                select sum(Qty) from inventtrans
            join inventTransOrigin
            where inventTrans.inventTransOrigin == inventTransOrigin.RECID
            && inventtrans.DATAAREAID == inventTransOrigin.DATAAREAID
            && inventTransOrigin.INVENTTRANSID == purchLine.INVENTTRANSID
            && inventtrans.DATAAREAID == purchLine.DATAAREAID
            && inventtrans.ItemId == PurchLine.ItemId
            && inventtrans.StatusReceipt == StatusReceipt::Registered;

                select sum(Qty) from wmsJournalTrans where wmsJournalTrans.journalId == wmsJournalTable.journalId
                && wmsJournalTrans.DATAAREAID == wmsJournalTable.DATAAREAID
                && wmsJournalTrans.itemId == PurchLine.ItemId;

                //  info(strFmt("sum qty :: %1 ", inventtrans.Qty ));
                int _invT_qty = inventtrans.Qty;
                int _qty = wmsJournalTrans.Qty;

                if(_invT_qty >= _qty && _qty != 0)
                {
                    hasRecords = true;

                    purchParmLine.clear();
                    purchParmLine.InitFromPurchLine(purchLine);

                    purchParmLine.ReceiveNow    = _qty;
                    purchParmLine.setInventReceiveNow();

                    purchParmLine.ParmId        = purchParmTable.ParmId;
                    purchParmLine.TableRefId    = purchParmTable.TableRefId;
                    purchParmLine.setQty(DocumentStatus::PackingSlip, false, true);
                    purchParmLine.setLineAmount();
                    purchParmLine.insert();

                
                }

            }

            if(hasRecords)
            {
                purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
                purchFormLetter.transDate(systemDateGet());
                purchFormLetter.proforma(false);
                purchFormLetter.specQty(PurchUpdate::PackingSlip);
                purchFormLetter.purchTable(purchTable);
    
                // This is the ID we hard code as the product receipt ID, if we do the posting via UI
                // user would have the option to manually enter this value
                purchFormLetter.parmParmTableNum(purchParmTable.ParmId);
                purchFormLetter.parmId(purchParmTable.ParmId);
                purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());
                purchFormLetter.run();

                requireNewId = true;
  
                //wmsJournalTable.selectForUpdate(true);
                //wmsJournalTable.DGS_ItemReceived = NoYes::Yes;
                //wmsJournalTable.doUpdate();
  
            }
            else
            {
                delete_from delpurchParmTable
                where delpurchParmTable.RecId == purchParmTable.RecId;

                //   Error("Cannot create Product receipt.");
                requireNewId = false;
            }


        return requireNewId;
    }

}

arrow
arrow
    文章標籤
    Dynamics AX D365
    全站熱搜

    lionlionchopper 發表在 痞客邦 留言(0) 人氣()