Tuesday, October 26, 2010

Why you should care about Microsoft Dexterity

My new opinion column, IMHO with The Dynamics GP Blogster, has a new article: Why you should care about Microsoft Dexterity. In this article I take a historical perspective on software vendors and their tools environment and provide some arguments to customers and developers alike for keeping up the love for Dex. Hope you find this article interesting. Don't forget to leave your comments either way.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Monday, October 25, 2010

Microsoft Dynamics GP 2010 map buttons not drilling down to the street level

If you use the map buttons in Microsoft Dynamics GP 2010, you may have noted that clicking on a map button next to an address Id opens up Bing Maps at the country view level.


Microsoft Dynamics GP 2010 and Bing Maps country view

This has been identified as a bug with Microsoft Dynamics GP 2010 -- RTM and Service Pack 1 are affected. The bug is currently written up and hopefully in the queue for a fix.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Thursday, October 21, 2010

Troubleshooting "General Error" when using Drill-Down Builder - Part 2

This article is part 2 of 2.

In my previous article on the same subject, I told you about the adventures of my friend, MVP Mark Polino and his attempt to get a better description to the error "General Error" when running a Drill-Down Builder in Excel and Outlook. Once followed the instructions outlined in the previous post, Mark was able to obtain what seems to be a less cryptic error message, as follows:

A general error has occured.A call to SSPI failed, see inner exception.

Server stack trace: 
   at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity)
   at System.ServiceModel.Channels.StreamSecurityUpgradeInitiatorBase.InitiateUpgrade(Stream stream)
   at System.ServiceModel.Channels.ConnectionUpgradeHelper.InitiateUpgrade(StreamUpgradeInitiator upgradeInitiator, IConnection& connection, ClientFramingDecoder decoder, IDefaultCommunicationTimeouts defaultTimeouts, TimeoutHelper& timeoutHelper)
   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
   at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
   at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Microsoft.Dynamics.GP.ServiceIntegration.ProtocolHandler.DynamicsGPDrillBackService.IDrillBackToGP.CallAction(Uri uri)
   at Microsoft.Dynamics.GP.ServiceIntegration.ProtocolHandler.ProcessDrillBack.ProcessStart(Uri uriParameter)
   at Microsoft.Dynamics.GP.ServiceIntegration.ProtocolHandler.Program.LaunchApplicationByUri(Uri uri)
   at Microsoft.Dynamics.GP.ServiceIntegration.ProtocolHandler.Program.Main(String[] args)

System.ServiceModel.Security.SecurityNegotiationException

With this Inner Exception   at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, ChannelBinding binding, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
   at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
   at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity)

System.Security.Authentication.AuthenticationException

Less cryptic? Perhaps, but nonetheless an error that pointed to a security authentication issue. Since the problem was authentication-related, it turned out that Mark was not connected to the domain. That's it! There you have it! In order to be able to use the Drill-Down Builder with files that are going to reside on some network share or location, you must be authenticated into the domain. May sound like a no brainer, but try saying that when the only thing you have to go by is a "General Error" message. After establishing a VPN connection to the domain, everything returned to normal.

Note that even if you are joined into the domain, you may indeed receive this error if you have lost security access to the network share holding the connection information files.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Wednesday, October 20, 2010

Troubleshooting "General Error" when using Drill-Down Builder - Part 1

This article is part 1 of 2.

My good friend, MVP Mark Polino was recently working on a set of drill-downs to customer information in Microsoft Dynamics GP. The links worked perfectly from Microsoft Office Outlook and Microsoft Office Excel...until they stopped working suddenly, with the cryptic error "General Error". That's it! No other reference of any kind, no where to go from here.

Fortunately for him, there are some tricks of the trade -- tricks of the trade because these can only be found in the notes of some developer -- to produce a "better" error, and here are the steps:

1. Go to Program Files\Common Files\Microsoft Shared\Dexterity - If it is a 64-bit environment, you will need to go to Program Files (x86).

2. Rename the Microsoft.Dynamics.GP.ProtocolHandler.exe.config file that is there.

3. Launch Microsoft Dynamics GP and your Excel report.

4. Try the Drill-Down again. It will most likely still error, just more descriptive.

As it turns out, the standard config file looks something like this:

Microsoft.Dynamics.GP.ProtocolHandler.exe.config standard file content


The new file, after launching Microsoft Dynamics GP and attempting to run the Excel report, looks something like this (note the extra keys):


Microsoft.Dynamics.GP.ProtocolHandler.exe.config with extra keys for logging and error handling
We still have not resolved the issue. In part 2 we will look into more details and finally see what the problem was with this error.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Thursday, October 14, 2010

IntelliSense for Dexterity... the gift that keeps on giving











