Polygon -- PolyPM ERP for Sewn and Textile Industries (VB6)


Polygon Software is a worldwide provider of software solutions for the sewn-goods and textile industries. Its PolyPM product is a client/server application that includes both Product Lifecycle Management (PLM) and Enterprise Resource Planning (ERP) products.

The PLM product includes global sourcing, data vault, bill of materials, costing, product configurator, event messaging, workflows, document tracking, measurement specs, style graphics and document publishing.

The ERP product is fully integrated with the PLM product and includes order processing, EDI, sales analysis, forecasting, inventory management, purchasing, receiving, production planning, cut planning, manufacturing, WIP tracking, quality control, shipping and invoicing.

Great Migrations worked with PolyPM to scope, estimate, and plan an upgrade effort then implemented the initial solution to produce an integrated build-complete C# system with a specific set of custom upgrade features. Great Migrations then installed the solution on a machine at the PolyPM site and provided training and support so that the PolyPM team could continue development and optimization of the upgrade solution in-house.

Project Highlights

System Metrics

CODE254K LOC Logic and 20K LOC GUI in 1,120 Files: 134 Forms, 1 MDIForm, 778 Classes, 18 UserControls, 134 Modules, 2 PropertyPages, 4 Designers organized into 47 VBPs.
BINARIES11 EXEs, 32 DLLs, 4 Controls, 0 OLE EXEs
MEMBERS17,408 unique subprograms: 6,882 subroutines, 4,644 functions, 2,387 properties , 594 externs , 2,901 event handlers. 
UI119 unique UI containers containing 2,259 instances of 74 different kinds of controls.
COM254,197 calls to external COM components. The diversity of COM members is 1,468 unique members from 317 classes in 40 COM components.
WIN321,069 calls to 244 unique entry-point APIs from 24 libraries. API Calls are made from 375 different user procedures.

COM Upgrades

  • ADODB: upgrade ADODB to System.Data, System.Data.SqlClient and MigrationSupport.DataLib
  • COMAdmin: upgrade COMAdmin to COMAdmin stub API with stronger typing
  • CommonDialog: upgrade CommonDialog to MigrationSupport.UI.CommonDialog
  • COMSVCSLib: upgrade to COMSVCSLib stub API with changes to reduce ref args
  • EasyLabel: upgrade to EasyLabel ELabelInfo control to interop wrapper and AxHost wrapper
  • Excel: upgrade Excel to Office Excel primary interop assembly
  • FlowChartLib: upgrade to FlowChartLib control to interop wrapper and AxHost wrapper
  • MSComCt2: upgrade MSComCt2 controls to WinForms (FlatScrollBar)
  • MSComCtl: upgrade MSComCtl controls to Winforms Controls (ListView, TreeView, ProgressBar, ToolBar, ImageList)
  • Outlook: upgrade to Outlook to Outlook primary interop wrapper
  • MSXML2: Upgrade MSXML to System.Xml
  • Quickbook: upgrade Quickbook to interop wrapper
  • Richtextlib: upgrade Richtextlib control to System.Windows.Forms.RichTextBox
  • Scripting: upgrade Scripting filesystem to System.IO; upgrade Scripting.Dictionary to PpmUtilities.PpmDictionary
  • SQLDMO: Upgrade SQLDMO to custom Microsoft.SqlServer.Smo wrapper
  • TabDlg: upgrade TabDlg Control to MigrationSupport.UI.TabControl
  • VszLib: upgrade VszLib to custom System.IO.Compression wrapper
  • ZRush_ShipRush: upgrade ZRush_ShipRush to control interop wrapper class
  • PpmToolbar: upgrade PpmToolbar to stub API
  • IHCs: in-house .NET assemblies were change from interop to native linkage

Custom Upgrades

  • Upgrade Custom collections and Scripting.Dictionary to strongly typed generic custom collections and dictionaries
  • Upgrade several technical classes to hand-coded replacements
  • Determine Dictionary types based on string literal field names found in the code
  • Restructure global multi-use classes into static classes
  • Eliminate unnecessary temporary arguments passed by ref
  • Upgrade specific method parameters to be optional
  • Upgrade error handling to use try-catch and MigrationSupport.Utils.ResumeNext
  • Eliminate unnecessary weak typing

Polygon Testimonial
PolyPM consists of several hundred thousand lines of VB6 code. The biggest challenge porting PolyPM from VB6 to C# was choosing specific class types for Variant and Object variables. PolyPM uses the VB6 Scripting Dictionary and ADODB Recordsets extensively, which work with untyped variables. Polygon selected Great Migrations because gmStudio did a superior job of assigning types to generic variables.

Great Migrations was contracted to perform the initial migration using gmStudio. In Phase 1 the code was migrated to C# projects and compiled successfully. In Phase 2, the migration was enhanced to handle dictionary datatypes.

Essential to this project is the ability to update the C# source code from VB6 as development continues using VB6. At this stage it takes less than an hour to do so. The migration would be impractical without this ability.

The support from Great Migrations has been superior. Requests for assistance have been answered immediately and completely, even when outside the scope of work.

Lou Wohlmuth