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

Part 4 – Getting data; Can you SELECT() something faster?

What does adding a Select() do? One ability that OData offers is the ability to reduce the result set for the request using a Select() command. This can reduce the number of columns in a result set from 100 to just 5. This can be used to provide only required data for a given request. However, does this really work as expected from a performance perspective? So far we have focused on SQL and… Continue Reading Nathan...

Read More

Part 3 – Getting Data, Faster

Now that we can get data, let’s look at getting data faster. Out of the box Finance and Operations delivers thousands of entities many of which are enabled for OData consumption. These are good for standard integrations but can be slow depending on what it is you are trying to do. Also, most of these entities are non-specialized. That is to say they handle all CRUD operations. But, can… Continue Reading Nathan...

Read More
VS2019, Finance & Operations plus D365FO.Tools
Nov03

VS2019, Finance & Operations plus D365FO.Tools

Submitted by Nathan Clouse on 11/03/20. Tags:  Visual Studio VS2019 Want to develop in VS2019 for F&O? Let’s take a look! We’re going to take a look at using the Dynamics 365 extension in VS2019 and just see what happens. This is an update to Adria Ariste’s article on this subject. We’ll be leaning on that article a… Continue Reading Nathan Clouse’s Article on their blog VS2019, Finance...

Read More
D365FO.Tools and VS2017: Manhattan Project
Nov02

D365FO.Tools and VS2017: Manhattan Project

Submitted by Nathan Clouse on 11/02/20. Have you heard of D365FO.Tools? Let’s take another look. Let’s Rock We talked about this for VS2015 here. But now, things have changed. First, install D365FO.Tools.  Next, install Powershell Tools for Visual Studio. You can do this easily by going to Tools > Extensions and Updates in Visual studio. Select “Online” then search for powershell…. Continue Reading...

Read More

Part 2 – Getting Data, The Basics

In Part 1 we talked through getting connected. Now, let’s try to read some data. We’ll discuss how to get a records and a record as well as how to query in C#. It’s similar to X++ but want to make sure we have a good foundation for when we move onto more advanced stuff. We’ll also examine how some OOTB entities are built and what that means for a standard integration scenario with no custom… Continue...

Read More

Part 1 – Getting Connected with VS2017 and Connected Services

Now that we can use Visual Studio 2017 for F&O development, we have a newer and better way to generate OData clients. First, we’ll cover what it takes to get everything setup. I typically use VS2019 for C# development so we’ll be using that for most of this. Create a new C# project Name it and click create Grab the “AuthenticationUtility” From 

Read More

The OData Experiment – Deep Dive into OData and How To Use It

This will be a collection of entries on Data Entities, OData and how to use entities for integration purposes. This is the hub page for all parts of this experiment. Continue Reading Nathan Clouse’s Article on their blog The OData Experiment – Deep Dive into OData and How To Use It This will be a collection of entries on Data Entities, OData and how to use entities for integration purposes. This is the hub page for all...

Read More
Tier 1 Microsoft managed VMs will be removed, Extended
Oct12

Tier 1 Microsoft managed VMs will be removed, Extended

Submitted by Nathan Clouse on 10/12/20. Microsoft will begin removing RDP from Tier 1 environments and the environments soon after that. Adrià Ariste has a great post on this topic that you should read before continuing but I wanted to cover a few other scenarios along with some resources. We’ll skip the preamble and just assume that Microsoft Managed T1 environments are basically gone… Continue Reading Nathan...

Read More
Full Database Cleanup Routine, Part 3
Jul22

Full Database Cleanup Routine, Part 3

Submitted by Nathan Clouse on 07/21/20. In part 2, we talk how to collect some data and shrink our database. Here are the results. After part 2, here are the numbers, with charts, to show how different areas of the system were affected. As a refresher, here are the companies we will be looking at: AAA – All buy, make, sell, and retail sale operations in one legal entity with WMS… Continue Reading Nathan Clouse’s...

Read More
Full Database Cleanup Routine, Part 2
Jul20

Full Database Cleanup Routine, Part 2

Submitted by Nathan Clouse on 07/19/20. In part 1, we talk about the process of cleaning. Now we’re going to do it. In part 1 of this series, we talk about how to clean up your database. Now, we’re going to run that process and record the changes as they occur and evaluate what those changes mean. We’ll still be sticking with weight lifting puns here and there.  What We’ll Be Measuring… Continue Reading...

Read More
Staging and Git
Jun29

Staging and Git

Submitted by Nathan Clouse on 06/29/20. Tags:  Git ALM A simple gotcha when woring with Git Evaldas Landauskas asked a question on some missing code when using Git so I thought I’d walk through a common “gotcha” when using Git, if you’ve not had this issue before. First, we’re going to start with this repo: 

Read More
Refresher On Database Upgrade Scripts for D365 F&O
Jun05

Refresher On Database Upgrade Scripts for D365 F&O

Submitted by Nathan Clouse on 06/04/20. Tags:  Upgrade Database Sample database upgrade scripts with use cases. Database upgrade scripts from AX 2012 to D365 F&O have changed a little when you compare them to AX 2009 to AX 2012 upgrade scripts. We’re going to cover a few use cases and script samples for how to perform… Continue Reading Nathan Clouse’s Article on their blog Refresher On Database Upgrade...

Read More
Moving from TFVC to Git in AZDO
Jun03

Moving from TFVC to Git in AZDO

Submitted by Nathan Clouse on 06/02/20. Tags:  TFVC TFS Git Moving from TFVC to GIT in Azure DevOps is easy! I have some TFVC code repo in Azure DevOps that I would like to move to use Git. We’re going to walk through the process of moving code from TFVC to Git on a single dev machine.  First,… Continue Reading Nathan Clouse’s Article on their blog Moving from TFVC to Git in AZDO Moving from TFVC to GIT in Azure...

Read More