Tim Gordon at Alpine Limited, continues to work very hard on DexSense, the first IntelliSense solution for Dexterity. Tim has just recently released DexSense 1.8 which now includes some astounishing performance enhancements.

You can find more information on the most recent version of DexSense by reading the release post:


DexSense 1.8 released

To get a full copy of DexSense, proceed to the product download page over at Alpine Limited:

DexSense Product Page

You can follow the evolution of IntelliSense for Dexterity by reading the following articles on both the Developing for Dynamics GP page and here at The Dynamics GP Blogster:

Dexterity and IntelliSense
Dexterity and IntelliSense - It's time to vote!
IntelliSense for Dexterity - Ask and You Shall Receive @ Developing for Dynamics GP

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Tuesday, October 12, 2010

First edition of IMHO is up over at Community 2.0

I have been fortunate enough to be invited as a guest columnist on the new Microsoft Dynamics Community 2.0 site, also taking center spot on the Microsoft Dynamics GP home page. You will now be able to enjoy the new "In My Humble Opinion with The Dynamics GP Blogster Column", simply IMHO. My new column will be focused on telling it as it is -- or as I see it. Uncensored!

Microsoft Dynamics GP Home Page - IMHO

Hopefully, you will enjoy the very nature of this new column and if you have any complaints or you feel there's anything I should be covering, I welcome the comments. After all, I want to be your voice for the things that are and are not right with either the product, or the channel.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Thursday, October 7, 2010

Microsoft Dynamics Community 2.0 is now Up and Running!

A few months aback I blogged about some of the changes that the Microsoft Dynamics Community was undergoing -- see Why the Phaseout of the Microsoft Dynamics Public Newsgroups Is a Good Thing. Now, the new Community site is live and the overhaul could not be any more apparent.

Take some time to review the release notes in the article Welcome to Microsoft Dynamics Community 2.0. Some of the new capabilities of Community 2.0 are: increased social networking capabilities with the ability to create and share profiles, Ask the Community, which is formerly known as the Community forum, but this version is on steroids as it allows for role-base searches and role-base content.

I really would like to take this opportunity to congratulate the Community team. It's been over a year of long hours and incredible effort to make this happen, but more importantly, thanks for listening.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Wednesday, October 6, 2010

The Dynamics GP Blogster to Visit Oviedo and Madrid, Spain

The Dynamics GP Blogster will be visiting Oviedo and Madrid, Spain from the 8th to the 16th (in Madrid only on the 16th) of October on a business assignment, but for those of you who would like to exchange business cards and ideas please don't hesitate to reach me at the AC Forum Hotel in Oviedo. I will be available in the afternoons after 5:30 PM and as time permits.

For those of you who decide to tag along for dinner or otherwise, table topics are fairly open or if you are a prospective customers considering Dynamics GP and would like some insight, please feel free to drop by. Please email me in advance using the link on the right so I can keep a headcount.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Chat About Microsoft Office and Windows with Microsoft MVP Experts

I have been asked to share with you an upcoming public chat involving some of our Microsoft Office and Windows MVPs. MVPs have volunteered to answer Windows and Office questions directly from the public in a live chat! Can you help spread the word about this public chat? Thanks in advance for your assistance and feel free to join us for the chat next week.

Chat About Microsoft Office and Windows with Microsoft MVP Experts
October 14, 2010
10:00 A.M. - 11:00 A.M. Pacific Time
Additional Time Zones

Would you like to learn more about the cool new features in Microsoft Office 2010 and Microsoft Windows 7 and what has changed since previous versions? Do you use Microsoft Office but would like to learn tips and tricks to be more productive at home, school or at work? Perhaps you are a new user who has questions on how to get started with Windows 7 or using the Office ribbon? Or would like to learn how to protect your computer from malware and viruses. Or perhaps you are just stuck and need answers.

My fellow Microsoft Office and Windows Most Valuable Professionals (MVPs) are here to help!

The MVPs are the same people you see in the technical community as authors, trainers, user groups leaders and answerers in the Microsoft forums. For the first time ever Microsoft have brought these experts together as a collective group to answer your questions live. MVPs will be on hand to take questions about Microsoft Office 2010 or Office 2007 products such as Word, Excel, PowerPoint, Outlook, Access, Project, OneNote and more. As well as the Windows 7 and earlier versions such as Windows Vista. In addition to Microsoft Office, the chat will cover Windows related topics such as upgrading, setup and installation, securing your PC, Internet Explorer, personalizing your computer desktop or having fun with Windows Live Essentials to share photos, make movies and more. All levels of experience are welcome from beginners and students to intermediate power users.

Please join us for this informative Q&A style chat and bring on your basic and your tough questions!

