Adding Attachments With the Business Central Mobile App

Business Central’s mobile app has been out for several versions now. It displays pages in a size friendly (adaptive) way on mobile devices. Horizontal menus at the top of pages are converted to page-filling scrolling buttons that are easy to tap, even on a small phone.

Limits of a Mobile Device

Of course, because of the amount of data entered for an order (item number, description, and quantity at a minimum), you might expect to have a bit more difficulty with these tasks. Business Central’s app converts lines in a grid to full pages, making them easier to navigate. The one issue I had was getting a “full picture” of an order. For example, answering questions like, “How many lines are on this order?” or “What is the total and tax?” or “Does that include the discount?” All of this is possible, it just takes a bit of scrolling and pinching to get to it.

Attaching Photos to Documents

One thing we’ve been asked for in previous versions is the ability to take a photo and attach it to an order. Perhaps a customer signature on a delivery ticket. Or the items delivered on site (like Amazon’s delivery).

There is not a “take a picture” button in the current Business Central app. It has always been possible to take a photo and attach it to a document in Business Central. Depending on mobile internet speed, this can be quite quick. In the latest version of iOS, however, we found a way to take the picture and attach it without the step of saving it and locating it again.

Demonstration on iPhone

It’s easier to show this than tell about it, and this also gives you an idea about the look and feel of the app as well.

Let us know if this is helpful.

Business Central Security: Permission Sets

Picture of hands in handcuffs to illustrate security As I write this, I am looking at the security in the newest version (19.1) of Microsoft Dynamics 365 Business Central. We had noticed in the previous version that some of the permission sets give more access than the name indicates. This post will offer some actual examples of what we found in the newest version.

Permission Set: D365 Team Member

A Team Member License is a low-cost license that provides read-only access to the tables in Business Central. It also provides the ability to enter quotes and a few other items. We generally describe it as designed for management and sales people. It does not allow posting. When you assign a Team Member License to a user, the D365 Team Member permission set is assigned by default. Let us assume that you have a salesperson using this license.

Here are some interesting permissions assigned by this permission set:

  • Bank Account: read and modify
  • G/L Entry: read, insert, modify, and delete
  • G/L Account: read and modify
  • Customer: read and modify
  • Vendor: read and modify
  • Item: read and modify
  • Job: read and modify

This license type is prevented from posting, so these permissions will not allow the team member to post general ledger entries. However, it does allow read-only access to any table in the system. A person with these permissions will be able to see all of the general ledger entries. This will include entries into the salary accounts, and if salaries are posted in detail in the G/L, amounts will be visible. In addition, the user will be able to see the chart of accounts and balances.

Obviously, you may not want to give this permission set to some users, particularly if you do not want them changing customers, vendors, items, and jobs.

Permission Set: D365 Basic

Let us say you decide to pick a more minimal permission set. This permission set, D365 Basic looks as if it would provide basic access to the system, and it does. It also provides the ability to read general ledger accounts and entries, and the ability to read, insert, and modify customers, vendors, and items.

A Bit More Info on Permission Sets

It appears that Microsoft has been reworking the permission set code in the last few versions. Developers can combine permission sets to make new permission sets. The permission set D365 BUS PREMIUM, for example, includes the following code:

    IncludedPermissionSets = "D365 BUS FULL ACCESS",
                             "D365PREM MFG, EDIT",
                             "D365PREM SMG, EDIT",
                             "D365PREM SMG, SETUP";

This code copies in all the permissions from the other permission sets. It is a good move from a maintenance standpoint, since it means that a change in one permission set will cascade through others. It makes it a little bit difficult to be sure exactly what you are getting when you assign a permission set.


The biggest lesson we have learned from this exercise is that you cannot just assume that permission sets provide logical permissions. In other words, you cannot take for granted that they mean what their name says they mean. And this means that any company needing tight security will be designing their permission sets pretty much from scratch.

Our hope is that Microsoft will add functionality to the permission set extension to allow us to DENY permissions that have been granted. As of this date, Microsoft documentation on the permission set extension says the following:

The permission set extension object in Business Central adds permissions to an existing permission set defined in AL. A permission set extension object cannot remove permissions from an existing permission set, it can only add permissions.

You can read more about the permission set extension object in the Microsoft documentation.

Be careful that the security you assign is the security meant to assign in Business Central.

Automatic Business Central Upgrades: Bad Information in the Wind

I got an email from Microsoft the other day about a Business Central upgrade for one of our clients. Part of the email read as follows:

Your Business Central environment could not be updated to version 19.0 because one or more of the installed extensions failed to update successfully. Review the error information below and complete the recommended actions to resolve the issue before the update can be attempted again.

