【问题标题】:xRecord.data method generates record with identical RecIdxRecord.data 方法生成具有相同 RecId 的记录
【发布时间】:2015-11-01 00:05:25
【问题描述】:

我了解该表的 data 方法会创建包含系统字段的记录的副本。通常它应该生成一个新的RecID,这是合理的,否则你不能在同一个表中插入记录。

现在我遇到了一种情况,即 data 方法正在创建具有 相同 RecId 的副本,从而导致插入操作期间出错。我不确定为什么会发生这种情况,并希望能提供有关此主题的任何意见。

我在做什么:

  • 复制现有产品配置模型
  • 当我运行调试器时,执行线程有时会到达一个表方法 PCClass.duplicateTranslation()
  • 在第 20 行和第 22 行中,我们可以看到创建了一条重复记录,然后尝试插入该记录,但由于它们具有相同的 RecId,因此失败(见下一个屏幕截图)

这是一个标准的 AX 方法,为什么它不起作用?

【问题讨论】:

  • 可能是一个错误,他们不应该在这里使用data 方法。尝试改用buf2buf。据我所知,只有RecId 为 0 时才会创建新的 RecId
  • 使用data是可以的,见Docu::copy。涉及到其他一些索引。
  • @FH-Inway,我在同一个方向思考并尝试使用 buf2buf()。如您所说,RecID 为 0。不幸的是,我的问题没有解决,因为问题是由插入期间的另一个索引引起的。

标签: axapta dynamics-ax-2012 x++


【解决方案1】:

表对象的data方法复制所有字段,包括RecId和其他系统字段。 insert 方法负责RecId 的生成。

根据上述逻辑,您的代码不应因RecId 索引而失败。
也许另一个唯一索引正在发挥作用?
很可能您在对方法的调用中传递了错误或零 RecId

你使用两个记录缓冲区,这是不必要的,只需更改记录关键字段并插入:

while select translation 
    where translation.Category == this.RecId ...
{
    translation.Category = _duplicateComponent;
    translation.insert();
}

【讨论】:

  • 问题确实来自另一个索引。所以我认为相同的 RecId 导致问题的假设是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多