Join the Chat!
October 14, 2010
10:00 A.M. - 11:00 A.M. Pacific Time
Additional Time Zones

Add to Calendar

Social Networking

You can follow this on Twitter at #msmvpchat
Join the event on Facebook: Chat about Microsoft Office & Windows with MVP Experts!

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Tuesday, October 5, 2010

From the Newsgroups: "The input tax for this range hasn't been entered. Do you want to continue calculating?" error when running VAT Return on Microsoft Dynamics GP v10

While attempting to generate a VAT Return report for his customer, a partner ran into the following issue.

Hi folks , weird one here. Have ran fine in the past,however we are now getting this error: 'The input tax for ths range hasn't been entered. Do you want to continue calculating?

The only change is that we have now set up all the reverse charge functionality for EU VAT. So the question is, where is the VAT return looking for the input tax?

Fortunately, the partner dog enough into this issue and found a solution which he did not mind sharing with the rest of the partner community.

Ok fixed it! Extracted all the transactions in SmartLists for the tax reporting period, and pivot tabled them on the tax detail id, compared the id's to those setup in GP only to discover that a tax detail id used 6 times does not physicly exist, [I then] changed the tax detail id in SQL to rectify to the correct id. ID must have been deleted some how.

So if you experience the same problem, now you know how to fix it.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Friday, October 1, 2010

Microsoft Dynamics GP 2010 Word Templates summary

Microsoft Dynamics GP 2010 Word Templates offer new presentation capabilities to the traditional customer/vendor facing Report Writer reports. This week was just a superficial scratch of the myriads of things that are possible to achieve. Like with everything else, I am sure there are limitations, but it will take some time to discover what those are. Nonetheless, I will continue exploring this topic and bring to you my findings

Articles Covered

How to add a "Terms and Conditions" page to a Microsoft Dynamics GP Word Template document
Debugging Microsoft Dynamics GP 2010 Word Templates
How to resize logo in Microsoft Dynamics GP Word Templates
The Open XML SDK 2.0 for Microsoft Office

Acknowledgements

I have to thank Microsoft's Rob Wagner for his invaluable support and guidance throughout the week. Rob also provided the cool code and pointed to the online resources available on the Open XML subject.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

The Open XML SDK 2.0 for Microsoft Office

Along with the introduction of Microsoft Dynamics GP 2010 Word Templates came a little known software development kit: Open XML SDK 2.0.

Open XML is an open ECMA 376 standard and is also approved as the ISO/IEC 29500 standard that defines a set of XML schemas for representing spreadsheets, charts, presentations, and word processing documents. Microsoft Office 2007 and Microsoft Office 2010 all use Open XML as the default file format for rendering spreadsheets, documents, and presentations.

The Open XML file formats are useful for developers because they use an open standard and are based on well-known technologies: ZIP and XML.

The Open XML SDK 2.0 for Microsoft Office is built on top of the System.IO.Packaging API and provides strongly typed part classes to manipulate Open XML documents. The SDK also uses the .NET Framework Language-Integrated Query (LINQ) technology to provide strongly typed object access to the XML content inside the parts of Open XML documents.

In the case of Microsoft Dynamics GP 2010, the assembly enables developers to easily read-from and write-to Microsoft Word documents using their favorite language in Microsoft Visual Studio. The following image depicts the assembly in the Global Assembly Cache (GAC).


You can find more examples and a cool tool available at the Open XML SDK 2.0 download site. Using this tool, Rob Wagner was able to compare the original template shipped with GP and the modified version I created, when troubleshooting some issues I was having when adding a new section to the original template – see Debugging Microsoft Dynamics GP 2010 Word Templates.

Using the Open XML to work with Word documents

The following C# console application demonstrates how to use OpenXML to add a new table to the end of a document (similar to the text added in the “terms and conditions” article).

//---------------------------------------------------------------------
//  This file is a Microsoft Dynamics GP Business Intelligence Code Sample.
// 
//  Copyright (C) Microsoft Corporation.  All rights reserved.
// 
//This source code is intended only as a supplement to Microsoft
//Development Tools and/or on-line documentation.  See these other
//materials for detailed information regarding Microsoft code samples.
// 
//THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//PARTICULAR PURPOSE.
//---------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using wp = DocumentFormat.OpenXml.Wordprocessing;

