Wednesday, September 30, 2009

Inside multi-platform integrations with Integration Manager

I have been working on a very challenging systems conversion project, from JD Edwards on AS/400 and DB2 to Microsoft Dynamics GP v9. Part of the challenge stems from the fact that certain processes, mainly in-house applications developed for the AS/400 will continue to support existing business processes pass the "go-live" date.

I am tasked with developing multiplatform integrations to support application processes in place and by doing so, I've had to dust off my DB2 - AS/400 skills. Per the client's request, the integrations need to be easy to use, extremely flexible and adaptable, and low maintenance (as in little to no programming required). Many of you may think that due to the nature of the systems involved, this could very well be an eConnect implementation. However, Integration Manager was chosen because of the characteristics previously described.

As I work through implementing the first integration to manage expense reimbursements from Lotus Notes, my integration needs to read data from some interface tables in a DB2 catalog. As such, we deployed the IBM Client Access ODBC driver. Working through the configuration was fairly simple, but due to the driver features I was afraid Integration Manager was not going to be able to store the DSN configuration.

One thing I discovered while working with IM v9 SP4 (9.00.0054) is that due to it's underlaying implementation of the almost outdated use of ADO technology, it cannot perform a preview of the source queries, with the following error message:

Upon further research, it seems this error is generated because server-side cursors are not supported with ISAM (Indexed Sequential Access Method) files. As it turns out, ISAM was originally developed by IBM and later replaced with a storage file system methodology called VSAM (Virtual Storage Access Method). VSAM is the physical access method used in DB2.

What does this have to do with IM? Well, IM -- version 9 specifically -- uses ADO to connect and retrieve data. The problem with ADO and VSAM file systems is that the cursor location needs to be set to AdUseClient and the cursor type needs to be checked for bookmark support:


Apparently, this is not being done in IM v9's internal ADO implementation. The good news is, I checked this against IM v10 and I have to say it works just fine, since, IM v10 was developed from the ground up with ADO.NET.

Given there was no preview available, testing began with a small dataset.

Integration Manager began importing expense vouchers and in the process neglected randomly to import the distributions. I executed the same integration a few times and obtained random results: transactions that previously imported fine along with their distributions did not import and failed the second time around. I verified the RecordSource Rule and Source properties to make sure they were set to Default Non-Imported and the source query for the distributions, respectively.

Upon adding some VBScript to write the records that were being read and attempted during the integration, I noticed that the header records were being read in order while the distribution records were shifting randomly. In some cases IM would match the header record with the distribution record, but in some cases it would skip a valid set of distributions for an expense voucher. By changing the UseOptimizedFiltering flag in IM to False the imports began to work as expected.

Integration Manager is a very useful tool and should not be overlooked when considering multiplatform systems integrations, especially if the customer insists on easy of use. All the integrations will be scheduled on a server and will run unattended, which only validates IM's flexibility.

Until next post!

Mariano Gomez, MVP

Sunday, September 27, 2009

Microsoft Dynamics GP Roadmap Update

Back in April I published an article describing Microsoft Dynamics GP roadmap up to release GP 11 Future Pack. The timeline also described what would happen at least up to 2011.

Just recently the Microsoft Dynamics GP Product Management and Marketing team released a new stub titled Microsoft Dynamics GP "11" Preview with a link to the Dynamics GP "11" Presentation Pack (visit their site for more info). The presentation pack contained a Microsoft Office PowerPoint presentation describing the Dynamics GP roadmap up to GP "14".

To comment a bit on the roadmap, the Product team has a vision that extends beyond the initial 2011 scope delivered back in April, throughout to 2016, which quiets down rumors as to the future of Dynamics GP and reafirming Microsoft's real commitment. While the bullet points accompanying GP "12" and GP "14" are pretty vague, it's worth mentioning that GP "14" is contemplating a major user interface update. I won't be surprised to see more improvements to the GP ribbon and perhaps even extensibility of forms and reports with Visual Studio Tools for Applications. What is Visual Studio Tools for Applications? It's Microsoft's replacement for VBA. After all, VBA is old technology --reminiscence of Visual Basic 6 -- and served it's purpose already if you ask me.

What else to expect? Integration, integration, integration... tighter integration with Microsoft Office, tighter integration with Microsoft SharePoint Server, bigger-broader enhancements to BI, and even support for cloud computing deployments with SQL Azure.

Keep in mind as you read this article that these comments are my personal point of view based on the trends I am seeing across all Microsoft product stacks and do not represent the views and/or directions of Microsoft.

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Wednesday, September 23, 2009

How to startup GP with a default navigation page rather than the home page

