我正在尝试将用于后续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;
当用户选择值并在弹出面板上单击“确定”时,它将被插入数据库中。这是我已覆盖的“终止”方法的完整代码段。
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();
}
我可以看到代码已执行。而且也没有错误。但是它并没有存储在数据库中。
请注意,以下是我用来选择ReasonID的弹出面板的PXFilter视图:
public PXFilter<ContractTerminationReason.ContractAndContractTerminationReason> SpecifyTerminationReason;
谢谢。
答案 0 :(得分:0)
查看您的代码,我将删除公共DAC属性,并使用视图/缓存来存储数据。
在您的图形扩展名中,您具有以下内容,但我认为您不需要。首选使用视图/缓存。
DispatchQueue.global(qos: .background).async {
SKStoreReviewController.requestReview()
}
因此,您可以删除ContractAndContractTerminationReason contractAndContractTerminationReason = new ContractAndContractTerminationReason();
事件,而仅使用过滤器的当前值(假设它们具有所需的值)。
以最简单的形式运行。您共享的项目中没有页面条目或表格条目,因此我从示例中删除了面板提示。这将保存记录。
ContractAndContractTerminationReason_ContractTerminationReasonID_FieldUpdated
您使用的代码是否提示面板?对于过滤器,我通常创建一个过滤器DAC,而不使用同一DAC来执行更新。也许这是造成您的问题的原因。
您将遇到的一个问题是,当baseMethod可能未完成且未将合同标记为已终止时,您将保留记录。结果,您的表将具有终止原因,而合同未处于终止状态。只是要注意的事情。