最新消息:ww12345678 的部落格重装上线,希望大家继续支持。

使用 GitHub Copilot 进行 AI 辅助 D365FO 开发的实用建议

网络文摘 William 2浏览 0评论

这是一篇我拖延太久的博客文章,因为每周都有新功能或更新发布,但我会尽量保持简洁和通用,以便未来也能派上用场。GitHub Copilot 已经为 D365 财务与运营(D365FO)和 X++ 开发提供了一套强大的 AI 辅助工具。当它被有效利用时,可以帮助你更快地编写代码,自动化重复性任务,并显著缓解开发体验。

撰写本文时,VS GitHub Copilot 没有内置的服务器、工具或技能,用于 D365FO Xpp 开发和 AOT 元素修改。它花费过多精力正确设置 XPP 代码和《进攻的巨人》元素,有时会导致错误的更改、异常修改、元素错位和错误。不过,它依然表现得相当不错,已经证明是个有用的工具。Microsoft正在开发官方的Copilot Xpp开发MCP服务器,据我所知,这款服务器可能很快发布。GitHub上还有几个第三方Xpp VS Copilot扩展,将显著提升当前的Copilot Xpp版本。官方微软MCP服务器发布后,我计划写一篇新的后续文章。

Github Copilot 聊天面板概览

左下角是聊天模式,你可以选择三种聊天模式:代理、询问和计划。计划模式是新加入的模式,你可以给出需求、任务或 FDD 文档,Copilot 会建议你工作执行计划。如果你批准了计划,它会将其切换到代理模式执行。询问模式是最初的聊天模式,你可以用来头脑风暴想法、提问代码、对文档做小修改,并在代码修改前进行审核和批准。代理模式是自动执行代理,使用PowerShell或Python脚本创建和修改项目内的文件,并执行任务的全自动化实现。

在聊天面板顶部,加号允许你添加文件、图片、正在运行的文档或代码中的选择,添加到你计划给出的聊天提示中。工具图标是启用或禁用副驾驶工具和技能的地方;例如,我们不需要Azure工具来进行初源开发。我预计很快会有Microsoft的Xpp开发工具:

在代理模式旁边,你可以选择副驾驶的AI模型。从第一个ChatGPT模型到最新的Claude Opus 4.8,都有AI模型。你选择的最新版本型号,执行任务的成本就越高。最新的Claude模型提供了更好的推理、研究和生成能力;然而,仅针对Xpp编程,之前的Claude Sonnet模型与最新的Opus模型之间的差异可以忽略不计。所以,在写这篇文章时,我建议你选择Claude Sonnet 4.5模型来完成你的Xpp开发任务。

让它学习你的FO最佳实践

作为第一步,我建议你上传公司的最佳实践文档,并请Copilot代理研究并保存为其记忆中的说明。对于这个任务,你可以选择最高模型,因为它有更好的研究和推理能力,然后切换到Claude Sonnet来完成你的常规任务。做法是先把你的BP文档转换成MD格式,然后复制到你的FO解决方案文件夹,最后用“添加现有项目”添加:

打开聊天的询问模式,选择>文件>选择BP文件的+图标上传你的BP文档,然后请客服学习并记忆:

它会显示几个“内存检测到”弹窗,把指令保存到内存里。如果你想为所有使用仓库的用户添加,请选择“添加到仓库的步骤”;如果你想私密使用,请选择“添加到用户说明”。它会在你正在工作的项目的 .github 文件夹里创建一个“copilot-instructions.md”文件。复制这个文件的内容,保存到你以后的项目中。以后你也可以在同一个地方创建同样的文件,然后复制粘贴:

这些说明会添加到你所有的 GitHub Copilot 提示中,作为最佳实践,应尽量简短且准确。从这个角度看,这份文件看起来可能很长,但值得添加,因为它能从长远角度减少麻烦;它将为代码生成提供捷径,并带来以公司格式创建所有内容的优势。

帮帮它解决FO文件夹结构(可选)

写作时,AI模型在FO UDE、模型和AOT文件夹结构上遇到很大困难,每次都通过检查解决方案中的其他元素来寻找元素文件夹。它还会先在项目目录里创建元素(比如dotnet),然后再把它们移到FO目录,导致git提交中出现大量不必要的待处理文件。

等 Xpp MCP 服务器可用后,我预计这个问题Microsoft解决,但在那之前,你可以通过提供 UDE 模型包和工作文件夹,以及进一步 copilot-instructions.md 的指令来帮助它添加文件夹结构,并请求在项目文件夹中创建元素:

The temp folder is: C:\Temp\
TST model is located in C:\VS\TST\TestGithubCopilot\metadata\TST\TST
First move the generated files to the temp folder and then to the right AOT subfolder of TST model

使用计划模式

