Converted .NET Assets Project.zip (9Mb)
The AI Accelerated version of FmPro Migrator Platinum Edition
11.28 - Adds a new Code Conversion Workbench Training feature which trains the machine learning models to improve the converted code for all programming languages.
Note: This feature is compatible with the new FileMaker 12 file format for converting layouts (with the exception of tab control enclosed objects).
Visual FoxPro, FileMaker Pro and Microsoft Access to C# Conversion with the Code Conversion Workbench
Many projects require the conversion of VFP code to C#, as shown in the screenshot below. Other conversions are also available including the conversion of FileMaker Pro and Microsoft Access VBA code into C# and 50 other languages. The VFP Code Conversion Workbench enables developers to manage the automated conversion of hundreds of PRG files and form code within an entire VFP project in a single window. Individual procedure/functions can be selected by name for single-click submission to the selected AI provider and machine learning model. Output files are saved automatically as the results are received into a folder of converted scripts. Completed scripts can be further processed by GitHub Copilot X and Visual Studio IntelliCode to complete the integration into the new project. The VFP Code Conversion Workbench supports conversions into the top 50 most popular programming languages as found in the TIOBE index. Machine learning prompts are generated automatically, but the prompt text and source code fields are fully editable. Part of the secret sauce of this tool includes the system prompts and setup parameters which are built into the workbench software.
Code Conversion Workbench Model Training Records
Top 10 Features - Code Conversion Workbench
Converts VFP PRG/Form code, FM Scripts and VBA code to 50+ programming languages.
Up to 500,000 daily AI tokens included.
Efficient workflow manages importing, processing, naming and saving of all scripts.
To-Do list checklist shows project status at a glance.
Finely tuned system messages and properties are built in and sent automatically.
Procedure/Function splitting sends manageable sized chunks of code for processing.
Flexible GUI provides full control of AI model, source text, prompt text and output filename.
Customize the conversion process by adding model training records.
Included with the AI Accelerated version of FmPro Migrator Platinum Edition.
Dynamically tracks available tokens based upon selected generative AI model.
Top 10 Features - FmPro Migrator
Instantly generate a full featured .NET database application having insert, update and delete functionality.
Create fully customizable, networkable standalone applications, saving thousands of dollars for client licensing.
Automated
conversion of FileMaker Pro Layouts, Microsoft Access and Visual FoxPro Forms/Reports to .NET XAML files.
Database scripts are converted into commented C# and Visual Basic code.
Utilize converted relationships and .NET DataGrid objects for sophisticated database functionality.
Builds both C# and Visual Basic projects for Visual Studio 2010 simultaneously.
Use existing FileMaker Pro, Microsoft Access or Visual FoxPro projects as your .NET project software spec.
Process
your files locally, using FmPro Migrator Developer Edition.
Converts Tab Controls into .NET tab panels including embedded objects and background color.
Saves
weeks of development effort writing a full featured .NET database application.
For more info please send email or call.
Description
The .NET Conversion Service built into in FmPro Migrator Platinum Edition migrates or converts FileMaker Pro, Microsoft Access and Visual FoxPro projects into Visual Studio 2010 .NET 4 database front-end applications. This feature quickly and efficiently converts layouts/forms, scripts, relationships,
and value lists into .NET database applications for Windows desktop apps and web browser Silverlight apps. The .NET Conversion feature leverages
the automated layout and relationship importing features of FmPro
Migrator Platinum Edition, along with FileMaker Pro Advanced, Microsoft Access or Visual FoxPro and Visual Studio 2010.
.NET Conversion Service Pricing |
The .NET Conversion License key is included with FmPro Migrator Platinum Edition (and is greatly enhanced by the AI Accelerated Edition.
|
The features and benefits of using the .NET
Conversion Service include:
Save
Time, Get Up and Running Quickly - It can be a tedious and time consuming
process to manually re-create each FileMaker or Access form object using
any other development environment. Rather than spending days or even
weeks of valuable time manually converting hundreds of layouts, .NET
developers can utilize the .NET Conversion Service as an
economical alternative. FmPro Migrator Platinum Edition typically
processes each layout in less than 1 second - much faster than
you could perform the task manually!
The ability to efficiently perform .NET migrations makes it possible to quickly show prototypes to
prospective customers. An automated migration process represents the
ultimate in rapid application development, which can't be matched
by any other development environment. Being able to show customers
a rapid prototype may make the difference in getting approval for
a new client project.
Use Existing Database Files as Your .NET Project Software Spec - With a typical .NET development project, it may be necessary to spend weeks or even months of work writing a detailed software spec prior to starting the development effort. FmPro Migrator makes it possible to use your existing FileMaker Pro or Microsoft Access database as your software spec, reducing your development costs and timeframe.
Script
Conversion - Each FileMaker Pro, Visual FoxPro or Microsoft Access script imported by FmPro Migrator,
is converted into functional C# or Visual Basic code by the AI Accelerated Edition of FmPro Migrator.
Code Conversion Workbench Training
The Code Conversion Workbench Training feature enables developers to customize the automated conversion process to match their unique code base.
Do you have specific user-written functions you want to use to replace the original Visual FoxPro functions everywhere in your code base?
Do you prefer to use the VFP Toolkit for .NET functions?
This is where you define the unique features you want performed by the machine learning model with plain English text examples as shown in the screenshot above. This feature works across all models from all vendors and instructs the model exactly how you want the converted code to be written. Add as many training records as you need and enable/disable records as needed while converting your code base.
Code Conversion Workbench Training Results
Example |
VFP Code |
C# Converted Script |
C# Converted Script With Training |
Conversion Notes |
inlist() |
procedure ValidateOptions_299
if mod.option=249 and mod.num2>96 and
inlist(
job.option,'ABC','DEF','XYZ')
lcmsg='This option is not available with a value over 8 feet.'
lnret=-1
endif
endproc |
public int ValidateOptions_299(Mod mod, Job job)
{
if (mod.option == 249 && mod.num2 > 96 && (job.option == "ABC" || job.option == "DEF" || job.option == "XYZ"))
{
string lcmsg = "This option is not available with a value over 8 feet."; // This variable isn't used. Consider removing or using it appropriately.
return -1;
}
return 0; // Implicitly returning 0 if the condition is false, mirroring VFP's behavior.
} |
public class Validator
{
public int ValidateOptions_299(Module mod, Job job)
{
if (mod.option == 249 && mod.num2 > 96 &&
StartsWithAny(
job.option, "ABC", "DEF", "XYZ"))
{
string lcmsg = "This option is not available with a value over 8 feet.";
return -1;
}
return 0; // Or whatever the default successful return value should be
}
public static class StringExtensions
{
public static bool StartsWithAny(this string str, params string[] values)
{
return values.Any(str.StartsWith);
}
public static bool StartsWithAny(this int num, params int[] values)
{
return values.Contains(num);
}
}
} |
In order to improve readability and maintainability in the C# code we want to replace the VFP inlist() function with a user written StartsWithAny() class.
Without training, the LLM creates individual comparisons for each option being checked.
Adding the traing record results in the StartsWithAny() class being used within the code. As a bonus - the Google Gemini 1.5-Pro model has written the class for us and implemented method overloading to handle both string and integer comparisons. |
empty() |
procedure ValidateOptions_299
if !
empty(
mod.char3) and !'ABC'$upper(mod.char1)
lnret=-1
lcmsg='Either select ABC in the options or do not select an alternate size'
endif
endproc |
public static int ValidateOptions_299(dynamic mod)
{
if (!string.IsNullOrEmpty(mod.char3) && !mod.char1.ToUpper().Contains("ABC"))
{
return -1;
}
return 0;
} |
public int ValidateOptions_299(dynamic mod)
{
if (!
String.IsNullOrWhiteSpace(
mod.char3) && !mod.char1.ToUpper().Contains("ABC"))
{
return -1; // lnret = -1
// lcmsg = 'Either select ABC in the options or do not select an alternate size' - This would likely be handled by displaying a message to the user in the UI.
}
return 0; // Assumed default return value if the condition is not met.
} |
Instead of just checking for Null or Empty values, we also want to check for white space. By default, only Null or Empty values are checked.
But by adding the training record the LLM will also check for white space in every place where it finds empty() in the VFP code base. |
$ |
procedure ValidateOptions_299
if !empty(mod.char3) and !'ABC'
$
upper(mod.char1)
lnret=-1
lcmsg='Either select ABC in the options or do not select an alternate size'
endif
endproc |
public void ValidateOptions_299()
{
if (!string.IsNullOrEmpty(mod.char3) && !("ABC".ToUpper().Equals(mod.char1, StringComparison.OrdinalIgnoreCase)))
{
return -1;
MessageBox.Show("Either select ABC in the options or do not select an alternate size");
}
} |
public void ValidateOptions_299()
{
if (!string.IsNullOrEmpty(modChar3) && !modChar1.ToUpper().
Contains(
"ABC"))
{
lnRet = -1;
lcMsg = "Either select ABC in the options or do not select an alternate size";
}
} |
When converting the VFP $ operator, we want to use Contains, which is used by default with most public models. But when using Ollama to run the llama3 (8B) locally we get the output shown here. Therefore using the training record enables the output of the local LLM to match the output of the much more expensive public LLMs.
Also, notice that the IsNullOrWhiteSpace() results shown in the row above weren't generated for this example. This is because that training record wasn't enabled for this row of results. These training records can and should be enabled at once in order to achieve the desired output. |
Parentheses around numeric comparisons |
procedure ValidateExtra_299
if job.custom='E'
if
mod.option=249 and mod.num2>96
lnret=-1
lcmsg='Maximum height is 8 feet"'
endif
if mod.option=248 and mod.num2>48
lnret=-1
lcmsg='Maximum height is 4 feet"'
endif
endif
endproc |
public int ValidateExtra_299(Job job, Mod mod)
{
if (job.custom == 'E')
{
if (mod.option == 249 && mod.num2 > 96)
{
return -1; // Implied: Sets lnret = -1 and lcmsg = "Maximum height is 8 feet"""
}
if (mod.option == 248 && mod.num2 > 48)
{
return -1; // Implied: Sets lnret = -1 and lcmsg = "Maximum height is 4 feet"""
}
}
return 0; // Implied: Successful validation (lnret remains at its default value, presumably 0)
} |
public int ValidateExtra_299(Job job, Mod mod)
{
int lnret = 0; // Initialize lnret to a default value (assuming 0 means success)
string lcmsg = "";
if (job.custom == 'E')
{
if (
(mod.option == 249)
&&
(mod.num2 > 96)
)
{
lnret = -1;
lcmsg = "Maximum height is 8 feet\"";
}
if (
(mod.option == 248)
&&
(mod.num2 > 48)
)
{
lnret = -1;
lcmsg = "Maximum height is 4 feet\"";
}
}
// In C#, it's common to return a value indicating success/failure
return lnret;
} |
Adding training records is also a good way to improve the style and readability of the code beyond just getting the functional aspects correct. In this example we want to improve readability and insure proper precedence by putting each comparison within parentheses. Without this instruction, the LLMs won't generally perform this task automatically. |
Visual FoxPro Static MetaData Export Process
FmPro Migrator uses a 2 step process to import the metadata from within Visual FoxPro projects. Thru the use of the included VFPExport.exe Utility, Visual FoxPro project metadata is read directly from the VCX, SCX, FRX, DBC, DBF, MNX and PRG files referenced within the .PJX project file. This information is written into a new database file named VFPExport.DBF.
FmPro Migrator Visual FoxPro MetaData Import Processing
FmPro Migrator reads the contents of the VFPExport.DBF file and converts its contents into a standardized XML format which is stored within the FmPro Migrator MigrationProcess.db3 project database. Once the Visual FoxPro metadata has been converted into the standardized XML format, it can then be converted into any of the other database or development environments which are supported by FmPro Migrator.
A Learning Tool - It could take weeks of work reading thousands of pages of documentation to learn how to develop a full featured .NET database application by yourself. Or, you could let FmPro Migrator do all of this work for you within a few seconds. FmPro Migrator builds a functional database application directly from your original database file.
.NET Database Framework
All of the database management code generated by FmPro Migrator is implemented by using the ADO.NET object-relational Entity Framework. The ADO.NET Entity Framework provides an abstraction layer between C#/VB .NET code and the SQL database. This feature defines entity classes from the SQL database schema which shields the application code from changes in the underlying SQL database.
Application Menus & Record Navigation ToolBar
Application menus and a record navigation toolbar are added to the WPF XAML code created for each window. The globally defined ToolBarUserControl.xaml and MenuUserControl.xaml files enable efficient editing of toolbars and menus for every window of the project. This code can also be easily removed from any Window XAML file where it is not needed.
The navigation toolbar includes Previous Record, Next Record buttons, record navigation slider, and a total records label. A comboBox menu lists all of the windows in the application for navigation between windows. Selecting another window in the list (as shown by the selection of maintenance_recordWindow above), opens the window as a new window.
Portal, SubForm and Grid to .NET DataGrid Conversion
FileMaker Portals, Microsoft Access SubForms and Visual FoxPro Grids are converted into .NET DataGrid objects. The alternate row color info from the original Portal is also configured within the DataGrid. Related records are gathered based upon a conversion of the original database relationships in order to automatically fill the DataGrid with related records.
Tab Control to WPF Tab Tab Items Conversion
|
FmPro Migrator converts each individual tab of a Tab Control into a TabItem object within a a TabControl object. Each object within the particular Tab is created within its respective TabItem.
The color of each Tab Panel is used to set the background color of the new TabItem. Unlike FileMaker Pro, WPF TabItems only display the background color at the top of the TabItem label - when the TabItem is not selected. Therefore the TabItems will look a little different from the original Tab Panel object. |
Relationship
Conversion
|
During the processing of each Window object, info is gathered regarding the relationship used to access the data for the object. This info is written into the xaml.cs/xaml.vb code behind files associated with each window.
FmPro Migrator writes relationships into the destination SQL database, which is then used by Visual Studio to generate ADO.NET Entity Framework mapping. The generated application objects shield the application from changes within the underlying database schema. |
Image Field Support
|
Microsoft Access OLE Object and FileMaker Container fields are converted into BLOB columns within SQL database tables. Images from BLOB columns are displayed within a WPF image object.
Image objects are also used within DataGrid objects, and automatically display data within the related database table records. Resizing the width of the DataGrid column automatically resizes the image object proportionally for proper display of the image data. |
CheckBox & Radio Button Groups
|
Radio buttons and checkboxes are created as individual objects, having text labels extracted from the custom value list associated with the original field.
Since the original objects used a text field to store one or more data values, the same functionality is implemented in the .NET code behind files. Radio buttons write a single text value into the database for the selected radio button.
Checkboxes write multiple values into the database separated by return characters in order to simulate the original database functionality.
Checkboxes consisting of a single value list value equal to a numeric "1" will be created with the label drawn as a space (meaning it will be an invisible label) - as is shown with the checkbox for the Obsolete? field at the left. When selected, this checkbox will write the numeric value "1" into the database or an empty value if it is unchecked in order to simulate the original database functionality. |
Custom
Value Lists
|
Custom Value Lists are read from
the source database project and are used to populate the WPF ComboBox, checkbox or radio buttons wherever the value list is utilized. Within FileMaker databases, Custom Value lists are stored in a centralized location within the database file. ComboBox values are implemented the same way within the generated .NET application, by placing the values within the AppResources.xml file. Therefore making a change to the list of custom values in one location within the project automatically makes the same change to all ComboBox objects which use the same value list throughout the .NET application.
|
Layout
Images and Vector Graphic Objects
|
Rectangle, rounded rectangle, and oval graphics objects are converted into their equivalent WPF vector graphic objects and placed onto the new window in the same location. Embedded images like the drag & drop icon, New, Delete and Find icons are de-duped and referenced as image objects within the Images folder within the Visual Studio 2010 project.
FmPro Migrator builds objects by using a specific Zindex value to minimize the overlapping of objects. For instance in this screenshot, the yellow rectangle was created with a Zindex of 1, the TextBox and text labels were created to sit over top of the rectangle by having Zindex values of 7 and 4 respectively. This technique is used because there isn't any method available to determine the z-order stacking of the objects created on a FileMaker layout or a Microsoft Access database form. It is likely that some manual changes will generally be necessary to fine tune the Zindex values of objects on the card.
|
Date Fields
|
Date fields configured with a date picker in the original database, will be configure in the same manner within the converted .NET project. |
Visual Studio Project Files
|
FmPro Migrator generates two complete sets of Visual Studio 2010 project files. These files include a complete C# project along with a complete Visual Basic project. A typical conversion project will often contain hundreds of files, all generated automatically and within a matter of seconds in most cases.
.NET developers need only select which project file to open (.csproj or .vbproj) and then create an ADO.NET Entity Framework database connection within Visual Studio. If it is necessary to re-generate the project files again, the existing database connection information will be retained and only the WPF form XAML and code behind files will be regenerated. |
Window Scrollbars
|
The XAML code generated for each window of the .NET application automatically hides or shows vertical or horizontal scrollbars based upon whether the window content is fully visible. |
Layout Objects Supported
Field
Field with Value List Menu
Field with Checkbox
Field displayed as Radio Button Set
Field with Calendar Picker
Text
Button (including non-button objects configured as buttons)
Button (with embedded merge field object)
Portal (including portal objects)
Line
Rectangle
Rounded Rectangle
Oval
Embedded Layout Image Graphics
Tab Controls (and enclosed non-Tab Control Objects)
Demo Mode
Due to the complexity associated with any database
migration project, it is recommended that a small test project be
completed prior to starting the full conversion project. By default,
FmPro Migrator Platinum Edition processes .NET migration
projects in demo mode without a license key. In Demo mode, FmPro
Migrator Platinum Edition will process 5 layouts and 5 scripts.
Using the demo mode at no charge, enables .NET
developers to become familiar with the conversion process and see
the completed XAML, C# and Visual Basic code within a complete Visual Studio 2010 project.
Processing Steps & Requirements
Requirements:
FmPro Migrator Platinum Edition - FmPro Migrator Platinum
Edition is used for capturing the structure info from the FileMaker
Pro database file and generating the Visual Studio project files.
FmPro Migrator Platinum Edition utilizes the DDR XML file generated
by FileMaker Pro Advanced, along with AppleScript(Mac OSX) or a compiled WinAutomation (Windows) job file [provided at no cost]
in order to automate the capturing of Tables/Fields, Layouts,
Relationships and Scripts. This import process follows the Table
Consolidation Process steps, documented in the PDF
file on the support page. Once the info has been captured by FmPro
Migrator Platinum Edition, click the .NET Conversion
Service button on the GUI tab. Complete instructions for the DB to .NET Conversion Service are included a detailed PDF file.
In demo mode, FmPro Migrator Platinum Edition will convert 5 layouts
and 5 scripts into a Visual Studio project. The .NET Conversion Service license is included with FmPro Migrator Platinum Edition, for the specified number of layouts/forms/reports.
FmPro Migrator Platinum Edition also imports Microsoft Access database table, relationships, forms/reports for migration into Visual Studio .NET projects. The .NET Conversion Service license key also unlocks the Access to FmPro Migration Service which is the first step in the .NET migration process.
FmPro Migrator Platinum
Edition may also be used by the .NET developer to perform
the conversion of the Microsoft Access and FileMaker Pro database tables and data into
one of the supported
SQL database servers.
FileMaker Pro Advanced 8.5+ - FileMaker Pro Advanced is used
for creating a DDR XML export file providing the structure of the
FileMaker Pro database file. This file is used for importing the
relationships and layout display order info associated with the
layouts.
AppleScript(macOS)/WinAutomation(Windows) - FmPro
Migrator Platinum Edition utilizes one of these two utilities to
drive the FileMaker Pro user interface to automate the capturing
of layouts from via the clipboard from FileMaker Pro.
Microsoft Visual Studio 2010
Unsupported Layout Objects and Other Features
Feature |
Status |
Merge Fields |
Under Consideration |
WebViewer |
Under Consideration |
Delete Found Set or Delete All Records |
Under Consideration |
Chart Object |
Under Consideration |
Embedded Page#, Date, Record# Layout objects |
Under Consideration |
Field Validation |
Under Consideration |
Field Auto-Enter Values |
Under Consideration |
Global Fields, Summary, Calc Fields |
Under Consideration |
Layout Object TAB Order |
NOFIX - Info not available in DDR XML |
Layout Part Objects |
NOFIX - Info not available in DDR XML |