Hybrid Development and Continuum

David Meego - Click for blog homepageThis is a reposting of an article I originally wrote on my Developing for Dynamics GP blog.

In the past, I was known for my pioneering work with and promotion of Cross Dictionary Dexterity Development.  More recently I have been talking up the benefits of Hybrid Development and Developing Outside of the Box.

With all the tools available to the Microsoft Dynamics GP developer, and each tool having its strengths and weaknesses, it just makes sense to use whichever tool is best for a particular job.  Even if that means using multiple tools for the one solution.

As Mariano Gomez and I have been preparing for the two sessions we will be presenting at the Microsoft Dynamics GP Technical Conference 2009 in Fargo on the 9th-11th November 2009, we have been working with a variety of tools.  Mariano has written a great post that discusses hybrid development and why it is becoming so important.  Check out:

Mariano has just posted a great hybrid solution to showing the total of a transaction in words.  Check out his solution using Visual Studio Tools to call the RW_ConvertToWordsAndNumbers() report writer function to get the amount in words.  Here is the link:

For other ways to get the most out of the RW_ConvertToWordsAndNumbers() function, see the following posts from this blog:

It seems fitting that in the same week, Mohammad Daoud should publish a post showing how the Continuum Integration Library can be used to control the Microsoft Dynamics GP application interface as well as execute pass through sanScript.  Check out:

If you are running this code from VBA, the control of the interface can be handled with native VBA. However, this technique can be used from external VB applications.  Even though I would probably then use Visual Studio Tools instead.

Note: The use of the Continuum Integration Library to execute Dexterity scripts from VBA is not supported.


19-Jul-2013: Fixed broken links to Mohammad Doaud’s Blog.

This article was originally posted on the Developing for Dynamics GP Blog and has been reposted on http://www.winthropdc.com/blog.

5 thoughts on “Hybrid Development and Continuum

  1. David,
    Thanks for your post! Just a little clarification, sometimes using Dynamics Continuum Library is needed if you were in one of the following situations:
    1. When creating VBA customizations across multiple dictionaries and not interested to face circular references, like having to call a form in “Smart-List” dictionary using one of the events in Dynamics GP dictionary, in the same time the form in Smart-List must perform some events on in Dynamics GP dictionary as the situation in this post: http://mohdaoud.blogspot.com/2009/06/how-to-call-gp-lookup-using-vba.html
    2. When you need to loop through the values of a details window when the window is already loaded and the “Before Line Populated” event could not help.
    3. When you need to perform integrations between external applications and third party forms or modules developed on dexterity or Microsoft Products that has neither integration manager adapter nor eConnect take the Cashbook Management Module as an example.
    4. When you need to run few dexterity commands to run a Macro file or to call a lookup form as explained in the following post:
    Still needed dexterity commands is available, like “open forms” and “run script”, as those you could need if you were in any of the above situations.
    Thanks again for your usual inputs and directions, and btw.. I will do my best to get my visa before November 9 and hopefully to attend your and Mariano’s session @ the conference.
    Mohammad R. Daoud


  2. I have problems running the examples Conntinuum (Field Defaulter)
    Private Sub FieldDefaulter_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
           On Error Resume Next
           GPApp = CreateObject("Dynamics.Application")
           On Error GoTo 0
           If GPApp Is Nothing Then
               MsgBox("Failed to create a Dynamics.Application object")
           End If
          FocusRegistation("'Zip' of window 'RM_Customer_Maintenance' of form 'RM_Customer_Maintenance'", "cbDataEntryZip", TRIGGER_FOCUS_CHANGE, TRIGGER_BEFORE_ORIGINAL)
          FocusRegistation("form 'Toolbar'", "cbCloseMain_Menu_1", TRIGGER_FOCUS_POST, TRIGGER_BEFORE_ORIGINAL)
     End Sub
    Public Sub FocusRegistation(ByRef obj As String, ByRef proc As String, ByRef focus As Short, ByRef attach As Short)
           CheckRegistration(GPApp.RegisterFocusTrigger(obj, focus, attach, GPCallback, proc), obj, "focus")
       End Sub
     Private Sub CheckRegistration(ByRef error_val As Short, ByRef obj As String, ByRef reg As String)
           If error_val <> REG_ERR_NOERR Then
               MsgBox("Failed to register a " & reg & " notification on " & obj & ".  " & RegistrationErrStr(error_val))
               GPApp = Nothing
           End If
       End Sub
    Error_val always equals 4


  3. Hi Fabiano
    Can I suggest either logging a support case or asking your question on the community forum (link on right hand pane)?
    Blog comments are not an appropriate method for providing support.


Please post feedback or comments

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.