Sign Up Now! Log In



We got this in today from Microsoft:

One of the features included in the Microsoft Dynamics GP 2013 Service Pack 2 release was the ability to now render Visual Studio Tools customizations in the web client. For those of you that missed the overview session of this feature at the recent Microsoft Dynamics GP Technical Airlift 2013, I thought I'd share some "things to consider" in a post. 

For those not familiar with the VS Tools functionality, it allows ISV developers to create integrations for Dynamics GP using the .NET framework. Previously this was only available on the desktop client. However, with the release of SP2, the functionality of the tools to support add-ins that run in the web client, while reusing existing code, was extended.

There are two approaches available in the first release of this feature including dynamic rendering and custom code.  For more details on those, Mariano Gomez, (aka: The Dynamics GP Blogster) posted two articles recently on this including one on preparing your development environment and another on rendering winforms in the web client. For those of you preparing your existing add-ins to move to the web client or those pondering creating new add-ins, I wanted to share some tips and things to consider to make the process the smoothest it can be.

Add-in Loading Changes

With the release of Dynamics GP 2013 RTM, you may be aware that changes were made to where add-ins needed to be placed in the client directory as well as updates needing to be made in configuration files.  As part of the SP2 feature updates, we added an attribute called "SupportedDexPlatforms". This attribute, which you add to the class that implements the IDexterityAddIn interface, allows all add-ins to be placed in the Addin folder of the client and enables the application to know when to load each add-in.  You can specify if you want an add-in to load in the desktop client, web client or both.

[SupportedDexPlatforms(DexPlatforms.DesktopClient | DexPlatforms.WebClient)]
     public class GPAddIn : IDexterityAddIn

Helper Functions

To facilitate VS Tools functionality on the web client a number of helper functions were added to a form in the Dynamics dictionary called syVisualStudioHelper.  Via the assemblies created by the dag.exe tool, integrations can access these functions.  One such function is called DexRuntimeGetClientType(). It allows you to determine which client the integration is being ran in. This is particularly helpful if you have cases where you want one block of code executed for desktop client users and another block of code for web client users.  If you are going to need this information throughout your add-in, consider calling it once in your Initialize method to simplify the code and make it more efficient.

Modal Dialogs

In a Visual Studio Tools integration that works with the Microsoft Dynamics GP desktop client, it’s common to use the MessageBox class from the .NET framework to display modal dialogs. However, this class is not supported on the Microsoft Dynamics GP web client. Instead, you should use calls to the appropriate "helper" functions in the Dynamics dictionary to display modal dialogs such as:

  • DexAsk()
  • DexError()
  • DexWarning()
  • DexGetstring()

Closing Forms

Always use the Close() method on the form class to close the forms within your integration. This method will send the appropriate messages between the web client and server and allow the form to be properly garbage-collected by the .NET runtime.  Do not use methods like Dispose() to close a form in your integration because you will likely encounter errors in the web client. This happens because the form is garbage-collected but the web client runtime engine doesn’t know that the form has been closed. We termed these windows "zombies" in our testing because they started randomly losing parts and acting strange!

Local File Access

When your Visual Studio Tools add-in is running on the Microsoft Dynamics GP desktop client, it has access to any location in the local file system for which the user has permissions. However, with the web client, a Visual Studio Tools add-in running on the server has access to only the temporary folder for the current web client session. If your Visual Studio Tools integration will run on the web client and will perform file operations such as writing to temporary files, it must do these actions in this temporary location. 

Two new helper functions have been added for this:

  • DexFileGetTempDirectory()
  • DexFileLaunch()

We are excited to expand the functionality of the Visual Studio Tools SDK to facilitate integrations in both the Dynamics GP desktop and web client environments.  As you start to use the new features, I encourage you to review your current add-ins for these things or keep them in mind when creating new integrations to make the implementations more efficient.

Happy coding!


There are three places in the customer where email addresses are stored. The article discusses them, and shows how to add code to an IM integration to integrate them.




Edit 9/17/15 View the main article for this error here 


We are trying to change the Item Number field in the POP10110 (PO Line Item) table but are receiving the following errors:

Error Number = 9179  Stored Procedure= taPoLine  Error Description = LNITMSEQ already exists on a different Item Number Node Identifier Parameters: taPoLine Related Error Code Parameters for Node : taPoLine UpdateIfExists = 1 SOPNUMBE = Note: This parameter was not passed in, no value for the parameter will be returned.

SOPTYPE = Note: This parameter was not passed in, no value for the parameter will be returned.

LNITMSEQ = Note: This parameter was not passed in, no value for the parameter will be returned.

ITEMNMBR = 11-000-5064-80

Here is our code: 














  <ITEMDESC>Repairs &amp; Maint Tractors - Wash</ITEMDESC>


  <VNDITDSC>Repairs &amp; Maint Tractors - Wash</VNDITDSC>




Any ideas?  We are not using SOP and have non-inventoried items.

Thank you!


when printing checks in dollars whenever I get the system functional currency (Lps in my case) and I need to print the currency of the checkbook

if de checkbook are in dollars the total check in "check with stub on bottom" should be in dollars.

Help me please a need solved this problem.


In the receivables module, an EFT was generated with the expected outcome to be $x with 72 transactions.  The batch available in the 'Generate EFT' for the specific bank account is much less with 54 transactions.  The amount posted to the GL is correc.t  How could this happen and how can we fix it?

Many thanks!


My company is in the process of going from a manual timecard method of time keeping to an electronic system. The software we purchased exports to comma delimited text a file with job codes that are identically named like Dynamics pay codes. How would I go about importing this weekly payroll hours / units into Dynamics? I am not a developer per se, but I'm willing to learn (and can run a query, etc.) Any help would be great!




Hi All,

In GP version 9 you could use the buttons to register trigger on actions such as post or transfer in SOP.

I would like to do the same in GP2010 but i cannot seem to get it to work.

I understand how to register a trigger on the action button in SOP but how do I then make an action trigger VST code if a user eg selects transfer or post especially when the window seems to be clearing before a value is assigned to the action button?



I have a requirement to calculate the sales order quantity demand for a range of dates. I've run into scenarios where I'm doubling values because records are appearing in both SOP10200 and SOP30300 for the same order. Here's what I think will handle the requirement:

1) Demand from Sales Orders: when querying SOP10200 (SOPTYPE=2), the demand quantity should be QUANTITY - QTYPRINV. This will give me the total demand for orders that are open but not yet invoiced, or the invoice has not been posted.

2) Demand from unposted Invoices: when querying SOP10200 (SOPTYPE=3), the demand quantity should be QUANTITY. This will give me the total demand for orders that have printed but not posted invoices.

3) Demand from posted Invoices: finally, query SOP30300 (SOPTYPE=3) for orders that have been invoiced.

The only problem we have encountered is that we've seen orders (SOPTYPE=2) in SOP30300 without an invoice. How does a sales order get to history without a matching invoice?

Any suggestions or thoughts?