So you want to be able to startup GP with a navigation bar option instead of the typical home page? This request was posted today by Mary Fetsch on the Microsoft Dynamics GP community public newsgroup.

After playing around with the navigation bar for a while and some head scratching, the light bulb went off... use a macro! One peculiarity about the navigation bar is, while click actions are off limits to the macro system -- the navigation bar is part of the .NET managed code application wrapper -- each option can be accessed with a combination of the Control key on the keyboard and a numeric sequence associated to the option. As such, Home can be accessed with the CTRL+1 keyboard combination; Financial, with the CTRL+2 combination, and so on.

The macro

The macro I created is the typical login macro documented in the Integration Manager manual with an extra touch: I recorded extra steps to close all windows and the keyboard combination for the default startup navigation option, in this case the Purchasing option. The macro looks like this:


# DEXVERSION=10.0.324.0 2 2
Logging file 'macro.log'
CheckActiveWin dictionary 'default' form Login window Login
MoveTo field Password
TypeTo field Password , 'somePassword'
MoveTo field 'OK Button'
ClickHit field 'OK Button'
NewActiveWin dictionary 'default' form sheLL window sheLL
NewActiveWin dictionary 'default' form 'Switch Company' window 'Switch Company'
MoveTo field 'OK Button'
ClickHit field 'OK Button'
NewActiveWin dictionary 'default' form sheLL window sheLL
NewActiveWin dictionary 'default' form sheLL window sheLL
NewActiveWin dictionary 'default' form syReminders window syReminders
ActivateWindow dictionary 'default' form sheLL window sheLL
CommandExec dictionary 'default' form 'Command_System' command CloseAllWindows
ActivateWindow dictionary 'default' form Toolbar window 'Main_Menu_1'
ShellCommand 'Navigate to \cmdNavigationPane\PurchasingButton\PurchasingAreaPage' # Purchasing
ActivateWindow dictionary 'default' form sheLL window sheLL

Once the macro was ready, all that's needed is to change the Dynamics GP application shortcut to launch and play the macro all at the same time, as follows:

"C:\Program Files\Microsoft Dynamics\GP\Dynamics.exe" Dynamics.set purchasing.mac

One thing I like about these type of user questions is, they are real life situations that can shave minutes from someone's daily routine making life a bit easier.

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Monday, September 21, 2009

Microsoft Dynamics GP v10 and supported virtualization platforms

The Windows Server Catalog site may just be one of the best kept secrets on the web. According to the About This Site page, "[t]he Windows Server Catalog lists thousands of hardware and software items compatible with the Microsoft Windows Server 2008 R2, Windows Server 2008 and Windows Server 2003 operating systems. In addition, products may also be compatible with other versions of Microsoft Windows as shown in each product details page."

In response to my friend Steve Endow's inquiry on Microsoft's support of vitualization environments and Dynamics GP, I went in quest of finding the answer since it is not always apparent where to find this information. The first place of course, the Systems Requirements page of CustomerSource/PartnerSource. On this page, you can clearly read the software and hardware virtualization platforms supported, but as usual the fine print is rather more interesting.

It turns out this page points to the Windows Server Catalog page where furthermore you can inquiry on other tested solutions by clicking on the Server Virtualization Validation Program site link.

The site has a Support Policy Wizard link that will take you to a wizard-based tool where you can select the products you would like to obtain support information about.

Next, in the product drop-down, you can choose any of the Microsoft products listed, in this case, Dynamics GP. Version 10 is the only release listed, but I am sure this will change in a couple years from now with the advent of new releases.

After clicking Next, the wizard presented a drop-down list with the supported virtualization technologies. Among the ones listed:

  • Microsoft Hyper-V
  • Cisco WAAS Virtual Blades 4.1
  • Novel SUSE Linux Ent Server 10 SP2
  • VMWare ESX 3.5 Update 2, 3, 4
  • VMWare ESXi 3.5 Update 3, 4
  • VMWare vSphere 4
  • Citrix XenServer 5, 5.5
But there had to be more, right? Right! The wizard allows you to check on the guest operating system configurations and processors along with the environment to verify which configurations have been tested and are currently supported.

As indicated in the screenshot, I decided to try something not too common: I selected Cisco WAAS Virtual Blades 4.1 as the virtualization technology, Windows Server 2008 R2 as the guest OS, and x64 as the OS architecture. When I pressed Next ...

...I was pleasantly surprised to see that Cisco WAAS Virtual Blades with Windows Server 2008 R2 (x64) was a supported platform. The good news is, as long as a platform and a configuration is supported you are able to obtain technical support.

Until next post!

Mariano Gomez, MVP
IntellPartners, LLC

Sunday, September 20, 2009

