Over the last few weeks I have been asked a number of times about methods of customising a 3rd party form. This purpose of this post is to clarify what can and cannot be achieved with Dexterity.
Usually, the developer has created a combined dictionary as per the instructions in the Integrating with Third Party Dictionaries materials or KB 930350 . They then either:
The problem is that method 1 is in breach of the license agreement and the changes will probably be lost if a service pack or hot fix is applied; and method 2 just does not work as Dexterity does not support alternate versions of 3rd party forms.
Note: There is a section in the "Integrating" conference materials on Modifying 3rd party forms. The method discussed is not recommended as it breaches the Dexterity License agreement (not allowed to ship a modified application dictionary) and also causes problems when applying upgrades and service packs. The later "Pushing" materials contain a Warning about modifiying 3rd party forms to explain some of the issues.
In summary, there is no supported method of using Dexterity to directly modify a 3rd party form.
Depending on the changes needed to the 3rd party form there are other methods available.
All these examples can be achieved using cross dictionary triggers from your own dictionary.
If you really need to add a new field, you will need to use one of the following methods:
Method 1 allows the customisation to stay completely with Dexterity which is an advantage, but the user interface is spread between two windows. Method 2 is better from the user interface perspective as the new field can be in the same window, but relies on Modifier and VBA for part of the customisation.
Note: You can use Modifier modify the window and then use Visual Studio Tools to create the scripting rather than VBA. You will need to use the DAG.EXE tool to create the assembly to address the modified version of the window.
In my opinion, if the customer is registered for Modifier and VBA (or the Customisation Site License), using the hybrid method 2 will provide the best solution for the customer.
11-Jun-2009: Added note about using Visual Studio Tools rather than VBA for scripting.
24-Nov-2010: Updated post to highlight that direct modification of a 3rd party form is against the Dexterity license agreement and is not recommended.
Can I add an extender window to a 3rd part product like wennsoft.
Extender can be used against any product.
Extender windows are Dexterity Parallel windows as described in the article. The only difference is that it is coded for you rather than you writing the code yourself.
I've created two additional extender windows to the sales transaction entry screen.Is it possible to link these two windows into one report using report writer.
The following KB article explains how to use Report Writer functions to get Extender Fields onto a modified report.
Our requirement is to add a computed field in a third party window (which is actually an alternate window in GP - SOP Entry). This computed field is for display only and does not neeed to be saved. How can we achieved this without using VBA?
As the post mentions the ONLY way that you are going to add a field to a 3rd party window is using Modifier. There isn't any other way currently to add a field to 3rd party form otherwise.
Now how you want to maintain that field, you do have a couple options:
1. use VBA as this post suggests
2. you could use VSTools code to maintain your field
But the key point is that adding a physical field to a 3rd party window requires Modifier.
Thank you David for making it clear.
I actually got shocked when I knew about this limitation in Dexterity products. But I wonder if there's any unsupported method to modify a 3rd party window in Dexterity and chunk it along with the rest of the customizations as it's impossible and not acceptable to do our customizations in modifier and distribute the modified dictionary (We're working on SVCADV.dic) to the customer.
Actually what is not acceptable is modifying a 3rd party dictionary or taking 3rd party windows and including them in your Dexterity customization.
While this might be sort of possible to make work, any kind of upgrade is impossible. And of course is completely against the Dexterity license agreement.
The methods for working with a 3rd party dictionary are the true, correct, and legal methods.
There was a method proposed in the Integrating with Third Party Dictionaries materials. It required the use of Dexterity to modify a combined dictionary for the 3rd party product and then transfer the modified form to an extracted dictionary. No code was changed, just existing global or local fields could be added. You can then use cross dictionary triggers to add your code.
This method was recommended against as it is in breach of the License agreement which says you cannot ship a modified dictionary. Also, it will be overwritten when a service pack or hotfix is installed. While this method is technically possible, it is illegal, unsupported and hard to maintain.
I suggest you ship a package of a modified form.
Thank you David. Thank you Patrick.
Let me give a real example to make sure I understand what you've said. It's the SVC_RMA_Entry_DropDown window from SVC_RMA_Update form, can I do the following?
1- Add a button to the window using Modifier, and write OnChange code for the added button in my dictionary by using cross dictionary triggers?
2- Let's take the illegal method (just to understand every method).
If I transferred the form to my dictionary and added a button with its OnChange code, how would I tell GP to open that form/window from my dictionary rather than opening the original one?
1. No. Dexterity cannot see the button added with modifier.
2. No. No. No. No. No. And no.
With the methods discussed here using Mod/VBA or Mod/Vstools or Mod/Continuum or even Mod/VBA/Dexterity there is no reason at all to even have this conversation about modifying a 3rd party dictionary with Dexterity. Period. It is a bit of extra work making a hybrid solution (if you even need to - vstools or vba should be enough) but the headache of doing this (ignoring the whole against license agreement thing) more than makes up for the potential extra work.
You can only have an alternate window of an original Dynamics.dic form. There is no mechanism to have alternate (ie. Dexterity modified) windows of a 3rd party product.
You will NEVER be able to have a copy of a 3rd party window in your dictionary and make it work.
Please use the methods that are available to you. Either use modifier to change the original window or add a parallel synchronised window.
These methods where demonstrated at the recent Technical Conference in Fargo. See materials attached to:
Do you have an example of a parallel synchronised window that exists in production code? Also, is it possible to make this new window look like it is "attached" to the main window so if the user moves the main window the additional window would move with it?
I don't have an example available for download. You just need to use triggers on all the relevant events.
Window Open and Close. Display Existing Record, Save Record, Delete Button, Clear Button, Window Pre.
You can read window position and open your window next to the other window. You can't capture the Window being moved, but you can re-position your window using the Window Activate event on the main window to trigger on.
Hope this helps.
It is a friendly question and your answer is much appreciated.
I am MC Dynamics GP developer.
I have the same situation, I need to add a new field into a 3rd party dictionary and I like you answer about adding a parallel synchronized window which opened when the desire form is opening.
I tried to do the trigger which allow me to do that but nothing works.
I need to show a message when “window SVC_Contract_Line_Invoice_View of form SVC_Inquiry_Contract_Entry” in SVC dictionary opened.
Here is what I did:
On the Startup I wrote:
local integer l_result;
l_result = Trigger_RegisterFocusByName(949, "window SVC_Contract_Line_Invoice_View of form SVC_Inquiry_Contract_Entry", TRIGGER_FOCUS_PRE, TRIGGER_AFTER_ORIGINAL, script csSVC_Message);
if l_result <> SY_NOERR then
warning "Focus trigger registration failed.";
I don’t know what I miss.
Would you be able to send me a full example of how to use parallel synchronized window technique.
Really appreciate your help.
PLEASE READ BEFORE POSTING
Please only post comments relating to the topic of this page.
If you wish to ask a technical question, please use the links in the links section (scroll down, on right hand side) to ask on the Newsgroups or Forums. If you ask on the Newsgroups or Forums, others in the community can respond and the answers are available for everyone in the future.