Шаги, которые вы описали, выглядят правильно.
Я воссоздал этот сценарий локально:
1 - мое расширение DA C выглядит следующим образом:
public class SOShipLineExt : PXCacheExtension<PX.Objects.SO.SOShipLine>
{
#region UsrPCSiteID
[PXUIField(DisplayName = "PC Warehouse")]
[SiteAvail(typeof(SOShipLine.inventoryID), typeof(SOShipLine.subItemID))]
public virtual int? UsrPCSiteID {
get; set;
}
public abstract class usrPCSiteID:PX.Data.BQL.BqlInt.Field<usrPCSiteID> {
}
#endregion UsrPCSiteID
#region UsrPCLocationID
[PXUIField(DisplayName = "PC Location")]
[SOLocationAvail(typeof(SOShipLine.inventoryID), typeof(SOShipLine.subItemID), typeof(SOShipLineExt.usrPCSiteID), typeof(SOShipLine.tranType), typeof(SOShipLine.invtMult))]
public virtual int? UsrPCLocationID {
get; set;
}
public abstract class usrPCLocationID:PX.Data.BQL.BqlInt.Field<usrPCLocationID> {
}
#endregion UsrPCLocationID
#region Allow
[PXDBBool]
[PXUIField(DisplayName = "Allow")]
public virtual bool? UsrAllow {
get; set;
}
public abstract class usrAllow:PX.Data.BQL.BqlBool.Field<usrAllow> {
}
#endregion
}
Замечания о расширении DA C:
- Я удалил ссылки на PXUIEnabled и PXUIRequired. Если вы хотите отключить Site и Location на основе значения флажка, я рекомендую вам управлять этим логом c в событии RowSelected. (это возможно при вашем подходе, но я не использовал его раньше)
- Ссылки PXDefault также были удалены, поскольку в большинстве случаев Отправка создается непосредственно со страницы Заказа на продажу. Как вы понимаете, поле является обязательным, но значение по умолчанию не присваивается, что приведет к ошибке. У вас есть 2 варианта: 1) указать значение в атрибуте PXDefault () или 2) установить свойство PXPersistingCheck.Nothing .
- Обратите внимание, что ваш атрибут SOLocationAvail имеет ошибку в 4-м параметр. Вы должны использовать typeof (SOShipLine.tranType) вместо typeof (SOLine.tranType) . Это приводило к ошибке при создании отправки из SO.
2 - событие My FieldUpdated выглядит следующим образом:
public class SOShipmentEntry_Extension : PXGraphExtension<SOShipmentEntry>
{
protected virtual void SOShipLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
if (e.Row == null) return;
SOShipLine line = (SOShipLine)e.Row;
SOShipLineExt lineExt = cache.GetExtension<SOShipLineExt>(line);
if (lineExt != null)
{
lineExt.UsrAllow = true;
lineExt.UsrPCSiteID=154;
lineExt.UsrPCLocationID=155;
}
}
}
Примечания о расширении графика:
- Я жестко запрограммировал значения «Склад» и «Местоположение». Я рекомендую вам сделать то же самое с самого конца во время тестирования, просто убедитесь, что идентификаторы существуют в вашей БД, или что вы запрашиваете значение CD, а затем используете соответствующее значение идентификатора.
Результаты:
Когда отправка создается из SO, значения назначаются правильно: