Part 4 – GitHub
Apr07

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
Apr07

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 3 – Developing with VS 2019 / 2022
Apr07

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 2 – Lifecycle of a Branch
Apr04

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
Apr03

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
Apr01

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)
Mar22

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
Feb07

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
Jan01

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
Dec01

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
Jul17

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
Jul12

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
Jun21

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
Jun21

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
Jun07

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
Jun07

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
Apr19

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()?
Mar01

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
Jan04

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
Dec28

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()
Dec28

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
Dec14

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
Dec14

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?
Nov23

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
Nov04

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
Nov02

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
Oct26

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
Oct26

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
Full Database Cleanup Routine, Part 1
May13

Full Database Cleanup Routine, Part 1

Submitted by Nathan Clouse on 05/12/20. Over time your database size can grow quite large, depending on you use AX / Finance and Operations. Let’s talk about trimming down. Some of you may not know that I enjoy weight lifting in my spare time. I’m not especially good at it but its still a hobby I enjoy. I thought it would be fun to talk about our AX / F&O databases like they are a body… Continue Reading Nathan...

Read More
Batch Job History Clean up
Apr28

Batch Job History Clean up

Submitted by Nathan Clouse on 04/27/20. Clean up after your batch jobs! There is now standard functionality in Dynamics 365 for Finance and Supply Chain to clean up Batch Job History entries created from batch jobs. In AX 2012, you had to write something custom to handle this. There are two different jobs available to help clean up your Batch History table. To see your Batch Job history,… Continue Reading Nathan Clouse’s...

Read More
Notification Cleanup
Apr28

Notification Cleanup

Submitted by Nathan Clouse on 04/27/20. Clean up your Event Alerts / System Notifications. AX 2012 and Dynamics 365 for Finance and Supply Chain allows you to create alert rules for lots of different actions in the system. This could be for if a new customer is created, a sales order status advances to invoiced or some field is set to a specific value. These create records for end users… Continue Reading Nathan Clouse’s...

Read More
Work User Session Log Cleanup
Mar03

Work User Session Log Cleanup

Submitted by Nathan Clouse on 03/02/20. Clean up your warehouse user session log!   Just like Work Creation history purge and Containerization history purge, your warehouse user session log needs to be cleaned up every once and a while for the same reasons.  AX 2012 In Warehouse Management > Periodic > Cleanup, look for work user session log cleanup. This will ask you to number of… Continue Reading Nathan Clouse’s...

Read More
Mobile Device Activity Log Cleanup
Mar03

Mobile Device Activity Log Cleanup

Submitted by Nathan Clouse on 03/02/20. Clean up the mobile device activity log!   The Mobile device activity log (WHSMobileDeviceActivityLog) table contains a log of activity for mobile devices like production order start operations, driver check ins and outs, and removing LPs. There is functionality to clean up entries in this table. AX 2012 In Warehouse Management > Periodic >… Continue Reading Nathan Clouse’s...

Read More
Create LCS Hosted Build VM
Dec03

Create LCS Hosted Build VM

Create LCS Hosted Build VM 12/02/19 ALM Build Let’s walk through creating a standard Build VM Before we can get started, we must have the following complete: Create a generic servicing account for environment creation like DynamicsServicing@Contoso.com Add the generic servicing account to Azure DevOps (AZDO) Generate a… Continue Reading Nathan Clouse’s Article on their blog Create LCS Hosted Build VM Let’s walk...

Read More
Create Cloud Hosted Build VM
Dec02

Create Cloud Hosted Build VM

Create Cloud Hosted Build VM 12/01/19 Need an extra build box? Look no further for how to set that up. If you need an extra build box, those are easy to setup as a cloud-hosted VM. To get started, you’ll need to have performed the following: Create a generic servicing account for environment creation like DynamicsServicing@Contoso.com Add the generic servicing account to Azure DevOps… Continue Reading Nathan Clouse’s...

Read More
Warehouse Dimension Link Setup Overview
Jul25

Warehouse Dimension Link Setup Overview

Learn more about this community mod that allows you to create a warehouse financial dimension, associate it with an inventory warehouse and have the financial dimension from the inventory warehouse default onto all transactions using that warehouse.   You can get the code, a model or deployable package here: https://github.com/NathanClouseAX/AAXWarehouseDimensionLink Submitted by Nathan… Continue Reading Nathan Clouse’s...

Read More
Developer Managed Azure VMs To Save Money
Oct27

Developer Managed Azure VMs To Save Money

Developer Managed Azure VMs To Save Money10/27/18 VM Can developers manage their VM uptime and save some money? Yes! Similar to OMS, each VM in Azure has an option to add a shutdown time. This is especially helpful for developer VMs. The schedule for this is set at each VM so if you have developers in different time zones, you can manage that… Continue Reading Nathan Clouse’s Article on their...

Read More