When we have a close look at the InventDim table, the fields can be split up in 3 groups. These 3 groups are already represented in the existing field groups.
As you can see there are also Russian localization field in it, those can be turned off with the configuration key “Invent tracking dimensions – GTD, inventory profile, owner.”
So now how doe we add new tracking dimensions? There is a good documentation Add new inventory dimensions through extension – Finance & Operations | Dynamics 365 | Microsoft Docs
On the end there is an explanation how to add the predefined field to the product dimensions.
It is a good article with also an example code, but it will not work incase you want only a tracking dimension. To get that job don I investigated the tracking dimension Batch. The key trick for your new tracking dimension is to create a new extension of the InventTrackingDimension Class. Below picture shows the current extensions.
Lets do it
The next step is creating table extensions on the next 2 tables:
- Add the InventDimension1 to the field group Tracking Dimension.
- Create a new relation from the InventDimension1 to your new lookup table.(Below example the table name is XXTable)
- InventDimParm (Display settings)
- Add the InventDimension1Flag to the field group Tracking Dimension.
- Create and EDT extension for the correct labels on:
So those where the easy steps. Now we start coding. The next step is creating an (COD)extension on the next 3 tables:
final class InventDimXXDim1_Extension
public DlvTermId parmInventFlavorId(DlvTermId _XXTable = this.getValueForDimension(classStr(XXInventTrackingDimensionDim1)))
public static FieldID fieldIdFlavor()
final class InventDimParmXXDim1_Extension
public NoYes parmInventFlavorFlag(NoYes _flavorFlag = this.getValueForDimension(classStr(XXInventTrackingDimensionDim1)))
public static FieldID fieldIdFlavor()
public final class InventDimFieldBindingXXDim1_Extension
protected static FieldName className2FieldName(ClassName _className)
var fieldName = next className2FieldName(_className);
if (_className == classStr(XXInventTrackingDimensionDim1))
return fieldStr(InventDim, InventDimension1);
And finally, the new extended class from InventTrackingDimension
|final class XXInventTrackingDimensionDim1 extends InventTrackingDimension|
public IndexId indexHintForTable(TableId _tableId)
return IndexNum(InventDim, InventDimension1Idx);
public static XXInventTrackingDimensionDim1 getInstance()
return InventDimension::singletonFromInventDimFieldId(fieldNum(InventDim, InventDimension1)) as XXInventTrackingDimensionDim1;
public boolean isAffectingPrice()
///Override next lines incase behavior should change
public boolean checkExistsValueForItem(InventTable _inventTable, anytype _value)
public boolean isSelective()
public boolean isTransferReceiptMergeable()
public boolean isTransferTransitReceiptMergeable()
The whole solution would look like something like this.
And of course, do not forget to turn on the configuration key for InventDimension1, testing would be impossible with out 😉. The next screen dumps show the look and feel. As you also see the Owner field is still there, I guess MS has forgotten to add a configuration key to it….
It is a general complain of any developer. Why is it so SLOOOWWWWW? And yes, it is slow. But there are performance tuning tricks. Slow is influence on 3 things
- Startup VM
- Is also startup of
- Management reporter
- Windows security
- Windows update
- Windows maintenance
- There is no SQL maintenance
- Is also startup of
You could disable the batches & management reporter. That will help. But the real issue is how the disks of that VM are configured. In general, it looks like below 16 lazy disks.
Now you can change these to faster disks , but please be aware of the prices. Also, these are managed disk, the cost fixed amount every month, so stopping the VM will not reduce below cost.
|Size||Premium SSD||Standard SSD||Standard HDD|
How does the disk migration work? The first step is migration to managed disks
Managed Disks simplify disk management for VMs by managing the Storage accounts behind the scenes. Managed Disks also provide granular access control with RBAC and better reliability for VMs in an Availability Set. Learn more about the benefits of using Managed Disks
Source unmanaged disks are not deleted after the migration. Managed Disks are created by making a copy of the source disks. You can revert back to unmanaged disks by creating a new VM with the source disks. Configuration of the VMs is not changed after the migration. Learn more about migrating to Managed Disks
In order to complete migration, we will need to start the virtual machine. Once migration is complete, you may stop the virtual machine.
Next you can change all the discs
But hold on 16 disks multiplied with 18.29 makes 292 euro on top of running the VM. This is very expensive in the relation to how you use it. So next step:
- Archive your code & database.
- Delete the VM
- Deploy a new one
And of course, do not forget to setup the auto shutdown and the azure software reductions
In this post, I will continue explaining the examples created with eXtensible Data Security. In this part, I will explain how I did think of a solution for restricting warehouse access for users. There were a lot of questions on forums in the past about how to secure this. So, for a presentation on the Summit EMEA in Dublin this year, I decided to step into the challenges that comes with securing access to warehouses and related tables like inventory journals or purchase orders. I created a demo which will be covered in this part of the XDS blog series. In addition, this is a good example how to deal with different assignment of groupings per user without creating a policy per group or user.
In my last blog, I shared some code examples for eXtensible Data Security (XDS). In this post, I will explain how it works and also introduce a V2 version which will be more advanced in determine which legal entities will be visible for the user.
The last few months, I did spend a lot of time on speaker sessions for the Summit EMEA, MVP Monday webcast and a coming Dutch Dynamics Community event. In the meantime, it was also extremely busy completing work. One of the topics I talked about recently, is eXtensible Data Security (XDS) in Microsoft Dynamics 365 for Finance and Operations and Microsoft Dynamics AX 2012.
There is not that much written related to this XDS topic. You may find two white papers and some blogs posts on this topic. One whitepaper also describes an example how to restrict financial dimension values.
As there is in general not that much knowledge and experience, I decided to share my knowledge in this area on some events and now also using my blogs.
I did create and demo some examples what can be achieved using XDS. During the sessions related to this topic, I promised to share these examples. The examples created do have the next features:
- Secure legal entities
When you do assign security roles with organizations assigned, by default a user can still see them all in the Legal entities form. This policy has the ability to limit it to only those assigned to the user.
- Warehouse security
This example show how you can achieve some record based security on warehouses and sites. It uses a custom setup form to specify the warehouses linked to a user.
- Retail channel security
This example is combining the organization hierarchies, security organization assignment and XDS. Quite a powerful example which could be an inspiration for you.
Detailed information how to use these examples and an explanation how they are created will be posted in separate blogs. Watch them coming or come back on this page where the links will be updated. Also, the list with examples might grow in future.
At this moment, I can share the examples based on AX2012 and they reside on my OneDrive. The same features for Dynamics 365 for Finance and Operations will be added in the future. The location of the code examples might change in future, so ensure to bookmark this page to be able to find the examples anytime. Currently, you can find them on this location: My OneDrive DynamicsShare
If you want to explore these examples, feel free to download and use it. The software is provided as-is and you cannot obtain any rights if something is not working correctly. You have to ensure you will install the examples in a separate environment first and test it carefully. If you have questions or feedback, feel free to add comments or send a message.
That’s all for now. Till next time!
This blog assists those who are struggling to set up some aspect of printing in D365 for Operations due to the limited documentation in circulation.
We had 2 scenarios at our customer site:
– Barcode printing.
– FollowMe printing.
Barcode printing is not meant to be complex, but when printing to screen or printer, it did not work. The reason was that the machine which generated the report must have the barcode font installed. When printing to screen a webpage is generated that contains the following content.
style=”word-wrap:break-word;white-space:pre-wrap;font-family:’BC UPC HD Wide’;”>
LCS is the place for getting all the information from Microsoft related to your Dynamics 365 for Operations projects. This Web portal also allows you to get your MS fixes to your environment and knows which Knowledge Base (KB) articles have been applied.
In the next image, for instance, we can see that there are 167 fixes applicable. So, let’s start cherry picking.
In this post, I will explain a little bit more about the translations a customer can make use of on the products and attributes in the system. From a user point of view, it is very simple. There is a translation button available that one can click and then add the required translations. From a technical point of view though, it is less simple due to the translations being located in different tables. Getting the required translation, one has to understand how all this functionality is implemented. So where are my missing product attribute translations?
Last year I was creating an interface for products and their attributes. The funny thing was that the attributes did not appear in the interface, but on opening the form, all the attributes were there. So one begins to think what is going on! Where are my missing attributes?
Founded in 2000 by Peter van den Brink, Kaya Consulting is a Microsoft Partner which extends Microsoft’s vision of helping businesses ‘Do More’. Our headquarters are in the Netherlands and we have offices in Turkey, Malta, Belgium and Estonia. (meer…)