Wiki Home

VFP Version Next Wish List Org


Namespace: B2B
See all the lists in Category Vfp Wish Lists

(See VFP Getting Your Wishes :-) Pick a favorite, write memo arguing the business and software case for it, then submit to Randy Brown. Repeat.-- Steven Black)

Everyone: When you review/add stuff to this list, note which ones are added in VFP 7, or workarounds using any VFP version.

VFP 8.0 Wish List


An open letter from the Visual FoxPro development community to the Microsoft Visual FoxPro Development team.

Dear MS Fox Team,

As users of Visual FoxPro 7.0 and prior we are extremely happy to have such a powerful and flexible tool to work with. While we feel the features are exceptional we are looking forward to the next version of Visual FoxPro.

This letter was truly a group effort since it was composed by the online VFP developer community on the Visual FoxPro Wiki, a collaborative knowledge base of Visual FoxPro information. The Wiki is a Web Site about VFP created with and running VFP, accessing VFP stored data.

While the collaborators of this letter are only a percentage of all VFP users we can only assume it is a fair representative sampling thereof. We thank you in advance for the attention and consideration we hope you give in reading this letter, knowing the attention and consideration that went into creating it.

What follows is a list of features and functionality that we, the VFP commmunity, would like to see in the next version of Visual FoxPro.
(This table of contents is identical to that in VFP Version 7 Revealed, so if you change one, change both!)
Table of Contents
Bug Fixes
IDE Features
Project Manager
Class Browser
Class Editor
Form Editor
Code Editor
View/Query Designer
Database Features
DBC Features
Table Designer
Views (Local/Remote)
SQL Server Integration
Language Features
Base Class Features
Grid Enhancements
COM Features
Multi-Tier Features
Web Features
ODBC Driver
Error Handling
Documentation
Enhanced SQL SELECT
Debugger
Miscellaneous

Bug Fixes • Just work thru all open entries in the buglist (Hint: See MS Knowledgebase ). A bugless tool is the best selling point!
• Fix of all C0000005 Errors, these are very critical for the Image of VFP, also saves lots of our time trying to work around these errors...
C5 errors occur when an error is trapped that normally would cause a visit from Dr. Watson. Many of these things are beyond the control of VFP. So, if you eliminate all of the C5 errors, you'll get more GPFs.
This misses the point of the request: Fix VFP7 so that garbage is better automatically collected so the invalid references don't happen anymore... See C0000005 Ex Error on this wiki for a way to accomplish this using VFP6 code (as opposed to the 'correct' way of correcting the vfp.exe code)

IDE Features • When you resize a control horizontally, both the width and height properties get set in the properties sheet (and vice-versa). Call me picky, but if the height does not change, the height property should not change from the default inherited by the class definition.

The problem I'm running into with this is that we've changed the standard height for some of our base subclasses and even though none of the height properties were ever explicitly set in the form designer, any time the width is set, the height also is set. Now I have to revisit each and every form to "reset to default" the height of the controls. Maybe I'll have to write a builder to deal with this... Arg. - William Fields

• More complete VSS source control integration features. I'd like to be able to do more from within VFP. Share/Branch/Label projects etc...
Do other MS tools provide this functionality? The VFP team is limited by what VSS exposes in the COM Server
I don't know if other VS tools incorporate the functionality, but there's an article in May's MSDN Mag about the VSS object model and a relativly simple custom developed web application that incorporates them. It's a pretty good article, we've been using VSS for years without taking advantage of it's most advanced and advantageous features. In addition to the increased integration features, I'd like to see more white papers on source control with VFP. I'd also like to have VFP incorporate "merge" functions for VSS - reason being is that most of the source code for VFP projects are binary (tables) and you cannot do a merge from VSS (or VFP) with them. There's got to be a way for the VFP team to incorporate some kind of text file extraction (similar to the text files that are generated when you check files into VSS) and compilation to incorporate merge functions.

• Breakpoint: Last line stepped from. I want a break point to follow me as I step though code. If I step_over a procedure and it blows up, I would like there to be a break point at the place where I hit step_over, so that I can step_into the next time. -- ?CFK

