【问题标题】:Acumatica ARtran table import Unique FieldsAcumatica ARtran 表导入唯一字段
【发布时间】:2016-12-12 01:07:22
【问题描述】:

我有一个“导入方案”,它按小时将记录插入到 ARTan 表中。我遇到的问题是,我无法确保不插入两次记录。我有一个名为 FeeDueID 的主键,AR 记录只能插入一次。有没有办法在 Acumatica 中锁定它,这样多个用户就不会意外插入多条记录?

有人告诉我,如果我在 Acumatica“数据提供者”中选择我的唯一字段作为关键字段,这将不允许插入重复项。然而,这种情况并非如此。我真的在寻找一种方法,让 Acuamtica 框架只允许基于我的用户定义的主键的一个 AR 记录。我能够通过在桌子上放置触发器来解决这个问题。有人告诉我 Acumatica 不支持触​​发器。

附加信息:

· 模式的“Key”属性仅用于在导入方案的“Prepare”部分帮助识别唯一记录。何时使用此标志似乎有些混乱,我们已联系 Acumatica 以帮助澄清这一点。

· 准备好记录后,数据场景的设置不会直接参与实际的导入过程

· 如果当前正在处理导入方案并且执行了第二次准备,Acumatica 将处理它尚未标记为已导入/已处理的任何项目。这包括之前准备好的项目。

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    按触发器跳过记录是不正确的,因为您的文档总数会错误。

    如果您可以使用触发器来处理它,那么如果系统会自动跳过此项目而没有任何消息,我认为您可以吗?

    如果是,此自定义可能对您有用。它将检查数据库中的类似记录并将其删除。如果有不同的要求,您可以更改此代码并抛出错误或选择不同的选择。

    请注意,这取决于数据的大小,它可能会影响性能。我强烈建议您在列上创建自定义索引。

    public class ARInvoiceEntry_Extension : PXGraphExtension<ARInvoiceEntry>
    {
        public delegate void PersistDelegate();
        [PXOverride]
        public void Persist(PersistDelegate baseMethod)
        {
            if (Base.IsImport)
            {
                PXView _view = new PXView(Base, false, BqlCommand.CreateInstance(typeof(Select<ARTran, Where<ARTranExt.usrCustomKey, Equal<Required<ARTranExt.usrCustomKey>>>>)));
    
                //Checking Unique Value
                foreach (ARTran tran in Base.Transactions.Select())
                {
                    ARTranExt ext = Base.Transactions.Cache.GetExtension<ARTranExt>(tran);
                    String search = ext.UsrCustomKey;
    
                    if (search != null)
                    {
                        int startRow = 0, maxRows = 2, totalRows = 0;
                        List<object> records = _view.Select(null, new[] { search }, null, null, null, null, ref startRow, maxRows, ref totalRows);
    
                        bool found = false;
                        foreach (ARTran record in records)
                        {
                            if (found) // if it's not the same record
                            {
                                Base.Transactions.Delete(record);
                            }
                            found = true;
                        }
                    }
                }
            }
            baseMethod();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 2021-08-11
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多