The Technology Corner - Windows 7 and Microsoft Dynamics GP 10.0 Update

In the previous article I reported having an issue with Support Debugging Tool not unchunking and generating a "Table not found" issue. After a couple of minutes online with my good friend David Musgrave he made me realize that unchunking applications with User Account Control activated can also cause the Dynamics application runtime engine to wreak havoc in the process.

After running Dynamics GP as administrator (only needed for unchunking the Support Debugging Tool) everything went just fine. One can make the general assumption that if you are installing any third party Dexterity-based application, then UAC must be disabled or Dynamics GP must be run as an administrator to allow chunk files to install properly.

PS. David took offense in the part where I said "SDT remains broken" as he felt I was blaming him. The problem is there will be little or nothing I can do to make up for this one, because the guy don't even drink Coca Cola or smoke anything... ah, I just remembered Veal Parmagiana!

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

The Technology Corner: Windows 7 and Microsoft Dynamics GP 10.0

For those of you who follow me on Facebook and Twitter, you probably already got first hand updates as I was going through rebuilding my laptop with the new Windows 7 and getting all my core applications installed. Most of you are aware that I am more of a technical guy, so hardware and applications performance is very critical.

Let's start with my laptop... I currently own a Dell XPS M1710 running Intel Centrino Duo core and 2.5GB in RAM. I know, yes! I use a gaming notebook taking advantage of the processing capabilities and the massive 17" screen. A little outdated when compared to the new XPS, but it still gets the job done!

The goal was to install the following software:

  • Windows 7 Enterprise
  • Microsoft Office 2007 Enterprise, including Microsoft Project 2007 and Microsoft Visio 2007
  • Microsoft SQL Server 2008 Standard with Service Pack 1
  • Microsoft Visual Studio 2008 Standard with Service Pack 1
  • Microsoft Dexterity 10 with Service Pack 4
  • Microsoft Dynamics GP 10 with Service Pack 4
  • Support Debugging Tool for Microsoft Dynamics GP 10
  • Visual Studio Tools with Service Pack 4 for Microsoft Dynamics GP
In addition, I needed to install Microsoft Silverlight 3, Microsoft .NET RIA Services, Microsoft Virtual Earth Control CTP, and Microsoft Dynamics GP Integration Manager 10 with Service Pack 4.

After all, I am also gearing up for the Microsoft Dynamics GP Technical Conference, so I really needed to showcase all the latest technology -- well, I would have loved to have Visual Studio 2010, but Visual Studio Tools is not compatible yet -- to you the developers out there.

The prep work
I started out by backing up my all files onto my home NAS and progressed from there with a checklist of the most important programs I needed after the Windows 7 installation was complete. My goal was not to have a straight upgrade from Windows Vista Service Pack 2, but rather a fresh install as mostly recommended by Microsoft anyways.

Once backups were ready and the inventory of applications was completed came the actual installation of Windows 7.

Windows 7 installation.
I popped my copy of Windows 7 Enterprise into the DVD drive and rebooted my laptop. The first surprise was the now graphical installation interface, a long shot away from the old DOS interfaces that plagued previous Windows installations. The interface was pretty intuitive to navigate. I essentially started by reformatting my existing partion. This is where the second surprised come to play. In previous installations of Windows, formatting a partition could take long minutes. Windows 7 completed the reformatting of my 76GB partition in less than 10 seconds. From there on, copying the files and extracting them onto the hard drive was pretty simple. The footprint was minimal too, occupying less than 3GB.

As a laptop user, my major concern is always drivers. Windows 7 did an excellent job recognizing all my laptop components including the wireless... this was awefully cool because, the OS could immediately access other components available online and perform some basic updates at the same time the installation was happening. The only dissapointment was my display driver. That I had to install from a pen drive that I prepared before reformatting just in case.

Once the final reboot was complete, I run the Windows Update to make sure nothing else was missing... and yes, they are already a few Windows 7 updates available. End to end, the OS took approximately 30 minutes to install, including the updates. The third surprise came then... Windows 7 was booting up three-fold faster than Windows Vista. It went from a painful 1.5-minute boot up process to less than 10 seconds. My laptop seemed to have regained some life, though I was a bit skeptic since I really hadn't loaded anything yet.

Programs installation

SQL Server 2008 Standard with Service Pack 1
Once the Windows 7 updates were installed, I moved on to SQL Server 2008 Standard installation. SQL Server installation was pretty straight forward, however, at the beginning of the install, Windows 7 warned me that this program was written for another version of Windows and presented me with a link as to where I could find the updates for SQL Server... now that's productivity. Windows 7 askmed me if I wanted to change the installer compatibility, and did so upon my acceptance of the message. The installation continued as usual and without any hiccups.
I then went to the SQL Server site and downloaded and installed Service Pack 1. In less than 15 minutes I was up and running with SQL Server 2008 with Service Pack 1. I restarted the laptop to test the boot up and surprisingly, nothing had changed as far as performance.

