Great Plains Dexterity programming in VB.NET

This article is for advanced Great Plains Dexterity and VB.Net developers. It describes the technique of direct COM objects calling in Dexterity.


Microsoft Great Plains and its current programming language Dexterity should be considered seriously by developers community and we would like to popularize the advanced techniques in Dexterity - calling COM objects. This will enable you as a developer to integrate such nice things as Web Service into legacy Great Plains interface.

First of all - you need to create your Web Service at your choice - it is outside of the scope here - we have WildCardWebService created. Then you need to create COM object. We used VB.Net and Visual Studio.Net 2003.

Public Class AST_ComWildCard
Region "COM GUIDs"
' These GUIDs provide the COM identity for this class 
' and its COM interfaces. If you change them, existing 
' clients will no longer be able to access the class.
Public Const ClassId As String = "E14B960C-780C-45B4-92BD-4E8EB228AFC3"
Public Const InterfaceId As String = "7C2C2917-43D0-4BE1-B16B-1473E8A40BDC"
Public Const EventsId As String = "8BE33DF4-D64D-4A54-BEA7-EFD645D205D6"
End Region
' A creatable COM class must have a Public Sub New() 
' with no parameters, otherwise, the class will not be 
' registered in the COM registry and cannot be created 
' via CreateObject.
Public Sub New()
End Sub
 Function LoadActivate(ByVal localurl As StringByVal baseurl As String, _
ByVal userid As StringByVal pwd As String, _
ByVal sourceid As String, _
ByVal cardnum As StringByVal subprogid As StringByVal LoadAmount As String, _
ByRef response As StringByRef Description As StringAs String
 result As String
 ws As WildCardWebService
ws = 
New WildCardWebService(localurl)
result = ws.LoadActivate(baseurl, userid, pwd, sourceid, cardnum, subprogid, LoadAmount)
If result = "URL doesn't respond!" Then
response = "2"
Description = result
Return result
End If
 result.IndexOf("Response=") <> 0 Then
response = result.Substring(result.IndexOf("Response=") + 9 + 1, 1)
End If
 result.IndexOf("ErrorDescription=") <> 0 Then
Description = result.Substring(result.IndexOf("ErrorDescription=") + 17 + 1, 
esult.IndexOf(" ErrorDisplay") - 1 - (result.IndexOf("ErrorDescription=") + 17 + 1))

Catch ex As Exception
response = "3"
Description = "COM Object Error!"
result = ex.Message.ToString()
Return result
End Try

Please - register this COM object via REGASM command.

Now let's open Dexterity. If you don't have it installed - install it from Great Plains 7.5 or 8.0 CD#2.

In Dexterity open DYNAMICS.DIC and create new Library: Resource Explorer->New->Library(COM), select your COM object and register. Now it is ready for referencing in the Sanscript code.

Create Custom Form/Window, create local invisible field '(L) WildCard' this field should have reference type COM Object and COM Object type will be available from the list. Place push button which will be calling your COM/Web Service and add somewhat similar to this code for the button:

'(L) WildCard' of window AST_WildCard = COM_CreateObject("WildCardClassLibrary.AST_ComWildCard");
if '(L) WildCard' of window AST_WildCard = null then
error "Could not create WildCardClassLibrary object.";
abort script;
end if;

'(L) Result' of window AST_WildCard = '(L) WildCard' of window AST_WildCard.LoadActivate(

'(L) WildCard' of window AST_WildCard = null;

And you are done. You are now calling from Custom Dexterity window COM and it in turn calls web service. Web service returns parameters back to COM and you are getting them back in your good-old-days Dexterity customization.