acumatica - 数据未存储在数据库中
问题描述
我正在尝试将跟踪 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;
谢谢你。
解决方案
查看您的代码,我将删除公共 DAC 属性并使用视图/缓存来存储数据。
在您的图形扩展中,您有以下我认为您不需要的内容。使用视图/缓存是首选方法。
ContractAndContractTerminationReason contractAndContractTerminationReason = new ContractAndContractTerminationReason();
因此,您可以删除ContractAndContractTerminationReason_ContractTerminationReasonID_FieldUpdated
事件并仅使用过滤器当前值(假设它们具有您需要的值)。
这是最简单的形式。您共享的项目中没有页面条目或表格条目,因此我从示例中删除了面板提示。这将保存记录。
public class ContractMaint_Extension : PXGraphExtension<ContractMaint>
{
public PXSelect<ContractAndContractTerminationReason> ContractAndContractTerminationReasons;
public delegate void TerminateDelegate();
[PXOverride]
public virtual void Terminate(TerminateDelegate baseMethod)
{
var newRow = new ContractAndContractTerminationReason
{
ContractID = Base.Contracts.Current.ContractID,
ContractTerminationReasonID = 2 //SpecifyTerminationReason.Current.ContractTerminationReasonID
};
ContractAndContractTerminationReasons.Insert(newRow);
ContractAndContractTerminationReasons.Cache.Persist(PXDBOperation.Insert);
ContractAndContractTerminationReasons.Cache.Clear();
baseMethod();
}
}
您正在使用的代码是否提示面板?对于过滤器,我通常会创建一个过滤器 DAC,而不是使用相同的 DAC 来执行更新。也许这会导致您的问题。
您将遇到的一个问题是,当 baseMethod 可能未完成且未将合同标记为已终止时,您正在保留记录。因此,您的桌子将有一个终止的原因,而合同没有处于终止状态。只是需要注意的事情。
推荐阅读
- cassandra - Cassandra 计数器 WriteTimeoutException
- python - 提取 [] 中的最后一条语句(正则表达式)
- scrapy - 无法使用 LinkExractor 进行分页
- rest - 如何使用他们的 REST API 在 Magento 中更新 MSRP
- javascript - this.setState 在 onPress 使用时不是函数
- python - 如何连接到远程 Windows 机器以使用 python 更改 mdb 文件?
- php - 如何使用 TCPDF 将数据从数据库传递到一个文件上的多个表?
- amazon-ec2 - 重新启动的 EC2 实例现在 WebServer 已关闭
- javascript - Vanilla JS 与侦听器函数的 React 类绑定
- python - 组合两个块并在两者上循环