Infor-Med Medical Information Systems Inc -- Praxis EMR – (VB6)
Infor-Med Medical Information Systems Inc. (“Infor-Med”) used gmStudio to develop an advanced Custom Upgrade Solution for their Praxis EMR Product. Praxis® EMR is more than an electronic records (EMR/EHR) system. Praxis is a template-free medical tool. Unlike rigid and cumbersome templates, Praxis uses artificial intelligence called Concept Processing that learns from you. No other EHR allows smarter and higher quality medicine than Praxis EMR.
Baseline Metrics
Metric | Comments |
FILES | 1,484K LOC Logic and 95K LOC GUI in 6,794 code files |
BINARIES | 4 EXEs, 59 DLLs, 50 Controls, 11 OLE EXEs, |
MEMBERS | 85,019 unique subprograms |
UI | 1,274 unique UI containers containing 9,362 instances of 737 different kinds of controls. |
COM | 128,010 calls to external COM components. |
WIN32 | 2,572 calls to 355 unique entry-point APIs from 22 libraries. |
Project Phases
GM assisted with the following three phases of the project:
An Assessment, Definition, and Planning engagement
A Standard Upgrade Phase resulting in Standard Upgrade Solution and build-complete code for the entire Praxis system. This solution produced a direct C# translation generated from the VB6 code and a C# stub framework generated for the external COM platform dependencies.
A Two-week intensive knowledge transfer workshop where GM and Praxis developers reviewed and experimented with the Standard upgrade solution and learned how to reproduce and improve the results using gmStudio in the Praxis environment
A Custom Upgrade Phase implementing numerous custom upgrade features and providing a runnable .NET system. During this phase, GM provided only Q&A technical support and the Praxis team completed the custom upgrade in house
GM and Praxis followed the Tool Assisted Rewrite Methodology. All three phases were completed in nine months with a staffing level of one part-time GM resource and four full-time client developers.
The Custom Upgrade Phase was conducted over a six months period and produced a Custom Upgrade Solution that could be used to automatically rewrite the Praxis EMR codebase to C# with all of the custom upgrade features listed below. On a fast Windows 10 development machine, the custom upgrade process runs, from start to finish, in about 10 minutes generating the 156 application projects and integrating them in a VS2019 solution.
Custom Upgrade Features
The collection of features integrated and delivered in the Custom Upgrade Solution are summarized below:
COM API/Control Upgrades
WebBrowser upgraded using mscomct2.Winforms.Refactor rules
MSXML2 upgraded using GM.msxml6.dll
ADODB upgrade to MigrationSupport SqlClient using msado15.dll.Refactor rules
MSComDlg: upgrade to WinForms CommonDialog classes using comdlg32.ocx.Refactor rules
MSComCtl upgraded using Refactor.mscomctl.ocx
ImageList/ListImage
ListView/ColumnHeader
ProgressBar
StatusBar/Panel
TabStrip/Tab
Toolbar/Button
TreeView
MSCOMCT2 upgraded using mscomct2.Winforms.Refactor rules
DTPicker
FlatScrollBar
UpDown
Scripting upgraded to System.IO using using Scrrun.dll.Refactor rules
Dictionary
Drive
Encoder
File
FileSystemObject
Files
Folder
TextStream
References to In-house C++/COM dll upgraded to COM Interop (more than 1300 referenced Coclasses)
References to In-house C++/ActiveX Controls upgraded to COM Interop.
Language Upgrades
Coding Style: used optional parameters and named arguments
Line: upgrade emulated with WinForms Label.
Error handling: upgrade to Try/Catch; simplify On Error GoTo; Selectively removed error handlers used for stack tracing
ByRef/ByVal: optimize parameter marshaling
Variant/Object Type Inference: optimize
Structural Matters
Shared Files Consolidation: consolidate 22 unique shared files into assemblies referenced from the generated application projects
Integrate hand-coded content: 371 Replacements Rules, 15 Function Reauthor and 3 file replacement.
VS2019 Solution: generate a solution file integrating the full application stack: 130 translated projects, 26 stub implementations and 201 hand-coded .NET projects
Win32
Replaced Win32 wrapper functions with functionally-equivalent hand-coded functions or intrinsic framework APIs
Value Added Features
Integrate with hand-coded .NET function library
4 updates of the VB6 codebase during the update process
3 gmStudio Updates during the migration process implementing improvements to support some requested features