Я пытаюсь сохранить запись для следующего DAC в базе данных в расширении графа ContractMaint.
public class ContractAndContractTerminationReason : IBqlTable
{
#region ContractAndContractTerminationID
[PXDBIdentity(IsKey = true)]
[PXUIField(DisplayName = "Contract And Contract Termination ID")]
public virtual int? ContractAndContractTerminationID { get; set; }
public abstract class contractAndContractTerminationID : IBqlField { }
#endregion
#region ContractID
[PXDBInt()]
[PXUIField(DisplayName = "Contract ID")]
[PXDBDefault(typeof(Contract.contractID))]
[PXParent(typeof(Select<Contract, Where<Contract.contractID, Equal<Current<ContractAndContractTerminationReason.contractID>>>>))]
public virtual int? ContractID { get; set; }
public abstract class contractID : IBqlField { }
#endregion
#region ContractTerminationReasonID
[PXDBInt()]
[PXUIField(DisplayName = "Reason")]
[PXParent(typeof(Select<
ContractTerminationReason,
Where<ContractTerminationReason.contractTerminationReasonID, Equal<Current<ContractAndContractTerminationReason.contractTerminationReasonID>>>>))]
[PXSelector(typeof(Search<
ContractTerminationReason.contractTerminationReasonID,
Where<ContractTerminationReason.contractID, Equal<Current<Contract.templateID>>>>), DescriptionField = typeof(ContractTerminationReason.description))]
public virtual int? ContractTerminationReasonID { get; set; }
public abstract class contractTerminationReasonID : IBqlField { }
#endregion
}
Здесь, в расширении графика ContractMaint, я создал следующий вид.
public PXSelect<ContractAndContractTerminationReason> ContractAndContractTerminationReasons;
И когда пользователь выбирает значение и нажимает OK на всплывающей панели, он вставляется в базу данных. Вот полный фрагмент кода метода Terminate, который я переопределил.
public delegate void TerminateDelegate();
[PXOverride]
public void Terminate(TerminateDelegate baseMethod)
{
Contract contractTemplate = PXSelect<Contract, Where<Contract.contractID, Equal<Current<Contract.templateID>>>>.Select(Base);
bool isContractTerminationReasonEnabled = contractTemplate.GetExtension<ContractExt>().UsrEnableTerminationReason == null ? false : (bool)contractTemplate.GetExtension<ContractExt>().UsrEnableTerminationReason;
if (isContractTerminationReasonEnabled)
{
if (SpecifyTerminationReason.AskExt(
delegate
{
}) == WebDialogResult.OK)
{
using (var ts = new PXTransactionScope())
{
try
{
ContractAndContractTerminationReasons.Insert(contractAndContractTerminationReason);
ContractAndContractTerminationReasons.Cache.IsDirty = true;
Base.Actions.PressSave();
ts.Complete();
}
catch (Exception ex)
{
PXTrace.WriteError(ex);
}
}
}
}
//baseMethod();
}
Я вижу, что код был выполнен. И здесь тоже нет ошибок. Но это не хранится в базе данных.
Точно так же, как примечание ниже, это представление PXFilter для моей всплывающей панели, которое я использую для выбора ReasonID:
public PXFilter<ContractTerminationReason.ContractAndContractTerminationReason> SpecifyTerminationReason;
Спасибо.