Microsoft Office 2007 Enterprise

MS Office installation went uneventful. However, when the installation was completed and I let couple minutes pass by, Windows 7 had already downloaded Office 2007 Suite Service Pack 2 and the required security updates for everything else installed at this point. I thought this would be a drag, because they were more than 35 updates between SQL Server, Office, and other driver components on my machine that needed to be applied. Wrong! When I clicked on the shut down button. Everything got installed and applied in one pass! No more multipass service pack installation bootups! Between the installation of MS Office 2007 and the service packs, I spent another 30 to 40 minutes. I also activated all the products during this time.

Microsoft Visual Studio 2008 Standard with Service Pack 1

So I then put the VS2008 DVD in the drive and began the installation. Again, nothing much to report here. Once the installation was complete, I ran Windows Update. VS2008 SP1 was next in line. That got applied successfully without any issues and the whole experience took 20 minutes tops. Other security components were installed, but this took less than 5 minutes.

Surprisingly enough at this point, my laptop's performance seem to hold steady...

Microsoft Dexterity 10 with Service Pack 4
Dexterity took less than 2 minutes to download, and 2 minutes to install... next!

Microsoft Dynamics GP 10 with Service Pack 4
Since the introduction of Feature Pack 1 with Service Pack 2, the GP installer had already incorporated changes to deal with .NET Framework and the newer operating systems. So I decided I would start my installation with the Feature Pack 1 with Service Pack 4 installer. Everything went fine until I launched Dynamics Utilities. It complained that it could not find BCP... hmm, then I remembered Vaidy's article on the subject when he was attempting to install on GP on Vista. It's easy to forget that Windows 7 also implements UAC -- not a sarcasm by the way. Once I ran Dynamics Utilities as administrator, between the creation of the DYNAMICS system database and the sample company, Fabrikam, some 20 minutes had passed.

I have to admit that throughout this process, my laptop "seemed to had regained its focus" on delivering what it was designed to deliver: peak performance for demanding gaming applications. This was no different for my business applications either and that made me think that Windows 7 was doing a really good job at keeping a low memory and disk overhead, giving all other applications the room needed to perform adequately.

Visual Studio Tools for Microsoft Dynamics GP
Installing VST was a bit tricky. I started with the SDK download available from PartnerSource only to find out that it was asking for an existing installation of Visual Studio 2005 or greater. Since it said "greater" I assumed VS2008 would be just fine, but the installer did not seem to recognize I had VS2008 installed. I thought for one instance that this would be the wall that would stop me in my tracks. I ran a Windows 7 compatibility analysis on the MSI and Windows 7 suggested to run it in compatibility mode "Previous Windows version". So I did, still the same error.

It turns out VST SP2 has an additional installer that checks for the existance of VS2008 and gives you the option to install the VST Templates for VS2005 or VS2008. Phew!! Sigh of releaf! The problem was not relaed to a compatibility issue with Windows 7. I moved on to download and install VST SP4 once the initial components were installed. Because of the issues I had, I wasted precious minutes in this step, so overall it took some 45 minutes and some swearing to get through.

Support Debugging Tool
I downloaded this baby from the Support Debugging Tool download page and attempted to extract directly into the Program Files\Microsoft Dynamics\GP folder and received a priviledge error -- UAC in action again. It was necessary to extract it into the My Documents folder then move to the GP folder.

I booted up GP to add the code and got prompted as such. However, after acknowledging the message I got the following error:

I have a feeling this error is Service Pack 4 related, rather than anything to do with Windows 7, but for now, SDT remains broken. I then had to rename the chunk file and move on.

Integration Manager
I began Integration Manager's installation very aware of Vaidy's findings with his initial installation test on Windows 7 RC, but I figured, I will once more test Windows 7 backward compatibility features. After all, this is one of the biggest selling points to customers to upgrade to Windows 7.

Everything began just fine... space requirements computed, files transferred, components registered, registry keys created. Surprisingly enough, after launching IM -- expecting it to bumb out -- everything was fine! I entered my registration keys and opened an integration just fine. I installed IM from the Feature Pack 1 with Service Pack 4 DVD image. Not sure if this had anything to do with my success, but there it was, up and running! The process took less than 4 minutes to complete.

All in all my laptop reinstallation took over 5 hours (including moving back files to the hard drive).

