Saturday, December 24, 2011

Merry Christmas from The Dynamics GP Blogster and Family

Couple days ago, I blogged about some of the top articles I wrote this past year. Today, I am in Discovery Bay (an hour away from crowded Montego Bay), Jamaica enjoying the holiday season with family and friends and looking forward to get some rest.


Discovery Bay, Jamaica

Whether you celebrate Christmas, Hanukkah, Eid-al-Adha, Kuanza, etc., you know how important it is to be with love ones around this time of the year. So, on behalf of my family and I, we wish you a Merry Christmas and hope you had a great 2011 too.

I now leave you with this great song from Michael Buble, from his new album, Christmas.




Enjoy!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/

Thursday, December 22, 2011

The Dynamics GP Blogster's best articles of 2011

It's simply amazing! When it's all said and done, I will have published close to 160 articles for this year alone. Sometimes I find myself asking, "what will I write about next?". The truth is, I simply don't know or can't tell: I enjoy writing about issues I work on, challenges in my implementations, conferences I attend, etc. And the outlets to get my thoughts out just keep increasing. I am actively for:

This site
MSDynamicsWorld.com
Microsoft Dynamics Community

I also have Facebook and Twitter accounts to keep up with. So, when I look back at 2011 to choose the best articles of this year, I must consider the various outlets where they are published. After all, The Dynamics GP Blogster is no longer a site, but a person... me! With that said, these are some of the best articles I personally enjoyed writing this year:

1. The Microsoft Dynamics GP Technical Conference 2011 - The Technical Conference was a great experience up in Fargo, ND. I definitely enjoyed presenting with my dear friend and Microsoftie, David Musgrave. It's always an awesome challenge to introduce technical topics to a bunch of propellerheads.

2. Microsoft Dynamics Convergence Atlanta 2011 - Who could forget Convergence in Atlanta? Not only was the conference in my backyard, but it also gave me a chance to enjoy myself presenting while not having to worry about sleeping in a hotel. It also gave me the opportunity to catch up with a number of my fellow MVPs who live in the sorrounding states. Convergence is always a fun experience! See you in Houston 2012.

3. Hybrid Development for the Managed Code Developer - At Convergence, I got a number of request from Visual Studio developers to dive a bit into hybrid solutions using Dexterity and VST, given the fact that they had attended the session that David and I presented on development. The article certainly got a lot of hits and truly enjoyed writing it, since the issue was a bit obscure at the time.

4. Microsoft Dynamics GP "12" Web Client Architecture - It took me a good amount of research and using some of my charm with the Product Management and Development teams in Fargo to get the information I published in this series. It certainly paid off! After the articles were released, including a follow up in my Microsoft Dynamics Community column, it was clear that everyone wanted to know more about codename GP "12".

5. The Future of Microsoft Dynamics GP: 5 Cool Technologies You Should Watch For (and Learn) in the Coming Years - This article had a lot of traffic on MSDynamicsWorld as I was coming off the Tech Conference in Fargo when I wrote it. Interestingly enough, I highlighted how Microsoft Dexterity would be one of the 5 cool technologies to keep an eye on. With the advent of GP "12", doubts anyone?

6. Running Fixed Assets Depreciation causes Microsoft Dynamics GP to "hang". This was an issue I faced after a very long upgrade from GP 9.0 to GP 2010 R2. I consider it one of the best articles, because little did I know people would write back to let me know they had run into the same issue and coudn't figure out why.

7. Microsoft Dynamics GP, the next generation of end-user customization tools? If you going to speculate, it needs to be based on facts. There's nothing more rewarding to a writer than seeing the interest his/her publications generate. This article has had closed to 2000 views since it short release in September. But honestly, who won't like to see Integration Manager being beefed up with Visual Studio Tools for Applications or even PowerShell.

8. GPUG Summit 2011 Las Vegas - Being in Las Vegas delivering training and presenting for the user community was an awesome experience! But, being able to capture that experience and share it with the rest of the community was even more gratifying. I can't stress the importance of joining GPUG and attending these events.

9. Codename GP "12" preliminary features - Along with the Microsoft Dynamics GP "12" Web Client Architecture series, this particular series added some "meat and potatoes" behind what could be expected in the next Microsoft Dynamics GP major release. If you have not looked into the features a suggest you review the series.

As you can see, many of the "best articles" selected were truly complete series of articles and represent my touring throughout the country at conferences and working along with folks at Microsoft to get the scoop on what's in store for the next release of GP. Things will only get more exciting for next year with Convergence in Houston, GPUG Summit in Seattle, and the awaited GP "12". So stay tuned to The Dynamics GP Blogter and thank you very much for your readership throughout this year.

