Search My Blog

Wednesday, December 31, 2008

Let's Welcome the New Year 2009

0 Comments

Wishes to all GP Community...

From 2008: Let's celebrate all successful moments, learn from all mistakes and cherish all Happier Moments...

In 2009: Let's dream and realize Success on all our steps, strive to and be the most Happiest Human...

WISH YOU ALL A HAPPY AND PROSPEROUS NEW YEAR 2009

Vaidy

Accessing Form Menu from Global Scripts - Patrick Roth

0 Comments

This is very good article on How to Access Form Menu from Global Scripts, from Patrick Roth, on Developing for Dynamics GP blog.

I have done exactly the same with VBA and Continuum API (My Article: SOP Entry - Defaulting Add Item Menu Option), but that was sort of a wrokaround and not as good as this method in DEX. This is an important article for all Dex Developers. Also make sure that you read Mariano's query and Patrick's reply (as comments to this article). That's added information.

Thanks Patrick to share with us such a precious information.

Vaidy

Tuesday, December 30, 2008

What a tool VBA is?

0 Comments

It is a real pleasure to work on VBA Customizations. I just completed one such customization for a client, and believe me, it was fun and effective to achieve it.

One of the clients, asked for a criteria to be added on a Smartlist lookup. They wanted to filter records based on a value which is not provided in the standard GP/Smartlist lookup. We can still setup the Smartlist Favorite to do this, but they did not want it as everytime we open the lookup, we need to go and manually select that criteria from the Smartlist Header menu.

This had to be achieved by adding a Check Box for that criteria and upon selecting, the records should be filtered accordingly. Well, I first thought I would write some Dex triggers or some coding with Dex. But then, I finally decided to go for VBA and give it a try.

VBA did the trick, that too less than 75% of the estimated time. It's efficient, ease-of-use, maintainable and what not? It does have limitations, I completely agree, but if you need a fast solution for simple & critical requirements, you can certainly bet on VBA.

I have started loving this brilliant tool. Mariano had rightly said in one of his articles about VBA and its efficiency. I am experiencing it now.

Vaidy

Some Limitations in Extender

2 Comments

This is a very important article from Mark. He points out a very critical behavior in Extender. Do read his article to know it better and always remember what he has pointed out while using Extender Windows: Deleting Extender Window Deletes Data As Well.

