Friday, April 14, 2017

#FabrikamDay: blast from the past

Well, you thought #FabrikamDay was over? Not really, although this will be my last post! You see, there was a time when Microsoft Dynamics GP had its own TV commercial themed "More and Less". Rumors had it that Pam Misialek wanted a narrator with an everyday American accent, but Errol Schoenfish had his way with getting someone to put on a British accent.

More and Less advert

Other interesting facts I could research: the director of photography for this advert is Tristan Whitman under Wyldflower Filmwerks, Inc. This ad was released to cable and satellite channels around the March of 2009 time frame, just in time for Microsoft Dynamics Convergence 2009 (I started attending Convergence, uninterrupted, the following year). By then, the Smart Tag functionality was available with Microsoft Dynamics GP 10.0, but enhanced further with GP 2010. You can appreciate the Smart Tag flashes in the video.

Tristan Whitman at the camera

Until next post,

Mariano Gomez, MVP

Thursday, April 13, 2017

#FabrikamDay: the holiday that wasn't

Yesterday was ceremoniously an unofficial holiday. That's right! The date did not show up on any local or international calendar, it wasn't part of any federal or state registry. Frankly, the world did another spin on its axis without skipping a beat and life for billions of people on this planet went on without a hitch - OK, I'm not trivializing what's going on around some problem spots in the world, but I digress. Not so for a few hundred in the Microsoft Dynamics GP community of customers, partners, and independent software vendors (ISVs). We celebrated our own 'holiday' of sorts: #FabrikamDay.

Breaking it all down

To understand what Fabrikam Day is, you first have to ask yourself, "What is Fabrikam?". Fabrikam (and more precisely, Fabrikam, Inc. or Fabrikam, Ltd, formerly The World Online) is the sample company used for demos, development, and testing in Microsoft Dynamics GP. The sample company provides sample data for all core and extended modules, including Field Services, Manufacturing, Project Accounting, and Human Resources/Payroll.

NOTE: Other Microsoft products use the sample company name Fabrikam for demo purposes. Click to obtain a list of fictional Microsoft companies.

For the longest time, the sample company transactions data was based on an April 12, 2017 fictitious date. Each time you log into Microsoft Dynamics GP and select the sample company, by default, you obtain the following warning dialog:

In the early 2000's a first change was done to convert the sample company data to a fictitious date of April 12, 2007. When 2007 came along, the date was forwarded once more 10 years ahead. If you are a veteran in the channel, I'm sure many of you thought, like I did, that you would probably be doing something differently when 2017 came around. At the time, it seemed so far removed from anyone's imagination. You can read more details and technicalities behind the sample company date in this very detailed article by my friend and fellow MVP, David Musgrave.

#FabrikamDay is today or is it? 

Where did the idea of a #FabrikamDay came from?

Back at GPUG Amplify 2016 in Anaheim, CA a group of us (Pam Misialek, Bob McAdam, Chris Dobkins, Amber Bell) started toying around with the idea of putting together an event around April 12, 2017 to commemorate the advent of the sample date. Back then, the original intent was to have a one day celebration costume party close or around one of the major events this year. Given the logistical challenges (and possible cost) the idea never took off.

Fast forward to the beginning of March, 2017 and Amber Bell with Training Dynamo releases the first blog post titled Fabrikam Day in which she describes the sample company date and how has Fabrikam helped her over the years to train her customers.

In mid-march, GPUG Amplify featured a number of "Fabrikam-themed" badges for attendees name tags, hoping to draw attention of the upcoming date.

GPUG Amplify badges for name tag
By the latter part of March, 2017, Chris Dobkins and Melissa Sandrovich over at Njevity picked up where Amplify left off and were just determined to not let the date go by without doing something. Chris and Melissa posted their first #FabrikamDay picture requesting the community to follow up with pictures of their own.

