使销售人员ID成为SOLINE的必填字段

问题描述:

我需要将SOLine上的销售人员ID作为必填字段。但由于转储订单没有销售员,因此它只应在我创建转储订单以外的订单时进行验证。使销售人员ID成为SOLINE的必填字段

我试着用下面的代码,但它似乎不工作。可能会被一些现有的代码所覆盖。如果有人有任何建议,请告诉我。

public PXSetup<SOOrderTypeOperation, 
 
\t Where<SOOrderTypeOperation.orderType, Equal<Optional<SOOrderType.orderType>>, 
 
\t And<SOOrderTypeOperation.operation, Equal<Optional<SOOrderType.defaultOperation>>>>> sooperation; 
 
\t \t \t 
 
protected bool IsTransferOrder 
 
{ 
 
\t get 
 
\t { 
 
\t \t return (sooperation.Current.INDocType == INTranType.Transfer); 
 
\t } 
 
} 
 

 
protected virtual void SOLine_RowPersisting(PXCache sender, PXRowPersistingEventArgs e) 
 
{ 
 
\t var row = (SOLine)e.Row; 
 
\t if (row == null) return; 
 

 
\t PXDefaultAttribute.SetPersistingCheck<SOLine.salesPersonID>(sender, row, IsTransferOrder ? PXPersistingCheck.Nothing : PXPersistingCheck.Null); 
 
}

当条件存在,我通常在排迁延性抛出相应的异常。

这里是从SOShipmentEntry检查转移和检查字段的空值的示例:

protected virtual void SOShipment_RowPersisting(PXCache sender, PXRowPersistingEventArgs e) 
{ 
    SOShipment doc = (SOShipment)e.Row; 
    if (doc.ShipmentType == SOShipmentType.Transfer && doc.DestinationSiteID == null) 
    { 
     throw new PXRowPersistingException(typeof(SOOrder.destinationSiteID).Name, null, ErrorMessages.FieldIsEmpty, typeof(SOOrder.destinationSiteID).Name); 
    } 
} 

我也称为内RowPersisting RaiseExceptionHandling类似于此示例

// sender = PXCache 
if (row.OrderQty == Decimal.Zero) 
    sender.RaiseExceptionHandling<POLine.orderQty>(row, row.OrderQty, new PXSetPropertyException(Messages.POLineQuantityMustBeGreaterThanZero, PXErrorLevel.Error)); 

两个例子都应该停止保存页面。调用Raise Exception处理应该用Red X指出该字段,这是更好的方法,并且更容易让用户找到有问题的字段。

对于示例:

protected virtual void SOLine_RowPersisting(PXCache sender, PXRowPersistingEventArgs e) 
{ 
    SOLine row = (SOLine)e.Row; 
    if (row == null) 
    { 
     return; 
    } 

    if (!IsTransferOrder && row.SalesPersonID == null) 
    { 
     sender.RaiseExceptionHandling<SOLine.salesPersonID>(row, row.SalesPersonID, new PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXErrorLevel.Error)); 
    } 
} 
+0

感谢@Brendan,这有助于。不过,我也想显示那个红色的星号,它向用户显示了必填字段。下面的代码有助于在这种情况下 'PXDefaultAttribute.SetPersistingCheck (Transactions.Cache,null,IsTransferOrder?PXPersistingCheck.Nothing:PXPersistingCheck.Null);' – Krunal

+0

红色星号的好处。希望这有助于一些。如果你想让SetPersitingCheck工作,尝试将它移动到SOOrder的RowSelected – Brendan

+0

是的你是对的,我已经放入了RowSelected的SOOrder – Krunal