Until next post!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/

Monday, December 12, 2011

Microsoft Dynamics GP displaying overlapping text on home page

Scouting the Microsoft Dynamics GP Partner Online Technical Forum, I came across this interesting case, in which a partner reported seeing overlapping options text on the home page and missing picture bars. The problem, as reported by the partner, was only happening with a user on a specific workstation, but not with his domain account and Microsoft Dynamics GP user.

Home page with overlapping text and missing pictures
Initially, the partner attempted to reduce Internet Explorer's Internet zone's security to the bare minimum, which would allow all home page scripts to be executed, with no results. Still puzzled, they began running a ProcMon trace on Microsoft Dynamics GP to look for ACCESS DENIED events, as instructed by Microsoft's Partner Online Technical Community support engineer, Jason Larson.

The partner recorded all trace results, but SUCCESS, and found the following being displayed several times in the log:

FILE LOCKED WITH ONLY READERS
FAST IO DISALLOWED
NAME NOT FOUND
REPARSE
NO MORE ENTRIES
NAME COLLISION

They also reported one message that appeared several times, NAME NOT FOUND pointing to the registry entry:

HKU\S-1-5-21-2191439342-1828296097-4069510072-1121\Software\Microsoft\Internet Explorer\Security\DisableSecuritySettingsCheck

The partner also noticed that if they assigned the affected users to the Domain Administrators group via Active Directory, they would no longer experience the issue. The other groups they are in have Full Access to the Microsoft Dynamics GP program files folder.

The partner also found only one ACCESS DENIED entry in the trace pointing to the following key:

HKEY_CLASSES_ROOT\Wow6432Node\MIME\Database\Content Type\application\futuresplash

After doing some research, the partner assigned Read permissions on the above key and the problem went away.

You can find more information on and download Process Monitor over at the Windows Sysinternals team blog at:

http://technet.microsoft.com/en-us/sysinternals/bb896645

Until next post!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/

Tuesday, December 6, 2011

The Dynamics GP Blogster's YouTube Channel launches with Decisions Fall 2011

It was long overdue! However, I had to wait for the right time to do this and it finally came with Decisions Fall 2011 - Dynamics GP Day. Today, my presentation on 5 Support Debugging Tool features you should be using with Microsoft Dynamics GP, featured 5 clips that are now available on my new YouTube channel for your viewing pleasure.
If you had wanted to learn about the basic features in Support Debugging Tool, now you can visit The Dynamics GP Blogster YouTube Channel to watch the videos. They are recorded in full HD, scalable from 360p to 1080p - the audio quality is close to CD quality.

Keep checking the Channel, since I will be posting more videos around some of the cool Microsoft Dynamics GP technologies. You can find a link to The Dynamics GP Blogster YouTube Channel on the left frame of this blog.

Until next post!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/

Monday, December 5, 2011

Granting Access and Binding Defaults when recreating SQL Tables: a follow up

In his most recent article, Granting Access and Binding Defaults when recreating SQL Tables, my good friend, David Musgrave, points out how to drop and re-create a Microsoft Dynamics GP object with the SQL Server Management Studio (SSMS) database object scripting capabilities.

His article overall addresses issues with objects not being properly upgraded from previous releases of Microsoft Dynamics GP to the version you are trying to upgrade to, and how to deal with these issue, so please read the articles as they contain valuable upgrade tips.

However, in his article, David points out that SSMS does not generate the object permissions and bindings necessary, hence the reason for the script he created and attached to his article. The bottom line is, these are configurable settings under SSMS's SQL Server Object Explorer options. To activate scripting of permissions and bindings in SSMS, follow these steps:

1. Open SSMS and go to the Tools | Options menu. This will open the Options window. Locate the SQL Server Object Explorer options and expand, then highlight Scripting to activate all scripting options.

SQL Server Management Studio Options window
2. Under Object Scripting Options, change Script Permissions to True.

Script permissions option
3. Under Table and view options, change Script bound defaults and rules to True.

Script bound defaults and rules
4. Click Ok to acknowledge all changes and exit the Options window.

Now let's test this... if we choose to script the SOP10110 table referenced in the sample script provided by David in his article, the following are the results:

USE [TWO]
GO

IF  EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[dbo].[CK__SOP10110__ENDDAT__41320FDC]') AND parent_object_id = OBJECT_ID(N'[dbo].[SOP10110]'))
ALTER TABLE [dbo].[SOP10110] DROP CONSTRAINT [CK__SOP10110__ENDDAT__41320FDC]
GO

