Wednesday, January 16, 2008
Oops foundation centralized coding in Visual DataFlex
Tuesday, January 15, 2008
The NorthEast DataFlex Consortium
The NEDC was formed in April of 2003 by a group of New England based Visual DataFlex custom application developers with varied specialties. It offers "the power of a large corporation without the large cost" for potential software partners/clients and is noteworthy as being the largest single resource for Visual DataFlex programming in the United States.
Why Choose the NEDC?
The NEDC is a group of independent Visual DataFlex (VDF) programmers that have joined in camaraderie to provide increased value and capabilities to their customers. The NEDC is not a conventional consulting firm, or even a legal entity, but “an almost virtual company”.
We think this concept works to make the NEDC an exceptional partner for your business, as we can offer the power of a large corporation without the cost.
· Experience: Collectively, the NEDC provides over 150 years of VDF (and other language) system development experience. Whether your needs are for an inventory, sales, manufacturing, time & attendance, ERP, or some other kind of system, we most likely have real life experience implementing similar systems.
· Skills: When working on a project, the person best suited to a particular portion is the one doing the work. NEDC members have worked in many environments: independent, small business, corporate and as a VDF instructor. This gives us real life understanding of how companies work. We all started in character mode (DOS based) DataFlex, so we know the language from the ground up. Most of us are also involved in testing of the newest version, so we know what’s coming.
· Project Types: We work in many different ways: conversions of character mode DataFlex systems to VDF, conversions of systems written in another language, maintenance of existing VDF systems, and whole new systems. Whether you need a classic Windows system, a Web-based system or a combination of the two, we can do it.
· Costs: Being a “virtual company” saves our clients money: no rent, tax burden or administrative costs to pass on. This means that we can work for a substantially lower hourly rate while providing excellent service. Of course it also means we can’t invite you to visit our expensive corporate headquarters! Instead, we come to you, which helps us get a better picture of how your company works.
· FLEXibility: The NEDC normally assigns one developer as project leader. If he goes on vacation or gets sick, another fills in. If you prefer to work with another developer as lead, simply ask and we’ll swap roles. This means that you are in the driver’s seat, not at the mercy of someone you’ve never met deciding that another project is “more important” than yours or that you will have to work with a particular person.
· Security: If you are used to working with a single developer you may worry about something happening to that person. In the NEDC, if something were to happen, another developer will switch into the role.
by:
Peter A Donovan
Charter Member of the NEDC (NorthEast DataFlex Consortium)
Monday, November 12, 2007
RoloFlex Release: Press Release and Marketing
Featuring Visual DataFlex
Rated highly by submission to download sites listed herein, the RoloFlex CRM/PIM [customer relations management/personal information manager] is going out to major download sites and features the upgraded RoloFlex product released with the Visual DataFlex 12.1 platform.
Tuesday, October 09, 2007
DDO Tree Technology – DAF Methodology
DDO Tree: A combination of instantiated data dictionary objects tied together.
DAF Methodology: How the ddo tree handles find, clear, save, delete and validation.
Here’s a sample (simple) ddo tree as found in a sales order data entry program or other module…
Communication between the ddo tree and the objects in play is a two way street!
In this example of data entry, the Server of the main panel is Salehead and it controls the find/clear/save/delete and validation of itself and all it’s parent ddo objects.
In a lesson in polymorphism, the “Customer” ddo recognizes it is a parent object of the server in play, and enforces different rules (find required on record for instance) than it normally would if it was the server itself.
Further, the SaleHead ddo takes responsibility for accepting the find/clear/save/delete messages sent via the user. When the cursor/focus is in the customer name window, for instance, the request_find message actually goes directly to the SaleHead ddo, not the Customer ddo. The SaleHead realizes that the message is directed at a parent ddo and forwards the message up thru the connection to the Customer ddo to handle.
Test!
Take your data entry module with parents and put a hook message inside the server and the parent “request_find” method and see which pops up first!
In the same way that this communicates upwards, it also communicates downwards so that when a delete message comes to the server, it travels downwards, deleting all children of the server and then itself. The beauty of the methodology is that no parent records can be deleted by the user unless programmatically allowed by the software engineer.
Test!
Take any data entry module, place the focus in a parent object cell or window, and press delete. What get’s deleted? Not the parent!
So, augmentation of ALL find/clear/save/delete requests can be done at the server level! Here’s how to code so the customer of an order cannot be changed:
Object Customer_DD is a Customer_DataDictionary
End_Object
Object SaleHead_DD is a SaleHead_DataDictionary
Set ddo_server to Customer_DD
If ((iFile = Customer.File_Number) and (Current_Record(Self))) Procedure_Return
Forward Send Request_Find iMode iFile iIndex
End_Procedure
If ((iFile = Customer.File_Number) and (Current_Record(Self))) Procedure_Return
Forward Send FindByRowID iFile riRowID
End_Procedure
Test!
This is one correct way to code a sales order so the parent cannot be changed of an existing sales order!
So, what have we learned? DAF Methodology.
It’s a study of communication between data entry objects which delegate user messages to the server, and how that server communicates the messages to it’s parent and child tables.
Wednesday, October 03, 2007
Visual DataFlex DDO Tree Technology Reference
– Visual DataFlex–
Outline Mode:
- Introduction
- Terms
- What is a DDO?
- What is a DD Class?
- What is a DDO Tree?
Introduction:
Based on DAF Methodology, the DDO Technology in Visual DataFlex is a study of instantiation, delegation, and polymorphism.
Terms:
Instantiation: The act of creating an object based on a class and class hierarchy.
Delegation: Visual DataFlex features natural full delegation of methods by default, where the method travels first to the object, then to it’s superclass, and on throughout the full class hierarchy until the method is resolved. A method runs to completion without augmentation or definition on the object level but such augmentation, forwarding, or canceling is supported on both the class and object level.
Polymorphism: The act of an object to produce different behavior depending on it’s context.
What is a DDO?
“data dictionary objects” are instantiated in each data entry (or other type) module for the purpose of:
- Providing a “server” for find/clear/save/delete and validation operations for a data table.
- Providing data aware controls with attributes such as capslock, valid values, default values, range definition, selection list definition, etc.
- Communicating with other DDO’s in tandem to do all of the above with coordination.
- Definition of “constraint data filters” where your data can be a subset of the whole.
Sample Object Code:
// doc: instantiation of customer_datadictionary class placed inside panel of data entry form.
Object oCustomer_DD is a Customer_DataDictionary // instantiation of class.
Set DDO_Server to oSalesRep_DD // parent or “server” ddo
Set DDO_Server to oTerms_DD // parent or “server” ddo
Procedure OnConstrain // predefined method
Forward Send OnConstrain // continue delegation
Constrain Customer.Active EQ “Y”
Constrain Customer As (Customer.TotalOwed What is a DD Class?
A data dictionary class is a number of things: about 10 major functions with more omitted for space constraints in this article.
[3] The DD Class defines which other database table objects must be instantiated alongside with it to perform save and delete operations. For instance, the save of a sales order lineitem would require a dd object (ddo) for the product it was related to in order to reduce inventory or create a backorder. In another instance, the sales order header would require a ddo for the sales order lineitem to be present in order to delete the related order lineitems. Also, a DD Class may be configured to not allow deletes if child records exist.
[4] The DD Class allows columns to be associated with a “selection list” or lookup object. The chosen selection list will create a lookup button on the control chosen for that column and automatically popup and communicate two ways with the selection list.
[5] The DD Class allows the database programmer to define the object labels for each column and also to default the creation of controls for this column to a certain type such as a spinform or comboform, etc. (communication with the visual dataflex studio).
[6] The DD Class features augmentable save, find, clear, delete, and validate methods. The operations server (ddo) in a form or “view” will initiate a cascade of messages designed to perform an operation such as a save operation. When this save occurs, it cascades to all the connected data dictionary objects in the form or “view” which then delegates to the DD Class where you can augment the operation based on business rules you define and business rule exceptions which can be controlled via various means, usually with a property setting.
[7] The DD Class allows the setting of “valid values” validation tables which accompany a column in whatever control form it takes (regular form, comboform, or in a grid). The DD Class can define a list such as “activeinactive” for itself, or share a validation table with other DD Classes such as a list of US states or valid shipping terms.
[8] The DD Class allows for the definition of entry and exit methods for each column of the database table. Whether the column, in data entry, is represented in a comboform, or in a grid, the entry and exit methods follow it.
[9] The DD Class allows for auto-incrementing from a “system file” for ID fields, for instance or lineitem numbers.
[10] The DD Class communicates when instantiated, to validate the find/clear/save/delete cascade of messages along with whatever other ddo objects it is connected to.
What is a DDO Tree?
Data Dictionary Objects are run in tandem to find/clear/save/delete and validate these operations.
Let’s take a sales order entry application for example. The business rules given to you are;
· Customers who are not active may not purchase.
· Active customers may not go over their credit limit by more than 10%.
· Sales orders update the customer total owed.
· Lineitems update both the sales order total and reduce product from inventory.
· Product records update vendor purchase history.
· Sales orders update the salesrep volume sold.
Here’s a sales order entry application ddo tree (simplistic) example:
// doc: ddo tree for SO application
Object oTerms_DD is a Terms_DataDictionary
End_Object
Object oSalesRep_DD
End_Object
Object oCustomer_DD is a Customer_DataDictionary
Set DDO_Server to oSalesRep_DD
Set DDO_Server to oTerms_DD
Procedure OnConstrain
Forward Send OnConstrain
Constrain Customer.Active EQ “Y”
End_Procedure
Function Validate_Save Returns Integer
Integer iReturnVal
Forward Get Validate_Save to iReturnVal
If (Customer.Owed > (Customer.CreditLimit * 1.10)) Error 999 “Customer Over Credit Limit”
Function_Return iReturnVal
End_Function
End_Object
Object oVendor_DD is a Vendor_DataDictionary
End_Object
Object oProduct_DD is a Product_DataDictionary
Set DDO_Server to oVendor_DD
Procedure Update
Forward Send Update
Add (Product.Qty * Product.Price) to Vendor.Volume
End_Procedure
Procedure Backout
Forward Send Backout
Subtract (Product.Qty * Product.Price) from Vendor.Volume
End_Procedure
End_Object
Object oSaleHead is a SaleHead_DataDictionary
Set DDO_Server to oCustomerDD
Procedure Update
Forward Send Update
Add SaleHead.Total to Customer.Owed
Add SaleHead.Total to SalesRep.Volume
End_Procedure
Procedure Backout
Forward Send Backout
Subtract SaleHead.Total from Customer.Owed
Subtract SaleHead.Total from SalesRep.Volume
End_Procedure
End_Object
Object oLineItem_DD is a LineItem_DataDictionary
Set DDO_Server to oSaleHead_DD
Set DDO_Server to oProduct_DD
Procedure Update
Forward Send Update
Add LineItem.Total to SaleHead.Total
Subtract LineItem.Qty from Product.QtyOnHand
End_Procedure
Procedure Backout
Forward Send Backout
Subtract LineItem.Total from SaleHead.Total
Add LineItem.Qty to Product.QtyOnHand
End_Procedure
End_Object
// END CODE
With a pictorial version of what’s happening in the tree:
Thursday, September 27, 2007
RoloFlex Companion #1
The first RoloFlex Companion Product *for Professional Version Only will be Launched on November 15th.
Contributed by longstanding custom app developer Garret Mott of Auto-Mate Software.
Note: Garret has done a number of custom email managers, adding in features such as disclaimer, logo as an image, signature with custom field placement capability, attachments, well... it has a lot of features. Any developer looking for a custom email attachment to their product please contact http://www.automatesoftware.com/.
Note: This is intended as a launch of companion products, both for RoloFlex, and a platform for getting your Visual DataFlex product out in a new market. Please contact http://www.applausesoftware.com/ for more details and a prototype agreement.
Thanks! Good luck to the pooch - "Rolo".
Saturday, September 22, 2007
www.RoloFlex.Biz - New Home for RoloFlex
Friday, September 21, 2007
A guide to discovering the Visual DataFlex Studio

A beginner’s guide to coding a custom database application in *Visual DataFlex
by Peter A Donovan/Applause Software/Boston.
*Visual DataFlex is a trademark of Data Access Worldwide of Miami.
Overview:
Here’s a conceptual step-by-step methodology for creating your first Visual DataFlex application.
Note:
Visual DataFlex is a “transparent back end” database application studio where the same exact code runs on your choice of backend.
This overview assumes you will start with the native DataFlex backend as a starting point.
Goal:
To encourage you to try the Visual DataFlex studio for a test drive using [freeware] the Personal DataFlex edition licensed for personal but not commercial use.
This is a full studio deploy with no restrictions other than mentioned above.
Compelling Reasons:
You can most likely produce a fundamentally solid application in ½ the time as your current studio.
First, let’s assume you have the studio downloaded from http://www.visualdataflex.com/ and you are running on a 30 day eval prior to getting a license.
If you fire up the Visual DataFlex Studio, you’ve got the “order entry” sample example workspace automatically loaded for you, and the current project is “Order.src”. From this point, you should hit [F5] and the “source code = src” will compile into an executable and run. Please check out the features of the running program. This, we will code ourselves in a new “SRC” project to see how it was done.
1. From the menu, choose File-New-Project-Windows Project, and you will get a dialog asking for the .EXE name. Please type “Test” and press ok.
2. For fun, just hit [F5] and compile an executable, which you will find is a perfect MDI [multiple dialog interface] container with no functionality BUT… the button bar, menu headers, and runtime are all done.
3. Back in the Studio, let’s create a data entry program or form if you will. Click File-New-View/Report-Data Entry View Wizard, and click Ok.
4. From the wizard, click “next” on the opening page.
5. For an object name, please enter “oSalesOrder” and accept the defaults for the next 2 windows and click “next”.
6. Next page: change the radio button please to select “create a header-detail entry view” and click “next”.
7. Now, the time has come to select the CHILD table for the data entry view, so highlight “OrderDtl” and click “next”.
8. For the “header” data table, we will select “Orderhea” and click “next”.
9. Now, we select the columns “fields” to show in the data entry HEADER section, and I recommend: Choose ALL the columns from the OrderHeader table EXCEPT the last one [last detail number] and click “next”.
10. Now, we select the columns “fields” to show in the child grid below the header, and I recommend: Choose ALL the columns [except for the FIRST : ordernumber] from the detail table and click “next”.
11. Next, you get to customize the labels for each of the forms if you like, but the default has already been programmed into the datadictionary, so simply change the radio button to “right” justify the labels, and click “next”, and “Finish”.
12. Press [F5] which auto-saves and compiles your SRC into a EXE and test!
You now have a running program [under the view menu] which actually saves sales orders and detail lines. Not the most appealing visually, but structurally sound.
You will find that there are entry methods associated with some database columns, and exit methods associated with some. You MUST find a parent table record in order to save, and you MUST fill in some required fields. There’s a snazzy lookup list [expandable] for each of the associated tables, and some columns automatically are instantiated as comboforms for you automatically. A couple of small modifications later and we are on the road to deploying this. [omitted].
This is just a sample of the power of Visual DataFlex, and a few words of explanation are required to answer questions that this may have raised.
* The datadictionary for each of the tables has been pre-coded for you in this sample example.
* The datadictionary for the parent tables adjusts automatically, knowing that it is used as a parent reference, to be “find required” in an excellent display of polymorphism. The same exact table behaves differently when it is the main table for data entry, i.e. no “find required”.
* The key fields/columns of each table cannot be changed: they are protected from change via a checkbox in the datadictionary.
* The labels for each column are configured in the datadictionary so they appear consistent throughout your application.
* The lookup lists, called selection lists are assigned to a table-column in the datadictionary so they automatically appear with a prompt button with no code.
* The Order Header TOTAL automatically adds and subtracts based on what you do with the lineitems: delete/save new/change.
* The Product on_hand total automatically adds and subtracts based on what you do with the lineitems: delete/save new/change.
* For a real LASTING impression of visual dataflex, please note the quantity onhand of a lineitem product, and then CHANGE the product in the lineitem without changing the quantity. * Then, choose the lookup, and you will see that the lineitem quantity has been moved back INTO inventory for the product you changed. Note: there are about 5 lines of code in the datadictionary that make this happen!
* Now, for real fun…, place the cursor in the header section on customer and choose DELETE from the button bar. Surprise, the customer is not deleted but the entire order and all of it’s lineitems are deleted. Repeat: place the cursor on the product code column of an existing lineitem and hit DELETE. The product is not deleted, but only the lineitem.
By this point, you may be ready to give the datadictionary a once-over!
From the Studio, select Tools-Database Builder. This utility creates the CLASS that each datadictionary object [in your entry form] is based on.
From the “Open Table” pulldown, select “Order Header” and browse thru the settings. It’s extremely impressive I think in the maturity of the product.
Ok, you want to give Visual DataFlex a shot, but where do you go for help?
The Visual DataFlex newsgroup: The url is: news://news.dataaccess.com/visual-dataflex
Please introduce yourself as a new developer and we will welcome you with advice and support.
Thanks for giving Visual DataFlex a trial, and look forward to seeing you on the newsgroup!
Sincerely,
Peter A Donovan
http://www.applausesoftware.com/ of Boston, USA
The Agile Manifesto
This morning, I read one of the greatest blog articles by Joe Coley of the NEDC. In a newly opened blog, Joe's article just posted features the AGILE MANIFESTO which is an incredibly poignant statement about software development philosophy.
I recommend checking in on Joe's blog as a "must read"- http://itknowledgeexchange.techtarget.com/customapps/
Joe's photo and background can also be found at:
http://www.nedataflex.com/NEDCtest1.asp?pageid=22
PS: You can become a signatory of this manifesto if you agree with it's content.
Thursday, September 20, 2007
Publising an article about Visual DataFlex
http://www.manhattanservice.com/
Now, from experience, I recommend 2 sites from this list:
[1] Will my article be formatted nicely and not cluttered with advertisements on key words within my article?
[2] Will the page rank [power to make the article stand out on google] be high enough to effectively publicize my work?
[3] Are the site underwriting standards tough enough to eliminate spam articles so that my article will not be cluttered by junk articles, AND will it stand a chance of being distributed to other article sites?
[4] Will they review and approve my article in a reasonable time frame?
Sites to avoid:
ISnare - this site effectively only publicizes when you pay and your articles will just hang in limbo until you do.
Secondary Site:
Article Factory - this site has low underwiting standards and your post will disappear in time if not popular, however they feed other channels and my article on Visual DataFlex product review got over 600 views, 21 other sites picked up the article, and it is still up and running.
Note: If you have a blog, and feature articles about Visual DataFlex in the blog, I recommend you visit www.BlogUpper.Com [a child site of Manhattan Service] for assistance there.
If you have a topic to write about, and would like to further the cause of Visual DataFlex, please consider publishing an article or more thru these channels!
Sincerely,


