【问题标题】:Dimension lookup hangs AX client?维度查找挂起 AX 客户端?
【发布时间】:2020-04-03 06:27:35
【问题描述】:

我有一个导入接口(不是我编写的),它导入 XML 数据并创建 LedgerJournalTable (1) 和 LedgerJournalTrans (1..n) 记录。

在处理 LJT 维度时,代码首先检查维度是否存在于 AX 中,然后将数据插入到维度 [x] 字段中。但是,在维度不存在的情况下,导入运行结束后会向用户显示警告,但数据仍会按原样插入。

并且当用户在导入完成后进入LJT线路时,错误值显示在维度字段中。单击此维度的查找/下拉列表时,查找未打开并且 AX 客户端挂起。 Ctrl+break 将恢复它,但查找永远不会打开。您可以删除该值,保存,问题仍然存在。您可以手动输入现有值并保存,问题仍然存在。 问题也延伸到表格浏览器。

知道为什么会发生这种情况以及如何解决它,除了首先不保存错误值(我不知道为什么首先要这样做)?

提前致谢。

【问题讨论】:

  • ledgerJournalTrans.LedgerDimension 的值不正确。是 AX 2009 吗?

标签: axapta x++ dimensions dynamics-ax-2009


【解决方案1】:

如果我没看错请告诉我。

  1. 用户运行一些进程从 XML 导入 LJ 表/trans 记录。
  2. 如果 XML 中存在错误维度,即使数据无效,它也会将数据推送到 LJ trans dimension[x] 字段,并向用户显示警告。
  3. 用户查看日志并看到错误数据并尝试使用查找来更正它,但查找挂起/崩溃。

在我看来,问题可能是您一直在将一堆坏数据推入 AX 并且查找正在尝试使用无效的表/edt 关系。

如果我是对的,你需要直接去 SQL 并查询账本转表并查找 任何不良维度数据并更正/删除它。

我怀疑现有的不良数据会导致查找失败,而不仅仅是您导入和查看的任何不良数据。

可能导致问题的原因是,用户导入了错误数据,收到警告,忽略警告,按原样(包含错误数据)点击“发布”,现在它在 AX 中?现在,当您进行第二次导入并尝试使用查找时,它会因错误的数据关系而崩溃。

【讨论】:

  • 您正在阅读 100% 正确,除了用户收到的警告仅在导入完成后出现,因此它甚至不会停在那里。让我明白的是,即使在 LJT 表单中替换了值之后,查找也是如何挂起的。我想我必须写一份更正工作,看看是否能解决它,直到我可以进行一些实际的代码更正(再说一遍,不是我的代码,所以......)。
  • @mrsalonen - 采用一个测试环境,该环境已导入包含日志中错误维度的数据...暂时不要理会它。手动新建一个期刊,加一行,看看lookup是否挂了。如果它挂起,则现有的错误数据将被拉入查找的查询中。删除坏日志,转到好日志,看看查找是否仍然挂起。如果没有,您已经证明了这一点。如果是这样,则检查已发布期刊中的数据是否存在错误维度。我怀疑您会找到一些...从 SQL 中删除这些条目并重新测试查找。同样,在测试环境中。
  • @mrsalonen 我的预感是以前的 Dev 有良好的意图,允许日志导入错误数据,以便用户可以遵循警告并纠正它。他们可能认为验证/发布会阻止它发布(它可能会?),但如果它没有阻止它并且用户只是忽略了警告,那可能就是问题所在。真正的解决方案是使整个过程原子化,或者导入并跳过错误行(和警告),或者导入到在创建日志之前进行验证的临时表中。不...允许错误数据存在于可能被提交的表中。
【解决方案2】:

已编辑:因此,虽然数据库中存在损坏,但发现了真正的罪魁祸首:为维度查找创建临时数据的标准 AX 代码 - 在 Dimensions.insert() 中有一个编写 XML 文件的 mod 代码每个维度都被更新或插入。在这种情况下,这花了很长时间,以至于它挂断了客户端。我将代码放在 if 子句中,如下所示:

if(!this.isTemp())
{
  // offending code
}

问题解决了。

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 2015-08-20
    • 1970-01-01
    • 2014-03-17
    • 2020-01-19
    • 1970-01-01
    • 2018-05-19
    • 2013-10-19
    • 2013-11-13
    相关资源
    最近更新 更多