Let me add some more of them (yeah I do say that as Limitations and NOT Flaws, because we don't know whether these are overlooked knowingly):

1. I create an Extender Window and records are being entered. And we need to add another field as "Key Field" to that window. And if we do this, the records which are already been entered will become Orphan Records (often called Stranded Records). These records are not automatically amended with the new set of "Key Fields". Instead, what we see after the "Key Fields" amendment, is a new record on screen and the table as well.

2. When I delete a parent record, the Extender record does not get deleted automatically. Of course, GP tables do not have the Parent Child relationships defined, but this could have been handled by some Dex triggers or even a DB trigger. And that puts me on a fix. As an End User, I am not bothered about what data is stored in which table and whether it still exists when I delete a parent record, but as a Technical guy, I should be bothered, as this is a bad design to keep a stranded record. I hope you all would agree.

3. When I add a Key Field, it automatically sorts it based on the Field Name, which I feel is really frustrating. For instance, I want my Key Fields to be "Customer ID", "Customer Number", "Address Code" and once I add these fields on the Key Fields area, these will be automatically sorted as "Address Code", "Customer ID", "Customer Number".

There are more like these small issues. I would like to see the feedback from others to know these things better.

Vaidy

Monday, December 29, 2008

Little bit of Philosophy

3 Comments

I always ride my Yamaha Rx135 to anywhere. This is the motorcycle I use for my commutation from my home to office and vice versa.

Couple of days back, I filled gas and was riding to my office. It would go for sometime and stop abruptly. I just had to kick-start for couple of times, start it and go on. Again after sometime, it would stop abruptly, as if the gas tank is empty. Well, this was really frustrating, especially if it happens when you are on the way to office in the morning. I checked everything that I could: Choke, Gas flow to Engine, Spark Plug ... everything that I thought I should check.

Failed on all troubleshooting, I had to get a Mechanic to look into this. I explained him all my troubleshooting results. He listened very carefully and he just glanced my bike from top to bottom. He asked me whether I filled gas recently. I nodded. And then came a question: DID YOU CLOSE THE GAS TANK LID PROPERLY? I just checked it and found IT WAS NOT. He explained the reason, that the air pressure was not proper inside the Gas tank, as it was opened. Since it allowed air inside, it did not propel the gas evenly to the engine, and thereby causing an Air Lock while riding.

So that's the reason. It's just an ignorance that caused this. I overlooked this and was checking every other detail. I did not check something irrelevant, but I did not check completely either.

How does this relate to Software Development? It does. You may have to go thru' this article of mine: Declaring Variables to Relevant Datatypes. Well, that is just an instance.

Often, we do all important things while we develop something, double-check the details and finally somehow skip something which is very simple, yet have very critical impact. This could be just an unintentional ignorance, but could be avoided if we are a bit more attentive to the details.

While we cannot always avoid such instances, we can certainly minimize such occurrences.

Vaidy

Saturday, December 27, 2008

Vista UAC & Dynamics GP

3 Comments
This is a bit an old thing, but just thought of posting, as this may help some one who is on Windows Vista OS and Dynamics GP 10.0. I am not sure, how many of us would have noticed the first message which I have shown on this article.

On any Windows Vista machine, if the Vista User Account Control (UAC) is enabled, the user will be shown the following message when GP is launched as soon as the GP splash screen disappears:


Once we select "Windows" and click on OK, we will be asked to run the GP Utilities first before we launch GP, as follows:


And once GP Utilities is run, we log on and then the famous BCP Utility Error message is shown:



For the BCP Utility error, we have a KB article (KB#939917). But this article would advise us to turn off the Vista UAC feature, which cannot be agreed by some of the users.

In that case, all we need to do is to run the GP as Administrator. Right Click on the GP shortcut and select "Run as Administrator". We should be good to go.

Vaidy

01 Jan 2009: UPDATE: An update to my post based on Sivakumar Venkatraman's input. You can setup the "Run as Administrator" option as Default on the GP / GP Utilities shortcuts. 

Right Click on any of these shortcuts, select "Properties". Select the Compatibility Tab and under which, find the "Privilege Level" area which will have the expected option "Run this program as an Administrator".

Once this is set, we don't have to do this again and again.

Thanks Sivakumar, for sharing this with us.

Vaidy

Wednesday, December 24, 2008

Upgrading Custom Forms & Reports Dictionaries

0 Comments

One of the most important and such a basic thing that I learned couple of hours ago is: How to update our Customization's Forms/Reports Dictionaries? Silly, isn't it? For I am supposedly a GP Consultant with 5 years of technical experience. But then, I do not mind admitting with my utmost honesty that, this is what I learned TODAY. And of course, I am contended that at least now I learned it...

I always version the Customizations that I develop, which will be relevant to that of the GP's version. For instance, I alway start with 10.0.0 as my product's version which is for GP 10.0. And it increases with every build, a feature addition and so on.

There is this customization which I am involved in for quite some time. And there is a report which is quite a complex stuff and the users always were so satisfied with their own trials with Report Writer and changing the format to their wishes.

Things were going on well till the users modified the report. From then on, whenever I install the next version, it would throw this error message (shown below):



I knew for sure that since I maintain a proper versioning, the Reports dictionary for my Customization product should be upgraded to the latest version which I install. But I didn't know how. There are two approaches to tackle this:

Approach I:

1. Take a backup of both Custom Dictionary (previous version) and its Forms/Reports Dictionary.
2. Launch GP and open Customization Maintenance.
3. Export the report modifications to a package file.
4. Close GP and make sure all other users are logged out as well.
5. Delete the previous version Custom Dictionary and Forms/Reports Dictionary.
6. Copy the new version Custom Dictionary on to the GP Application Folder.
7. Launch GP and respond to the chunk installation message.
8. Open Customization Maintenance and import the Forms/Report Modifications that was exported from the previous version.
9. We are good to go.
10. Next time you start GP, you will not be prompted with this message.

Approach II:

1. Take a backup of both Custom Dictionary (previous version) and its Forms/Reports Dictionary.
2. Close GP and make sure that all other users are logged out as well.
3. Delete the previous version Custom dictionary.
4. Copy the new version on to GP Application folder.
5. Launch GP and respond to the chunk installation message.
6. Once the chunk is installed, we will be greeted with the above Forms/Reports Dictionary Upgrade message. Click on OK and don't login to GP.
7. Now, open GP Utilities.
8. After all the routine checks (Version information, GP updates check, etc...), we will be left with the Additional Tasks wizard.
9. Now select "Update modified forms and reports" from the drop down, as shown below, and click on Process:



10. Select the launch file (Dynamics.set) from the application path from where GP is run, as shown below, and click on Next.



11. We will be listed with all the Products for which we need to upgrade the Forms/Reports Dictionaries. Select the product for which we are performing this upgrade, as shown below.



12. As soon as we select a product, the Details window will be opened, enabling us to select the previous version of our Custom Dictionary (remember we had taken the backup and that's exactly why we MUST take a backup of at least immediate previous version custom dictionary), as shown below. Select the previous version Custom dictionary and click on OK.


13. Click on Update and we will be shown with some upgrade progress. Once it is complete, the Report Upgrade Progress will contain either a Success status or the errors that it met while upgrading, as shown below (screenshot shows a Success message).



14. Once the Upgrade is a Success, we will be shown with this screen below.



15. Click on Launch Microsoft Dynamics GP to complete the process and launch GP.
While Approach II looks a bit lengthy, it is the standard way of upgrading our Custom Forms/Reports Dictionaries with recent version.
Any additional information on this from anyone out there, would do world of good for all budding GP Developers and Consultants.
Vaidy

Tuesday, December 16, 2008

Extender Views - Victoria

0 Comments

Another informative article from Victoria on Extender Views.

As rightly mentioned by Victoria, Extender Views are always the least used concepts, but the most powerful and flexible. I had done couple of in-depth customizations involving Extenders, but I never used Extender Views, as to admit, I was not so impressed with it due to the lack of documentation and a bit of vagueness. But from now on, I will not be hesitant in advising Extenders to anyone and for any relevant customizations.

Hope all of us read this article and get the needed knowledge on Extender Views.

A simple yet powerful demonstration. I hope I owe many THANKS to Victoria in future for such articles. :-)

Vaidy

GP10-Citrix-Outlook : Thanks Mark

0 Comments

Thanks so much Mark, for pointing this to us (GP 10 + Citrix+ Outlook Fix). Probably this would have sounded simple and people tend to overlook this issue, as not all are working on a Citrix environment.

But this is a much needed solution for me, to say the least. As you had pointed out, honestly I am one among those who advised to take Outlook settings out of GP Home Page. And till date, that's the only solution I knew of.

Well, the credit goes to Andrew Cooper who replied to Micheal Smith's query on the Google Groups (GP 10 Home Page + Outlook + Citrix Server = CRASH!). We would have certainly been ignorant of such a weird reason to this nagging issue.

To all the consultants, please take a note of this and it may help you sometime in the future.

Thanks again, Mark.

Vaidy

Thursday, December 11, 2008

DEX_ROW_ID - Mariano Gomez

0 Comments

Well well, another good article. I have been busy reading articles across blogs and enter a word of admiration towards those articles on my blog.

Mariano has come up with information on DEX_ROW_ID, the most famous SQL column on all GP tables. This is an INT IDENTITY column, whose purpose and usage is explained in detail on this article.

I would just like to add one more point (probably couple of points), to substantiate why we should not use the DEX_ROW_ID on reporting or for any other table manipulation.

1. DEX_ROW_ID value is auto-generated by SQL Server. It is not controlled by any routine or process from GP. What does this mean to refer to this column? If you want to use this on your report design, for instance to use this value as a relationship factor, then you are in a trouble. Most of the developers should be knowing this anyways. For those who does not know about it: DEX_ROW_ID cannot be used as a key factor in a Parent - Child relationship. Of course, we cannot do it from Dexterity, but I am talking this from SQL perspective.

2. I have seen several customizations, that deal with moving the records within the table itself for several reasons. I mean, a record will be deleted and the same record would be recreated. In both instances, the DEX_ROW_ID will be different. DEX_ROW_ID is unique across the entire table, even if it means deleting and recreating the same record.

There are so many other points, which proves against using DEX_ROW_ID for our manipulations.

Overall, this is a very good article that we should read.

Vaidy

Wednesday, December 10, 2008

All about GP Item Type - From Merit Matters

0 Comments

Past 10 days have seen most informative and good articles across our Blogosphere. Another one has proved to be one such article.

Check this article from Merit Matters: What is an Item Type?

It just explains what are all the Item Types available and its meaning. Well, you can read this on the readily available GP manuals, but this article adds some experience and correlated information to the basics. For instance, it starts with the necessity of understanding GP Cards and with that starts explaining this Item Type as an instance. Slowly it dives into the other aspects of setting up an Item Type, such as the scope of each type.

Clearly a MUST READ article.

Vaidy

Tuesday, December 9, 2008

Sales Transaction GL Distributions - Victoria

0 Comments

A gem of an article from Victoria. Most of us would have wondered certain things with regards to Sales Transaction Distributions. At least, I used to wonder certain key aspects of this.

I knew WHAT distributions are created when we create a transaction and when we post it. For instance INV & COGS account distribution lines will not be created at the time of SOP document creation. It is created only when you post it. But I never knew WHY it is. Whenever I tell my team, I simply tell them that this is how it is done. I never had an answer for a trivial response from the team; WHY. This could be a very simple, something basic for me to know, but this is something new, when I read it. But clearly, I feel enlightened.

There are much more than what we would expect. Read this article itself to learn more: Sales Transaction GL Distributions in Dynamics GP.

Vaidy

Setting Tab Sequence

0 Comments

Is it important to set the tab sequence? YES IT IS. Not always we think about the convenience and user experience when we design the UI. Most of the developers across the world, first think about, is to meet the functionality. It is also so very important that we set the Tab Sequence properly. On a flip side, Unit Testing of any UI should capture this as incomplete and that needs to be addressed by the concerned developer.

A good article on this from David: How to Set the Tab Sequence. Read it and you will find many important details, which you may have overlooked or not be aware of. And don't forget to set the tab sequence on each UI that is being designed.

Vaidy

Monday, December 8, 2008

Articles on Closing GP Programatically

0 Comments
We can close GP programatically using VBA and Continuum API. Daoud's article contains the code which we can use: Programatically Closing for Dynamics GP.

This will not close Dynamics GP if there are some background processes being run. The main reason: this is nothing more than simulating a User selecting "Exit" from "Microsoft Dynamics GP" menu, which is a very good thing, as we are not suppose to close GP when some background process is being run.

Having said that, we should pay a visit to David's article:
Running a macro to automatically close GP Example. Now this code also does the same, closes GP programatically, but does it after an important background process (the Check Links in his example) completes its task. We can reuse the logic to any similar requirement. David's article is there for our reference for sometime now, but I just thought of highlighting this again, as both articles are contextual.

Very useful articles.

Vaidy

Sunday, December 7, 2008

My Blog's New Address

0 Comments

Hi All,

An update to the previous post. My blog is now available and can be accessed without any issues on this new address: www.vaidy-dyngp.com. Sorry for the inconvenience (if any) for the past 3 days.

Hoping to see you all visiting my blog in future as well, learn and discuss GP.

Thanks
Vaidy

Saturday, December 6, 2008

Blog on a Domain Transition

0 Comments

Hi All,

It's a phase of CHANGE on all parts of the globe. Some are for good and some otherwise.

Hey wait a second... This has got nothing to do with my blog address being changed from http://vmdyngp.blogspot.com to http://www.vaidy-dyngp.com.

My blog is currently on a Domain Transition and will soon be available on the new address. Apologies for the inconvenience for those who follow my blog and for the new readers.

Till then you can access all the articles by replacing the address www.vaidy-dyngp.com by vmdyngp.blogspot.com. For instance the page address of the article GP to the Max is http://www.vaidy-dyngp.com/2008/12/gp-to-max.html, which can be accessed without any issues by replacing the www.vaidy-dyngp.com by vmdyngp.blogspot.com; so the temporary address will be http://vmdyngp.blogspot.com/2008/12/gp-to-max.html.

Thank you all for your time and interest on my blog. Please do continue visiting and contributing.

Vaidy

Friday, December 5, 2008

SOP Entry - Defaulting Add Item Menu Option

0 Comments
It's been more than 45 days since I had given this solution to a Consultant who had asked me about using VBA & Macro. Initially I redirected him to some of David's articles. But eventually I thought of doing it myself to know how that work. Below is the gist of what I did with relevant screenshots:

1. Open notepad and type the statements shown in the below screenshot:



2. Save the file as [your_file_name].mac and copy it to the GP Application Folder. In my case, the file name is: SetSOPAddItemMenu.mac
3. Make sure to have the Modifier license.
4. Launch GP and open Sales Transaction Entry.
5. Add Sales Transaction Entry to Visual Basic Editor. Never mind if you see a message, that the window is already been added.
6. Open Visual Basic Editor and select "SalesTransactionEntry". Right click on it and select "View Code". Write the piece of code which is shown in the below screenshot:



8. Make sure that, you replace the macro file name (which is shown above as SetSOPAddItemMenu.mac) with the name that you had given.
9. Save this code and compile for any errors.
10. This will do the trick of selecting "Add Item" by default whenever you open the Sales Transaction Entry form.

There are so many ways to achieve this. I was quite excited with this method, as this is a plain VBA stuff and no Dex involved. The effort required to achieve this is not more than 10mins. And finally, it will work with much assurance.

You can find the package to import and use this little customization from the link:
SetSOPAddItemMenu.zip.

I have attached an "Installation Readme" for a quick usage reference.

Your comments / feedbacks are most welcome.

Vaidy

David's SQL Series - Identifying Duplicate Records

0 Comments
Another very important article in the SQL Series: Identifying Duplicate Transactions.

This is very much important and much needed one for all those developers/consultants. The basic idea is to identify unwanted, duplicate records on any transaction tables.

While David has mentioned the need of this, I would like to add one more point to stress the importance of having this script: Most of the customizations written across the world create records directly on the transaction tables (any module that matters). Even if we think that this is going to be perfect on most of the times, there is still a probability of a record getting inserted on any of the table without any relevance.

I would also like to derive a script, which can list the orphaned records as well as the craps. Well, that's not so easy, I understand. But would be a great script.

Vaidy

Tuesday, December 2, 2008

GP to the MAX

0 Comments
Frank Hamelly, has started a blog finally. http://gp2themax.blogspot.com/

This is very much needed, atleast for all of us if not for Frank, to get most valuable information from under one roof.

Frank, welcome to GP Blogosphere. I have already read your first blog and it is precious as usual. Well, forget about the cool stuff, the article spoke your experience and what we can expect in future on your blog.

Thank you Mariano, for pulling Frank in.

Vaidy

Monday, December 1, 2008

SQL Series from David Musgrave & Team

0 Comments

While the GP Application Level Security left us with immense information to learn, here comes another series which is going to enlighten us.

First topic is already out (spSearchOnAllDB: SQL Stored Procedure to Search an Entire Database) and available for our reading, couple more are in the queue.

Start with this link: Useful SQL Scripts Series. The most important thing is to contribute some SQL Scripts, which one think would be very useful and is not available out in the common. It can be anything related to GP.

I wish more and more to come on this series.

Vaidy