Tips   >   About   >   About (All Contents)
StudioTips is aimed at:
Shared knowledge is the best kind of knowledge!
StudioTips does not intend to replace the Omnis Studio documentation, rather, is aimed at supplementing the Omnis Studio documentation. The Omnis Studio documentation is accurate, but is lacking in code examples. When I was learning Omnis Studio that was the most difficult part. I needed to see how to write the code, not just read about. StudioTips focuses on providing developers with tips, code snips, and real demos..
The tips and code snips included in the StudioTips libraries are available and searchable on-line at www.studiotips.net. The on-line information is free to all Omnis developers. The code samples, demos, and utilties are only available to StudioTips members.
The cost of maintaining and updating the StudioTips website and creating new demos and utilities is covered through StudioTips memberships. The StudioTips libraries, code samples, demos, and extra utilities, are available to StudioTips members only. Visit the studiotips.net website to find out more about the benefits of being a member and how you can join. The cost of membership is very reasonable. You will receive a quick return on your investment in joining the StudioTips community.
If Omnis Studio provided developers with code examples, developers would probably start sending them emails telling them better ways to write their code. We're all better off if the engineers at Mitford House focus on Omnis Studio itself, not how to write code with Omnis Studio, that's our job. As a third party, StudioTips doesn't have to debate or defend the best way to write code, it simply presents developers with ideas that each developer is free to implement however best suits their situation.
StudioTips evolves based on questions and feedback received from developers who use StudioTips.
In some cases I am expressing my opinion, not necessarily the right opinion. Please email me if you have any suggestions for improvements, are confused by an explanation, notice any typos, or disagree with something I've stated in any of the tips. I don't want to mislead anyone using StudioTips with bad advice.
If there is something you'd like to see in StudioTips, please email me with your suggestion.
If there are user interface improvements that could be made to StudioTips ... let me know.
Many of the improvements and sections added to StudioTips are based on requests and feedback from other developers who use StudioTips.
Every time StudioTips improves, all the StudioTips users benefit. So send me those suggestions!
Doug Kuyvenhoven doug@vencor.caEveryone has certain biases when it come to programming so it is best that I tell you my biases.
Use of the
requires that you keep up your StudioTips membership. Please be sure to renew each year. Your continued support through your StudioTips members is important.The contact information for
Vencor Software, Doug Kuyvenhoven, and any other persons or companies mentioned in the StudioTips libraries assume no liability for the code or advice given in StudioTips. The information provided is to be weighed against the Omnis Studio documentation and your own judgement as to what will work best for your application. and the author are not to be removed from StudioTips or any classes or methods which you copy from StudioTips.Doug Kuyvenhoven doug@vencor.ca
Vencor Software www.vencor.ca
I first learned about Omnis through First Avenue Information Systems in Kitchener, Ontario, Canada. First Avenue was hired to write a Pricebook and Sale Quote package for Royal Homes to run on Mac Pluses being used in our Sales Offices. The first version was written in 1987 using Omnis 3.
Eventually we purchased Omnis 5 to create our own application for Production Scheduling. Bit by bit the Production Scheduling application was expanded and then moved to Omnis 7. In 1994 we had to downsize the company and in the process had to let our computer systems person go. With no programming background I started tinkering in Omnis 7. Programming with Omnis became a hobby that I enjoyed.
As the year 2000 approached a decision had to be made regarding Royal's old main frame computer and accounting software. The computer and software were not Y2K compatible. We made the decision to purchase Omnis Studio and write our own software. I spent many long hours in 1998/1999 learning Studio, learning SQL, and making the "paradigm" shift to object-oriented programming.
The Accounting, Payroll, Purchasing, Inventory, and Timeclock modules were on-line and running live by the end of 1999.
Besides being a lot of fun, the effort was well worth it. By combining the TimeClock, Timesheets, Personnel data, and Payroll into one Omnis Studio application, we immediately saved one man day a week plus the excessive maintenance charges from the Timeclock reader software vendor. The Purchasing Department and Warehouse efficiency and control improved dramatically as they were now able to quickly view and update information on screen. The application continues to grow as more departments and functions are intregrated.
Many thanks go to Tech Support for their patient and responsive assistance. Many thanks go to the helpful people on the Omnis Underground list server for answering all the questions I posted to the list server.
Attending the Omnis Developers Conference in Denver in 1999 was a real turning point for me. Through the seminars and off-line discussions I learned the beauty of table classes, and I began the paradigm shift to thinking in terms of object-oriented programming. (It really is a mind shift.)
Programming with Omnis Studio was so much fun that in 2001 I decided to end my 23 year career with Royal Homes and go full time into Vencor Software. Vencor Software still does the computer systems support for Royal Homes, but now has the flexibility to work on other projects as well.
Vencor Software's goal is to help other developers to learn and adopt Omnis Studio as quickly and efficiently as possible. StudioTips, StudioWorks, training and consulting are the ways which Vencor Software strives to achieve this goal.
This StudioTips library is aimed at helping other Omnis programmers who are learning and working with Studio.
Omnis Studio is a GREAT product, and a lot of fun to work with! Happy programming!
The thing that matters most in my life is my Saviour and Lord, Jesus Christ. I attended church all my life, but in 1989 at the age of 30, I discovered there was a lot more to church than "religion". I discovered that Christianity was about a "relationship" and invited Jesus to be my Lord and Saviour.
If you are looking for real joy, real purpose, and real peace in your life ... I invite you to do the same. There isn't anything in life more worthwhile than finding Jesus and life eternal through Him. God is so great! There is nothing I'd want more than for you to get to know him too. Feel free to talk to or email me anytime about this subject.
So you can recognize me at an Omnis Conference, click the Go to URL button at the bottom of the www.vencor.ca/aboutus/
window or go toSincerely,
StudioTips is a multi-library Omnis Studio application that is used by Omnis developers to aid them with code development. When StudioTips is installed and opened on your computer a
When you become a StudioTips member you can download and install the StudioTips libraries. You are licensed to use the StudioTips libraries as long as you are a StudioTips member in good standing. (Paying your annual membership dues.) menu is added to the Omnis Studio application menus. Using the menu you can open the window. The window is an off-line interface to all of the tips, sample code, and demos which are included with the StudioTips libraries. The window has a button which allows you to jump to the on-line version of the tip which you are currently viewing.The
window is your interface to StudioTips. There are several ways to open the window.If the
window is already open, pressing Ctrl/Cmnd+B will minimize the window.If the
window is minimized, pressing Ctrl/Cmnd+B will maximize the window.When you close StudioTips the last state of the
window is stored in a preferences file so that when you reopen StudioTips the window will be restored to the previous state.There is a
field at the top left corner of the window. The selector lists the different libraries which contain documentation. Think of each line in the group selector as representing a different book that you can pull off the shelf to read.When you select a group, the
builds a list of the topics available for that group. If there are numerous topics within a group, subgroups are listed in a tab pane across the top of the window.The topic titles for the selected tab are displayed in a treelist on the left side of the
You navigate the information contained in StudioTips by selecting a group, clicking a tab if displayed, and then selecting a topic node in the treelist. window. Some topics may include several subtopics. The subtopics will be available as child nodes of the main topic.You can hide the StudioTips libraries so that they are not listed in the
.Select the
To show the StudioTips libraries select the menu line in the menu. menu line in the menu.In the StudioTips tips and instructions you see something like this:
Contacts > wWindowName > > tab
>The above instruction would read as: "Press the F2 function key to open the Contacts library, select the wWindowName window class, press the F6 function key to open the , then click on the tab of the window."
window, select theIf you see "Ctrl/Cmd+B", for Wintel users that means press the shortcut key combination "Control+B", for Mac users that means press the shortcut key combination "Command+B".
Any time you see a shortcut key combination, the part preceeding the "/" is for Wintel users, the part after the "/" is for Mac users. The parts on either side of the "/" group is for both users. For example Shift+Ctrl/Cmd+B, Wintel users press Shift+Ctrl+B, Mac users press Shift+Cmnd+B.You can search for any topic contained in StudioTips as follows:
Advanced searches can be done as follows:
When you click on a node in the
treelist, the topic text is displayed in the area to the right of the treelist. At the bottom of the window several push buttons may appear.StudioTips members are free to copy and paste any sample code or demo code from the StudioTips libaries to their own application.
Most push buttons in StudioTips are coded so that if you shift-click on the button it will take you to Breakpoint in the $event method of the push button. This is useful if you want to step through the code in a demo.
There are a few shortcut key combinations that you should learn and use to enhance your StudioTips experience.
Click on the Omnis Studio
menu. You will see most of the IDE function keys listed in the View menu. For your information, here is a list of the IDE (Integrated Development Environment) function keys.To save screen space, StudioTips makes heavy use of context menus. Be sure to right-click on the various windows and fields to discover the context menu options.
If you wish to print any of the tips, click the
At the top of the on-line version page you will see a series of links to web pages which are higher up the directory tree. Clicking one of these links takes you to a button, and print the on-line version of the tip. page. Some of the table of contents titles include the description . The pages include all of the contents of the pages within that section (directory).All of the documentation in StudioTips is stored in the $desc property of object class methods.
The
window is similar to the in that it lets you navigate the libraries, classes, and methods, of the libraries which are currently open in Omnis Studio.The @ character.
window filters what you view to just the object classes and methods that begin with theIf you right-click the topic text and select studiotips.net website.
, you can edit the StudioTips text. A toolbar appears in the window. The toolbar buttons are used add pseudo HTML tags to the tips text. The pseudo HTML is processed by StudioTips into XHTML, saved to a local file, and then uploaded to theThe
window is designed so that any developer can use the window to write their own documentation and upload it to their own website where their users can read and print the documentation. Being able to write and update documentation without leaving Omnis Studio is a very fast and convenient way to write and publish documentation. Having the documentation stored inside Omnis Studio libraries makes it easy for multiple developers working with the VCS to share and maintain the documenation.If you are a new to Omnis, or moving from Omnis Classic to Omnis Studio... where do you start?
Omnis Studio has incredible depth. The only limit to the solution you are building is your imagination. (I might be exaggerating a bit ... but not much.) As with any product with depth, there is a lot to learn. You might get frustrated with Studio for the first couple months, but believe me, it's worth the effort.
Here are some suggestions for learning Omnis Studio:
There have been days where I have been 10 feet (3 meters) deep in my own code, trying for hours on end to solve a problem. Window events and report behavior would make me crazy some days. Changing one thing would cause something else to fail and around and around I would go.
Looking through the manuals, looking through the F1 Help, failed to shed any light on the situation.
One of the things that I found works good is to create a brand new demo library to isolate the problem.
You know the routine, create a new library, create a new window, or object, or whatever it is. Recreate the situation from the ground up.
It's amazing how many times this has solved the problem. And if it doesn't, you've got a demo library ready to send to Tech Support (or another developer) for them to review and suggest the solution.
If your demo uses a list, a quick way to build a demo list is to use $makelist. The following line of code, creates a 3 column list which you can sort, add, delete, rename, etc.
; Quick way to create a 3 column list for testing purposes.
Do $clib.$classes.$makelist($ref().$name,$ref.$classtype,$ref.$moddate) Returns List
You can either refer to the columns using the column aliases C1,C2,C3 or assign new names to the columns.
To convert or not to convert? That is the question.
I had an application in Omnis Classic which I had to move to Omnis Studio. I decide to write it from scratch in Omnis Studio. Running the Classic to Studio converter is quicker in the short run, but in the long run, writing from scratch is more efficient. Had I converted my Classic application, I'd still be spending time getting rid of the old Classic skeletons hiding in my new application.
You can not write object-oriented programming code in Omnis Classic. Omnis Studio is an object-oriented programming development tool. If you convert an Omnis Classic app to Omnis Studio using the converter tool you will end up with a pile of non object-oriented programming code running inside of an object-oriented programming development tool.
How many opportunties will you get to make a clean, fresh start at rewriting your application? Moving from Omnis Classic to Omnis Studio is your chance.
If you aren't already using SQL, do yourself a favor and jump to SQL at the same time. Take a look at StudioWorks, it will make the move from Omnis Classic to Omnis Studio, object-oriented programming, and SQL much easier to accomplish.You can break into the method editor and continue stepping through the code from any OK, Yes/No, No/Yes, Prompt for Input dialog window.
When the prompt dialog window is open, depending on your platform press the following key(s):
Use OK messages to assist with debugging by adding OK messages into your code which report the method being executed and the values you want to watch. Run the process you are trying to debug and at any one of the OK messages you can break into the code and continue stepping through the code in the method editor.
I like to include @DEBUG in the title of any debug OK messages so that I can easily search for @DEBUG to find and remove them later on.
You can change some of the Omnis commands without losing the calculations or text which you've entered. You can:
You can change the scope of any variable by dragging it from one tab pane to another tab pane of the
pane in the method editor.If you are decreasing the scope from a class or instance variable to a local or parameter variable you might get a message that tells you that the scope can't be changed while the class is open. If this occurs use the
menu to , then try again.If you are decreasing the scope of a variable it can't be in more than one method and you must have that one method selected at the time you decrease the scope.
If you are changing the scope of a class variable or instance variable, make sure you don't have any subclasses which are using that variable! The subclass methods will not be aware of the change. The next time you look at the subclass method, those variables will be prefixed with $cinst. and your subclass method code will be broken.
A situation where this trick comes in useful, is if you have a very long method which you want to break down into several submethods in the same class, or even into a separate object class.
Omnis Studio notation methods displays in plain brown text in the method editor.
Custom methods display in bold green text in the method editor.
If you misspell an Omnis Studio notation method it displays in bold green text. Once you pick up on this you can immediately notice if you've correctly or incorrectly typed an Omnis Studio notation method.
; $doesfileexist is displayed in plain brown text.
Do FileOps.$doesfileexist(Path) Returns bFileExists
; Misspelled $doesfilexist (missing the double 'ee') is displayed in bold green text.
Do FileOps.$doesfilexist(Path) Returns bFileExists
I use this trick a lot if I decide to change a kEntry field to a kMaskedEntry field or a kMultiline field.
You can cycle through the open IDE windows using a shortcut key combination.
You probably already know about this trick because it is used in lots of drawing program... but in case you don't here it is.
To copy an existing field in a window.
You can commnet out a line of code in the method editor, edit the code as text, and then uncomment the line of code.
A couple of situations where I use this trick:
The steps for editing code as text are shown in the following example.
Do iList.$search($ref.ColName=Value,1,0,0,0) Returns LineNum
If LineNum
; Do something
End If
; Do iList.$search($ref.ColName=Value,1,0,0,0) Returns LineNum
; If iList.$search($ref.ColName=Value,1,0,0,0)
If iList.$search($ref.ColName=Value,1,0,0,0)
; Do something
End If
The
Be sure you have tooltips enabled! Hovering over a function or other item displays a tooltiip with more information. Right-click on the is loaded with , , and other goodies which you need to know about when writing code. A very cool feature of the is that you can drag any function along with its parameters directly into your code. to set it and then right-click and after you have it set.You can use the Omnis Studio Find and Replace tool on selected lines in the method editor. As situation where I use this trick is if I copy a block of code from one method to another, but after copying the code I see that one of the variables used in the pasted in section of code needs to be change to the name of a local variable already included in the existing method. The steps for changing the variable name in pasted section of code area as follows:
Find and relace selected lines... a handy feature of OMST!
You can remove selected
log lines by right-clicking and selecting .After you enter a line of code Omnis Studio automatically corrects the case (upper or lower) of any characters in variables you type in your code to match the declared variable.
If you have variable named iBooksList and you enter ibookslist in your code, Omnis Studio will change ibookslist to iBooksList after you press the key or move to a different line in the code list.
If you are editing an existing line of code, you can intentionally type the variable name in all lower case characters and then watch as you press the Enter key to make sure Omnis Studio changes the case. If the case is changed you know you've correctly entered the variable name.
; There is no variable declared named 'iBookList' (singular)
Do ibooklist.$search(kTrue)
; There is a variable named 'iBooksList' plural.
; After I change 'ibooklist' to 'ibookslist' and press the Enter key
; Omnis changes the case to match the declared variable.
Do iBooksList.$search(kTrue)
If you aren't using the
, then you are missing a powerful tool in Omnis Studio which can assist you greatly in writing your code.The
lets you look at all the public methods of a class, their parameters, and description.You can drag methods from the
To learn more, go throught the StudioTips directly into your code along with the list of parameters. . The time you take to go through the tutorials will pay back in the time you save over the next month of writing your own code.Omnis Studio allows you to find and jump to lines of interest in the
list, list, and list:If are in the method editor of a sublcass and want to look at the code in the superclass here are a few tricks for getting to the superclass method.
If I don't have a Do inherited in the overridden method code, I will often add one at the end of the method after a Quit method command.
; Subclass method code of an overridden superclass method.
Do iList.$definefromsqlclass('SomeTableClass')
Quit method kTrue
; Include this line AFTER the Quit method.
Do inherited
; Select the above line and press F8 to jump to superclass method.
If you want to move some of the field from one tab to another tab of a tab pane object.
If you hold down the Ctrl/Opt key while dragging the fields, they will be copied to the other tab.
If you want to catch errors in your notation be sure to set the library preference $reportnotationerrors to kTrue for every one of your libraries.
If you have calls to custom methods which may or may not exist, use $cando to test for the existence of the method before calling it. This will avoid hitting a notation error for those optional custom method calls.
; Optional call to a custom method which might not exist.
If $cinst.$OptionalCustomMethod.$cando
Do $cinst.$OptionalCustomMethod() Returns FlagOK
End If
Set the notation helper to respond really, really, fast so that you don't have to pause for it to help you when writing your code.
If you aren't using the
, then you are missing one of the more powerful tools in Omnis Studio which can assist you in writing your code. Coupled with the they a great team. The Notation Inspector lets you brower everything in your Omnis Studio application and the r tells you all the methods and properties for anything you select in the .You can drag properties or methods from the
To learn more, go throught the StudioTips directly into your methods. . The time you take to go through the tutorials will pay back in the time you save over the next month of writing your own code.I like to include the following $ping method in the class methods of all my object, window, and table classes.
; Return true. Open OK message if not(pbSilent).
If not(pbSilent)
OK message Ping (Icon) {$ping message received by... ////$lib: [$cclass.$lib().$name] ////$cclass: [$cclass().$name] ////$cinst: [$cinst().$name] ////$container: [$cinst.$container().$name]}
End If
Quit method kTrue
If you are debugging and want to test sending a message to a class instance the $ping method is a handy way to jump into the class instance's class methods.
Do $clib.$windows.wWinClassName.$openonce() Returns rWin
If rWin
; Test sending a ping message to the window.
Do rWin.$ping() Returns FlagOK
End If
I sometimes use the $ping method with the pbSilent parameter set to kTrue in order to test for a valid instance in my runtime code as follows:
; Dynamically point a variable to an object class instance.
Do $clib.$objects.oObjectName.$new() Returns oObjInst
; Test for a valid instance using the $ping method.
Do oObjInst.$ping(kTrue) Returns FlagOK
If not(FlagOK)
OK message Error (Icon) {Unable to $ping the object instance.}
Else
; Continue
End If
Quit method Flag
The StudioTips
menu has some handy menu lines which you can use for testing code.This trick is great a great help for developer testing and debugging! I put the following code in the $event method of all my pushbuttons.
On evClick
If #SHIFT
Breakpoint
End If
This allows me to hold the shift key down when I click on any pushbutton or toolbar button and very easily break in and start stepping through the code.
To save having to copy and paste the code into each pushbutton, you can add the code to the pushbutton in your
as follows:On evClick
If #SHIFT
Breakpoint
End If
The next pushbutton you drag out of the $event method.
will include the code you just added to theI also include the If #SHIFT Breakpoint End if code in the $event method of my tab pane objects, just after On evTabSelected. This allows me to break into my code by shift+clicking on a tab.
An extension of this trick is to include on all your window classes a tiny $construct method to the pushbutton and put the following code in the button to hide it from non-developers.
pushbutton which is only visible to developers. You add a; $construct method of Programmer Test pushbutton
; Hide the pushbutton from non-developers.
If sys(2)<>1
Do $cfield.$visible.$assign(kFalse)
End If
Trying to select a group of fields which are inside a container field (Paged Pane, Tab Pane, Group Box, Scrollbox) can be a real pain. If you try to drag a rectangle marque around the fields, the container field gets selected and you never get a chance to draw the marque rectangle around the fields inside the container.
Hold down the Ctrl/Cmnd key and you will be able to drag a marque around the field inside the container field without selecting the container field.Do you ever want to get to the methods of a window instance without breaking the instance?
The StudioTips
menu line in the menu does this for you.If you are reading this tip in the
Once you are behind the window instance, you can select a method, set a red breakpoint, then close the method editor and run the method from the instance. When code execution reaches the red breakpoint the method editor will open at that point and you can continue stepping through the code. , press Ctrl/Cmnd+Shift+T right now. This is the shortcut key combination for the menu line. (Think of it as an alternate to Ctrl/Cmnd+T)Someone once told me, if you read books and information about your area of work for 30 minutes a day, you can become an expert in your field within 2 years. At the rate of change in the computer industry I'm not sure we can ever catch up, but the suggestion makes a lot of sense.
Why bother figuring out things the hard way, when there is so much good information out there to help you learn so much quicker?
This books section lists books which I've read and recommend for Omnis Studio developers.
If you have a book which you recommend as good reading for Omnis Studio programmers, please send me an email along with your review comments.To use Omnis Studio you need to get your head into object-oriented programming. When I started using Studio I had no idea what object-oriented programming was. I flogged around on my own spending a lot of time writing the same type of code as I wrote in Omnis Classic. After my first Omnis conference I decided to learn more about object-oriented programming and picked up some books.
The switch to object-oriented programming is a paradigm shift of the brain! Object-oriented programming takes discipline. If you don't follow the object-oriented programming principles you will end up with a bunch of messy objects oozing with methods and parameters. Take the time to read and re-read object-oriented programming books until you understand it before you write a lot of code. Experiment and play around with objects, public methods, private methods. Take some training courses and talk to people who know object-oriented programming. The StudioWorks framework gives hundreds of Omnis Studio classes which are written using object-oriented programming principles.
In trying to learn object-oriented programming I purchased and read quite a number of books. Trying to find an object-oriented programming book that doesn't immediately focus on C++ or some other specific language is not easy.
The book I recommend is
by Scott Amber. This book takes you through object-oriented programming terminology and designing an object-oriented programming application. A lot of time is spent on design using CRC cards. (Class-Responsibility-Collaborator) I use the CRC cards and find they work well for planning application design and for discussion the structure with clients.There is a sequel to this book, also written by Scott Ambler,
If you get through those two object-oriented programming books and are up for a real challenge try reading . If you find the first book helpful, read this one next. A lot of the fuzzy object-oriented understanding gained clarity as I read the second book. by Gamma, Helm, Johnson, Vlissides. This book is a tough read. The first time I tried to read the book, I gave up half way through. The second attempt, a couple years later, more of the book was understandable for me. You need to have a decent amount of object-oriented programming experience and understanding before you tackle the book.This section provides information on the various Omnis related organizations and resources that are helpful to Omnis developers around the world.
If you know of an Omnis organization or resource that should be added to this section, email it to me.The Omnis Developers List is a great place to learn about developing with Omnis Studio. I could not have learned Omnis Studio to the level I'm at today without the Omnis Developer list. The list is an invaluable resource to the Omnis Studio developer... and its free!
To subsrcibe to the list go to http://www.omniscentral.com
When making a new posting to the Omnis Developers list you will be appreciated by others if you classify your email by prefixing the subject of your message with one of the following prefixes:
Example subject: O$: Trapping NULLS
Using prefixes allows your fellow Omnis developers to quickly sift through their email. Many developers set up 'Filters or Rules' in their email program will automatically delete the subjects they don't want to read, and move others into the appropriate folders/mailboxes.
Please be sure to type the letter 'Oh', not the number 'zer0' in the prefixes. They might look the same, but filters consider them different - we're programmers, we should know that, eh!
The Omnis Developers list volume can be a high volume list - up to 100 messages per day. The following is a list of guidelines that will make every list member's life a little easier and more productive.
The first list server I used was the Omnis Developer list. From time to time I was puzzled by the acronyms, but too shy to ask. If you want to know the meaning of an acronymn visit www.acronymfinder.com. You simply type in the acronym, click search and in seconds are presented with a list of possible meanings.
The following are some of the common acronyms used on the Omnis Developer list.
The following is a summary of the key updates included with this version of StudioTips.
oFTP/$#About (2008-03-19 Doug K.)
Review all methods and use the local 'logError' method for reporting errors to remove 'errhndlr' dependency. Review all methods and remove early exits.
oFTP/$:FilesList_longformat (2008-03-19 Doug K.)
Removed early exits. Use local 'logError' method for reporting errors to remove 'errhndlr' dependency.
oFTP/$:FilesList_shortformat (2008-03-19 Doug K.)
Removed early exits. Use local 'logError' method for reporting errors.
oFTP/$:PingTimeout (2008-02-06 Doug K.)
Added ping timeout property which can be assigned. Default 15 seconds. If set to zero the pinging the server will be skipped.
oFTP/$:PingTimeout.$assign (2008-02-05 Doug K.)
Added method to allow developers to assign the $:PingTimeout value. If timeout is set to zero then this object skips pinging the server.
oFTP/$connect (2008-03-19 Doug K.)
Use local 'logError' method for reporting errors to remove 'errhndlr' dependency.
oFTP/$initialize (2008-02-06 Doug K.)
Corrected the method description. Remove the sentence that said this method opens a connection with the FTP server as that is no longer true.
oFTP/$initialize (2008-02-06 Doug K.)
Added parameter pPingTimeoutSeconds_opt which can be used to set this object's $:PingTimeout property via the $initialize method.
oFTP/$initialize (2008-03-19 Doug K.)
Added ivar ibInitOK and set it at the end of the initialize method.
oFTP/$pingServer (2008-02-06 Doug K.)
Use the $:PingTimeout value to ping the server. If timeout is zero ping is skipped and zero returned.
oFTP/logError (2008-03-19 Doug K.)
Added local 'logError' and $:ErrorText error handling methods so that this object can be shared independent of tvar 'errhndlr'.
oObjectClassErrorHandlerMethods/$#About (2008-03-19 Doug K.)
Added an error handler template methods object class. The methods can be copied to objects which can operate independent of oErrorHandler and 'errhndlr'.
oPaths_PlatformFolders/$:OmnisStudioFolder (2008-01-02 Doug K.)
Use sys(215), if available, rather than sys(115) to indicate the Omnis Studio executable directory. This ensures that on Vista that we will be in the real 'Program Files' directory for the Omnis Studio executable parent folder.
oPaths_studiotips/$:LogFilesFolderPath (2008-03-05 Doug K.)
Call the new $:PathUserAppPreferenceFolder method. Put the log folder inside that folder.
oPaths_studiotips/$:PathApplicationsFolder (2008-01-02 Doug K.)
Added method which returns the path to the 'Program Files' or 'Applications' directory, based on the operating system.
oPaths_studiotips/$:PathApplicationsFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathOmnisStudioFolder (2008-01-02 Doug K.)
Use sys(215), if available, rather than sys(115) to indicate the Omnis Studio executable directory. This ensures that on Vista that we will be in the real 'Program Files' directory for the Omnis Studio executable parent folder.
oPaths_studiotips/$:PathOmnisStudioFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathProgramFilesFolder (2008-01-02 Doug K.)
Added method which returns the path to the 'Program Files' or 'Applications' directory, based on the operating system.
oPaths_studiotips/$:PathProgramFilesFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathTempFilesFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathUserAppPreferencesFolder (2008-01-10 Doug K.)
Added $:UserAppPreferencesFolder method which returns the path to an 'AppName' folder located inside the $:UserOmnisPreferences folder.
oPaths_studiotips/$:PathUserDesktop (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathUserDocuments (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathUserHome (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/$:PathUserOmnisPreferencesFolder (2008-01-10 Doug K.)
Added $:UserOmnisPreferencesFolder method which returns the path to an 'Omnis' folder located inside the user preferences folder.
oPaths_studiotips/$:PathUserPreferencesFolder (2008-01-10 Doug K.)
Added $:UserAppPreferencesFolder method which replaces this method. Redefined this method to return the path to the base user preferences folder.
oPaths_studiotips/$:PathUserPreferencesFolder (2008-03-12 Doug K.)
Redirect the call to the oPaths_PlatformFolder object class.
oPaths_studiotips/retEnclosedFolderPath (2008-03-17 Doug K.)
Removed the early exits.
oSearchTips/$#About (2008-03-19 Doug K.)
Created an object that specializes in searching StudioTips. Enhancement is to search ALL of the groups, not just the current group.
oSearchTips/$searchTips (2008-03-19 Doug K.)
Modified the search method to copy the groups list and all methods list to class variables and compare them the each time this method is called. Speeds second and more searches.
oStartupTaskVarsTool/$_pingVar (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initializeOnStartup (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initialize_app_prefs (2008-03-05 Doug K.)
Call the new $:PathUserAppPreferencesFolder oPaths method. Removed early exits.
oStartupTaskVarsTool/$initialize_app_prefs (2008-03-05 Doug K.)
Add exception for unicode. Unicode must have a different df1 data file.
oStartupTaskVarsTool/$initialize_cn (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initialize_codedoctools (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initialize_errlog (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initialize_fn (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initialize_icns (2008-03-06 Doug K.)
Removed the early exits.
oStartupTaskVarsTool/$initialize_local_prefs (2008-03-05 Doug K.)
Call the new $:PathUserAppPreferencesFolder oPaths method. Removed early exits.
oStartupTaskVarsTool/$initialize_local_prefs (2008-03-05 Doug K.)
Add exception for unicode. Unicode must have a different df1 data file.
oStartupTaskVarsTool/$initialize_pths (2008-03-06 Doug K.)
Removed the early exits.
@00 About ;; Crossplatform/@50 Carriage Returns and Line Feeds (2007-12-18 Doug K.)
Added crossplatform tips on carriage returns and line feeds.
@00 About ;; Crossplatform/@50 Carriage Returns and Line Feeds (2008-03-19 Doug K.)
Added tip and sample code for using replaceall() to convert all text files to just kCr new line for consistent processing.
@00 Internet/@50 TCPName2Addr (2008-03-19 Doug K.)
Added tip and demo on the TCPName2Addr Omnis command.
@00 Internet/@50 TCPPing (2008-03-19 Doug K.)
Added tip and demo on the TCPPing Omnis command.
@00 Internet/@50 Whois (2008-03-19 Doug K.)
Added tip and demo on the getting whois domain name information using the Omnis TCP commands. Thanks goes to Rainer Greim for the code snip used in this tip.
@00 Reports ;; About/@50 Send to screen - Title (2007-12-03 Doug K)
Added tip for setting the send to screen window title using Omnis command or notation.
@10 Unicode/@00 About (2008-03-12 Doug K.)
Added a new section for Unicode.
@10 Unicode/@05 isunicode() Function (2008-03-12 Doug K.)
Added tip for isunicode() function.
@10 Unicode/@50 Register DLL - Unicode Folder Paths (2008-03-12 Doug K.)
Added tip for Register DLL file paths gotcha with unicode version.
@10 Unicode/@50 sys(2) and Unicode (2008-03-12 Doug K.)
Added tip for sys(2) gotcha with unicode version.
@50 FTP/@00 About (2008-0-19 Doug K.)
Added tip and documentation on FTP commands an the oFTP object class avaiable to StudioTips members.
@50 Sys Functions - Hardware/@50 sys(215) Omnis Executable pathname (2008-01-02 Doug K.)
Added tip and demo for this sys() function added in Omnis Studio 4.3.
@50 TCP/@50 TCPName2Addr (2008-03-19 Doug K.)
Added tip and demo on the TCPName2Addr Omnis command.
@50 TCP/@50 TCPPing (2008-03-19 Doug K.)
Added tip and demo on the TCPPing Omnis command.
@50 TCP/@50 Whois (2008-03-19 Doug K.)
Added tip and demo on the getting whois domain name information using the Omnis TCP commands. Thanks goes to Rainer Greim for the code snip used in this tip.
@00 Windows ;; About/@60 $framehwnd and $hwnd (2008-03-07 Doug K.)
Added documentation and demo for understanding $framehwnd & $hwnd for windows and objects.
@10 Complex Grids/@50 Complex Grid Field $height (2008-03-07 Doug K.)
Added tip that you can't change the $height property of a field in a complex grid.
@10 Complex Grids/@50 Complex Grid Field $width (2008-03-07 Doug K.)
Added tip that you can't change the $width property of a field in a complex grid.
@10 MySQL/@50 Create Database (2008-01-22 Doug K.)
Added tip for creating and dropping a database in MySQL.
@11 Installing PostgreSQL on Mac OS X/@15 Install PostgreSQL and pgAdmin (2007-12-11 Doug K per Josh L.)
Correction to the postgres URL. Should be 'postgresqlformac.com'
The following is a summary of the key updates included with this version of StudioTips.
oPaths/$:LogFilesFolderPath (2007-09-04 Doug K.)
Chnaged method so that the 'logs' folder is put in the platform dependent user preferences folder.
oPaths/$:PathUserDesktop (2007-07-04 Doug K.)
Revised to use private methods copied from the StudioTips 'FolderPaths' library.
oPaths/$:PathUserDocuments (2007-07-04 Doug K.)
Revised to use private methods copied from the StudioTips 'FolderPaths' library.
oPaths/$:PathUserHome (2007-07-04 Doug K.)
Revised to use private methods copied from the StudioTips 'FolderPaths' library.
oPaths/$:PathUserPreferencesFolder (2007-07-04 Doug K.)
Added method '$:PathUserPreferencesFolder' which supercedes the poorly named '$:PathPreferencesFolder_user'. The new method uses the platform dependent location for the user preferences folder, not the Omnis Studio folder. By default an /Omnis/[$ctask().$name]/ folder is created inside the platform's 'user preferences' folder. You can override this method in your main library oPaths object to use your own app name for the subfolder(s).
oPaths/$:PathUserPreferencesFolder (2007-07-17 Doug K per request by Mike Matthews)
Use the $:PreferencesParentFolderName method value as the parent folder name, allowing developers to set this in the startupsettings.txt file.
oPaths/$:PathUserPreferencesFolder (2007-07-17 Doug K)
Check for an $:AppName property method in the startup task. If it exists, use the return value as the name for the actual preferences folder.
oPaths/$:PreferencesParentFolderName (2007-07-17 Doug K per request by Mike Matthews.)
Added assignable property method to allow developers to change the 'Omnis' preferences folder name to their own brand name using the startupsettings.txt file or the Startup_Task.
oPaths/$:PreferencesParentFolderName.$assign (2007-07-17 Doug K per request by Mike Matthews.)
Added assignable property method to allow developers to change the 'Omnis' preferences folder name to their own brand name using the startupsettings.txt file or the Startup_Task.
oPaths/trimPath (2007-07-05 Doug K.)
Added new method which trims double quotes off file paths (from Applescript) and trims trailing path delimiters.
@00 Windows ;; About/@50 Resizable Windows (2007-09-12 Doug K.)
Added kEFposnMenuBar and kEFposnStatusBar to the Resizable Windows demo.
@05 Treelist Methods & Properties/@50 $movenode (2007-09-12 Doug K.)
Updated the $movenode tip for v4.3 which uses kMoveNodexxx constants.
@05 Treelist Methods & Properties/@50 $multipleselect (2007-09-12 Doug K.)
Update the tip to include the $selected node property which was introduced in v4.x of Omnis Studio.
@10 Misc/@50 $hscroll & $vscroll (2007-10-22 Doug K.)
Added tip on converting the $hscroll or $vscroll property to pixels.
@11 Tree Node Methods & Properties/@50 $selected (2007-09-12 Doug K.)
Changed the old undocumented $mutlipleselect node property tip to use the proper $selected node property that was introduced in v4.x of Omnis Studio.
@50 Working Messages/@00 About (2007-10-18 Doug K.)
Added tip on working messages.
@50 Working Messages/@50 Speed Tests (2007-10-18 Doug K.)
Added performance tip and demo on working messages.
@10 MySQL/@50 Create my.cnf File (2007-09-12 Doug K.)
Added to for creating a my.cnf file on the Mac OS X platform.
@10 MySQL/@50 Lower Case Table Names (2007-11-28 Doug K.)
Added MySQL tip on setting lower_case_table_name in my.cnf file to avoid export/import headaches.
@10 MySQL/@50 Problems with Blobs (2007-11-30 Doug K.)
Added tip about problems with binary data and the MySQLDAM and the solution.
@10 MySQL/@50 Stop/Start MySQL server (2007-11-28 Doug K.)
Added MySQL tip on for starting and stopping the server from the terminal.
@10 MySQL/@50 Transactions Settings (2007-11-28 Doug K.)
Added MySQL tip on transaction settings in the my.cnf file.
@10 MySQL/@50 Wait Timeout (2007-09-12 Doug K.)
Added tip about MySQL server wait_timeout and setting it in the my.cfg file.
@10 MySQL/@50 mysqldump --no-create-info (2007-11-28 Doug K.)
Added tip on mysqldump without create table info. Handy if you want to import the data to an empty prepared database without constraints.
@10 PostrgeSQL/@00 About (2007-10-19 Doug K per Dave McKeone)
Added new topic for PostgreSQL.
@11 Installing PostgreSQL on Mac OS X/@00 About (2007-11-14 Doug K per Dave McKeone)
Added instructions for installing PostgreSQL on Mac OS X.
The following is a summary of the key updates included with this version of StudioTips.
The following is a summary of the key updates included with this version of StudioTips.
Modifications and new methods which are added to StudioTips are noted at the end of each method using comment lines. The syntax for the modifications is as follows:
; @MOD:1 Added cached list to speed up building the treelists and searching. ;; 2006-02-28 Doug K.
Using a standard format allows developers (including myself) to search for modifications made on a certain date, or between a set of dates. The oVersions objects are used to compile modifications in each library and generate the release modifications pages.