在Dynamics AX中进行调试

5
我在学习过程中遇到了一些问题,所以我猜当我和专业人士一起工作时情况可能会更糟:动态环境中的警告不像VS那样精确和有用,没有鼠标提示,并且异常无法准确指出我的错误位置。 我太习惯使用Visual Studio及其智能感知和所有工具(与Visual Studio相比,动态环境是相当新的)。
除了解决简单的代码问题外,我希望学习如何解决未来可能出现的代码问题,这些问题可能不是由我编写的,或者在Visual Studio中可以在3分钟内解决的其他问题,以及在没有Visual Studio工具的情况下在动态环境中生存的技巧。
4个回答

8
在Dynamics AX中的代码编辑器具有一些智能感知功能,输入表或类变量的名称,后跟“.”或“::”将为您提供该项可用的字段或方法列表。在键入(以开始方法调用时,会弹出一个小提示,其中显示该方法上可用的参数。在开始新行时,您可以右键单击并选择“列出表格”,“列出类别”,“列出类型”等。大多数这些命令也可以通过快捷键获得。请注意,智能感知仅在方法中所有代码,在光标位置之前是语法正确时才有效。
确保在开发环境中更新了交叉引用(工具/开发工具/交叉引用/定期/更新)。使用更新后的交叉引用,您可以右键单击AOT中的任何表、字段、类、方法、扩展数据类型或枚举,并选择Add-Ins/Cross-reference/Used by,以查看该项在系统中的使用情况。
您还可以使用Tools/Development tools/Code explorer查看应用程序源代码,所有类型、变量和方法都转换为超链接,因此您可以单击以直接到达该项的定义。
另一个有用的工具是Application hierarchy tree,在Tools/Development tools下或在右键Add-Ins菜单下可用。这将显示类层次结构,因此您可以轻松地查看SalesFormLetter从FormLetter派生,而FormLetter从RunBaseBatch派生。
在编辑器中,您可以突出显示文本,右键单击以查找属性/方法或查找定义。
如果您正在尝试跟踪系统中生成特定infolog消息的位置,则有两种策略可用:
1. 在Info.add()方法的第一行设置断点。然后,当运行生成消息的代码时,您将立即进入调试器。然后可以在调试器中查看堆栈跟踪,以查看生成消息的代码所在的位置。
2. 运行Tools/Development tools/Label/Label editor并搜索消息文本。选择消息的标签ID,然后单击Used by以查看该消息在系统中的使用情况。

+1 - 当追踪错误和警告时,这是生产环境用户最常见的请求之一,上面的第一点是你可能拥有的最有用的提示。 - AnthonyBlake

4

2
这些人说的已经非常有趣和有用了。
我想补充一下,在AX中,您可能会在现实生活中使用多个上下文。例如,在客户端运行的代码、在服务器上运行的代码、在p-code和IL中运行的代码、COM集成、企业门户等等。
我的观点是,如果您想通过调试来解决某些问题,您必须首先了解要调试的代码在哪里运行。
这很重要,因为您可能需要在多个地方允许调试或授予权限。
例如:
- Windows AD调试用户(添加自己) - 允许在客户端上调试 - 在服务器上允许它 - 如果要使用MorphX,请禁用IL;否则,请在VS中附加进程。 - 允许全球网络发布服务与桌面交互以供EP使用。
最后一件事,您现在开始使用ax,也许您需要使用AX7(Dynamics 365 for Operations)进行工作。该系统版本仅与Visual Studio兼容。它仍然是x ++,但您可以获得VS提供的许多东西。

0

看一下 EditorScripts 类,在 AX 编辑器中,您可以通过右键单击并选择“脚本”来使用它。这是一种智能感知,可以自己制作,例如:每当我键入“mycom”并按“tab”时,这是我的内联注释。

public void template_flow_mycom(Editor editor)
    {
        xppSource   xppSource   = new xppSource(editor.columnNo());
        int         currentline = editor.currentLineNo();
        int         currentcol = editor.columnNo();

        Source      template = "//Partner comment "+date2str(today(),123,2,1,3,1,4, DateFlags::FormatAll )+" at "+time2str(timenow(), 1, 1)+" by MAX - Begin\n";
        template+=strRep(" ", currentcol)+ "\n";
        template+=strRep(" ", currentcol)+ "//Partner comment "+date2str(today(),123,2,1,3,1,4, DateFlags::FormatAll )+" at "+time2str(timenow(), 1, 1)+" by MAX - End\n";

        editor.insertLines(template);
        //move cursor to the empty line between the comments
        editor.gotoLine(currentline+2);
        editor.gotoCol(currentcol+4);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接