Chris Dobkins and Melissa Sandrovich at Coors Field in Denver, Colorado
Ever since this first picture by Chris and Melissa, the community began responding slowly but surely to the request. According to we had just about 479 original tweets and 924 retweets that included the #FabrikamDay, with about 1.7M impressions and reaching over 300 thousand people.

It was now April 12, 2017 (yesterday). The day started with a barrage of tweets allusive to #FabrikamDay and ended with a 4:00 PM EDT online meeting hosted by Pam Misialek, Product Marketing manager at Microsoft which did a quick run down memory lane showing some of the nostalgia and accomplishments over the years. At 4:12 PM EDT we did a "ball dropping" of sorts with a countdown to welcome #FabrikamDay. Those of us in attendance listened to stories, saw old time videos, and played a little trivia game to gauge our knowledge of Microsoft Dynamics GP history.

To say I have attended a few events over the years would be quite an understatement, but #FabrikamDay reminded me of the importance of community and the heart and passion to improve the lives of customers and partners. I hope to continue working for this community and do my part to make it stronger. You do the same!

Now, some posts from around the globe:

David Musgrave (Winthrop Development Consultants) 
#FabrikamDay How to quickly update the sample data to 2027
#FabrikamDay is today or is it?

Amber Bell (Training Dynamo)
- Fabrikam Day

Chris Dobkins (Njevitytogo)
Attention Dynamics GP Customers and Partners: We Need Your Help to celebrate Fabrikam Day!

Mark Polino (DynamicAccounting)
- Happy #FabrikamDay

Rhonda Sutliff (Rockton Software)
- Happy Fabrikam Day!

Until next post,

Mariano Gomez, MVP

Thursday, March 30, 2017

Microsoft Dynamics GP Roadmap Update

It's been a week since I got back from GPUG Amplify 2017 in Anaheim, California and tell you the truth, I am all the more excited about the future of Microsoft Dynamics GP than a lot of you might be. With all these constant rumors of the product going away or not getting the necessary TLC from Microsoft I am left to wonder, where have I heard this before :-)

The truth is, Dynamics GP is alive and well, thank you! And will be for many many years to come. As it's been unveiled in Anaheim, the next couple of years - Microsoft has been producing the roadmap for only 2 years at a time ever since GP 2010 - promise to bring some really cool enhancements to the product, based on entries collected via Microsoft Connect.

In particular, GP 2018 (shipping sometimes before the end of Q4) will be introducing 3 major themes that traverse the spectrum of features you would expect from an application born in the on-premise world, but that has effectively cross over to power customers looking for a solid cloud solution. In this iteration, Microsoft looks to solidify the workflow capabilities with what it has now dubbed Workflow 4.0, all the while introducing some optimizations to the Financial series, Human Resources and Payroll, Document Attach, and overall UX (user experience). In strengthening the cloud capabilities, Microsoft looks to increase the integration with the Power Suite (Power BI, Power Query, Power Apps, etc.).

While in Anaheim, I had a chance to see a bit more about the details. The following is a list of features that the Development team in Fargo is expecting to deliver:

Some highlights include adding reminder emails to Workflow, this is, a user will receive reminder emails leading up to the due date of specific tasks. This is a very cool feature and something customers were asking for.

The HRP enhancements include some beefing up of the Garnishments capabilities along with the ability to change Department Codes in Payroll.

As far as the user experience concerns, auto-complete moves to the web client after being a desktop feature for quite some time now. I am also very excited about the introduction (finally!) of the HTML 5 controls for Visual Studio Tools which now will allow developers who had WinForms to expose these once again to the Dynamics GP web client.

The Dev team has made a big push to get Document Attach out to the remaining portions of the application where it was missing: GL Transaction Entry, POP Receiving Entry and now the inquiry windows.

As far as features powering the cloud, Dynamics GP receives enhancements to its OData Services, a brand new GP Power BI content pack, and a number of FLOW templates. More information about Microsoft Flow here.

Until next post,

Mariano Gomez, MVP

Thursday, March 16, 2017

The Connect Corner: Include Multicurrency Vouchers in Payment Run