在规划模式中,你可以提供完整的FDD文档或任务描述,并要求它为你制定执行计划。然而,执行此类任务的副驾驶成本过高,结果远不如意,存在各种故障、漏洞和问题。你可以通过安装我之前提到的 Xpp MCP 服务器来提升结果质量,但实现的计算成本仍然非常高。因此,我建议只有在真正需要或你有无限Copilot使用权时才使用这个功能。
测试时,手头有FDD文档,将FDD文件转换成MD文件(就像我们之前BP文档研究中做的那样),然后添加到你的解决方案中。然后请计划代理人制定执行计划:

然后它会问你澄清性的问题,直到一切清晰:

然后会向你呈现一份执行计划,包含大致描述和执行步骤:

当你点击下面的“实现计划”按钮时,它会将执行传递给代理,并开始执行计划。你可以从计划文件顶部的进度栏中跟踪执行进度:

完成后,会进行多次构建、同步和测试,然后你会得到一个完整的解决方案,但有几个漏洞和问题需要你手动🙂解决

实现完成后,别忘了点击聊天窗口顶部的“保留所有更改”图标;否则,不会对结果文件进行更改:

使用询问模式

对于头脑风暴、代码研究和较小的内联修改,最好使用“询问”模式。询问模式会检查工作文档,研究标准的 FO 类别,并在聊天窗口中给你回复,你可以审核、批准并应用到你的开放文档中。让我们看看它的使用例子。

当处理不熟悉的课程时,询问模式可以快速解释它的作用。只需将课程添加到聊天中并请求摘要即可。点击+符号,将当前文档添加到提示中:

请经纪人制作课程总结:

然后让我们让它修改或调整类内的一段代码。例如,我们把下面的select语句改成选择所有员工,而不是firstonly employee记录(这不太合理,但是为了展示聊天代理的功能……)。在编辑器中高亮代码,点击Copilot聊天中的+图标,从顶部选择“选择”。然后写下并执行你的提示:

它将生成以下结果。确认变更后,你需要点击光标上的插入或在活动文档中插入。点击这里选择“插入光标”:

然后你会看到变更的概览。你可以点击保留或撤销按钮来应用或丢弃它们:

除了代码更改,你还可以要求代理创建各种语言的 FO 标签;但在请求模式下,它们会为每种语言单独表示。要将它们应用为标签,请在编辑器中打开正确的标签语言文件,并在框中点击“在活动文档中应用”,将其添加到标签文件的末尾:

对于创建和更新多个文件,代理模式更为适用,我们现在将对此进行探讨。

使用代理模式

你已经看到了在计划模式将执行权交给代理模式后,代理模式的运行。我们使用代理模式自动实现需要生成或修改多个文件的开发任务。

我们用一个之前开发的带有硬编码标签文本的类来测试它。我们希望在本课中创建多种语言的标签,并直接应用到FO标签文件上。打开类,添加活跃文档作为引用,写好提示符并让代理执行:

执行时会多次要求确认,刚开始很烦人,但你可以选择“始终允许”跳过确认,下次会跳过:

如果你的执行时间过长且达到极限,将会要求继续。如果发生了,只需在聊天中输入“继续”即可继续:

最后,它会给你摘要和为你的提示创建的所有文件。别忘了点击这里的小“全部应用”按钮,否则你将失去这些更改:

就这样。这里我给你一些更实用且实用的示例提示,用于 D365FO 开发,你可以在代理模式下使用。祝你玩得开心!

  • 创建 SysOperation 框架可执行类模板:
Create a skeleton for an executable job using D365FO SysOperation framework with an extensible execution dialog, add full TTS transaction security inside the execution method, add infolog messages to follow class execution and errors in English and Dutch languages inside the project's label files, with description "MyTicket". Add a test mode switch to the execution dialog that skips saving the records inside execution when checked, but outputs them as infolog messages.
  • 用信息信息日志消息丰富裸服务可执行类
This is a class that creates reservations for invent transfer table records. I want you to enrich this class with infolog logging to see how the operation is progressing. Add logs when the class starts running, what the parameters are, which transfer orders are processed, skipped, and which give errors. Group the logs with a class description prefix. Create labels in project label files in both English and Dutch languages and add 'MYTICKET' as a description on every label created.
  • 将项目中所有硬编码标签转换为:
Could you create D365 Finance and Operations labels for all the hardcoded strings for the elements of this project, and update the hardcoded string parts with the created label file IDs. Create labels in Dutch, English, French, and German. Add label description to created labels as “MyProject”.
  • 为工作日创建一个EDT数组,就像工时表里一样,包含具体的日期信息:
Add a new array type of EDT with day elements like the standard Days EDT, with description "Lazy day" and with dayindex suffix to end, counting until Day7. Also, adjust the labels and help text of these array elements with their day index. Create a label for all the string text in the project label file FM in English and Dutch languages, adding "MyTicket" in their description fields.
  • 使用 SysTest 框架为已创建的功能创建功能(计划模式)创建功能测试:
Could you create functional and security automated tests for the functionality you have just created using SysTest framework

转载请注明:ww12345678 的部落格 | AX Helper » 使用 GitHub Copilot 进行 AI 辅助 D365FO 开发的实用建议

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址