IF  EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[dbo].[CK__SOP10110__STRTDA__42263415]') AND parent_object_id = OBJECT_ID(N'[dbo].[SOP10110]'))
ALTER TABLE [dbo].[SOP10110] DROP CONSTRAINT [CK__SOP10110__STRTDA__42263415]
GO

USE [TWO]
GO

/****** Object:  Table [dbo].[SOP10110]    Script Date: 12/05/2011 08:49:26 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SOP10110]') AND type in (N'U'))
DROP TABLE [dbo].[SOP10110]
GO

USE [TWO]
GO

/****** Object:  Table [dbo].[SOP10110]    Script Date: 12/05/2011 08:49:26 ******/
SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING OFF
GO

CREATE TABLE [dbo].[SOP10110](
 [PRCSHID] [char](15) NOT NULL,
 [DESCEXPR] [char](51) NOT NULL,
 [NTPRONLY] [tinyint] NOT NULL,
 [ACTIVE] [tinyint] NOT NULL,
 [STRTDATE] [datetime] NOT NULL,
 [ENDDATE] [datetime] NOT NULL,
 [NOTEINDX] [numeric](19, 5) NOT NULL,
 [PROMO] [tinyint] NOT NULL,
 [CURNCYID] [char](15) NOT NULL,
 [DEX_ROW_ID] [int] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PKSOP10110] PRIMARY KEY NONCLUSTERED 
(
 [PRCSHID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_CHAR]', @objname=N'[dbo].[SOP10110].[PRCSHID]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_CHAR]', @objname=N'[dbo].[SOP10110].[DESCEXPR]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_INT]', @objname=N'[dbo].[SOP10110].[NTPRONLY]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_INT]', @objname=N'[dbo].[SOP10110].[ACTIVE]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_DATE]', @objname=N'[dbo].[SOP10110].[STRTDATE]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_DATE]', @objname=N'[dbo].[SOP10110].[ENDDATE]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_MONEY]', @objname=N'[dbo].[SOP10110].[NOTEINDX]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_INT]', @objname=N'[dbo].[SOP10110].[PROMO]' , @futureonly='futureonly'
GO

EXEC sys.sp_bindefault @defname=N'[dbo].[GPS_CHAR]', @objname=N'[dbo].[SOP10110].[CURNCYID]' , @futureonly='futureonly'
GO

GRANT DELETE ON [dbo].[SOP10110] TO [DYNGRP] AS [dbo]
GO

GRANT INSERT ON [dbo].[SOP10110] TO [DYNGRP] AS [dbo]
GO

GRANT SELECT ON [dbo].[SOP10110] TO [DYNGRP] AS [dbo]
GO

GRANT UPDATE ON [dbo].[SOP10110] TO [DYNGRP] AS [dbo]
GO

ALTER TABLE [dbo].[SOP10110]  WITH CHECK ADD CHECK  ((datepart(hour,[ENDDATE])=(0) AND datepart(minute,[ENDDATE])=(0) AND datepart(second,[ENDDATE])=(0) AND datepart(millisecond,[ENDDATE])=(0)))
GO

ALTER TABLE [dbo].[SOP10110]  WITH CHECK ADD CHECK  ((datepart(hour,[STRTDATE])=(0) AND datepart(minute,[STRTDATE])=(0) AND datepart(second,[STRTDATE])=(0) AND datepart(millisecond,[STRTDATE])=(0)))
GO

Note that the name of your constraints may be different, however note that all permissions are granted to the DYNGRP role and that all defaults are properly binded for each currency, date, char, and integer data types.

As usual and if nothing else, you now have 2 methods of dropping and creating SQL Server objects, granting permissions and binding defaults.

Until next post!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/

Terminal Server: Dynamics.exe encountered a problem and needed to close

Just recently I assisted a partner with an issue they were having on a Terminal Server environment, after upgrading from Microsoft Dynamics GP 9.0 to Microsoft Dynamics GP 2010.

Upon launching Microsoft Dynamics GP, an end-user was receiving the error shown below:

Dynamics.exe Error

Clicking on the hyperlink for the error detail showed the following:
Error Signature

I have faced a number of issues of this type in the past and typically they are all narrowed down to corrupt forms and/or reports dictionaries - both Dynamics and third-parties. However, this seemed different, since other Terminal Server users were not experiencing the same issue.

The Event Viewer, however, showed a bit more details about the issue:
Event Viewer
The Event Viewer information was in effect confirming that the faulting application was indeed the Runtime Engine, Dynamics.exe. However, interestingly enough, it was showing that the faulting module was the msvcr90.dll.