Before deciding to perform a Windows 7 upgrade, take in to consideration all the factors and applications your business is currently running. Check with each one of the manufacturers to validate compatibility. However, as an early technology adapter, I am pretty please with the results of this installation and can give Windows 7 two thumbs up!

I will certainly be performing more tests and will let you know of any issues I may encounter.

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Friday, September 18, 2009

Integration Manager 10 INI settings

The Integration Manager parameter file, Microsoft.Dynamics.GP.IntegrationManager.ini, provides a few keys that allow the application to perform certain actions according to the values and the sections in which these parameters are initialize . Here is a list of keys for the initialization file per section within the file:

IMBaseProvider section
This section controls the overall behavior of the Integration Manager application.

AutoUpgradeIntegrations= 0/1
Prompts IM to check whether to upgrade an integration or not.

Time allotted to execute a particular IM operation. If the operation is not successful in the time alloted, the record integration will fail.

HideMsgBox= False/True
Hides IM registration window during the application launch.

UseOptimizedFiltering= False/True
Allows you to maintain the same sorting as the original source. One note that I would make is that the following switch was put in more for performance. If you notice that your data is not coming in the same order as your source file you can set this switch to False and a lot of times that corrects the issue. If you do try changing this setting to false you will want to make sure you are on the latest service pack for version 10.0 of IM which is service pack 4.

IMGPPrv section
This section controls the behavior of the IM Standard integration adapter.

Shows the Dynamics GP interface during the integration process. The user will be able to observ how data is recorded. This feature is particularly useful if troubleshooting a problem record.

Refreshes the interface when data is being integrated. Works in conjunction with ShowDynamics.

Suppresses checking of Dynamics GP windows status, this is, whether they are close or open.

Suppresses any integration status message box during the integration until records are fully integrated.

IMGPeConnect section
This section controls the behavior of the IM's eConnect adapter.

No information available on this switch.

HideMsgBox= False/True
Suppresses any IM message during the integration until the integration is complete.

Also one other note, on prior versions of IM you may remember a DumpMacro switch that would basically run a trace of what IM was trying to pass in. That switch is no longer used on version 10.0. Instead IM uses the Microsoft.Dynamics.GP.IntegrationManager.exe.config file. To create a trace file edit the configuration file as follows:

1. In Notepad, open the Microsoft.Dynamics.GP.IntegrationManager.exe.config file.

2. Change the value of the IMTracingOn switch to 1 as follows:

<add name="IMTracingOn" value="1"/>

3. Change the value of the TraceGPDexInstructions switch to 1 as follows:

<add name="TraceGPDexInstructions" value="1"/>

These configuration settings are only used by Integration Manager with the Standard adapter.

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Wednesday, September 16, 2009

What do those strage reference codes in GL mean?

The following applies to inventory items with a valuation method of Average Perpetual, LIFO Perpetual, or FIFO Perpetual items.

As of the release of Dynamics GP 9.0 the system will automatically generate General Ledger adjustment entries for situations where an item was sold or consumed from inventory, but its cost was later changed.

In earlier versions of GP, adjustments to Inventory and COGS needed to be entered manually to correct the accounts used by the transactions that sold or consumed the items. As of Dynamics GP 9.0, those adjustments will now be automatically generated. You will see different codes in GL (MCTERCT for example) depending on the type of transactions entered and timing of the transactions.

Unfortunately at this time there isn't a document describing the codes for Manufacturing. However, here are some codes based on various sources of info:

1. MCTERCT - If the items were issued in the Component Transaction Entry window and then the invoice is completed the adjustment will have a prefix of MCTERCT

2. MRCTRCV - If the items were issued in Mo Receipt Entry (they are backflushed) and then the invoice is complete the adjustment will have a prefix of MRCTRCV.

3. MCLSRCV - If the items were issued in the MO Close process (the MO was partially received and more backflushed items were issued during the close) and then the invoice is completed the adjustment will have a prefix of MCLSRCV.

As you can see the naming conventions follow a certain pattern. MCTE transactions come from the Component Transaction Entry window. MCLS transactions come from the MO Close process. MRCT transactions come from the MO Receipt entry window.Here is a complete list of the origins which may be used on Journal Entries that result from a change in average cost that affects sold receipt layers.

The following values will be used at the beginning of the Reference field for the specified originating document types:

