Skip to main content

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 feature is enabled, the invoice lines are automatically created from the purchase order in Finance, and users don't have to review the line details in Invoice capture. In addition, the line details aren't shown in the side-by-side viewer. This will create a pending vendor invoice.

Cost invoice – Invoices of this type contain non-stock items. Those items can be either service items or procurement category items. This can create either a pending vendor invoice or go straight to an invoice journal.

After you address the errors (mapping) and mandatory fields that need to be filled in. you can transfer to FinOps. The only one that can be routed to an invoice journal is the Cost invoice. Otherwise, all go through the pending vendor invoice path.

Upload files


You can upload files manually or use one of the managed flows. eg. SharePoint.
The status will go from Processing and will be set to Cancelled after it is recognised.


Enter the SharePoint site url and for the library/folder, just enter something to progress (it doesnt need to be a valid path just yet). It can be corrected by doing a look up in flow.

Click on Edit flow and authenticate. Then you can now lookup to the actual library and folder (to correct what ever you entered in previous step). Don't forget to save it.

Once you have saved it, go back to the channels page to sync it. This will refresh the setup screen to reflect what you changed in flow.

Other notes

Touch less transfer - fully automated

In this scenario, you can have the full automation from new file, to recognition to transfer to FinOps. This is done in 5 minute intervals by default. Under the process automation form, you can edit the time or check on any issues. Otherwise, they will appear in awaiting status.

Date time and local formats

For non CE/Power Platforms people, this might be one of the first things you fix in your environment. Under the system settings and personal settings, you can select a local format. 

Known Limitation:

Vendor synchronisation is currently manual and planned for future roadmap item. For now, you have to click sync every time you create a new vendor.

Found Limitation:

If you choose to go down the invoice journal path, note that it picks the first journal name with type vendor tax invoice recording.

I had to dig into the code to find why I couldn't find any configuration.

Popular posts from this blog

AX - How to use Map and MapEnumerator

Similar to Set class, Map class allows you to associate one value (the key) with another value. Both the key and value can be any valid X++ type, including objects. The types of the key and the value are specified in the declaration of the map. The way in which maps are implemented means that access to the values is very fast. Below is a sample code that sets and retrieves values from a map. static void checkItemNameAliasDuplicate(Args _args) { inventTable inventTable; Map map; MapEnumerator mapEnumerator; NameAlias nameAlias; int counter = 0; ; map = new Map(Types::String, Types::Integer); //store into map while select inventTable { nameAlias = inventTable.NameAlias; if (!map.exists(nameAlias)) { map.insert(nameAlias, 1); } else { map.insert(nameAlias, map.lookup(nameAlias) + 1); } } //retrieve fro

AX - How to use Set and SetEnumerator

The Set class is used for the storage and retrieval of data from a collection in which the values of the elements contained are unique and serve as the key values according to which the data is automatically ordered. You can create a set of primitive data types or complex data types such as a Class, Record or Container. Below is sample of a set of records. static void _Set(Args _args) {     CustTable       custTable;     Set             set = new Set(Types::Record);     SetEnumerator   setEnumerator;     ;     while select custTable     {         if (custTable && !         {             set.add(custTable);         }     }     if (!set.empty())     {         setEnumerator = set.getEnumerator();         setEnumerator.reset();         while (setEnumerator.moveNext())         {             custTable = setEnumerator.current();             info(strfmt("Customer: %1",custTable.AccountNum));         }     } } Common mistake when creating a set of recIds

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.