Hi Folks,
In my last post about GitHub Copilot we covered what GitHub Copilot is, how to enable
it, and the licensing options, let’s move into the part everyone actually cares
about — Practical Ways to Use GitHub Copilot for X++ Development
Copilot isn’t magic, but when used well, it feels pretty
close. Below are practical examples, prompt ideas, best practices, and a few
“don’ts” that will save you time and frustration.
1. X++ Boilerplate Generation (Your New Time Saver)
X++ is full of repetitive patterns — table methods, service
classes, form event handlers, data entities, and more. Copilot can generate
60–80% of this instantly.
Try prompts like:
- “Create
a validateWrite method for this table following best practices.”
- “Generate
a runnable class that updates sales orders with status ‘Open’.”
- “Create
a SysOperation framework class with contract, controller, and service.”
You still review and refine — but the heavy lifting is done. (I would still recommend this to do every single time)
2. Documentation & XML Comments (The Most Underrated
Feature)
Copilot is brilliant at generating XML documentation
for methods, classes, and services.
Prompt idea:
- “Add
XML documentation to this method explaining parameters and return values.”
Why it matters
- Better
readability
- Faster
onboarding for new developers
- Cleaner code reviews
3. OData & Integration Summaries
When working with integrations, Copilot can help you quickly
draft:
- OData
endpoint descriptions
- Request/response
examples
- Error-handling
notes
- API
documentation
Prompt idea:
- “Explain
how this data entity will behave when called via OData.”
This is especially useful when writing technical design documents.
4. Best Practice Suggestions on Selected Code
This is where Copilot becomes a mini code reviewer.
Highlight a block of X++ code → open Inline Chat (Alt +
/) → ask:
- “Suggest
best practices for this code.”
- “Is
there any performance issue here?”
- “Rewrite
this using recommended patterns.”
Example: Summarize Sales Order
Your example:
public void summarizeSalesOrder(str salesOrderId)
{
SalesTable
salesTable = SalesTable::find(salesOrderId);
info(strFmt("Sales Order %1 for customer %2 has total amount
%3",
salesTable.SalesId, salesTable.CustAccount, salesTable.TotalAmount));
}
Copilot might suggest:
- Add
null checks
- Use ttsbegin/ttscommit
if modifying data
- Avoid
info() in production code
- Consider
using SalesTotals class for accurate totals
This is where Copilot shines — it nudges you toward better patterns.
5. Plugin Development with Copilot Studio
If you’re building Copilot plugins for D365FO,
Copilot can help with:
- API
schema generation
- JSON
payload examples
- C#
wrapper classes
- Error-handling
templates
This is still evolving, but it’s already a huge productivity boost.
6. Hidden Gems Most Developers Miss
- Use #filename to give Copilot context
Example:
#SalesTable Explain how validateWrite works for this table.
- ü Use /intent to guide Copilot
Example:
/refactor Rewrite this method to improve readability.
- ü Keep related files open
Copilot reads open tabs to understand your project
structure.
- ü Use natural language
You don’t need to be formal.
“Make this faster” works surprisingly well.
7. What NOT to Do with Copilot (Important!)
Copilot is powerful, but not perfect. Avoid:
❌ Blindly accepting code
Always review for:
- Security
issues
- Performance
problems
- Deprecated
APIs
❌ Using Copilot for business
logic decisions
Copilot doesn’t know your customer’s requirements.
❌ Expecting Copilot to understand
custom frameworks
It learns from your codebase over time — but not instantly.
❌ Using vague prompts
“Fix this” → not helpful
“Optimize this query to reduce DB calls” → much better
While all this working magically, GitHub Copilot won’t replace your X++ expertise — but it will absolutely amplify it. So don't afraid of using it, make this your companion. The more you use it, the better it understands your patterns, naming conventions, and coding style.
No comments:
Post a Comment
Thanks