我们当前的客户定制请求需要在允许确认装运流程之前向托运人屏幕添加基于某些逻辑的确认消息。
我的第一个想法是覆盖默认" ConfirmShipment"检查程序的方法,如果确认清楚,则继续进行库存确认逻辑。
下面是正在使用的代码的信息:
[PXOverride]
public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder, ConfirmShipmentDelegate confirmdelegate)
{
var baseConfirm = true;
WebDialogResult result = Base.Document.View.Ask(Messages.ShippingConfirmation, MessageButtons.YesNo);
if (result == WebDialogResult.Yes)
{
baseConfirm = false;
}
if (baseConfirm)
{
confirmdelegate(docgraph,shiporder);
}
}
覆盖功能确实有效,但是在选择"是/否"提示,代码执行退出。甚至没有调用结果== WebDialogResult的检查。我相信这可能是由于对话框结果中止的长时间运行操作触发了该方法。
我的第二个想法是覆盖"行动"方法并在甚至调用ConfirmShipment方法之前处理检查。
使用下面的示例方法尝试此操作时,Delegate始终返回null
//[PXOverride]
//[PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
//[PXButton]
//public virtual IEnumerable Action(PXAdapter adapter,
// [PXInt]
// [PXIntList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, new string[] { "Confirm Shipment", "Create Invoice", "Post Invoice to IN", "Apply Assignment Rules", "Correct Shipment", "Create Drop-Ship Invoice", "Print Labels", "Get Return Labels", "Cancel Return", "Print Pick List" })]
// int? actionID,
// [PXString()]
// string ActionName,
// Func<PXAdapter,int?,string,IEnumerable> actiondelegate
// )
//{
考虑到上述两者中的任何一个,拦截&#34; ConfirmShipment&#34;的最佳方法是什么?在运行stock方法之前添加webdialog确认的操作。有没有办法在确认中解决长期运行过程问题,还是有另一个问题阻止它正确返回?
任何协助/指示都将受到赞赏。
答案 0 :(得分:1)
下面的代码有效。我怎么都无法读取ActionName,但在这种情况下,动作ID似乎是正确的。 :■
public PXAction<SOShipment> action;
[PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXButton]
protected virtual IEnumerable Action(PXAdapter adapter,
[PXInt]
[PXIntList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, new string[] { "Confirm Shipment", "Create Invoice", "Post Invoice to IN", "Apply Assignment Rules", "Correct Shipment", "Create Drop-Ship Invoice", "Print Labels", "Get Return Labels", "Cancel Return", "Print Pick List" })]
int? actionID,
[PXString()]
string ActionName
)
{
if (actionID == 1)
{
var baseConfirm = false;
WebDialogResult result = Base.Document.View.Ask("confirm?", MessageButtons.YesNo);
if (result == WebDialogResult.Yes)
{
baseConfirm = true;
}
if (baseConfirm)
{
return Base.action.Press(adapter);
}
else
return adapter.Get();
}
else
return Base.action.Press(adapter);
}