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;
}
}
留言列表