Вы можете следовать методу, предложенному Юрой, ИЛИ вы можете добиться этого другим способом, я думаю.
Вы можете проверить состояние кеша записи перед вызовом base persist, если состояние кеша говорит, что оно удалено, не выполняйте перенаправление.
Код может быть таким, как показано ниже [НЕ ПРОВЕРЕНО]
[PXOverride]
public void Persist(Action persist)
{
bool isDeletion = false;
InventoryItem CurrentItem = this.Base.Item.Cache.Current as InventoryItem ;
if(this.Base.Item.Cache.GetStatus(CurrentItem) == PXEntryStatus.Deleted) // Helps to check whether the operation is deletion
isDeletion = true;
persist();// this will call base Persist();
if(!isDeletion)
{
InventoryItemMaint grp = PXGraph.CreateInstance<InventoryItemMaint>();
InventoryItem inv = PXSelect<InventoryItem, Where<InventoryItem.inventoryCD, Equal<Required<InventoryItem.inventoryCD>>>>.Select(grp, this.Base.Item.Current.InventoryCD.Trim());
if (inv != null && inv.InventoryID.HasValue)
{
grp.Item.Current = grp.Item.Search<InventoryItem.inventoryID>(inv.InventoryID);
throw new PXRedirectRequiredException(grp, "Reloading Item");
}
}
}
ИЗМЕНИТЬ:
Я обнаружил, что приведенный выше код не будет работать как InventoryItem.
this.Base.Item.Current // is returning null
и это ваша основная проблема с ошибкой movenext, поэтому я предлагаю вам обновить код следующим образом.
[PXOverride]
public void Persist(Action persist)
{
persist();// this will call base Persist();
InventoryItem CurrentItem = this.Base.Item.Current as InventoryItem;
if (CurrentItem != null)
{
InventoryItemMaint grp = PXGraph.CreateInstance<InventoryItemMaint>();
InventoryItem inv = PXSelect<InventoryItem, Where<InventoryItem.inventoryCD, Equal<Required<InventoryItem.inventoryCD>>>>.Select(grp, CurrentItem.InventoryCD.Trim());
if (inv != null && inv.InventoryID.HasValue)
{
grp.Item.Current = grp.Item.Search<InventoryItem.inventoryID>(inv.InventoryID);
throw new PXRedirectRequiredException(grp, "Reloading Item");
}
}
}
person
Sin
schedule
19.06.2015