1. BOM – Assembly Transaction
2. INV – invoice from the Invoicing module
3. IVT – inventory transfer
4. IVA – inventory adjustment
5. IVV – inventory variance
6. SALES – sales invoice from Sales Order Processing
7. PRTN – purchase return
8. MCTE – for a transaction that originated in Manufacturing Component Transaction Entry
9. MRCT – manufacturing receipt
10. MCLS – manufacturing close, including regular close and Quick MO
11. STCK – stock count variance
12. FSSC – field service Service Call
13. FSRMA – field service RMA
14. FSRTV – field service RTV
15. FSWO – field service Work Order
16. PA – project accounting
17. POP – close a PO line in Edit PO Status
18. RECON – created by Inventory Reconcile
19. CONV - created by an upgrade conversion
20. MCTERCT - If the items were issued in the Component Transaction Entry window and then the invoice is completed the adjustment will have a prefix of MCTERCT

21. MRCTRCV - If the items were issued in Mo Receipt Entry (they are "backflushed") and then the invoice is complete the adjustment will have a prefix of MRCTRCV.

22. MCLSRCV - If the items were issued in the MO Close process (the MO was partially received and more “backflushed” items were issued during the close) and then the invoice is completed the adjustment will have a prefix of MCLSRCV.

There is a report you can install to better help determine where the accounts are pulling from. It won’t help for those entries already created in the system, but should provide you with the information related to the GL entries going forward. If you are on SP3 for Microsoft Dynamics GP 10.0 then you can add the following line under the [General] header of the Dex.ini file of your GP code folders:


When you post a transaction, be sure you are printing the Cost Variance journals. Doing so will cause the PRUD (Purchase Receipt Update Detail) reports to print. This report will give a break down of any/all transactions that make up a particular variance transaction. If you do this then any of the cost adjustment transactions that will be written to the GL will also include the following information in these fields (GL20000):

ORCTRNUM (Originating Control Number) - this will now hold the original document number of the decrease item transaction affected by the cost variance adjustment.

ORMSTRID (Originating Master ID) - this will hold the item number that was revalued on the decrease item transaction.

ORDOCNUM (Originating Document Number) - this will now hold the original receipt number from the Inventory Purchase Receipt (IV10200) table that had a revaluation and forced the cost adjustment.

ORMSTRNM (Originating Master Number) - this will now hold the text value of "IV Ripple Transaction" to make it easier for users to identify the cost adjustments flowing into the GL.

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Monday, September 14, 2009

GPUG now in full gear in Chicago

The GPUG Summit is now in full gear in Chicago and you can check the first pictures on the Microsoft Dynamics Community Facebook wall.

"Spin the Wheel" chance to win a Convergence 2010 pass and 120GB Zune

Microsoft Dynamics Communities conference booth

Is that Mark Rockwell?

The UnRuly Ladies

The GPUG Summit features a wealth of information-packed Educational Sessions and Role-Based Tracks that deliver Dynamics GP knowledge and experience designed to help organizations optimize the functionality, flexibility, performance and return on investment benefit offered by Dynamics GP.

Be sure to keep up with the Facebook wall or check the live blog at

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Sunday, September 13, 2009

RW - Working with POSTNET barcodes for US zip codes

The Postal Numeric Encoding Technique (POSTNET) is a barcoding system developed by the United States Postal Service to assist with automatic mail sorting and routing. The POSTNET barcode uses a combination of half-bars and full-bars to encode the zip code that appears on a mail piece. The barcode starts and ends with a full bar (often called a guard rail or frame bar and represented as the letter "S" in the USPS TrueType Font).

In the United States, zip codes can be of 5 digits, 9 digits (also known as Zip+4), or 11 digits in the case of a specific delivery point. Each digit in the zip code is represented by 5 bars. Therefore a 5-digit zip code is represented by 25 bars. In addition, to ensurePOSTNET accuracy during mail processing, a check digit, which is five bars, is calculated and added to the zip code. Hence a 5-digit zip code would render a total of 32 bars: 25 bars for the 5-digit zip code + 5 bars for the check digit + the 2 enclosing guard rail bars. Hence, Zip+4 uses 52 bars, and a delivery point uses 62 bars.

To calculate the check digit, each digit in the zip code is added. The result is then subtracted from the nearest multiple of 10. For example, if each digit in the zip code 33076 is added, 3+3+0+7+6 = 19, and we subtract from the nearest multiple of 10, number 20, then the check digit is 1. Mathematically speaking 10 - (digit-sum mod 10). This will yield the following S330761S. This number is then represented by the following barcode (including the guard rails, represented by "S"):

While based on a binary system, the weight of each bar is different than in standard binary. The weight of each bar is as follows:

The following illustration shows are representation of all numbers:

To add zip code barcoding capabilities to a Report Writer report, for example an Invoice or a Check, you must first download and install the fonts. You can get a set of fonts from here. To install the fonts (the TTF files in the zipped file), extract the fonts to your My Documents folder, then copy them to your Windows\Fonts folder.

1) Open Report Writer and select the SOP Blank Invoice Form. Click the Layout button to open the report in the Layout window.