The extension identified was an extension from Microsoft AppSource, and is key to the client’s business. The email contained a laundry list of errors that were preventing the upgrade. Since we don’t have access to the source code, we couldn’t fix any of them.

Business Central Upgrade Troubleshooting Process

Here is the process we followed:

  • Created a sandbox with an exact copy of the customer’s data (this takes a couple of clicks).
  • Upgraded the app to the newest version using the App Management panel in admin.
  • Rescheduled an update for the sandbox.

The result? We got the same list of errors. An email to the vendor resulted in this suggestion (from the vendor’s tech support):

To be able to proceed without errors, you will have to uninstall the [vendor name removed] app, do the update, and then reinstall the app as workakround. [sic]

So I’ve uninstalled the app in the sandbox I created. Now we wait to see if it upgrades. [A quick aside: to do this in production would mean that the app was not available when the upgrade was done. If the app proves incompatible after the upgrade, we would not be able to reinstall it. That would be a problem.]

Reloading the App from AppSource

While I was waiting, I verified that I could install an AppSource App in a sandbox. I found some documentation that suggested that it was possible, but nothing with a set of detailed instructions. I also found some blog posts that suggested that it was not possible (see below for why I don’t trust blog posts completely).

Frustrated Employee during ERP implementation photoIn the course of all of this, I ran across the following statement on a site. It is accompanied by a video of what appears to be an experienced man stating–emphatically–that AppSource apps update automatically, and are required to be compatible in advance of the release of a new version. The problem is…I had an email from Microsoft proving just the opposite. Here’s the statement from the website and video:

The benefit of using apps is that Microsoft will update your Business Central every month – and you don’t have to do anything. No cost. No tasks. No upgrading project.

Here’s my pet peeve: this site is selling itself as a training site and it is completely, totally, and dangerously wrong! If the app version you have loaded isn’t compatible with the upgrade, Microsoft will eventually upgrade and delete the app. The data will still be there, but you may have an anxious client while you reload the app.

Microsoft Documentation on AppSource App Upgrades

But don’t take my word for it. Here’s the first paragraph of the documentation on Upgrading Apps from Microsoft:

When an updated version of an AppSource app becomes the active version in the Dynamics 365 Business Central service, tenants do not automatically get this updated version. This upgrade must be done manually by getting the latest version of the app in AppSource.

Ok. All the advice you get in the marketplace from “experts” isn’t good advice: not by a long shot. Now that that rant is out there, back to verifying that I can load an AppSource App in a Sandbox.

If you need some help with or information on a Business Central Upgrade or Dynamics NAV upgrade, contact us with an overview of your situation or schedule a chat.

Business Central – SIFT Technology, NAV Conversions, and Performance

Mature man getting a headache from taxes and billsWe’re in the process of moving a client from a 3.6(!) database to Business Central 18 (Spring 2021). In the database, there is a custom table that has several Flow Fields defined as sums of the Amount fields in G/L Entries and the Detailed Customer Ledger Entry table.

Just for the giggles, you should know that the history goes back to 2003, and there are 1MM+ records in the tables, but not many more than 1MM records. To make it a little more interesting, we didn’t do the original customization, so we’re figuring out the customization as we go.

Fighting the Performance Battle

We’ve converted the data, refactored everything to an AL extension, and are testing reports. The problem came when we hit a couple of reports based on a table added in the extension. The table has 4 flow fields. And the reports take forever to run (hours in one case). They are slow on a local copy of the old database, but they are much slower on BC18. Much slower. Like ten times slower.

So we looked at the old code. As it turns out, the flow fields were based on data from the base Business Central table as well as data from the extension. Previous customization in C/AL (3.6) had added a key on all of these fields. As you may know, table extensions cannot use fields from the base table as part of keys.

Because flow fields rely on keys, performance took a huge hit.

The Solution

the solution was actually fairly straightforward. Since we needed the data from the base table in the extended table, we created triggers to copy the data. We were then able to build keys (SQL indexes) on the data in the table extension.

    trigger OnBeforeInsert()
    trigger OnBeforeModify()
    trigger OnBeforeRename()
    procedure CopyFields()
        "ext G/L Account No." := "G/L Account No.";
        "ext Document Date" := "Document Date";
        "ext Posting Date" := "Posting Date";
        "ext Amount" := Amount;

The result was dramatic: a report that took 2.5 hours to run before the change ran in 15 minutes after the change. It still seems like we can optimize this a bit, but there also a tremendous number of calculations happening in the report.