In doing some search, I confirmed that the component in question was a part of the Microsoft Visual C++ 2008 SP1 Redistributable Package (x86).

The Microsoft Visual C++ 2008 SP1 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run applications developed with Visual C++ SP1 on a computer that does not have Visual C++ 2008 SP1 installed.

This package installs runtime components of C Runtime (CRT), Standard C++, ATL, MFC, OpenMP and MSDIA libraries. For libraries that support side-by-side deployment model (CRT, SCL, ATL, MFC, OpenMP) they are installed into the native assembly cache, also called WinSxS folder, on versions of Windows operating system that support side-by-side assemblies.

The Microsoft Dynamics GP Runtime Engine (Dynamics.exe), was originally developed in C++ and has since evolved to include interoperability with the .NET Framework, needed to develop some of the most advanced aspects of the application.

I had the partner download and reinstall the Microsoft Visual C++ 2008 SP1 Redistributable Package (x86), found at the Microsoft Download Center.

http://www.microsoft.com/download/en/details.aspx?id=5582

After a couple hours, the partner confirmed that the issue was solved... another one bites the dust!

Until next post!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/

Thursday, December 1, 2011

Resetting GP desktop position and size with the Support Debugging Tool

Just recently I worked on an issue being experienced by several Microsoft Dynamics GP users in a Citrix environment. The users would report that, when double-clicking on the Microsoft Dynamics GP application launch icon, the program would "automatically minimize".

In doing some digging, I remembered a few Dex.ini settings that control whether the Microsoft Dynamics GP desktop shows maximized upon start up and the position at which the desktop appears. So, I took my good ol' friend Notepad and edited the DEX.INI to find the following:

[General]
.
.
WindowMax=FALSE
.
WindowPosX=1605
WindowPosY=902
WindowWidth=1200
WindowHeight=625
Sample DEX.INI entries










As you can imagine, this problem can be easily replicated if you have a dual monitor and move the GP desktop off to a second monitor or by reducing the desktop size and moving the window off screen.

The fix is also pretty simple indeed. Reset the WindowMax key value to TRUE and bring the WindowPosX and WindowPosY key values back to some manageable parameter values, for example 150 and 150. End of the problem, right? Not quite.

The client then requested to put the proper controls in place to prevent this from happening in the future. In some environments where I have been, system administrators have simply decided to make the Dex.ini file read only to avoid any changes being written to the file. However, as my good friend David Musgrave over at Developing for Dynamics GP explains in his article Why making the Dex.ini file read only is evil, this is not such a good idea as it can cause a number of headaches given the dependency Microsoft Dynamics GP has on the key file.

Of course, here's where the Support Debugging Tool comes into play.

The Support Debugging Tool's Dex.ini Configuration feature allows a system administrator to manage individual key file settings at his/her discretion, with the ability to persist the key values for all Microsoft Dynamics GP clients and their respective Dex.ini file. There are 4 deployment scenarios where this can be very useful:

1. In a Server and Workstation(s) scenario, where the server and workstations each will have a copy of the Microsoft Dynamics GP client - hence, each workstation will have its own Dex.ini file.

2. In a Terminal Server or Citrix environment with a single instance of the Microsoft Dynamics GP client - hence a single Dex.ini file.

3. In a Terminal Server or Citrix environment with a single instance of the Microsoft Dynamics GP client, but multiple Dex.ini files, each stored at the user profile level.

4. In a load-balanced Terminal Server or Citrix environment where Microsoft Dynamics GP runs on each server participating in the farm - hence, each server will have its own Dex.ini file.

However, and in all cases for Dex.ini Configuration to work effectively, the Support Debugging Tool's Debugger.xml settings file must be shared (in a central location on the network) and reachable by all Microsoft Dynamics GP clients, regardless of the deployment method. To share the Debugger.xml, you must change the path to the file under the Dex.ini Settings option of the Support Debugging Tool as shown below:

Support Debugging Tool's Dex.ini Settings window

For more information on installing the Support Debugging Tool, see Installing the Support Debugging Tool for Microsoft Dynamics GP FAQ over at Developing for Dynamics GP.

You can then use the Dex.ini Configuration window to control the window size and position for all workstations as shown below:

Support Debugging Tool's Dex.ini Configuration Window

One more thing to keep in mind, is to set the Path Default Setting as indicated above to make sure all workstations inherit the same values automatically.

That's it!

Now that you know how to avoid the headache, go an install the Support Debugging Tool and come to my MSDynamicsWorld Decisions Fall 2011 session on the subject.

Until next post!

MG.-
Mariano Gomez, MVP
IntellPartners, LLC
http://www.IntellPartners.com/