As of late, I've been thinking of ways to improve the Microsoft Dynamics GP Payables Management module, since it is the center piece for the products we developed here at Mekorma. Our latest product, Multi-Batch Management, will incorporate support for Multicurrency transactions in the upcoming build and there are some benefits to my latest Microsoft Connect request.

The problem

The Microsoft Dynamics GP Payables Management module provides ample support and comprehensive functionality for Multicurrency transactions, when compared to other mid-market solutions, but could improve the level of automation for certain payment selection activities.

Take the following example:

Your organization has a supplier headquartered in Canada, with a subsidiary in the Dearborn, Michigan. For certain materials, you are directed to order from the Dearborn, Michigan location, for certain others you are directed to order directly from the headquarters in Canada. For convenience sake, you have been instructed to remit payments to the Michigan Dearborn office any and all outstanding invoices. The materials you received from the Canada office are invoiced in Canadian dollars.

Here are 3 invoices you have received:

Vendor A             Invoice 1             CA$10.00
Vendor A             Invoice 2             US$20.00
Vendor A             Invoice 3             US$30.00

If you build a payment batch in Microsoft Dynamics GP (using US dollars as functional currency), the only invoices that will be selected are invoices 2 and 3. In order to add invoice 1 to the already completed payment batch, you will be required to go to the Edit Payables Check Batch window, after completing the payment run, to make any changes to the vendor payment.

Conversely, if you are required to submit payment in Canadian dollars to the vendor's offices in Canada, and you make your batch currency Canadian dollars, only invoice 1 will be selected, and you will need to use the Edit Payables Check Batch window to add invoices 2 and 3 to the final vendor payment. If you must repeat this operation for several vendors and several vouchers, this could be an extremely time consuming proposition.

The Solution

To facilitate the payment selection process, it would be extremely nice if the same selection rules applied to Multicurrency vouchers. However, the user would have the ability through configuration and furthermore at payment selection time to include vouchers in other currencies that met the selection criteria.

As previously noted, the business logic to do this is already in the Edit Payables Check Batch window, but it would be nice if the same logic could be surfaced to the payment selection process.

If you think this would be valuable to you, I have created a Microsoft Connect entry case for this. Please join me in voting for this request. Use the following link to vote for it:

Happy voting!

Mariano Gomez, MVP

Thursday, February 16, 2017

Web Client: HTTP Error 500.0 - Internal Server Error

Just recently I was assisting a partner on the Dynamics GP Partner forum with an error they were receiving when attempting to log into the Microsoft Dynamics GP web client.


The partner reported they could log into web client just fine from the SQL Server. However, when they launched web client from the Web Server that host the Dynamics GP web application, they received:

HTTP Error 500.0 - Internal Server Error

Now, this error is a pretty generic error. In addition to not being able to log in, the landing page would not display the Microsoft Dynamics GP logo.

Troubleshooting the Issue

The partner had tried the following troubleshooting techniques:
  1. Repaired Microsoft Dynamics GP web components
  2. Uninstalled and reinstalled web components
  3. Rebooted the server
In addition, I recommended my article Microsoft Dynamics GP 2016 web client UI not displaying icons to ensure static content had been enabled during Internet Information Services (IIS) configuration. Typically, when static content is not enabled, the web client image resources do not get displayed.

Usually, after trying options 1 and 2, if you are still experiencing issues not allowing you to bypass the login window, you know you are facing a pre-requisite configuration issue.

Reading the Detailed Error Information section, you will notice that the error was caused by an authentication request, trying to access an image resource file using Anonymous Authentication by an Anonymous user. In simple terms, this is a permissions issue.

Upon inspecting the GP website authentication setting, the partner noticed the credentials for the anonymous user identity were set to IUSR.

So what's the big deal?

Anonymous authentication gives users access to the public areas of your website without prompting them for a user name or password. When a user attempts to connect to your public Web site, your Web server assigns the user to the Windows user account called IUSR.

