2

我只是一个 SQL 人,所以请原谅我这是一个愚蠢的问题,或者是在错误的地方。

我从生产环境到较低环境的数据刷新指令让我进入 AX 客户端并通过点击鼠标操作将 8 个表备份到一个文件中:

  • 工作表
  • 系统用户配置文件
  • 系统用户信息
  • 系统公司用户信息
  • 目录表
  • 员工类型
  • 用户组列表
  • 用户信息

然后,我停止 AOS 并做我最擅长的事情——使用一些 SQL 将数据从 31 个表中复制到一个安全的地方,进行数据库恢复,将数据从安全的地方复制回 31 个表中。然后启动 AOS,同步字典,最后通过 AX 客户端导入 8 个表(都像点点鼠标一样)。

我可以从命令行同步。我可以从命令行通过 sql 保留 31 个表。我可以从命令行以正确的顺序启动和停止 AOS。但是我不能执行这个 AX 导出/导入表步骤,并且在三个环境中,所有这些尖锐的点击都会激怒我。

问题,最后:客户端中的导出/导入会发生什么,如果有的话,仅仅处理像其他 31 个一样的这 8 个表不会涵盖这些?是 dict 同步无法解决的问题吗?有没有办法告诉它也可以做什么?X++ 中是否有一种简单的方法来编码导出/导入?我已经掌握了 sysStartupCmd 以及如何从 ax32.exe -StartupCmd 获得一些东西,但老实说,SQL 对我来说要容易得多,因为我是我的母语。

感谢您阅读所有内容!

4

1 回答 1

2

您描述的过程对于更新过程来说似乎有些不寻常,但在某些情况下是有意义的。

正如评论中所述,您基本上是在为较低的环境保留数据。您在评论中描述的过程用旧数据更新现有记录,同时保留新数据。如果您想通过 SQL 尝试此操作,则需要将其编写为 upsert(因为可能会在更新现有记录的同时创建新记录)。看起来这些表都以某种方式与用户相关,因此如果从生产环境到您的较低环境有不同的用户集,则此过程是有意义的,这并不罕见,尤其是在 SOX 监管的环境中。在这种情况下,数据字典同步实际上不会做任何事情 - 基本上只是更新 SQL 中的表模式以匹配存储在 AX 中的定义。由于该架构没有更改,因此不会发生任何事情。

对于您提到的其他 (31) 个表,听起来您正在做更多的表替换(因此该表在插入新数据之前被截断,或者恢复过程中的数据被丢弃/忽略),这这就是为什么该过程可能与 8 个用户表不同的原因。

无论如何,要直接回答您的问题,我不知道有任何开箱即用的流程可以为您自动执行此操作。该StartupCmd=标志将是查找此标志的合乎逻辑的位置,但唯一可用的导入命令是用于 XPO(代码)文件。如果你想要一些东西来自动化这个过程,你需要创建一个新的类来扩展SysStartupCmd并调用你通常手动执行的相同函数。这并不难,但需要一些研究来确定使用的命令和参数。您可以查看SysStartupCmdAOTImport该类以了解其结构。导入过程似乎是由SysDataImport类控制的,因此请查看它以模仿用户输入或确切了解该过程的作用。

如果您正在寻找替代(自动化)流程,请考虑当我对我们的环境进行数据更新时(我们有一些环境每天更新,一些环境每月更新几次,其他的只要我们觉得需要,所有100% 自动化),我们只需运行一个 SQL 脚本,在备份恢复后更新或创建必要的记录。这些值本质上是硬编码到脚本中的,但由于它们不会改变,所以没什么大不了的。与您的相比,这种技术的缺点是,如果我们有一个用户只需要访问非生产环境,他们必须首先在生产环境中(禁用),然后脚本下次更新必要的值目标环境已更新。此外,

于 2016-01-28T13:21:18.127 回答