Skip to main content

Posts

Showing posts with the label D365FO

Financial tags for sales order invoicing

 There is a new feature for Financial tags on Sales orders. https://learn.microsoft.com/en-us/dynamics365/finance/general-ledger/financial-tag This feature can be enabled under the feature management. After it is enabled, the sales order form will show a new fast tab under the header and line. It is similar to the financial dimensions but shows as a grid. Note that the tags do not show under the posted invoice journal but the field FinTag is stamped. If you want analyse or do reports, it is possible. The great thing about this feature is that it carries over to the voucher transactions.  Below are 2 examples I posted. First example, I created a sales order with 2 lines and unique financial dimensions. The system splits the vouchers by financial dimension and hence the tags appear correct. On a second example, I created a sales order with 2 lines but have the same financial dimension on them. The product sales voucher line has only the first sales order line tag. 

Fabric - See history of parquet files

One advantage with parquet files is that it keeps history. Run the below script and it will give you the history.  %% sql DESCRIBE HISTORY dirpartytable; Below is an example I have in my environment. Use "VERSION AS OF"  Now that you have the history, you can use the VERSION AS OF statement. This will give you the previous values for the record.  %% sql SELECT partynumber, primarycontactphone, primarycontactemail FROM dirpartytable WHERE partynumber = '000001702' ; SELECT partynumber, primarycontactphone, primarycontactemail FROM dirpartytable VERSION AS OF 2 WHERE partynumber = '000001702' ; The below example is when I deleted the primary contact phone number.

Fabric - Sample Notebook scripts for MSDyn365FO

This will be a fairly straightforward blog post covering different ways of copying data from a shortcut delta table into a delta table created automatically via a notebook. Select statement with a join %% sql SELECT     party.recid AS PartyId     ,party.name AS Name     ,COALESCE(party.namealias, '' ) AS ShortName     ,COALESCE(postal.countryregionid, '' ) AS Country     ,COALESCE(postal.state, '' ) AS State     ,COALESCE(postal.city, '' ) AS City     ,COALESCE(postal.street, '' ) AS Street     ,COALESCE(postal.zipcode, '' ) AS PostCode     ,COALESCE(phone.locator, '' ) AS PhoneNumber     ,COALESCE(email.locator, '' ) AS Email FROM dirpartytable party LEFT OUTER JOIN logisticspostaladdress postal ON postal. location = party.primaryaddresslocation AND postal.validto > current_date () -- filters only valid(effective) addresses LEFT OUTER JOIN logisticselectronicadd...

Exploring Analytical Options with Dynamics 365 Finance and Operations: Link to Fabric

I’ve recently been exploring various analytical options within Dynamics 365 Finance and Operations, and one that I’ve delved deeply into is Link to Fabric. There is a walkthrough guide available on the Microsoft Fasttrack Github repo . See  Hands-on Lab: Link to Fabric from Dynamics 365 finance and operations apps This guide is an excellent starting point and should be one of the first things you try out. However, it’s important to understand that there are limitations to this approach that may not be suitable for all real-world scenarios. Lets discuss these items and what I have been exploring ... Background I want to join multiple tables to create my denormalised views that I can report on. My goal is to use  Direct Lake  mode in the semantic model. Specifically, I wanted to avoid the need to reimport data into Power BI for reporting.  Key Limitations The first limitation you’ll encounter is: By design, only tables in the semantic model derived from tables in a Lak...

Copy Company and Number Sequence Issue

When it comes to setting up multiple companies, stream lining the process can save you time and effort. One effective strategy is to establish a template company or select a source company to replicate from.  In this blog post, I won't go through how to use the copy company feature as there are many blogs out there and Microsoft has some good documentation. https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/copy-configuration What I will explain is an issue I faced when using it. I found that the copy number sequence isn't working as expected. It throws an error when used as part of the copy company. Number sequence feature: There are two check boxes for number sequence copy: Copy number sequence - this will add number sequence entities and when run, it will change company references in the staging table before processing to target. Reset to smallest value - this resets the number sequence if it is used back to its smallest value. In most cases b...

Dynamics 365 Invoice Capture Feature

Microsoft recently released the new Invoice Capture for Dynamics 365 Finance. I ran through installing and configuring it.  From that experience, below is my brain dump and hopefully it can help with things that are not so obvious. Three type of invoice captures There are three invoice type paths that can be captured. These drive the screen layout and what kind of information is mandatory. PO invoice Header-only Cost invoice When an invoice comes in, you can select one of the three invoice types. Below are the three screen layouts and differences. PO invoice – Invoices of this type are associated with purchase orders. The purchase order details must be determined on each invoice line. Both the header and the lines must be reviewed in Invoice capture. This will create a pending vendor invoice. Header-only – Invoices of this type are associated with purchase orders. The purchase order field on the invoice header is a mandatory field. If the Automatically create invoice lines featur...

Automated testing #MSDyn365FO Odata with Postman

In the last post I did a quick run through on using Postman for testing Odata services. This post I will give some tips on how you can write automated tests using Postman. Tip 1 – Parameterise as much as you can Parameterise using the environment settings. It will make your collection portable to other projects. Below is an example where we have the environments settings parameterised. You can see how I used it here. Now I can utilise the same thing across requests. Tip 2 – Write test scripts Test scripts are very easy to work with. This is for demonstration purpose only. I will explain how you can retrieve the values in the returned json. Take the example here, where we use the “get customer” odata service. It returns a nested array with the values. You can write a simple test script to retrieve values. In the below highlighted box you can see that I am logging it to the console. I am not really testing much here. The console will return the below.  One bonus tip here. Just click ...

Approve Workflow via email using template placeholders #Dyn365FO

Dynamics 365 for Finance and Operations has placeholders which can be inserted into the instructions. Normally you would want this to show up in the email that is sent. One of the most useful ones is the URL link to the exact record that you are approving. In the workflow configurations use the placeholder and build up your message. Towards the end it has workflow specific ones. The URL token is %Workflow.Link to web% . For the technical people the token is replaced in this class WorkflowDocumentField. This is what I inserted into my email template. <BODY> subject: %subject% <BR> message: %message% <BR> company: %company% <BR> for: %for% <BR> </BODY> Should look like this. The final result looks like this. If you debug these are the place holders that are put together.

Resolve ledger dimension through X++ [D365FO]

A bit of code to show how to resolve ledger dimensions. There are various codes out there but I thought I would write it in an easy way to understand. It is hard code but I did that for illustration purposes. public static void getLedgerDimension() { DimensionAttribute dimensionAttribute; DimensionAttributeValue dimensionAttributeValue; DimensionSetSegmentName dimensionSet; DimensionStorage dimStorage; LedgerAccountContract ledgerAccountContract = new LedgerAccountContract(); ledgerAccountContract.parmValues(new List(Types::Class)); ledgerAccountContract.parmAccountStructure('Manufacturing B/S'); DimensionAttributeValueContract dimensionAttributeValueContract; //Main account ledgerAccountContract.parmMainAccount('110180'); //Dimension 1 - repeat this for all other dimensions dimensionAttributeValueContract = DimensionAttributeValueContra...