By default, the IUSR account is included in the IIS_USRS built-in group. This group has security restrictions, imposed by NTFS permissions that designate the level of access and the type of content available to public users. With that said, websites such as the GP web belong in the private domain and most organizations disable anonymous authentication totally for the GP websites and revoke access to the IUSR account or IIS_USRS group to the website folder to prevent unauthorized access.

If you are running IIS 7.5 on Windows Server 2008 R2, or a later version of IIS, for every application pool you create, the Identity property of the new application pool is set to ApplicationPoolIdentity by default. The IIS Admin Process (WAS) will create a virtual account with the name of the new application pool and run the application pool's worker processes under this account by default.

By setting the ApplicationPoolIdentity as the anonymous user account for a site, you can isolate content and configuration for that site so that no other sites on the same IIS web server can access it, even if you have enabled anonymous authentication. GP web client installation allows you to specify a domain account as the identity for the Web Management Console and GP web application pools. The installer in turn will ensure the proper permissions are given to the folders hosting the web site and the GP web components.

This is particularly useful if you are a hosting provider running multiple customer websites on a single IIS server. Having the ability to control the website access and the content that is displayed is very important.

For a primer on IUSR vs application pool identity, take a look at the following article by Tristan K.

IUSR vs Application Pool Identity – Why use either?

The fix

In this particular case, switching the Anonymous Authentication credentials from IUSR to ApplicationPoolIdentity fixed the issue, although, keep in mind that the GP web client does not require anonymous authentication to be enabled.

Until next post!

Mariano Gomez, MVP

Wednesday, February 15, 2017

VST: An error occurred while loading or initializing an addin

As I mentioned before, I am now the Lead Software Engineer at Mekorma. I love it here as I get to work with some really talented software engineers and developers, all of which challenge me everyday. One of the cool new products we are working on, Mekorma Multi-Batch Management, allows you to build payment batches, print and post payments, and generate electronic funds transfer (EFT) and positive pay (Safe Pay) files, across companies, and across multiple checkbooks, with some minor configuration and just the click of a button. You can see an in-depth video on the product here.

Part of the challenges of building Multi-Batch Management were its extensive interfacing with both our own Mekorma MICR product and Microsoft Dynamics GP, and in particular, the Safe Pay module - Multi-Batch Management is designed to drive the Microsoft Dynamics GP user interface, thus eliminating the need for invasive code.

If you have worked on integrating code for Microsoft Dynamics GP, you are certainly familiar with the challenges surrounding the response to Dexterity modal dialogs. This is true for Microsoft Dexterity service enabled procedures as much as it is true for standard applications like ours, that simply try to drive the user interface.

NOTE: Dexterity does not have a programmatic mechanism to respond to modal dialogs. As it stands, only Visual Basic for Applications (VBA) and Visual Studio Tools for Microsoft Dynamics GP (VST) provide event handlers for modal dialogs.

VST aids in responding to Dexterity modal dialogs by allowing a developer to define form or window level modal event handlers. Because our code needed to respond to dialogs in Safe Pay only when our process was running, it was necessary to create an application assembly for our dictionary, that we could then reference in a Visual Studio Tools project. In addition, we needed to reference the Safe Pay application assembly as well. The project reference looks something like this:

Project References

Once references are added to the project, the tendency is to immediately add all event handlers to the Initialize() method within the GPAddIn class, as shown below:

public void Initialize()
   Dynamics.Forms.SyErrorMessage.SyErrorMessage.OpenBeforeOriginal += 
   Dynamics.Forms.CmTransactionEntry.CmTransactionEntry.BeforeModalDialog += 
   Dynamics.Forms.CmEftGenerateFiles.CmEftGenerateFiles.BeforeModalDialog += 
   SafePay.Forms.MePpTransactions.MePpTransactions.BeforeModalDialog += 
     new EventHandler(SafePay_Transactions_BeforeModalDialog);