2) Add the RM_Customer_MSTR_ADDR.Zip field to both Report Header and Page Header sections. Set the fields properties to Invisible.

3) Create a string calculated field called (C) Postnet. Assign the RM_Customer_MSTR_ADDR.Zip field to this calculated field as shown in the picture:

4) Add the (C) Postnet calculated field to the Report Header and Page Header sections. Change the font to IDAutomationSPOSTNET. By now, your report layout should look like this:

5) Add the report to VBA. Go to Tools > Add Report to VBA.

6) Select all 4 fields, the 2 on the report header and the 2 on the page header and add them to VBA. Go to Tools > Add Fields to VBA.

7) Open the VBA Editor, locate the SOPBlankInvoiceForm (Report) object in the Project Explorer , double-click and add the following code:

Public Function EncodeZip(pZip As String) As String
    Dim i As Integer
    Dim sZip As String
    Dim digitSum As Integer
    Dim checkDigit As Integer
    sZip = "S"
    digitSum = 0
    For i = 1 To Len(pZip)
        If IsNumeric(Mid(pZip, i, 1)) Then
            ' Concat the digit
            sZip = sZip & Mid(pZip, i, 1)
            ' Add up the digits
            digitSum = digitSum + CInt(Mid(pZip, i, 1))
        End If
    Next i
    ' Calculate check digit
    checkDigit = 10 - (digitSum Mod 10)
    sZip = sZip & CStr(checkDigit) & "S"
    EncodeZip = sZip
End Function

Private Sub Report_BeforePH(SuppressBand As Boolean)
    Dim sZip As String
    sZip = Zip
    sZip = EncodeZip(sZip)
    CPostnet = sZip
End Sub

Private Sub Report_BeforeRH(SuppressBand As Boolean)
    Dim sZip As String
    sZip = Zip
    sZip = EncodeZip(sZip)
    CPostnet = sZip
End Sub

Compile the code.

8) Return to Microsoft Dynamics GP saving all changes as you exit.

9) Grant security to the modified report. Print an invoice to test.

I hope you found this article interesting and the implementation very simple. You can find the fonts and package file for this project at the bottom of this article.


Postnet Fonts - Click here
v10 SOP Blank Invoice Form report - Click here

Until next post!

Mariano Gomez, MVP
IntellPartners, LLC

Tuesday, September 8, 2009

Code Named "Version 11" now formally Microsoft Dynamics GP 2010

V11? No more. I could not help noticing that on the Microsoft Dynamics GP Technical Conference 2009, they were no references to Microsoft Dynamics GP "v11", and rather every sessions GP related has introduced the future product as Microsoft Dynamics GP 2010.

It's no secret the Product Management and Marketing team had been thinkering on whether to continue with the consecutive versioning, or adhere to the year versioning approach used by all other Microsoft products. I guess it's clear now! The new product release name coincide with multiple "2010" products we will see from Microsoft:

Microsoft Office 2010
Microsoft SQL Server 2010, code named Killimanjaro
Microsoft SharePoint Server 2010
Microsoft Exchange Server 2010

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Microsoft Dynamics GP Technical Conference 2009 Update

It's official! I will be co-presenting two sessions with no one other than Mr. David Musgrave at the next Microsoft Dynamics GP Technical Conference, to be held in Fargo, North Dakota from November 9 through November 11.

This is my first experience presenting at a Microsoft event and I am sure to have a lot of fun delivering it, but also sharing knowledge and getting to meet a lot of you who are planning to be there. The following is a summary of our sessions:

Session Title: Customizing the Microsoft Dynamics GP Client with Visual Studio Tools, Dexterity and Modifier with VBA
Presenters: David Musgrave, Mariano Gomez
Session Description: Get an in-depth analysis of the various client-side customization tools for Microsoft Dynamics GP, including Modifier with Visual Basic for Applications, Dexterity, and Visual Studio Tools for Microsoft Dynamics GP. This session will help you understand how each of the tools can be used to create user-interface customizations as well as help you develop the ability to make sound decisions on the best tool for a particular purpose.

Session Title: Troubleshooting Your Developed Solution
Presenters: David Musgrave, Mariano Gomez
Session Description: Do you know the vital development considerations necessary for effectively troubleshooting a packaged solution? Learn them and much more! We will highlight best practices, illustrate real-world examples, and provide and discuss requirements for the Certified for Microsoft Dynamics program. Plus, we will show how the Support Debugging Tool for Microsoft Dynamics GP can be used to help with both development and system administration.

Register now for great prices, but don't forget to review some of the wonderful training classes that will be available before and after the conference event.

Related Articles