• The Project Hooks are great! How about editor hooks and/or user defined extentions. I'd love to be able to add to the rightclick menu when editing methods and prgs. (I know, you can hook using the _BEAUTIFY variable but it's a bit sloppy.) Replacing the print routine with my own would be useful also.

• put back the original functionality of SET ECHO ON: echo the line of code out to StdOut (the current output: screen or file) so that examples can be created that show the lines of code and the resulting output. -- ?CFK

• Add a switch so that MODIFY (form/class/report) prompts "create new file?" before auto-create a new one. 99% of the time I'm working on existing objects. (To ensure backwards compatibility, I'd be happy with a switch to select this behavior. Bill Armbrecht

• put back the functionality we had in VFP5 where MODI CLASS ? OF ClassName selected the class and displayed the memberlist. It's a pain to have to click on the class name (usually requiring scrolling first) Bill Armbrecht

Project Manager • Better user defined hierarchical structure for Classes, Forms, Reports, Programs as Directory Tree for a great quantity of Files in big Projects. An option to sort on timestamp. It would bring the things I am working on to the top of the list.
• Add the ability to show checked out files.
• New Events for Project Hooks to better VSS Control CheckOut, CheckIn
• New Events for Project Hooks for Project Activate
• The F2 key is the key to rename files in Windows Explorer. We'd like to see this hot key tied to the rename option under the project menu and on the right-click menu.
• Allow finding a file by typing first few letters of name instead of jumping file to file based on only first letter. Also a tab where all files were at base level so you can look for any one by name.

Class Browser • Allow dragging and dropping classes between class libraries in the same instance of the class browser. You can do this now using the Project Manager instead.
• A button to toggle hierarchical view on and off.
• Support of the Source Control Interface.

Class Editor • Visually Create and Modify Header, Column, Dataenvironment Class. VFP8?
• Visually Create and Modify Page Class. VFP8?
• Change the Column and Header to User defined Classes in Design time in Grids. VFP8?
• Change the Page Class to User defined Class at Design time in Page Frame. VFP8?
• Ken Levy's Super Cls and Drew Speedie's Super Cls extensions built-in. VFP8?
• Property to determine instantiation order within a container. Laurent Dujat ZOrder ?
• DesignTimeAccess and DesignTimeAssign methods. - These would add the ability to write code in the class designer, code which would NOT be executed at runtime, but at design time when accessing/modifying a user defined property from the properties window of a control - something like a DesignTimeAssign and a DesignTimeAccess method. As an example, when adding a property to a control in the class designer, we could write in the DesignTimeAssign method of the property some code which would verify that the property value we try to set is of Character type; the DesignTimeAssign method would be fired when modifying it's value from the FORM designer. We could also write in a DesignTimeAccess method some code opening the appropriated combo box, when accessing the property from the form designer.
Thoses methods could exist at the Property level (to be fired when accessing/assigning a property), and at the Control level. (to be fired when accessing/closing the properties window of a control, or when leaving a forml). They would support inheritance. This would give tremendous extensibility to object reuse, and it seems to me than this would be a much more straightforward way than today's wizard system, as the assistants could be created in the same time we perform a subclassing operation. I do not know if any product does that. I think it would be of great interest in VB too. Anyone interested in discussing this subject? I've wanted this same idea.. where I needed it is in creating compound objects in a Control or a Container... It's very disconcerting to make a compound Control, then resize it in a subclass and not have the contained objects position themselves until runtime. -- wgcs
Form Editor • Ability to select the base class for Forms (and controls, etc.) from a picklist or a getdir(*.VCX) instead of having just one option in Tools/Options/Forms/Templates
• DHTML Based Forms in addition to native VFP forms.
• The ability to anchor UI objects to their container/form so there is no need to write resizing code. (See J++ form desinger for a excellent implementation of this feature.) VFP9

• Add an additional tab on the Property Window for user defined properties or have a switch to allow user defined properties to appear in the alphabetical list of native VFP properties. The OTHER page is basically all the UDPs. VFP9 - Favorites

