Does Specifying Columns in Select Statements Matter?
Mar17

Does Specifying Columns in Select Statements Matter?

Submitted by Nathan Clouse on 03/16/24. Last modified: 03/17/24 Tags:  performance Lets find out if specifying columns in our SELECT statements has any performance impact. The Setup In order to test if specifying column names in a select matter, we’ll have to select several records from the same table where we have not selected that specific… Continue Reading Nathan Clouse’s Article on their blog Does...

Read More
Copilot for F&O is here in Preview
Mar16

Copilot for F&O is here in Preview

Submitted by Nathan Clouse on 03/16/24. Last modified: 03/16/24 Tags:  AI Copilot Copilot is here for F&O. Let’s check it out. I setup Copilot for F&O just to see what it can do. Below is a set of interactions. I thought I’d start with a simple question and ask how to switch legal entities that I’m transaction in. I was… Continue Reading Nathan Clouse’s Article on their blog Copilot for...

Read More
Using Git in PackagesLocalDirectory – VS 2022 Edition
Feb25

Using Git in PackagesLocalDirectory – VS 2022 Edition

Submitted by Nathan Clouse on 02/25/24. Last modified: 02/25/24 Using Git in PackagesLocalDirectory – VS 2022 Edition This article is an update of this post to show how to use Git in PackagesLocalDirectory when using Visual Studio 2022. Open VS 2022. Open the Git Changes Tab then click on Clone Repository Click on Azure DevOps Select your repo from the available projects, review… Continue Reading Nathan Clouse’s...

Read More
Using Git in PackagesLocalDirectory – VS 2019 Edition
Feb25

Using Git in PackagesLocalDirectory – VS 2019 Edition

Submitted by Nathan Clouse on 02/25/24. Last modified: 02/25/24 Using Git in PackagesLocalDirectory – VS 2019 Edition This article is an update of this post to show how to use Git in PackagesLocalDirectory when using Visual Studio 2019. Open VS 2019. Open the Team Explorer tab then click on “connect” for Azure DevOps. Connect to your Azure DevOps Project Next, Clone the...

Read More

Database Inserts – Primary Table

Does the process of inserting data with Code matter for performance by table? When inserting data in F&O, there are several best practices on how to do this from MSFT. But when inserting data, do those best practices really matter? Can I code up a solution that is less than ideal and still have a workable solution? Let’s find out. This will only look at Azure hosted VM performance for the… Continue Reading Nathan...

Read More

Database Inserts – Transaction Table

Does the process of inserting data with Code matter for performance? When inserting data in F&O, there are several best practices on how to do this from MSFT. But for this specific type of workload, do those best practices really matter? Can I code up a solution that is less than ideal and still have a workable solution? Let’s find out. This will only look at Azure hosted VM performance for… Continue Reading Nathan...

Read More

Database Inserts – Code Data Entity

Does the process of inserting data with Code matter for performance? When inserting data in F&O, there are several best practices on how to do this from MSFT. But for this specific type of workload, do those best practices really matter? Can I code up a solution that is less than ideal and still have a workable solution? Let’s find out. This will only look at Azure hosted VM performance for… Continue Reading Nathan...

Read More
Using an AI Assistant to Provide Dynamic Help
Jan27

Using an AI Assistant to Provide Dynamic Help

Submitted by Nathan Clouse on 01/27/24. Last modified: 01/28/24 Is it possible to train an AI to offer intelligent assistance in your Dynamics 365 F&O instance? In a previous article, I showed how you could use AI to provide dynamic help to your users. This example simply allowed for a user to ask a ChatGPT generic model how to perform a task in Dynamics 365 for Finance and Operations…. Continue Reading Nathan...

Read More
Using AI To Provide Help For Users
Jan14

Using AI To Provide Help For Users

Submitted by Nathan Clouse on 01/14/24. Last modified: 01/14/24 Tags:  AI Help Using ChatGPT to improve the help experience for your end users This article is about using ChatGPT to help provide contextual help to an end user of Finance and Operations. This is simply an example of how to do it with some extra features… Continue Reading Nathan Clouse’s Article on their blog Using AI To Provide Help For Users Using...

Read More
Loop-de-for-loop and Transaction Review
Nov30