Microsoft Dynamics GP Technical Conference 2009 - Click here

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Monday, September 7, 2009

The Technology Corner: Integrating Silverlight and Virtual Earth with Dynamics GP

Starting today, I will introduce a weekly series dedicated to explore other Microsoft technologies that may seem totally unrelated to Dynamics GP. These articles are based on experiences acquired through pet projects. These are projects that have not made it beyond my computing lab and have become a true passion of mine. My intention is to present them to you the reader with only one goal in mind: show how the use of technology can enhance user interaction with data. The articles will present practical samples of these technologies and how they could perhaps be incorporated into your Dynamics GP development efforts.

Part I: The Virtual Earth Silverlight Map Interface

Today we will explore Silverlight and Microsoft Virtual Earth.

Silverlight was originally introduced as a video streaming plug in, but has rapidly evolved into a feature-rich interactive web applications development framework. In turn, Microsoft Virtual Earth, now Bing Maps for Enterprise, is a set of controls and APIs that allow organizations to take advantage of the latest mapping technology to create unique customer experiences by delivering locally relevant information.

The project

As simple as it may sound, this project allows a user, say for example an account executive traveling to see a customer, to obtain not only geographical location information about the customer, but also view important account information on the map interface.

Getting Started

For this project you will need the following laundry list of development tools and technology components:
That's it!

For having no prior Silverlight or Virtual Earth development experience, this first part of the project went extremely smooth. Of first order, was the creation of the Silverlight Application project in Visual Studio.

After entering the project name, and clicking Ok, I was presented with the option of hosting my Silverlight application in a new Web site and to define the project type of my new Web application. These seemed like logical choices, so I sticked to the defaults. Another option (topic of a future article) is the ability to enable .NET RIA services for my Silverlight application.

Following Microsoft's definition:

Microsoft .NET RIA Services simplifies the traditional n-tier application pattern by bringing together the ASP.NET and Silverlight platforms. The RIA Services provides a pattern to write application logic that runs on the mid-tier and controls access to data for queries, changes and custom operations. It also provides end-to-end support for common tasks such as data validation, authentication and roles by integrating with Silverlight components on the client and ASP.NET on the mid-tier.

However, for this project, I was going to keep it simple and work with LINQ to SQL to provide data access to my Silverlight application.

After clicking on the OK button, the solution was setup. In reviewing the Solution Explorer, I had a Silverlight client application and a web application as part of the overall solution.

Silverlight client applications also make use of a XAML (pronounced "zamel") page to define and build user interface elements. XAML is an XML-based language that may be used to define graphical assets, user interfaces, behaviors, animations, and more. It was introduced by Microsoft as the markup language used in Windows Presentation Foundation, a desktop-oriented technology that is part of the .NET Framework 3.0. It was designed to help bridge the work between designers and developers in creating applications. In the case of the application, a MainPage.XAML was added.

Of second order, I needed to add a reference to my Microsoft Virtual Earth Map Control. Since this is part of the UI, it was clear enough that a References was needed on the Silverlight client application.

With a reference to the assembly, I could now add two lines of code -- literally -- to the XAML page to incorporate a map interface to my application: one to reference the map control assembly, and the other to give the map some startup parameters.


<UserControl x:Class="VESilverlight.MainPage"
xmlns:d="" xmlns:mc=""
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<m:Map Name="custMap" Center="41.900632,-87.629631"></m:Map>

I then compiled the code and ran it in debug mode and to my surprise, I had a fully working map solution! Talking about productivity! Wow!

But, while I could make use of the map, this was only the beginning of the work ahead. For now, enjoy this first part. Try it out and let me know what you think.

I leave you with this MIX09 video presentation of Chris Pendleton, Virtual Earth Technical Evangelist at Microsoft, who explains the Virtual Earth Map Control in more detail.

Until next post!

Mariano Gomez, MVP
Maximum Global Business, LLC

Saturday, September 5, 2009

How many Report Options can I create for any given report?

I fielded this question just recently in the newsgroup, and have to admit, I had to dust off my old training manuals and do some inquiries in my Dexterity help file. Bottom line, this could well be a question worthy of a certification exam.

Straight to the answer: you can have up to 32,767 report options for any given report. The number comes from the size limitations imposed to the Dexterity drop-down list control.

You may be saying, "but, I was told that you can have 32, where does the number 32 come from?". 32 is the number of report options that can be assigned to any given report group. Now this limitation stood up to version 8 (see KB article 849505) and I am not sure it has changed for v9 and v10, but if you test it out and find a different value, I would love to hear from you.

Until next post!

Mariano Gomez, MIS, MCP, MVP
Maximum Global Business, LLC