• Property to determine instantiation order within a form. - ZOrder?
• AutoScroll Property to automatically scroll forms to follow the cursor
• Change the color of a selected Tab Order box after checked - Now I know where I am.
• Allow listboxes/editboxes to be extended vertically with shift-click as grids do.
When editing method code in a form or class, the Procedure combo box is useful for navigating to another method. However, it does not seem to have any rational sense about which method to make the current default. I propose that the first (modified) method in alphabetecal order be the default. Perhaps a button next to the combo could allow us to sort by most recently edited. Ray Kirk


Code Editor • Ken Levy's Super Cls and Drew Speedie's Super Cls extensions built-in. VFP8?
• Ctrl-UpArrow and Ctrl-DownArrow scroll the code window up and down leaving the text cursor on the same line. This was one of the handiest features of the old PWB and in the current VC++ editor.
• Scrollbars that don't bounce the code window when the thumb is clicked.
• Column cut and paste like Word and .Net (Alt-Drag)
• Reg Exp support for search and replace.
• Be able to set defaults like Search Scope=all
• Put splitter bar in editor to allow split view of different sections of a prg
• Variable tracker linked to a concordance file. If the programmer types
x = (where x is a variable name), the editor would look x up in the concordance file. If it is in scope, no problem, but if it is not, the editor would issue a warning dialog that would allow the programmer to correct the spelling of the variable, add it to the concordance with a scope directive at the top of the program (like CEE alt-6), or accept it and move on. This would provide us with "IntelliSense" for variables!
• I would be very happy if Ctrl - G was always available to me when seaching through code. -- Dave Aring
View/Query Designer • Support multiple children.
• A new tab with support for ALL of the DBSETPROP() properties for Views
• Ability to edit the View's SQL and have the GUI part of the designer read the SQL. Once again that two-way tool request. If Access and Power Builder can do this, I am sure the VFP team can do it. VFP8? (kinda)
• Ability to inherit properties of the tables
• Ability to modify the table structure and have the view incorporate the modifications automatically
• The ability to output view results to a table without having to first create a view, then perform a query on the view. Give the view all of the functionality of the query!
• Ability to handle more complex views ALA SQL Server view designer
• Ability to set USE * or USE fieldnames in the SQL code generation proccess, so I can add fields to tables without trashing my views.
• OLE DB based views
• The ability to edit a view as text without having to have a separate file. These don't work too well with updatable view at any rate. JOIN ON = ---- Ray Kirk VFP8?

If the view designer from SQL2K could somehow be hooked in, I'd be a happy guy -- Dan LeClair
Database Features

• A way to make the SQL UPDATE command reuse deleted records so that we don't bloat a table if we only ever use SQL DELETE, INSERT & UPDATE on it, instead of using a custom "SalvageRec" function. This should be controlled by a Data Session SETting (perhaps SET DELETED ON RECYCLE?).
• IndexCount much like indexseek except it would return the number of qulifying index entries, whithout returning records.
• Transparent access to ADO recordsets - views?
- How about an ADO Syntax generator like VB?
- How about SELECT ... INTO XML [name.XML] output? Or incorporate ADO/XML into a Remote View?

• The ability to store arrays in database tables as fields. This feature is available in IBM DB2 and is excellent. Imagine storing 12 months of sales in one field. Obviously, these should be callable as objects as well.

• More data types consistent w/ SQL Server - smalldatetime, smallint, smallmoney, tinyint, timestamp, etc. Especially varchar! VFP9


