1. 建立一個全新的 CLASS 而且 overrides TradeOrderLineRegister
public class DSalesReturnOrderLineregister extends TradeOrderLineRegister
{
ReturnDispositionCodeId returnDispositionCodeId;
DialogField dialogDispositionCodeId;
SalesLine salesLine;
boolean reverseInventTrans;
boolean recreateReservationLine;
boolean inRegistration;
#DEFINE.CurrentVersion(1)
#LOCALMACRO.CurrentList
returnDispositionCodeId
#ENDMACRO
}
2. 把相關的methods 都加到CLASS 內
public boolean init()
{
boolean ret;
ret = super();
salesLine = salesPurchLine;
return ret;
}
/// <summary>
/// Contains the code that does the actual job of the class.
/// </summary>
public void run()
{
this.runPreSuper();
super();
this.runPostSuper();
}
public void runPostSuper()
{
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
if (inRegistration)
{
if (salesLine.ReturnStatus == ReturnStatusLine::Awaiting)
{ //The registration form was closed without register anything.
if (reverseInventTrans
&& !salesLine.ReturnAllowReservation)
{
SalesLine::changeReturnOrderType(salesLine.InventTransId, null, true);
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
}
if (salesLine.ReturnDispositionCodeId)
{
salesLine.ReturnDispositionCodeId = '';
salesLine.update();
}
}
}
else
{
if (salesLine.ReturnStatus == ReturnStatusLine::Registered)
{ //The registration form was closed without cancel anything.
if (recreateReservationLine)
{
salesLine.createReturnReservationLine();
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
}
}
}
}
/// <summary>
/// Contains logic to be executed before the call to the <c>super</c> class in the <c>run</c> method
/// </summary>
public void runPreSuper()
{
InventTransOriginId salesLineInventTransOriginId;
InventTransOriginId reservationLineInventTransOriginId;
SalesLine reservationLine;
if (salesLine.ReturnStatus == ReturnStatusLine::Awaiting)
{
inRegistration = true;
if (!salesLine.ReturnAllowReservation
&& salesPurchLine.isStocked())
{
SalesLine::changeReturnOrderType(salesLine.InventTransId);
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
reverseInventTrans = true;
}
salesLine.ReturnDispositionCodeId = returnDispositionCodeId;
salesLine.update();
//Resetting the args.record() in order to ensure the disposition code is passed to the later update process.
args.record().data(salesLine);
}
else
if (salesLine.ReturnStatus == ReturnStatusLine::Registered)
{
select forupdate firstonly reservationLine where reservationLine.InventRefTransId == salesLine.InventTransId;
if (reservationLine
|| salesLine.qtyMarked())
{
if ((salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReplaceScrap
|| salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReturnToCust
|| salesLine.returnDispositionCode().DispositionAction == DispositionAction::Scrap))
{
if (reservationLine.SalesQty == reservationLine.RemainSalesPhysical)
{
reservationLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(reservationLine.DataAreaId, reservationLine.InventTransId);
salesLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(salesLine.DataAreaId, salesLine.InventTransId);
InventTransOrigin::deleteMarking(salesLineInventTransOriginId, reservationLineInventTransOriginId, -salesLine.QtyOrdered);
reservationLine.delete();
recreateReservationLine = true;
}
}
else
{
throw error("@SYS332911");
}
}
}
}
/// <summary>
/// Validates the dialog input.
/// </summary>
/// <param name="calledFrom">
/// An object type.
/// </param>
/// <returns>
/// true if appropriate values are entered to the dialog; otherwise, false.
/// </returns>
public boolean validate(Object calledFrom = null)
{
boolean ret;
ret = super(calledFrom);
if (ret && !returnDispositionCodeId)
{
return checkFailed(strfmt("@SYS332910"));
}
return ret;
}
static DSalesReturnOrderLineregister construct()
{
return new DSalesReturnOrderLineregister();
}
3. 在自己原本的程式中加入以下method 用來 return order registration
public void returnOrderRegistrationProcess()
{
TradeOrderLineRegister tradeOrderlineRegister;
DSalesReturnOrderLineRegister salesReturnOrderLineRegister;
InventTransWMS_Register inventTransWMS_register;
TmpInventTransWMS TmpInventTransWMS;
SalesLine salesLine;
Args args = new Args();
select forUpdate salesLine
where salesLine.SalesId == "sales Id"
&& salesLine.LineNum == "line number";
args.record(salesLine);
tradeOrderLineRegister =DSNSalesReturnOrderLineRegister::construct();
tradeOrderLineRegister.parmArgs(args);
tradeOrderLineRegister.init();
salesReturnOrderLineRegister = tradeOrderLineRegister;
salesReturnOrderLineRegister.runPreSuper();
//update returnDisposioncode
salesLine.ReturnDispositionCodeId = "your disposion code";
salesLine.update();
select firstOnly crossCompany inventTrans
join RecId,InventTransId from inventTransOrigin
where inventTransOrigin.InventTransId == salesLine.InventTransId
&& inventTrans.InventTransOrigin == inventTransOrigin.RecId;
inventTransWMS_register = inventTransWMS_register::newStandard(tmpInventTransWMS);
tmpInventTransWMS.clear();
tmpInventTransWMS.initFromInventTrans(inventTrans);
tmpInventTransWMS.InventDimId = inventTrans.InventDimId;
tmpInventTransWMS.insert();
inventTransWMS_register.writeTmpInventTransWMS(tmpInventTransWMS,
inventTrans,
inventTrans.inventDim());
inventTransWMS_register.updateInvent(salesLine);
}
留言列表