Unfortunately, this approach has a problem: let's assume Safe Pay is not installed, therefore, the Safe Pay application dictionary and application assembly are missing from the Dynamics GP installation folder. Since the Initialize() method is the entry point to your VST application, when the runtime engine attempts to load your assembly, your application would contain a reference to a non-existing assembly. This in turn will cause the runtime engine to produce the following error:

"An error occurred while loading or initializing an addin. As your administrator to check the Windows event log for more details. Dynamics will now close."

This is always been accepted as "the way things work". Unfortunately, we couldn't live with the status quo as it meant that customers who did not require the Safe Pay module would have to install it just for the sake of our assembly not failing.

We then attempted to move our event handler registration into it's own method, enveloping the call in a try..catch block:

public void Initialize()
   Dynamics.Forms.SyErrorMessage.SyErrorMessage.OpenBeforeOriginal += 
   Dynamics.Forms.CmTransactionEntry.CmTransactionEntry.BeforeModalDialog += 
   Dynamics.Forms.CmEftGenerateFiles.CmEftGenerateFiles.BeforeModalDialog += 

   catch (Exception e) 
     throw new Exception(e.Message);

public void InitializeSafePay()
  SafePay.Forms.MePpTransactions.MePpTransactions.BeforeModalDialog += 
    new EventHandler(SafePay_Transactions_BeforeModalDialog);

The above produced virtually the same results. That is, the exception was still being displayed. Now, quite clearly, if we commented out the throw statement, the exception would no longer present itself and the message would not appear, precisely what we needed since we did not want to alert of the missing assembly and prevent the user from login into Dynamics GP.

NOTE: Alternatively, we implemented tracing capabilities for our assembly, so now all exceptions are recorded in a log file.

Special thanks to my Sr. Software Engineer, Lee Butenhoff for researching and providing a solution to this long standing issue.

Until next post!

Mariano Gomez, MVP

Tuesday, February 14, 2017

Revisiting: SOP Quick Print

Continuing with my Revisiting series, today I look at an article I wrote in 2009 regarding the SOP Quick Print feature.


SOP Quick Print is one of those gems in Microsoft Dynamics GP hidden within plain site. Written by my friend David Musgrave, it was designed to save time when saving and printing sales orders, fulfillment orders, and invoice. SOP Quick Print is activated by pressing CTRL + Q on your keyboard, and after a simple setup, it's good to go.

SOP Quick Print Setup window
One of the frustrating things about saving most documents in Dynamics GP, is that the window is cleared completely from the document that you were working on. Depending on what you are trying to achieve, this can be an inconvenience if all you wanted to do is save your document up to that point, so you can keep working on it. Current business logic would have you retrieving that document once more by either typing the document number or retrieving it via a lookup. With SOP Quick Print, you can save the document while keeping it displayed on the Sales Transaction Entry window.

SOP Quick Print and the Web Client

In order to achieve the printing and the saving of the document, SOP Quick Print creates a Dynamics GP macro on the fly, with the necessary macro lines (based on the selected options during configuration) to print, save, and retrieve the document when saved. The macro looks something like this:

ActivateWindow dictionary 'default'  form 'SOP_Print_Options' window 'SOP_Print_Options'
  MoveTo field 'Print Button NONE'
  ClickHit field 'Print Button NONE'
NewActiveWin dictionary 'default'  form 'Report_Destination' window 'Report_Destination'
  MoveTo field 'Print to Screen'
  ClickHit field 'Print to Screen'
  MoveTo field 'OK Button'
  ClickHit field 'OK Button'
PrintDialog copies 0 from 0 to 0

The macro is saved in the Data folder of the current instance.

The issue with macros is, they are not compatible with the Dynamics GP web client, so unfortunately, this great feature is not available when running the web client. But if you currently enjoy the desktop client, there should be absolutely no reason for you not to take advantage of this feature.

I have tested this across all newer versions of Dynamics GP, since GP 2013 and the feature continues to work as expected.

Until next post!

Mariano Gomez, MVP