• Table repair utility built-in
• Commands to read and write stored procedures. -- We already have that: see APPEND PROCEDURES, and COPY PROCEDURES
• BEGIN / END TRANSACTION to apply to FREE tables (not included in a DBC)
DBC Features Deleted bullets which are supported with the VFPDBCEvents
• Ability to synchronize the data in two databases.
• DBC Security via passwords and/or encryption.
• Referential Integrity that can be programmatically set and enforced by the database engine, not triggers. RI does not need to include cascades, just restricts. An orphaned child is indicated by a null Foreign key. -- ?CFK
• A BeforeTrigger-Event. The Trigger should be switched off, so that's possible to write in Fields for Timestamp, Userstamp or calculated Fields without new trigger-event.
• dbc: store the left,top,hight,width data in the dbc, not foxuser.dbf. that way when a dbc is sent to someone else, the possisioning of the tables is preserved. -- ?CFK
• dbc: Select multiple objects (tables and views) and move, expand, collapse, browse, delete. -- ?CFK
• dbc: print the visual version (what you see in the designer) -- CFK
Table Designer • Remove the modality from the designer.
• Allow to either resize the designer or bigger space to enter field names.
• Long index tag names?
• Ability to drag and drop fields from one table to another. This would create the field in the other table and create a foreign index tag for it.

Views • The ability to modify the WHERE of a view (remote and local) at runtime and requery without having to modify the view definition in the DBC.
• Local: Allow the view designer to be able to create a usable view from anything that can be defined in it.
• Remote: To Change User Login Name and Password Programmatically without changing the DBC or creating a temporary DBC for Views. VFP8?
SQL Server Integration • Better integration with SQL Server so that, like from within the VB6 IDE, we can gain access to (and edit) SQL Server stored procedures, etc.

Language Features • The ability to pass an array, that is a property of an object, to a function and/or procedure. See Passing Arrays
• A Build log option in the BUILD command. e.g.:
BUILD EXE myexe FROM myproj LOG mylogfile