namespace NewTableAdHocText
{
    class Program
    {
        public bool AddTableAdHocText(string WordDocPath, string TextPath)
        {
            try
            {
                //read the ad-hoc text and store it for later
                StreamReader srStreamReader = new StreamReader(TextPath);
                String sString = srStreamReader.ReadToEnd();

                //open the word document and it's main document part
                using (WordprocessingDocument wdWordDoc = WordprocessingDocument.Open(WordDocPath, true))
                {
                    MainDocumentPart mdpWordDocMainPart = wdWordDoc.MainDocumentPart;
                    //create then add a new paragraph
                    wp.Paragraph wppParagraph = new wp.Paragraph(new wp.ParagraphProperties(new wp.ParagraphStyleId() { Val = "NoSpacing" }));
                    mdpWordDocMainPart.Document.Body.Append(wppParagraph);
                    //create new markup for the table
                    Table wppTable = new Table(
                        new TableProperties(
                            new TableStyle() { Val = "TableGrid" },
                            new TableWidth() { Width = "0", Type = TableWidthUnitValues.Auto },
                        new wp.TableBorders(
                            new TopBorder() { Val = BorderValues.None },
                            new LeftBorder() { Val = BorderValues.None },
                            new BottomBorder() { Val = BorderValues.None },
                            new RightBorder() { Val = BorderValues.None, },
                            new InsideHorizontalBorder() { Val = wp.BorderValues.None },
                            new InsideVerticalBorder() { Val = wp.BorderValues.None }),
                        new TableLook() { Val = "04A0", FirstRow = true, LastRow = false, FirstColumn = true, LastColumn = false, NoHorizontalBand = false, NoVerticalBand = true }),
                        new TableGrid(
                            new GridColumn() { Width = "11016" }),
                        new TableRow(
                            new TableCell(
                                new TableCellProperties(
                                    new TableCellWidth() { Width = "11016", Type = wp.TableWidthUnitValues.Dxa }),
                                    new Paragraph(
                                        new ParagraphProperties(
                                            new ParagraphStyleId() { Val = "NoSpacing" },
                                            new KeepLines(),
                                            new PageBreakBefore(),
                                            new ParagraphMarkRunProperties(
                                                new RunFonts() { Ascii = "Trebuchet MS", HighAnsi = "Trebuchet MS" },
                                                new FontSize() { Val = "17" },
                                                new FontSizeComplexScript() { Val = "17" }),
                                            new LastRenderedPageBreak(),
                                            new Run(
                                                new RunProperties(
                                                    new RunFonts() { Ascii = "Trebuchet MS", HighAnsi = "Trebuchet MS" },
                                                    new FontSize() { Val = "17" },
                                                    new FontSizeComplexScript() { Val = "17" },
                                                new Text(sString)))))))); //text for the run comes from the adhoc text document
                    //add then save the table to the document
                    mdpWordDocMainPart.Document.Body.Append(wppTable);
                    mdpWordDocMainPart.Document.Save();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.InnerException);
                return false; //failure
            }
            return true;
        }

        static void Main(string[] args)
        {
            new Program().AddTableAdHocText(args[0], args[1]);
        }
    }
}

The above example shows how simple it is to:

1) Crack open a word document.
2) Append a table to the end with specific properties.
3) Insert some ad-hoc text into the table.

The major advantage is the strongly typed interface to office document. You don’t need COM interoperability to manipulate any document.

You can download the sample project at the bottom of this article.

Downloads

NewTableAdhocText.zip - C# command line application to demonstrate adding a table at the end of a Word Document.

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/

Welcome aboard Dynamics GP MVP Sivakumar Venkataraman!

It's with great pleasure that I introduce you to MVP Sivakumar Venkataraman, known by many of you simply as Siva. Siva joins the Microsoft Dynamics GP MVPs roaster as part of the MVP Award Program's October cycle.

Siva is the author of the Interting Findings & Knowledge Sharing blog and also a tireless moderator of the Dynamics GP Google Group, one of the longest running, independent groups dedicated to all things Microsoft Dynamics GP. Siva is currently a Practice Lead - Microsoft Dynamics at Interdyn AKA.

The Microsoft Most Valuable Professional (MVP) Award is an annual award given to outstanding members of Microsoft's technical communities based on contributions made during the previous 12 months to offline and online Microsoft-related technical communities. The Microsoft MVP Award recognizes exceptional technical community leaders worldwide who actively share their knowledge with other technical community members.

Of 100 million technical community participants worldwide, about 4,000 are MVPs. Outstanding technical community members are nominated by their peers, Microsoft employees, and MVPs. Each year a panel of Microsoft employees reviews the contributions of each nominee for quality, quantity, and level of impact on the technical community. Today's MVPs reflect Microsoft's global customer base and breadth of technologies.

Interesting fact: Siva will be saying his vows pretty soon in a traditional ceremony in his native country of India. Congrats buddy!

Until next post!

MG.-
Mariano Gomez, MVP
Maximum Global Business, LLC
http://www.maximumglobalbusiness.com/