Loop-de-for-loop and Transaction Review

Submitted by Nathan Clouse on 11/29/23. Last modified: 11/30/23 Tags:  AI Insert For What’s in a For Loop? In this article, we’ll delve into a specifics of using a For loop, inserting data into the database, and use of transaction plus some error handling too. for(int i = 0; i <=… Continue Reading Nathan Clouse’s Article on their blog Loop-de-for-loop and Transaction Review What’s in a For...

Read More
Using ATL with Local Telemetry
Nov19

Using ATL with Local Telemetry

Submitted by Nathan Clouse on 11/19/23. Last modified: 11/19/23 Let’s collect some telemetry when using ATL in batch. Following on up this article, I thought it would be interesting to collect some telemetry on what happens when we use ATL to create a bunch of activity. First, let’s review what we were doing with ATL in the referenced article: Create a Sales Order with 1 line Adjust in… Continue Reading Nathan...

Read More
Database Inserts and Performance
Nov12

Database Inserts and Performance

Submitted by Nathan Clouse on 11/11/23. Last modified: 11/11/23 Tags:  performance Insert Preamble There are several different ways to create records using X++. First, the most common will be to use a record buffer. By far and away the most common but we’re in how we’re inserting data in X++. I’d list the ways of… Continue Reading Nathan Clouse’s Article on their blog Database Inserts and...

Read More

Database Inserts – Code Table

Does the process of inserting data with Code matter for performance? When inserting data in F&O, there are several best practices on how to do this from MSFT. But for this specific type of workload, do those best practices really matter? Can I code up a solution that is less than ideal and still have a workable solution? Let’s find out. This will only look at Azure hosted VM performance for… Continue Reading Nathan...

Read More
Create a Database Export Request using a DevOps Pipeline
Apr18

Create a Database Export Request using a DevOps Pipeline

Submitted by Nathan Clouse on 04/17/23. Last modified: 04/17/23 Need to Export a database for safe keeping? MSFT has had database movement APIs for some time but I haven’t seen a lot of use of them. I thought I’d provide a simple Power Shell script to show what can be done. You can make this more user friendly or modern by putting it in Power Automate or using a Logic App. For reference,… Continue Reading Nathan...

Read More
Using Git in PackagesLocalDirectory
Feb24

Using Git in PackagesLocalDirectory

Submitted by Nathan Clouse on 02/23/23. Tags:  Git Source Control How to use Git with PackagesLocalDirectory Git is a more modern source control system that has a lot of interest from Finance and Operations technical resources. There are a lot of potential benefits to use Git rather than TFVC. However, one of the… Continue Reading Nathan Clouse’s Article on their blog Using Git in PackagesLocalDirectory How to use Git...

Read More
How to Create an Azure Queue Endpoint in F&O
Feb24

How to Create an Azure Queue Endpoint in F&O

Submitted by Nathan Clouse on 02/23/23. How to Create an Azure Queue Endpoint in F&O This is a simple, straight forward How-To to create an Azure Service Bus Queue endpoint in Finance and Operations. In order to do this, you’ll have to have completed the following steps and collected the required data points. Queue Name / Data Point 5: 

Read More
How to create an Azure Key Vault for F&O
Feb24

How to create an Azure Key Vault for F&O

Submitted by Nathan Clouse on 02/23/23. How to create an Azure Key Vault for F&O This is a simple, straight forward How-To to create an Azure Key Vault that can be used by Finance and Operations. At the end, you’ll have an Azure Key Vault DNS URI name and a secret name (data points 7 and [4 or 9] referenced in other articles). Creating the secret names are explained in the article for… Continue Reading Nathan...

Read More

How to Create an Azure Service Bus Queue

Submitted by Nathan Clouse on 01/26/23. How to Create an Azure Service Bus Queue This is a simple, straight forward How-To to create an application registration that can be used by Finance and Operations. At the end, you’ll have an Service Bus Host name, a queue name as well as a primary connection string (data points 6, 5, and 3 referenced in other articles). Creating a Service… Continue Reading Nathan Clouse’s...

Read More

How to Create an App Registration for F&O

Submitted by Nathan Clouse on 01/26/23. How to Create an App Registration for F&O   This is a simple, straight forward How-To to create an application registration that can be used by Finance and Operations. At the end, you’ll have an application ID as well as a secret value (data points 1 and 2 referenced in other articles). First, go to https://portal.azure.com. Next, search for app… Continue Reading Nathan...

Read More
Boosting Customer Hosted Environment (CHE) Performance
Dec12

Boosting Customer Hosted Environment (CHE) Performance

Submitted by Nathan Clouse on 12/12/22. Tags:  performance VM Visual Studio Let’s examine how to get the most out of Azure spend for Tier 1 machines. A while ago Denis Trunin wrote an article on Visual Studio performance for F&O. I thought it was a well written and researched article…. Continue Reading Nathan Clouse’s Article on their blog Boosting Customer Hosted Environment (CHE) Performance Let’s...

Read More
Re-enable Users after Database Refresh
Nov10

Re-enable Users after Database Refresh

Submitted by Nathan Clouse on 11/09/22. Enabling Users after a database refresh is a pain. Let’s automate that away. Re-enabling users in UAT after a data refresh from PROD can be annoying, especially if  you have to be granted access to the environment administrator’s account. Let’s work through one way of creating a pipeline in Azure DevOps to re-enable a list of users using D365.FO… Continue Reading Nathan...

Read More

How to Use A Build Pipeline To Request A Database Backup

Submitted by Nathan Clouse on 10/23/22. Tags:  Powershell D365FO.Tools   PowerShell in a pipeline to request a database backup. PowerShell is a powerful scripting language that can be used to automate a wide variety of tasks, including interacting with Azure DevOps pipelines. One common use case for PowerShell in an… Continue Reading Nathan Clouse’s Article on their blog How to Use A Build Pipeline To Request A...

Read More

Part 4 – GitHub

Can you use Git Hub? yes. GitHub is also an option you could pursue when moving to Git. GitHub has a lot of new features and offerings that Azure DevOps does not have. However, there is basically no documentation from MSFT on how to configure builds and various other automation options in GitHub. I’m sure it’s possible but there will be a fair amount of guess work. Getting your pipelines fully… Continue Reading...

Read More

Part 3 – Developing with VS 2019 / 2022

What’s it like developing using Git? Developing in VS with Git is easy but I wanted to call out a few changes. First, you don’t need to manually add items to your repo. Your repo will have a .gitingore file that says what can be committed – and what can’t. If your .gitIgnore file doesn’t specifically ignore it, it will automatically be added. Also, your project folder will need to be in the…...

Read More

Part 3 – Developing with VS 2019

What’s it like developing using Git? Developing in VS with Git is easy but I wanted to call out a few changes. First, you don’t need to manually add items to your repo. Your repo will have a .gitingore file that says what can be committed – and what can’t. If your .gitIgnore file doesn’t specifically ignore it, it will automatically be added. Also, your project folder will need to be in the…...

Read More

Part 2 – Lifecycle of a Branch

Let’s take a look at the lifecyle of a Git Branch. Unlike TFVC, branches in Git are typically short lived when it comes to development. In TFVC you may have a branch for each developer or a branch for development in general, another for test then a release branch. In Git, we will be using branches differently. We’ll get a change request as a work item in DevOps, review it, create a branch,… Continue Reading Nathan...

Read More

Part 1 – Package Management

How Shoud I Manage Packages in Git? There are 2 options when looking at Git for managing your X++ code. The main driver for which option you select is if you will only ever have 1 package in your code base or more than 1. This include any ISVs or any other item that will have a code footprint anywhere in F&O. To learn more about packages, please see 

Read More
Using Git with 1 Package
Apr01

Using Git with 1 Package

Submitted by Nathan Clouse on 04/01/22. Using Git with 1 Package When using Git for F&O, there are 2 basic flavors of using it; with 1 package or more than 1 package. This post will cover how to setup Git for use with 1 package. To learn out to create a Git repo in Azure DevOps, please refer to MSFT documentation. To learn how to create a repo on Github, please refer to GitHub… Continue Reading Nathan Clouse’s Article...

Read More

GIT ALM Field Guide

Using Git rather than TFVC, a field guide. This collection of works will help you with moving from using TFVC to using Git for your x++ development. This page will have several chapters linked as they are published. However, how do you know which is the best fit for you, your team, your organization or your project? Let’s take an inventory. You If you’re reading this, I assume you’re… Continue Reading Nathan...

Read More
Using Git with More than 1 Package
Mar26

Using Git with More than 1 Package

Submitted by Nathan Clouse on 03/25/22. Tags:  Git Source Control Want to use Git with more than 1 Package? Let’s review. The process to get Git working with F&O can be a little involved and it may not make sense the first time. The issue we’re presented with is that Git assumes you are starting with nothing – a… Continue Reading Nathan Clouse’s Article on their blog Using Git with More than 1...

Read More

Part 5 – Pull Requests (PRs)

what is a pull request? how do they work? what do they signify? Create a Pull Request (PR) The code is done but not the work. The developer still has to singal that his work is complete. We’ll want to create a Pull Request or PR for short. There are 2 ways to do this. The first is in VS, which will just redirect you to Azure DevOps. The second is Azure DevOps. In VS, it can be found here: In… Continue Reading Nathan...

Read More
Select FirstOnly vs Select FirstOnly ForceSelectOrder ForceNestedLoop
Mar16

Select FirstOnly vs Select FirstOnly ForceSelectOrder ForceNestedLoop

Submitted by Nathan Clouse on 03/15/22. Tags:  forceselectorder forcenestedloop Let’s explore what keywords forceSelectOrder and ForceNestedLoop do. Introduction The database access layer in X++ largely conceals it magic from us as developers and we hope it gets the SQL right – and it does. SQL is largely 99.9%… Continue Reading Nathan Clouse’s Article on their blog Select FirstOnly vs Select FirstOnly...

Read More
Using ATL to Create Data to Model Data Volume Testing
Feb09

Using ATL to Create Data to Model Data Volume Testing

Submitted by Nathan Clouse on 02/08/22. What can we do with ATL to create some transactions? Let’s take a look. After this post, I wanted to manufacture some data to better show that adding computed fields adds overhead for every operation within a data entity. That post somewhat showed it but I wanted something more cut and dry. I thought a good way to manufacture data in a Contoso… Continue Reading Nathan Clouse’s...

Read More

Part 17 – Over Using Computed Fields

What happens when you add lots of computed fields to a data entity? Let’s take a look In part 16, we talked about using computed columns. Next, let’s take this to next logical conclusion – using them way too much. We’re going to compare 4 different scenarios from a performance perspective when working with customers. We’ll have the following data entities: CustCustomerV2Entity – we’ll...

Read More

test

test Module:  3rd Party Solution Enabled By Default: On By Default Continue Reading Nathan Clouse’s Article on their blog test test Blog Syndicated with Nathan Clouse’s...

Read More

Part 18 – Order Of Operations for Data Entities

Let’s explore the order of operations when using a data entity. When creating a solution that may use a data entity, OData or not, it may be helpful to understand the precise order of operations for what gets called when in the call stack. Also, when extending OOTB data entities, what changes you are going to make may have changes to the overall performance of the data entity depending on… Continue Reading Nathan...

Read More

Part 16 – Action Methods and Computed Columns

What are the differences between an Action Method and a Computed Column? Let’s take a look. Data entities have a few options for getting data to present in a specific way. One way is to use a virtual field with postLoad(). However, we can also use computed column as well as action methods. Both have their results exposed via OData but computed columns also present in the DMF when exporting… Continue Reading Nathan...

Read More

Part 15 – 429s, Throttling and How to Manage It

What is Throttling, a 429 Status code, how do we handle them, and create safe patterns for using OData Entities? Throttling, in a general sense, is something acting upon another actor to actively hinder a process or request. Dynamics 365 For Finance and Operations recently added Priority-based Throttling. In the past, when hitting an OData endpoint, we only had to worry about non-affirmative… Continue Reading Nathan...

Read More

Part 13 – Update Performance for Simple Entities

What can we learn about update performance from simple entities? Similar to how we tested insert performance for simple entities, we’re going to run similar tests to see what kind of performance we can expect with an update workload for a “simple” entity. The Tests To draw out values and differences, we’ll be testing with 2 basic test types: “Minimum” and “Maximum”, just like we have in...

Read More

Part 12 – Update Performance for Complicated Entities

What can we learn about update performance from complicated entities? Similar to how we tested insert performance for complicated entities, we’re going to run similar tests to see what kind of performance we can expect with an update workload. The Tests To draw out values and differences, we’ll be testing with 2 basic test types: “Minimum” and “Maximum”, just like we have in the past. What…...

Read More

Part 11 – Insert Performance for "Simple" Entities

What can we learn about insert performance from complicated entities? Simlar to our last entry, what makes a data entity “simple”? Let’s re-run the same tests from Insert Performance For Complicated Entities but with a simple entity. I would define a simple entity as an entity that has 1 or 2 tables, can perform it’s tasks with a small amount of code, and is build to be light weight for a… Continue...

Read More

Part 10 – Insert Performance for Complicated Entities

What can we learn about insert performance from complicated entities? What makes a data entity complicated? What makes a data entity slow? Let’s take a look at data entity performance when inserting records and see what we can learn. First, let’s define a “complicated” entity. I would classify a complicated entity has having lots of data sources ( 5 or more ), having lots of code related to it… Continue...

Read More

Part 14 – Delete Performance

What can we learn about delete performance when using multiple types of entities? When working with OData, performing a delete is more than likely the operation that is performed the least, at least inside Finance and Operations. However, there may be a few tricks we can use to make the operation as fast as possible so we don’t waste resources. First, we simply want simply identify the thing… Continue Reading Nathan...

Read More

Part 9.5 – What About PostLoad()?

What is PostLoad and how can we use it on Data Entities? PostLoad is a kernel method that is executed when any record is loaded in Finance and Operations plus other versions of the product like AX 2012 and AX 2009. This can be used on tables, views, data entities and even maps. However, we’re going to focus on data entities for this article. PostLoad() is used to add values on unmapped fields… Continue Reading Nathan...

Read More

Part 7 – Fetching Data and Multithreading

Can you use more than 1 thread to get data via OData? What happens when you do? We’ll take a look at how to use more than 1 thread to get data from Finance and Operations via OData. First, you should keep 1 thread for each interaction, as a general statement. There are several scenarios in which you can use OData but when you have to start manipulating a large amount of records or data, some… Continue Reading Nathan...

Read More

Part 9 – Pagination with Skip and Take vs Continuation

What are pages and how do we handle them? When working with more than 10,000 records in an OData result, F&O will automatically split that chunk of records into a page. When we have more than 1 page in our result set, we have to find a way to loop though those pages. We have records stored in (up to) 10k pages with as many pages as is required for a query. However, if you’re needing to… Continue Reading Nathan...

Read More

Part 8 – Reading with Expand()

Is using Expand() on an entity faster or better? Let’s take a closer look at Expand(). We’ll talk about what it is, how to use it, some of its drawbacks as well as some performance numbers for various scenarios when using it. What Is Expand()? Expand() offers functionality for querying an additional, related data entity on an entity. When using OData Connected Services to create your OData… Continue Reading Nathan...

Read More
What do Lando Calrissian and Finance and Operations Have In Common?
Dec16

What do Lando Calrissian and Finance and Operations Have In Common?

Submitted by Nathan Clouse on 12/15/20. Let’s look at Finance and Operations from the cloud city. I got a question about how one would describe Finance and Operations to someone that isn’t technical but has a basic understand of some IT terminology and I thought that would be a fun excursion to discuss let’s dig in. Cloud First Microsoft Dynamics 365 for Finance and Operations is a cloud… Continue Reading...

Read More

Part 6 – Fetching Data with an Order By

What does using OrderBy() with OData do to performance? When querying OData endpoints for data, it may be required to arrange the result that you are getting from Finance and Operations. But what is the best way to do that and what are the performance implications? Let’s take a look. To review the code for this, please see https://github.com/NathanClouseAX/AAXDataEntityPerfTest. This article… Continue Reading Nathan...

Read More

Part 5 – Getting Data and Indexes

Do Indexes matter when getting data via OData? We’re going to review what kind of performance we get when trying to fetch data from an OData entity. What I wanted to find out with this article was to what degree indexing on a table mattered for OData. For a read workload, all data entities are presented in the database by a view that is not schema bound. So, indexing always matter but to what… Continue Reading Nathan...

Read More