Then, when it stops with a ^%^&*)(*! file access denied error, I can quickly work out which of the volatile files I checked into source control by mistake. This is already there in a rudamentary fashion. When compiling the project and you get a file access is denied error, check out the ProjectName.ERR file, the last entry should be the file it was trying to compile when the error occured. I will say however that it would be nice if the error log were more informative.

The log file would just take the form
Building EXE MyExe from C:\Development\MyProj.PJX
Started 2000-04-05 15:45:06
Compiling:
MainFile.PRG...OK
MainForm.SCX...OK
MainMenu.MSX...OK
Building APP...OK
Building EXE...OK
Finished 2000-04-05 15:45:48


• Function to create an multi dimensional array of all open tables in the current datasession. need info like alias name, table name, filepath etc...
• A Screen Resize Event. You can do this by creating an object in code and assigning _Screen to a member object, then putting your code in the member object's Resize event.
• Ability to Define & Raise Events - like in VB - very essential for COM
• Conversion functions for converting to all possible field data types (Cint, CDbl).
• Integration of VFPCOM features into the primary language.
• Full integration of the remaining Fox Tools functions into the language.
• Support retrieval of multiple records into a single object with a rows collection natively. Something like ADO without all of the overhead and without any methods or events. In other words something like SELECT * FROM whatever INTO OBJECT MyRecords. Support for selecting the records into an existing object should be included as well.
• Allow SCATTER NAME to work with an existing object. It should be capable of adding non-existent properties to the object dynamically (Add Property should be called for each new property) as well as writing to an object where the data properties have been predefined. VFP8?
• Allow SCATTER NAME to create "real" VFP objects. SCATTER NAME creates objects with properties corresponding to fields in the table. None of the VFP default PEMs are present (e.g. Name, Class, Parent, Add Property()) http://www.1cnp.com/images/pay_out.-SQL to accept a named object: INSERT INTO table FROM NAME ObjectName. This makes the command consistent with SCATTER NAME and GATHER NAME.
• The ability to fire an event either Now or Queued (see Power Builder) as opposed to just calling the method connected to that event.
• The ability to respond to ALL windows events.

• Structure type variable support. -- Ones that can be passed to DLL functions -- ?CFK

• A way that wrapper functions can pass "the rest of the parameters" to a wrapped function. for instance, Doug Hennings MakeObject has tuParm1..6, and then a case statement so that the call to New Object is passed the same set of init parameters that were passed to MakeObject. It is a bunch of code, and it will break if someone tries to pass 7 parameters. I am not sure if there is already an existing syntax for the solution, but I am thinking that an array might do the trick. so the first line of MakeObject might look like: lparameters tcClass, tcLibrary, tcInApp, taParms() -- ?CFK

• Named Parameters - like VB: It makes the code easier to read when there are many parameters, especially if most are optional and not passed. -- ?CFK

• Arrays that can contain arrays, or more than two dimensions for current arrays.

• Arrays of 0 length - alen(ArrayName) = 0. -- ?CFK

• Extended COPY TO syntax, mimicking BROWSE functionality, so that expressions can be output to (for example) an Excel file, plus fields found in a separate linked table. Example: COPY TO myXLfile.XLS TYPE XL5 FIELDS table1.field1, myexpression = ALLTRIM(table1.field2) + ALLTRIM(table2.field2), table2.field2

• A new Class directive (NOPUBLISHED), additional to PROTECTED and HIDDEN, to hide properties and methods in the property window of Class & Form Designer for internal properties or methods with PUBLIC interface. VFP8?

• A TIMEOUT clause to the READ EVENTS command to allow uses to trap application timeouts without resorting to Timer kludges.

• Expression(eExpression): The inverse of Evaluate(), it should take an expression of any type, and return a string that would evaluate back to the value of the expression. That is, for any expression x, x = eval(expr(x)). The return value would have the proper punctuation to denote datatype (quotes for char, braces or Date Time() for date and time, .t./.f. for logical, nothing for numeric). The punctuation makes this different from transform(). It should not lose numbers (so ignore SET DECIMALS). - ?cfk

• Scope operators for functions, and allow functions within methods. I realize that this would require a more formal begin/end of a function definition, but that is not such a bad idea either. This would allow me to do what I really want: functions within methods. Pascal supports the concept of a function that is local to another function; functions outside can not use it. C++ does allow for both private data and functions. Also, protected which is just like private but it becomes public for inheirted members. -- ?cfk

• Strict type checking for variables. Be able to define datatypes for variables, and get either compile time or runtime errors if the wrong datatype is stored. Since it is handy to hold values where we really don't know the type, include an "unknown " type. For extra credit, "unknown fixed" and "unknown varies": a variable of type "unknownFixed" that changes type would cause a runtime error. -- ?cfk

• Cat List(cDelimiter, cList1, cList2, ... cList(n) ): Concatenate items into a list, separated by cDelimeter. If an item is empty, it would not be included in the list. The query builder already does this when it builds the where clause (expressions separated by .and. ) For extra credit: Take an array of strings and return a delimited list of the elements. This would take care of the inverse of the aLines() function: Cat List( chr(13), aLines ) -- ?CFK

• Static variables such as those available in Visual C++ and Visual dBASE. This would allow a method or procedure to store a state that could be referenced in repeated calls to the method or procedure.

• Extension to the IN operator in SQL selects: SELECT * FROM anyTable WHERE anyField IN ARRAY arrayName
Why not using SELECT * FROM AnyTable WHERE ASCAN(ArrayName,anyfield) > 0 ?

• Expose many of VFP internal methods. Examples: The Sql Parser: I would like to be able to pass in an SQL command, check for syntax errors, and retrieve the components: the fields collection, the where clause, the collection of parameters. The program parser: given a line of code with commands an variables, resolve the variables to values, and return a string that has no outside references. -- ?CFK

• Hooks into the program interpreter: (not the parser or tokenizer) I would like to be able to assign code to be executed pre and post execution of each line of code. parameters like program, lineNo, the line of code, similar to what is displayed in the trace window. -- ?CFK

• Add support for method code in a contained object to reference the containing object(s) directly. For example, THIS.PARENT.PARENT would be far more meaningful if it was THIS.GRID or THIS.Column.

• New command Field Revert() which allows individual fields to be reverted You mean like what you can do now with SETFLDSTATE() and OLDVAL()?
  • variable scope commands{public, private, local} combined with assignment: the ability to assign values as part of the scope command. example: local lnCtr = 0
{begin scope, end scope} scope blocks: locals and privates defined within a scope block are only scoped to that block. same effect as putting the code within a block in a separate function. The preprocessor could just create a function on the fly. it would show up in the call stack just like any other function. -- ?CFK

• The LOCAL command should accept the ALL and EXCEPT