This article is for
intermediate Great Plains Dexterity developer. It describes the directions to
phase out Dexterity functionality and replace it with newer technologies.
Microsoft Great Plains and its current programming language Dexterity should
still be considered seriously by developers community. However Microsoft
Business Solutions announced switching to new technologies, mostly .Net, where
all the MBS applications will be arranged into suites (Microsoft Financials,
Microsoft Distributions, Microsoft Manufacturing, Microsoft Human Resources) and
integrated into so called Microsoft Business Portal. Looking into the future we
recommend you to analyze Microsoft Great Plains Dexterity customization for
replacement it's portions with Microsoft SQL Server stored procs, Crystal
Reports, direct C#/VB.Net web publishing, eConnect
1. Replace Dexterity cursor with SQL Stored
Dexterity was designed as multiplatform technology (primarily Btrieve, Ctree, SQL
Server, potentially Oracle). Dexterity data retrieving mechanism is based on
Range start, Range End, Get First and Get Next clauses. It is in fact similar,
however a little bit slower to cursors in Transact SQL. Long ranges in Dexterity
are good candidates for replacement by SQL stored procedures with update clause.
For example, consider to replace following Dexterity code:
Clear 'SOP Type' of table SOP_HDR_WORK.
Clear 'SOP Number' of table SOP_HDR_WORK.
Range start table
Get first table SOP_HDR_WORK.
While err<>EOF do
If 'Salesperson ID' of table SOP_HDR_WORK = "ERIC" then
Edit table SOP_HDR_WORK.
Set 'Salesperson ID' of table SOP_HDR_WORK to "BILL".
Save table SOP_HDR_WORK.
Get next table SOP_HDR_WORK.
With the following SQL
Update SOP10100 set
SLPRSNID="BILL" where SLPRSNID="ERIC"
Bringing new data into
a table in Dexterity is based on change/edit table clauses, in SQL they are
equivalent (by performance) to inserting one record at the time.
When having long cycle of change/edit table in Dexterity, consider replacement
by SQL stored procedure with Insert Into clause.
2. Use Crystal Reports, call them from via VBA in
The easy way to call Crystal Report from your VBA code from your modified form:
= "D:\Clients\TheClient\Invoice Status.rpt"
Public crwApplication As CRPEAuto.Application
Public crwReport As CRPEAuto.Report
Private Sub Print_BeforeUserChanged(ByVal KeepFocus As Boolean, ByVal CancelLogic As Boolean)
= "Invoice" Then
If crwApplication Is Nothing Then
crwApplication = CreateObject("Crystal.CRPE.Application")
3. Use Direct .Net Web Publishing from Great
The easiest and safest way is to use eConnect - SDK with VB samples, created for
eCommerce programmers and web designers to call the functionality in Microsoft
Great Plains. If your company can not afford eConnect - create your own set of
stored procedures to address Great Plains database and go ahead with Visual
Studio.Net to do the web publishing.