Thursday, December 21, 2006

My Magical Christmas Wish List

A Christmas Wish List Powered By Magic Software

So many wonderful things are backed up behind the scenes by Magic Software. Here are ten things I'd love to get in my Christmas stocking that are "powered by Magic."

1. Lakers Tickets – The Staples Center uses ABI MasterMind, an application written in eDeveloper. So my number one wish is for Lakers Tickets.
2. A Subscription to the Orange County Register. – The Orange County Register uses Burt Technologies software for newspaper insert management, so I'd like a subscription to the paper, please.
3. Dinner at Outback Steakhouse. – Wow, this is already becoming the greatest Christmas Stocking ever and I'm only at number 3.
4. Weekend Rental of a Chrysler Sebring Convertible from Advantage Rent A Car. – Nothing like a weekend cruising Pacific Coast Highway.
5. Casino Upgrades at the Orleans Casino. – That's right. Orleans Casino is one of 16 casinos operated by Boyd Gaming, a Magic customer.
6. A Bottle of Kenneth Cole Signature, Men's Fragrance. – One of many designer brands carried by Coty, another Magic customer.
7. A Pair of adidas Climawarm Herm shoes, Size 13. – OK, I know my Christmas Stocking is getting full, but it’s a big stocking. :)
8. Club Med Vacation – Uh huh, Club Meds worldwide are powered by Magic applications.
9. World Peace I can too get World Peace delivered by a Magic application for Christmas! You see, the United Nations General Assembly wrote a special Magic application to manage its resolutions and amendments in the five official languages of the UN (English, French, Chinese, Russian and Arabic). Pretty cool, huh?
10. A Lump of Coal Unfortunately, I may only get and deserve this last item, which could be delivered by Magic customer Wabush Mines up in Quebec and Labrador, Canada.

Here's hoping you all get the things that you are wishing for next year. Please join me in adding number 9 to your list. Happy Hanukkah! Merry Christmas! Happy New Year!

Wednesday, November 29, 2006

WS-* At Your Service With eDeveloper V10

A Little Magic for Web Services

The World Wide Web Consortium (W3C) defines a Web service as "a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards."

eDeveloper V10 provides powerful capabilities for creating and integrating applications that utilize Web services. Internally, eDeveloper V10 uses the Systinet Web Services framework (specifically "Systinet Server for Java") for providing and consuming Web Services. Fortunately, you don't have to do any Java programming in order to develop programs that take advantage of this foundation.

The WS standards supported by eDeveloper include SOAP 1.1 and SOAP 1.2; WSDL 1.1; SOAP Attachments; WS-I conformance; transport level security; and WS-Security for authentication, encryption and digital signing of SOAP messages. For reference, SOAP is Simple Object Access Protocol, WSDL is Web Services Description Language, UDDI is Universal Description Discovery and Integration, and WS signifies Web Services. WS-* refers to any of several enhancements or extensions to the basic SOAP, WSDL and UDDI standards, including WS-Interoperability and WS-Security.

I like to think of Web services as shared application logic (and associated data). For example, a Web service might be used to provide access to changing data such as stock ticker symbols (companies are listed and delisted). A service is said to be finely grained when it performs a narrow function, for example, a service that returns the range between the minimum and maximum value in a series of numbers. A coarsely grained web service might contain fairly complex functionality, such as a Web service that processes an order, calculates shipping charges and sends confirmation emails – in a single web service. The object of the game is to create fine grained services, but not too finely grained, so as to avoid the inflexibility of coarsely grained services on the one hand and the complex orchestration of finely grained services on the other.

To use eDeveloper as a Web Services consumer you can either use the Web Service Composite Generator or the Invoke Web Service operation.

To use eDeveloper as a Web Services provider, you should generate a service using the Web Service Interface Builder. To deploy and use the service you should make sure the following Windows OS service is started – “Systinet Server for Java”.
For information about how eDeveloper V10 deals with migration of Web Services from eDeveloper 9.4 applications, see Conversion Process Modifications.

The Web Service Composite Generator is a wizard used to generate a component that accesses a Web Service.

The How-to is fairly straightforward. First, you access the composite generators by following the Main Wizard Module steps. In the Web Service Location screen, click the WSDL URL or UDDI Search option. If you selected WSDL URL, enter the location of the WSDL. You can enter up to 256 characters in the WSDL URL field. You can click the Browse button to search for the WSDL file on the disk. The you click Next and eDeveloper will access and parse the WSDL file. If a WSDL file is not found or if the WSDL file is invalid, an error message will appear.

If you selected the UDDI Search option, the UDDI Server and Search String screen will appear. If you selected the WSDL URL option, the Operation Selection screen will appear. But we won't get into those details here (you can find more information in the documentation).

To see what happens once you finish using the Web Service wizard, see the Generated Web Service Component topic in the documentation.

Invoke Web Service lets you call a Web Service by using the SOAP protocol. When you select the Invoke Web S (Service) operation, you select a service that has been defined in the Service repository as a SOAP type. Zoom from the space to the right of Web S to open the Web Service dialog box, where you can define the Service, Operation, and Fault properties.


The Web Service Interface Builder lets you provide Web Services using eDeveloper by exposing public batch programs. The builder will generate a service JAR file and optionally deploy it on a Systinet™ server (which is installed as part of the eDeveloper installation, identified as a Web Services framework).

To successfully generate and deploy the Web Service, you should make sure that the following Windows service is started: "Systinet Server for Java". The Web Service Interface Builder is not available in the eDeveloper Discovery version.

With eDeveloper V10, you can also easily see the available Web services that you have created. The Available Web Services screen is a list of previously created Web Services as well as additional details. You can view and delete the available Web Services from the list, but you cannot modify the data in this screen.
As those who have published and subscribed to Web Services in eDeveloper 9.4 will tell you, this is a much more elegant and straightforward implementation and has the great advantage of being compliant with WS-Interoperability and WS-Security : two more great reasons to upgrade to eDeveloper V10. For all the details, see the user documentation online at www.magicsoftware.com.

Tuesday, November 07, 2006

eDeveloper and SNMP: Part Two – Making it Happen

Using eDeveloper and SNMP
eDeveloper applications and various components or modules can send trap messages to a pre-configured Network Management Station (NMS), also referred to as an SNMP monitor, which lets the system administrator query and control the eDeveloper application or module when alarms, failures, or other exceptional events occur.

The SNMP DLL
Needless to say, the SNMP agent must be present on the operating system and the eDeveloper SNMP extension, the Mgsnmp.dll file, must be placed in the eDeveloper root during installation.

The MIB files
eDeveloper supplies two Management Information Base (MIB) files, Magic.mib and Magic_trap.mib. These are located in the eDeveloper Support directory. The MIB files are compiled according to the NMS version installed. You should copy the MIB files to the NMS server.

Overview of SNMP Use in Magic
You can set various values for the SNMP parameters, defined in the Mgreq.ini and Mgrb.ini files, to specify when the Magic Requester and Magic Requester Broker will send trap messages.

The SNMPNotify function is utilized to issue SNMP messages with the available parameters of message, severity.

When an alarm or error occurs outside of the application development process, SNMP trap messages are sent to the Network Management Station (NMS).

Examples of the types of trap messages sent are:

  • A thread crash or fatal error of eDeveloper or the eDeveloper gateway.
  • Termination due to the license limit.
  • Unable to connect to a specified DBMS.
  • Database connection threshold exceeded.
  • An enterprise server was stopped and started. The trap message contains the address of the enterprise server.
  • An enterprise server aborted its connection to the Magic Request Broker. The trap message contains the address of the enterprise server.

    Anyway, this is an overview of SNMP and eDeveloper. If you are not familiar with SNMP applications, such as IBM Tivoli, then some of this discussion may seem like a foreign language discussion. For more information on SNMP, try the official Internet Engineering Task Force website for official information contained in the Request for Comments (RFC) documents. But for those familiar with SNMP for application monitoring, you can see from this overview that eDeveloper "plays well" with SNMP application monitors and other SNMP oriented software.
  • Monday, November 06, 2006

    SNMP and eDeveloper: Part 1 – Theory and Use

    eDeveloper supports Simple Network Management Protocol (SNMP) and works with Microsoft Windows SNMP Agent, the Net-SNMP Agent in UNIX environments, and the Native SNMP Agent in the i5OS (OS/400) environment for IBM System i (iSeries).

    SNMP is a standard in the application layer of the Internet protocol suite for management of various nodes on an IP network. SNMP enables network administrators to manage network performance, find and solve network problems, and plan for network growth. For developers, SNMP is the standard that you can use to communicate with application monitoring and other monitoring tools.

    The SNMP architectural model involves a set of network management stations and network elements. The purpose of the network management stations is to host management applications that control and monitor network elements. The network elements are devices that serve as gateways, hosts, terminal servers, etc. These various network elements have management agents that execute management functions requested by the network management stations. SNMP, as a protocol, includes the message format used to communicate between the stations and the elements.

    In general, application monitoring can be applied for any of these five broad requirements:

    Fault
    The most obvious use of application monitoring is to detect faults which can be major errors related to one or more elements within the architecture. eDeveloper can be configured to send only specific error codes to the monitor, or the entire range of errors. Normally, you would want to report only significant error conditions that affect the operational integrity of the application or quality of the users' application experience.

    Performance
    External monitors may want to track application performance. Performance monitoring is useful in detecting sub-optimal software performance, as measured by average wait time, number of pending requests, number of currently processing requests, and so on. Performance problems usually correlate to increased user requests. When the load outstrips the ability of the application and systems to perform the required function within expected response times, a degraded quality of user experience occurs. Application monitoring can provide us with useful metrics for performance optimization related to both applications and the network itself.

    Security
    You may want to employ SNMP for certain types of security monitoring such as authentication failures.

    Configuration
    By monitoring certain configuration settings, you can ensure that key configuration variables affecting application performance and stability stay within specified limits. For example, if the Maximum Connection property is set to 10 for a specified DBMS and the SNMP Database Connections Utilization Threshold is set to 50, eDeveloper sends a trap message to the Network Management Station (NMS) when 5 connections (50% of 10) to the DBMS have been opened.

    Accounting
    Another application for application monitoring is accounting, for administration of things like usage fees and maintenance fees. SNMP is used when a third party application tracking these fees utilizes SNMP to monitor the activity to be accounted for. Since an eDeveloper can easily track these elements within the application itself or through another eDeveloper application, SNMP is only likely to be used in rare instances where an enterprise wide IT policy has introduced SNMP as an accounting standard, especially in environments where there is a mix of eDeveloper and non-eDeveloper applications being accounted for.

    Application monitoring via SNMP can be implemented using applications such as IBM Tivoli. For example, IBM Tivoli Business Application Management (BAM) products help ensure the availability and performance of your business-critical applications, including portal and Service Oriented Architecture (SOA)-based technologies. In Part Two, we'll look at some of the how-to required to support SNMP monitoring of an eDeveloper application.

    Friday, November 03, 2006

    Quote of the Day -- Mark Bailey

    As seen on the Magic List at Yahoo! Groups.

    "I am currently converting ALL of my apps to eDeveloper V10.

    Everything I have converted so far works and the extra effort I am putting in is just to take advantage of the new features.

    The more I use it, the more I love it. Never ceases to amaze me how many programs I have with no logic and it takes a bit of getting used to, opening a program and not seeing the Task or Record levels sitting there empty.

    And, man o man. The Subforms and User Functions are Brilliant!!!!"

    Mark Bailey, Australia

    Thanks, Mark! Glad to hear it. I'll have to buy you a Foster's at the next MIUG in Vegas. [emphasis added].

    Thursday, November 02, 2006

    What's in the Kitchen Sink, Anyway?

    With eDeveloper V10, the feature list goes on an on. 51 reasons clearly are not enough as this review misses major enhancements like full Unicode support, superior XML handling, the new report writer and much more. But before we look at the bonuses and extras not included in Magic's list of reasons, let's look at the general enhancements they do mention in the list of 51.

    In the list of 51 reasons to upgrade to eDeveloper V10, reasons 47 through 51 are dedicated to an assortment of improvements, this where Magic's R&D department has "thrown in the kitchen sink" and now I get to describe it. No snoring! There actually is some good stuff in here!

    47. Preload View Have every data-view fully loaded upon task execution for improved scrolling and for retrieval full view related information.

    I think this advantage could have been expressed more clearly. Have you ever loaded a really large file and noticed that your scrollbar slider adjusted its size to the number of records. Well that's what we're talking about here. Now eDeveloper programmers don't have to come up with tricks and schemes to size the thumb on the scrollbar slider, it's built-in.

    The scrollbar thumb reflects the size of the table content according to the number of records that are fetched while the task is running. When opening a task, the table reads the first set of records and the thumb size is based on that first set. Then, as an end-user scrolls through the records, the thumb is progressively updated.

    48. Dynamic Menus Construct modular menu structures based on menu subsets that can be automatically added or removed from the pulldown menu.

    eDeveloper V10's new menu-related functions let you dynamically add and remove menus to the menu structure. The functions allowed are MnuAdd and MnuRemove which enable the programmer to dynamically add or remove a menu structure to the current runtime pulldown menu structure. There is also a MnuReset function that restores the default pulldown menu structure. This gives you some very sophisticated contextual control over the user experience that can streamline and enhance the user experience.

    49. Windows Menu Easily set the application menu system to cascade all selected open windows for easier end-user window navigation.

    To quote on of my favorite lines from the movie Joe Versus the Volcano, "I have no response to that."

    50. DateTime Support Simplify the retrieval and storage of DateTime data types by letting the Magic Rules Engine automatically map them into simplified and separated Date and Time units.

    While many of you may have developed workarounds for this in the past, I am sure it will be nice to have automated conversion between DateTime and Date and Time.


    51. Standard Keyboard Mapping Easily adopt a new Keyboard mapping scheme that corresponds to the accepted keyboard mapping standards.

    Keyboard shortcut standards seem to change all the time. I've also found that certain user communities have differing expectations. eDeveloper users expect F5 to "zoom" of course, but what if your end users have a completely different map in their head because of some other application pervasive throughout their organization? Wouldn't it be better to change the keyboard mapping used in your eDeveloper application, rather than try to force all your users to learn a new set of keystrokes? Probably, so eDeveloper V10 gives you that option. You can map eDeveloper's studio keyboard map as well as the map used in your application at runtime.

    The Keyboard Mapping settings you edit are kept in a special file. The file eDeveloper uses is named in the Keyboard Mapping File setting in the Options/Settings/Environment dialog box. By default this file is ACT_STD.ENG. You can create and use different mapping files. On conclusion of an editing session of the Keyboard Mapping repository, eDeveloper prompts you to save the changes with the File Save dialog box. You can save these changes to a file different from the one currently used by eDeveloper, by specifying a different name in the Save As... property.

    This concludes our analysis of the original list of 51 "numerous reasons to migrate to eDeveloper V10." But don't worry, here in blogland, we've come up with some important reasons of our own. So stay tuned.

    Wednesday, November 01, 2006

    Parallel Parking and Other eDeveloper V10 Tricks

    The eDeveloper enterprise server supports parallel execution of tasks or multithreading. Whether your tasks are truly executed in parallel or are conducted in pseudo-parallel mode through a technique called time slicing is dependent on your hardware and operating system. With traditional programming tools, the programmer must carefully design the program in such a way that all the threads can run at the same time without interfering with each other. With eDeveloper, multiple contexts are maintained automatically and controlling contexts is simplified tremendously compared to unnecessarily complex 4GL and 3GL development systems.

    And the good news, no the great news, is that multiple document interface (MDI) and single document interface support is now built-in to eDeveloper, further simplifying development of applications that meet the needs and demands of your users.

    In the list of 51 reasons to upgrade to eDeveloper V10, reasons 42 through 46 are dedicated to parallel execution, i.e., multithreading. Let's take a closer look at each claim to better understand what's behind it.


    42. Concurrent Task Execution Provide a greater application productivity level by enabling the end-user to run several processes - online and batch - simultaneously.

    In eDeveloper v9.x, multithreading was available for background processing only. Now with eDeveloper V10, background enterprise servers and Online programs are multi-threaded. This gives you the ability to have parallel task execution in your projects for both batch and online tasks.

    Each thread accesses a different Runtime context, and does not interact with other threads, in other words, it is stateless.

    To work with multiple threads in Online programs, eDeveloper V10 provides you with powerful new Multiple Document Interface (MDI) and Single Document Interface (SDI) functionality.


    43. Single Instance Easily control concurrently running tasks to keep a single instance for proper implementation of console screens, palettes, and property sheets.

    When you are using parallel tasks, and you call a program again, a new instance of the program opens. To better illustrate what we mean, consider what happens with a well-known application like Internet Explorer. The first time you open Internet Explorer, one instance of it opens to your default home page. When that instance is open and you open Internet Explorer again, a second instance opens to the default home page regardless of the context, i.e., the current URL of the already open browser window. However, sometimes you want the same context to open, such as when you use the "New Window" option in Internet Explorer and you get a second window with the same context as the previous window. A third option is that you do not want multiple windows and contexts. You want the new instance with its new URL to open in the already open window. Internet Explorer allows the user or the developer to control this kind of functionality.

    eDeveloper V10 now supports both multiple document interfaces and single document interfaces and gives you as the developer, control over the way contexts are handled. In those situations where you want the second call to return to the original instance, this is what eDeveloper's Single Instance task property does. When you select this property, when a program is called for a second time, the focus will be set on the already running instance. However, there will be no initialization steps (such as preparing the data view).

    44. Event Posting Enable full interaction between all concurrent processes using the inter-context event posting mechanism.

    Most of the time, you will probably want instances to execute independently, but there are some events that may require you to enable events to be sent between contexts. Using eDeveloper V10's event posting functionality is accomplished via the Destination Context Name property of the Raise Event operation. The mechanism allows for synchronous and asynchronous events. If a synchronous event was raised, the context waits until the receiving handler ends. I like the fact that eDeveloper V10 gives the developer all of these options and doesn't restrict the developer to stateless contexts without interaction.

    45. Single & Multiple Document Interface You now have the freedom to choose the layout by which your parallel tasks will be presented. You can have a parallel task be displayed as yet another MDI child window or an independent SDI window.

    This is another new eDeveloper V10 feature that standing completely on its own will justify the upgrade in the minds of many developers. eDeveloper lets you define a Multiple Document Interface (MDI) as well as a Single Document Interface (SDI).

    In the most basic of terms: the MDI and SDI functionality allows an application to open and concurrently run several tasks. That is, it enables a program to be opened concurrently without the need to open a new instance of eDeveloper.
    The eDeveloper engine can maintain multiple concurrent instances, executing programs within the same application and within the same eDeveloper instance.
    In eDeveloper, concurrent execution is implemented using contexts. When a program is run concurrently and a new context is opened, the new context will have its own Main Program. This Main Program and context are independent of the other contexts running under this process. Read up on the MDI and start using it, your users will applaud.

    46. Window Focus Management Using a simple set of functions and events eDeveloper gives you a full control over the focus management of all your windows. Easily handle lost-focus events and easily instruct a window to get focus.

    The default behavior for contect management is pretty much as you would expect: When focusing on a window in a different context, eDeveloper will not lose track of the control in the current context. In this fashion, when focus is passed back to this original window, it will pass back to the same control. Similarly, if there is a window that is not in focus, and a dialog box appears, such as a Verify operation or the window's own form with a Window Type property of Modal, the focus will pass to the dialog box. If a different context opens a window, the focus will pass to that window. Using the expression editor, you can utlilize the SetWindowFocus function to determine the particular window in the Window list that will be in focus. During runtime, if the window does not exist (the name does not exist or the name is blank or Null), focus will remain on the current window and the function will return False.

    So all in all, parallel execution is another home run for eDeveloper V10, if you will forgive the baseball metaphor. The multi-threaded architecture of eDeveloper can now be enjoyed in both online and batch mode. Just in time, I think, as duo core and quad core processors are becoming commonplace on client desktops. You'd better get ready now as the world of parallel processing has entered the mind of the everyday user and they will demand the functionality that eDeveloper V10 delivers.

    Tuesday, October 31, 2006

    Fewer Bugs and Better Bug Spray

    Terrence Parr, a University of San Francisco Professor of Computer Science, suggests that there are six essential elements in the debugging process:

    Reproduce the error. By finding a way to reproduce an error, you can often see the cause of the error. Parr says, "A bug that appears randomly is essentially unsolvable unless you have a leap of insight."

    Reduce problems to their essence. Once you have discovered how to reproduce a problem, you should attempt to isolate an error to its smallest constituents. Parr suggest slicing data inputs, for example, to see which part of a file causes the problem.

    Use your powers of deduction to find causality. This involves forming a hypothesis that can be tested. Follow the path of the data and watch for factors that can contribute to an error.

    Test your hypothesis. Change various elements in the environment, the data and the logic to test your hypothesis.

    Draw on experience. If you are an experienced developer, you will look for problems similar to those you have seen before in like situations. If you are a new developer, then you may want to consult another developer (Magic eDeveloper discussions are available on Yahoo! groups at magicu-l, for example.
    Never give up. By taking a systematic approach, you will first test the hypotheses that seem most likely based on logic and past experience. Be patient, communicate with others and the solutions will become apparent.

    Never give up. Parr sees tenacity as the final essential ingredient.Fortunately for users of eDeveloper V10, a new debugger has been introduced that makes extermination of bugs much easier than before.

    Let's continue our review of Magic Software's 51 reasons to upgrade to eDeveloper V10. Reasons 36 through 41 all deal with enhancements to the debugger:

    36. Visual Debugging Follow the exact logic definition within the studio as you progress step-by-step in debug mode.

    This feature can help you pinpoint problems that you are having in an application by stepping through an application with pauses at pre-defined breakpoints.

    When you are in Debug mode (you selected Debug Mode from the Debug menu), you can run a program in Runtime mode and the Debugger will "park" on the Studio read-only screen at the exact location of where you are in the program (when a breakpoint is reached).


    37. Manageable Break Points Have full control on every break point defined in the application using the fully functional break points palette.

    Obviously, breakpoints are a helpful tool for debugging. As Parr suggests in his point regarding the use of deduction, you need to follow the path of your data through an application in order to deduce any flaws in your logic. Breakpoints allow you to pause the logic at any point and determine exactly where things stand. Breakpoints let you halt execution of the program at a specific location in the Studio screen, so the debugger parallels the design of your program, which also gives you a clearer ability to see where problems may be introducuing themselves.

    The how-to of breakpoints is quite straightforward, when you select Breakpoints from the View menu, the Breakpoint repository appears. You should remember that when you add a breakpoint to the Logic Editor, the default Condition is Always.

    38. Conditional Break Points Reduce your debugging efforts by conditioning your set breakpoints for accurate and focus debugging.

    Within the Debugger, you can define a conditional breakpoint if the Enable check box is selected. The condition will be evaluated each time the breakpoint is reached. If the condition evaluates to False, the breakpoint will be ignored.

    The valid options for breakpoint conditions are Always, Count and Condition. With count, the breakpoint is only activated once the specified count has been reached. And of course, with a condition, the breakpoint will only be executed if the condition is True.

    Condition: Execution will break only when the condition evaluates to True. This option is only enabled if the task in which the condition is defined is in focus. You can use variables from the current task tree.


    39. Watch points Easily collect all variables that require your attention in the debugging process for efficient monitoring over the progress of your logic.

    The watch points are very handy and make it easy to focus in on the variables that your experience suggests are most important. The Watch Variable list displays the variables currently being watched. This allows you to see how the value of the watched variable changes. You control which variables are displayed on the Watch variable list from the Variable list itself and the Variable declaration(s).

    40. Modifiable Variables Manipulate the execution of a debugged execution by directly modifying the value of any variable.

    The context menu gives you control over modification of variables in the debugging process. This is useful in pursuing various "what-if" scenarios as you test various hypotheses. The context menu allows you to add and delete variables from the watch list, go to the source for the variable, edit the current value of the data in the variable, set the variable value to NULL, and expand or collapse the index size of vector variables with a cell index >0.

    41. Call Stack View Get clear information pertaining the exact stack of calls at any given time.

    As you might expect, the Runtime Call Stack repository displays the state of the programs that are in the current runtime task tree and the handler (aka logic unit) that called the new program. You can get to this repository by selecting Call Stack from the View menu. Naturally, the tasks are displayed in the order in which they were executed. In other words, the Main Program of the host application will be the first task in the list and the current task will be the last one listed.

    The information in the Runtime Call Stack repository is displayed in five columns.
    The indicator column simply shows the current line. The module column will display the component name, if any. The task column shows the task name and the handler column show the Handler (logic unit) in that task. Finally, the line column shows the line number of the current operation.

    Keep in mind that you can also view the flow of the logic within your eDeveloper application from the Activity Monitor. A whole article could be dedicated to this. It is also important to note that while you can only debug one context at a time, you can switch between contexts while debugging. You can also now dynamically change what information gets entered into the log with the dynamic logging function. You can change the logging filter on the fly, and this does not require a change to the magic.ini file. Sweet.

    All in all, the new eDeveloper debugger is a huge improvement and benefit to the developer that just makes your life easier. Here again, it is worth the price of admission.

    In the past, eDeveloper was known as an IDE that generally produced programs with fewer bugs and less need for debugging. But the debugging procedures available were weak in the past. With eDeveloper V10, you now have both advantages: fewer bugs and a faster way to isolate them and test your hypotheses.

    Thursday, October 19, 2006

    Express Yourself With eDeveloper V10

    Developers express themselves with logic, and that is what the expression editor is all about. eDeveloper has always been strong when it comes to creating the logic that comprises your business rules. Some have even gone so far as to call eDeveloper a business rules engine. Who besides Magic, you ask? Well, Gartner, for one.

    There have been a few improvements worth noting, which Magic did in reasons 32 to 35 of the reasons to upgrade to eDeveloper V10. Let's take a look at each claim and see what's under the hood.

    32. Quick Expressions rapidly set expressions on spot by directly typing the expression syntax in the expression placeholder.

    This quick editor provides a quick way to enter simple expressions without opening the Expression Editor. Sometimes when things get big and powerful, they get a little clunky. So this brings us back to the lightweight feeling of the early RAD days, so to speak. How, you ask? Well, when you park on a property in the Logic or Data View editors that require an expression (such as the Init or Cnd properties), you can press the equal sign (=), which opens a text box where you can enter an expression. Then you just enter your expression, no fuss, no muss.

    You need to press ENTER to save your expression and close the Quick Expression Editor. Esc or F2 closes the Quick Expression Editor without saving the expression. Any other navigation action (such as arrows, tabbing, paging up or down, mouse clicks outside the edit box) saves the entered expression. So, in this reason to upgrade, less is more.

    33. Auto Complete
    Have eDeveloper automatically complete function names in the expression editor by requesting its automatic completion.

    This is another one of those really nice improvements that is just designed as a timesaver. Function Auto Complete is available for functions and operators that begin with a letter. How does it work> Simply type the function or operator prefix and then press CTRL+Space. For example, if you enter ab, the function list opens and the cursor parks on the ABS () function.

    When there is only one matching option, the text will be completed automatically.
    If there is more than one matching option, a list box with the matching options is displayed. Click to select.

    You won't find this Auto Completion Cheat Sheet in the manual. Now, if I could only find a way to auto complete my blog…

    34. Expression Formatting
    Freely format your expression and make them more readable.

    White space? Wrapping? Multiple lines? Oh my.

    35. Colored Display Enjoy the enhanced expression editor full display highlighting each element of the expression in customizable colors.

    To customize colors in the studio, access the Color Settings from the Options/Settings/Colors menu option and then choose the Studio tab to modify the colors used for any of the listed color uses.

    Go ahead. Express Yourself as Madonna would say.

    As for me, I'll have to wait till the next blog entry for that.

    Auto Complete Cheat Sheet





    ABS
    ACOS
    AddDate
    AddDateTime
    AddTime
    ANSI2OEM
    AppName
    ASCIIChr
    ASCIIVal
    ASIN
    AStr
    ATAN
    Blb2File
    Blob2Req
    BlobFromBase64
    BlobSize
    BlobToBase64
    BOM
    BOY
    BufGetAlpha
    BufGetBit
    BufGetBlob
    BufGetDate
    BufGetLog
    BufGetNum
    BufGetTime
    BufGetUnicode
    BufGetVariant
    BufGetVector
    BufSetAlpha
    BufSetBit
    BufSetBlob
    BufSetDate
    BufSetLog
    BufSetNum
    BufSetTime
    BufSetUnicode
    BufSetVariant
    BufSetVector
    CallDLL
    CallDLLF
    CallDLLS
    CallJS
    CallOBJ
    CallProg
    CallProgURL
    CallURL
    CaretPosGet
    CASE
    CDOW
    CHeight
    ChkDgt
    Cipher
    CLeft
    CLeftMDI
    ClickCX
    ClickCY
    ClickWX
    ClickWY
    ClientCertificateAdd
    ClientCertificateDiscard
    ClipAdd
    ClipRead
    ClipWrite
    ClrCache
    CMonth
    CndRange
    CodePage
    COMError
    COMHandleGet
    COMHandleSet
    COMObjCreate
    COMObjRelease
    COS
    Counter
    CRC
    CTop
    CTopMDI
    CtrlGoto
    CtrlHWND
    CtxClose
    CtxGetAllNames
    CtxGetId
    CtxGetName
    CtxKill
    CtxLstUse
    CtxNum
    CtxProg
    CtxSetName
    CtxSize
    CtxStat
    CurRow
    CurrPosition
    CWidth
    DataViewToHTML
    DataViewToText
    DataViewToXML
    DataViewVars
    Date
    Day
    DbCache
    DbCopy
    DbDel
    DbDiscnt
    DbERR
    DbExist
    DbName
    DbRecs
    DbReload
    DbRound
    DbSize
    DbViewRowIdx
    DbViewSize
    DbXmlMixedGet
    DbXmlMixedSet
    DDEBegin
    DDEEnd
    DDEGet
    DDEPoke
    DDERR
    DDExec
    DeCipher
    Del
    Delay
    DifDateTime
    DirDlg
    DiscSrvr
    DOW
    DragSetCrsr
    DragSetData
    DropFormat
    DropGetData
    DropMouseX
    DropMouseY
    DStr
    DVal
    EditGet
    EditSet
    EJBCreate
    EJBExplore
    EncryptionError
    EOF
    EOM
    EOP
    EOY
    ErrDatabaseName
    ErrDbmsCode
    ErrDbmsMessage
    ErrMagicName
    ErrPosition
    ErrTableName
    EvalStr
    EvalStrInfo
    EXP
    ExpCalc
    File2Blb
    File2Ole
    File2Req
    FileCopy
    FileDelete
    FileDlg
    FileExist
    FileListGet
    FileRename
    FileSize
    Fill
    Fix
    Flip
    Flow
    FlwMtr
    FlwMtrVars
    FormStateClear
    GetComponentName
    GetGUID
    GetLang
    GetParam
    GroupAdd
    HandledCtrl
    HitZOrdr
    Hour
    HStr
    HTTPGet
    HTTPLastHeader
    HTTPPost
    HVal
    Idle
    IF
    IN
    INIGet
    INIGetLn
    INIPut
    Ins
    InStr
    InTrans
    IOCurr
    IsComponent
    IsDefault
    IsFirstRecordCycle
    ISNULL
    JCall
    JCallStatic
    JCreate
    JException
    JExceptionOccurred
    JExceptionText
    JExplore
    JGet
    JGetStatic
    JInstanceOf
    JSet
    JSetStatic
    KbGet
    KbPut
    LastClicked
    LastPark
    LDAPError
    LDAPGet
    Left
    Len
    Level
    LIKE
    Line
    LMChkIn
    LMChkOut
    LMUVStr
    LMVStr
    Lock
    LOG
    Logging
    Logical
    Logon
    LoopCounter
    Lower
    LTrim
    MailBoxSet
    MailConnect
    MailDisconnect
    MailError
    MailFileSave
    MailLastRC
    MailMsgBCC
    MailMsgCC
    MailMsgDate
    MailMsgDel
    MailMsgFile
    MailMsgFiles
    MailMsgFrom
    MailMsgHeader
    MailMsgId
    MailMsgReplyTo
    MailMsgSubj
    MailMsgText
    MailMsgTo
    MailSend
    MainDisplay
    MainLevel
    MarkedTextGet
    MarkedTextSet
    MarkText
    MAX
    MDate
    Menu
    MenuIdx
    MID
    MIN
    Minute
    MlsTrans
    MMClear
    MMCount
    MMCurr
    MMStop
    MnuAdd
    MnuCheck
    MnuEnabl
    MnuName
    MnuRemove
    MnuReset
    MnuShow
    Month
    MStr
    MTblGet
    MTblSet
    mTime
    mTStr
    mTVal
    MVal
    NDOW
    NMonth
    NULL
    OEM2ANSI
    OSEnvGet
    OSEnvSet
    Owner
    Page
    ParamsPack
    ParamsUnPack
    PPD
    Prog
    ProgIdx
    ProjectDir
    RAND
    Range
    Rep
    RepStr
    Right
    RightAdd
    Rights
    Rollback
    Round
    RqCtxInf
    RqCtxTrm
    RqExe
    RqHTTPHeader
    RqLoad
    RqQueDel
    RqQueLst
    RqQuePri
    RqReqInf
    RqReqLst
    RqRtApp
    RqRtApps
    RqRtCtx
    RqRtCtxs
    RqRtInf
    RqRts
    RqRtTrm
    RqRtTrmEx
    RqStat
    RqTrmTimeout
    RTrim
    RunMode
    Second
    SetBufCnvParam
    SetContextFocus
    SetCrsr
    SetLang
    SetParam
    SetWindowFocus
    SharedValGet
    SharedValPack
    SharedValSet
    SharedValUnpack
    SIN
    SNMPNotify
    SoundX
    SplitterOffset
    Stat
    Str
    StrBuild
    StrToken
    StrTokenCnt
    StrTokenIdx
    SubformExecMode
    TAN
    TDepth
    Term
    Text
    THIS
    Time
    Translate
    TranslateNR
    TransMode
    TreeLevel
    TreeNodeGoto
    TreeValue
    Trim
    TStr
    TVal
    UDF
    UDFF
    UDFS
    UnicodeChr
    UnicodeFromANSI
    UnicodeToANSI
    UnicodeVal
    UnLock
    Upper
    User
    UserAdd
    UserDel
    UTF8FromAnsi
    UTF8ToAnsi
    Val
    VarAttr
    VarCurr
    VarCurrN
    VarDbName
    VariantAttr
    VariantCreate
    VariantGet
    VariantGetVector
    VariantType
    VarIndex
    VarInp
    VarMod
    VarName
    VarPic
    VarPrev
    VarSet
    VecCellAttr
    VecGet
    VecSet
    VecSize
    ViewMod
    Visual
    WinBox
    WinHelp
    WinHWND
    WinMaximize
    WinMinimize
    WinRestore
    WSConsumerAttachmentAdd
    WSConsumerAttachmentGet
    WSProviderAttachmentAdd
    WSProviderAttachmentGet
    WsSetIdentity
    XMLBlobGet
    XMLCnt
    XMLDelete
    XMLExist
    XMLFind
    XMLGet
    XMLGetAlias
    XMLGetEncoding
    XMLInsert
    XMLModify
    XMLSetEncoding
    XMLSetNS
    XMLStr
    XMLVal
    XMLValidate
    XMLValidationError
    Year

    ab
    ac

    adddatet
    addt
    an
    ap
    asciic
    asciiv
    asi
    ast
    at
    blb
    blob2
    blobf
    blobs
    blobt
    bom
    boy
    bufgeta
    bufgetbi
    bufgetbl
    bufgetd
    bufgetl
    bufgetn
    bufgett
    bufgetu
    bufgetva
    bufgetve
    bufseta
    bufsetbi
    bufsetbl
    bufsetd
    bufsetl
    bufsetn
    bufsett
    bufsetu
    bufsetva
    bufsetve

    calldllf
    calldlls
    callj
    callo

    callprogu
    callu
    car
    cas
    cd
    che
    chk
    ci

    cleftm
    clickcx
    clickcy
    clickwx
    clickwy
    clientcertificatea
    clientcertificated
    clipa
    clipr
    clipw
    clr
    cm
    cn
    cod
    come
    comhandleg
    comhandles
    comobjc
    comobjr
    cos
    cou
    cr

    ctopm
    ctrlg
    ctrlh
    ctxc
    ctxgeta
    ctxgeti
    ctxgetn
    ctxk
    ctxl
    ctxn
    ctxp
    ctxse
    ctxsi
    ctxst
    curro
    currp
    cw
    dataviewtoh
    dataviewtot
    dataviewtox
    dataviewv
    date
    day
    dbca
    dbco
    dbde
    dbdi
    dber
    dbex
    dbn
    dbrec
    dbrel
    dbro
    dbs
    dbviewr
    dbviews
    dbxmlmixedg
    dbxmlmixeds
    ddbe
    ddee
    ddeg
    ddep
    dder
    ddex
    dec

    dela
    dif
    dir
    dis
    do
    dragsetc
    dragsetd
    dropf
    dropg
    dropmousex
    dropmousey
    ds
    dv
    editg
    edits
    ejbc
    ejbe
    en
    eof
    eom
    eop
    eoy
    errda
    errdbmsc
    errdbmsm
    errm
    errp
    errt

    evalstri

    expc
    file2b
    file2o
    file2r
    filec
    filede
    filedl
    filee
    filel
    filer
    files
    fill
    fix
    fli
    flo

    flwmtrv
    fo
    getc
    getg
    getl
    getp
    gr
    ha
    hi
    ho
    hs
    httpg
    httpl
    httpp
    hv
    id
    if


    inigetl
    inip

    inst
    int
    io
    isc
    isd
    isf
    isn

    jcalls
    jc

    jexceptiono
    jexceptiont
    jexp

    jgets
    ji

    jsets
    kbg
    kbp
    lastc
    lastp
    ldape
    ldapg
    lef
    len
    lev
    lik
    lin
    lmchki
    lmchko
    lmu
    lmv
    loc

    logg
    logi
    logo
    loo
    low
    lt
    mailb
    mailc
    maild
    maile
    mailf
    maill
    mailmsgb
    mailmsgc
    mailmsgda
    mailmsgde

    mailmsgfiles
    mailmsgfr
    mailmsgh
    mailmsgi
    mailmsgr
    mailmsgs
    mailmsgt
    mailmsgt
    mails
    maind
    mainl
    markedtextg
    markedtexts
    markt
    max
    md

    menul
    mid

    minu
    ml
    mmcl
    mmco
    mmcu
    mms
    mnua
    mnuc
    mnue
    mnun
    mnurem
    mnures
    mnus
    mo
    ms
    mtblg
    mtbls
    mti
    mts
    mtv
    mv
    nd
    nm
    nu
    oe
    oseenvg
    oseenvs
    ow
    pag
    paramsp
    paramsu
    pp

    progi
    proj
    rand
    rang

    reps

    righta
    rights
    rol
    rou
    rqctxl
    rqctxt
    rqe
    rqh
    rql
    rqqued
    rqquel
    rqquep
    rqreqi
    rqreql

    rqrtapps

    rqrtctxs
    rqrti
    rgrts

    rqrttrme
    rqs
    rqt
    rt
    ru
    sec
    setb
    setco
    setcr
    setl
    setp
    setw
    sharedvalg
    sharedvalp
    sharedvals
    sharedvalu
    si
    sn
    so
    sp
    sta

    strb

    strtokenc
    strtokeni
    su
    ta
    td
    ter
    tex
    th
    ti

    translaten
    transm
    treel
    treen
    treev
    tri
    ts
    tv

    udff
    udfs
    unicodec
    unicodef
    unicodet
    unicodev
    unl
    up

    usera
    userd
    utf8f
    utf8t
    val
    vara

    varcurrn
    vard
    varianta
    variantc

    variantgetv
    variantt
    varind
    varinp
    narm
    varn
    varp
    varpr
    vars
    vecc
    vecg
    vecse
    vecsi
    vie
    vis
    winb
    winhe
    winhw
    winma
    winmi
    winr
    wsconsumerattachmenta
    wsconsumerattachmentg
    wsproviderattachmenta
    wsproviderattachmentg
    wss
    xmlb
    xmlc
    xmld
    xmle
    xmlf

    xmlgeta
    xmlgete
    xmli
    xmlm
    xmlsete
    xmlsetn
    xmlst

    xmlvalidate
    xmlvalidati
    y

    Is eDeveloper V10 Up to the Task?

    The newly refreshed developers toolkit in eDeveloper V10 presents a very fresh, clean development interface with an easy-to-use task editor and powerful expression editor. In our continuing series evaluating the 51 reasons to upgrade to eDeveloper V10, we will now focus on fourteen enhancements made to the task editor.

    17. Task Layers Easily distinguish between Data View, Logic, and Forms definitions using the clear separation between these three main pillars of a task.

    I know some of you who are currently using eDeveloper are worried about replacing Record Main. But the migration process preserves your Record Main logic as is. You don't have to change things over unless you want to – and, you can do it incrementally (which is recommended). So once you get past the usual resistance to change that comes with any minor shift in a paradigm, you will actually grow to love the new layout of your application and its visibility in the three layers of the task editor: the Data View Editor, the Logic Editor, and the Form Editor.

    The Data View Editor lets you define the task's data view interface as part of the task definition. The Data View elements include source tables, fields, and range. This window replaces the Record Main and DB Table repositories from previous eDeveloper versions.

    You can enter Header Rows and Detail Rows in the Data View. The Header Row data view lets you specify the data source type, define links to the data source, and declare a data source open. The property sheet shows the properties for each of these options.

    Then the detail row displays the Remark, Column (when a main source is selected), Virtual and Parameter. So it provides a fairly compact view that is human readable.

    The Logic Editor is used to define the task’s logical segments. Keep in mind that the header line is basically a handler and the detail line is an operation. Again very clean and compact.

    The Form Editor populates an initial entry automatically for each specific task. New entries are entered automatically for each subtask. Forms let the end-user interact with the application. They contain controls that either display data options or let the end-user enter data. The Form Editor displays the form’s frame and content. You can then easily design a form by assigning form properties and selecting controls and defining their properties.

    So all in all, the three layer approach to Data, Logic and Presentation (Forms) is quite coherent and neat. I like it and hears a tip: you can press CTRL+TAB to move between the three editors (but you won't be able to leave the editor if you haven't created a valid entry.

    18. Hierarchical Display Easily navigate through the data-view and logic definitions of every task using the clear hierarchical display of the new task editor.

    Part of the ease-of-use then comes from the hierarchical display of your logic. Use + to expand a hierarchy and – to collapse it. You can also use the "Go To Match" function which is pretty nifty and is explained here.

    19. Task Properties View and handle all properties of a task from a single task properties dialog.

    Remember, the Task Properties dialog box is going to open automatically when you first zoom into a task and can be opened again later with CTRL+P while in the Task Editor. They've packed tons of power and control in here, so spend some time to re-familiarize yourself with all the available properties settings. They are organized into these tabs: General, Behavior, Interface, Data, Options and Advanced.

    20. Relevant Only Information For efficient reading of data-view and logic the task editor hides trivial information to maintain the information relevant and concise.

    Rather than just listing all information in columns, the detailed information for a row is shown when you are parked on that row. In some cases this means a combo box type of display and in others it just means the column information is only displayed when selected. This allows you to navigate based on the important identifiers and then see the details when you want them. It really unclutters the data view and logic view allowing you to work more efficiently.

    21. Range Settings Obtain a full overview of all the Range criteria defined for the task's data-view from a single Range\Locate dialog.

    The range window allows you to choose from a standard eDeveloper range, a SQL Where Clause and Range Expressions.

    22. Default Logic Units Customize your studio to automatically create basic logic units for every new task.

    This is an .ini setting that can save you loads of time, so pay attention. This environment setting lets you automatically create a default schema, such as Task Prefix and Suffix, Record Prefix or Suffix.

    Specifically, the values for this are set in the Magic.ini with the Command Line Name: AutoCreateTaskLogicUnits The available settings are:
    No (which is the default), Task (Task Prefix and Suffix logic units are entered), Record (Record Prefix and Suffix logic units are entered), or Task and Record (Task Prefix and Suffix, and Record Prefix and Suffix logic units are entered). So this is a great way to jump start the logic units in the task editor.


    23. Save Program Instantly save changes of any program while editing the program.

    Nice. Can you think of a time when you really, really wanted that? How about when the nasty Microsoft Updates dialog rears its ugly head to tell you your machine will reboot in 5 minutes? I hate that.

    24. Developer Functions Create your own functions to implement simple or complex procedures that involve composite resources. These function logic units will be available to you throughout the project as a built-in function.

    I think the Magic International User Group should sponsor a contest for the most creative user defined function.

    25. Flexible Control Handling Handle controls by name and achieve greater flexibility by defining the control specific logic units before the form design, utilizing the same logic unit for a control in various forms and setting global control specific logic units.

    One of the control's properties is its name. This enables a robust method to refer to controls in a Class 0 form, and to refer to them in functions. The LastClicked function will return the control name. Keep in mind that the Control Name property is limited to 30 characters and trailing blanks are not allowed. Duplicate control names are not allowed, so the Copy operation for controls in the Form Editor does not copy this property.

    26. Variable Change Set super responsive logic that can respond to any manual or automatic modification of any variable in a task.

    The Variable Change logic unit lets you handle the change of a variable's value. And of course it is triggered whenever the variable value is changed. You can define a Variable Change logic unit for BLOBs, vectors, and ActiveXs, but not, incidentally, for OLEs. Don't ask why. I don't know. Some things just are, right?

    27. Event Parameters Improve handling and raising events by clearly declaring the parameters that are expected by the event.

    In each task you can define events to be handled in your project whenever they occur. For example, you can define an event called ‘Add Customer’. Events have
    Descriptions, Trigger Types, Triggers, Parameters, Force Exit and in a Main Program they have Public Name and Expose settings. There are four parameters available: Name, Model, Attribute, and Picture.

    28. Post Record Update Force Level Easily define event handlers to be executed only after all modifications of a record are updated within a transaction.

    This makes it easier to ensure transactional integrity.

    29. Direct Logic Access Quickly access and create control level logic directly from any control defined in the form editor of a task.

    Simply right click on the control and choose the option to create logic. Nice.

    30. Tabbing order Set the tabbing order of controls independently from the order of the fields in the data view definition. The value of each element can be set as fixed or dynamic.

    Okay, you may begin the applause. Whenever Magic shows this, developers get very happy. It's the little things in life that make the difference, you know.

    31. Subforms Implement Parent-Child displays quickly and easily at the click of a button by simply declaring the participating child task on the parent's form using the new Subform control.

    One thing to remember here is that a Subform control works only with an online program, which means that the Subform will not be active for a Main or Batch program.

    With that in mind, you can use the Subform control to integrate a task form into the form of another task, while maintaining the subform‘s task data handling and record cycle activities independently from the parent task. But you cannot define a Control logic unit or an Event logic unit for a Subform control.

    Nevertheless, a subform offers several advantages: 1) you can park on the line of a parent task and see the details from the subtask, for a one-to-many task relation, 2) eDeveloper automatically refreshes the Subform data view according to the parent task only when passing parameters, 3) eDeveloper retains your last position in the Subform data view when you leave and reenter., and 4) a tab cycle is provided for the Subform task.

    Okay, well that is probably about as much Joy of eDeveloper V10 as you can process in one sitting. So we will blog on about eDeveloper V10 in our next entry, where we will evaluate the improvements to the expression editor.

    Tuesday, October 17, 2006

    Go! Team! Go!

    The next set of enhancements that Magic Software Enterprises talks about for eDeveloper V10 relate to Version Control, which is important for team development. Team development maintains concurrency among developers when working in a multi-developer environment. It allows you to be able to synchronize the developers work, keep track of changes made to the project, and be able to retrieve previous versions of the project. In eDeveloper V10, team development is made possible by the Version Control feature.

    10. Version Control Facilitator of Your Choice - eDeveloper supports any version control product that implements the SCC API V1.01, such as Visual SourceSafe® and PVCS®. You can add to this list IBM Rational ClearCase and numerous other source code control programs compliant with .scc extensions. Please keep in mind that you will be able to access the version control features from within eDeveloper V10. Some aspects of the presentation may vary depending on which source code control system you are utilizing.

    11. Out-Of-The-Box Version Control Software - You can immediately start working using a complementary version control software available as part of the eDeveloper installation. The included software is CVSNT. You can get more information at http://www.cvsnt.org including the online manual at http://www.cvsnt.org/manual/html Keep in mind, this is complimentary software. I don't know if the aphorism, "you get what you pay for applies," but there have been at least some reports that getting it to work with very large numbers of programs may be extremely resource intensive. So if you have an industrial-strength code base, you may want to utilize a third-party version control system.

    12. Integrated Support - Utilize every version control activity directly from the eDeveloper Studio. This is a great convenience to be able to access the features of the enterprise version control system from within eDeveloper V10 itself. So even though you are working with a SCC tool in the background, it is fairly transparent after installation.

    13. Rollback Support - Revert to a previous checked-in version of any atomic project module by rolling back to a selected version. In fact, you have a wide variety of features allowing you to: Check objects in and out, undo object checkout, get the latest version, get the latest project version, see the differences between versions, see a history of revisions, see a list of objects that have been checked out, add items to the version control server, exclude projects from version control, work offline with objects, and see a list of objects that are being worked with offline.

    14. Revisions History - Easily view the history of all modifications done to every atomic project module. Not all SCC applications support the ability to see the revisions history. PVCS and Visual SourceSafe do provide that capability. It is from within the history, that you can click to see the differences.

    15. Offline Development - You can keep on developing your version controlled projects even if you are disconnected from the version control server. When you do this, a backup copy is created. When you go back online, you then have the ability to compare the different versions.

    16. Conflict Resolving - Get a clear and concise view of potential conflicts deriving from external or offline modifications. The list simply shows you which objects have been changed. However, by clicking on the object history button, you will be able to see the history and select to see differences between versions.

    So there you have it: online and offline source code control that tracks revisions in a team development environment using industry standard SCC 1.01 compliant software. Due to the built-in efficiency of the eDeveloper paradigm, programming teams will tend to be smaller than with other IDEs for older language based coding paradigms such as C++, PHP5, or RPGIV. Nevertheless, the use of revision control methodologies is a great aid to team development in eDeveloper V10 by managing revisions and source code for each element of a project.

    Monday, October 16, 2006

    WYSIBTB: What You See Is Better Than Before

    OK, you've been asking about the new features in eDeveloper V10. So I'll start with the GUI improvements. Future posts will get into the nitty gritty of other aspects of the latest version.

    1. Windows XP Style - Provide your end-users a standard-looking application that adheres to the Windows XP style. For most developers, this single enhancement is worth the price of admission to the whole eDeveloper V10 upgrade show. Let's face it, a well designed, fresh looking user interface is 90% of the battle in user satisfaction and user acceptance.

    2. Shifting Table Columns - Enable your end user to freely re-order the columns of any table style display. This is a runtime feature and I love it. Just click, drag release and the column is moved. As a developer, you can disable it if you want to, but in most cases this is just grease. Love it.

    3. Improved Tab Control - The new Tab control style enables you to set as many tabs as you need to be easily viewed using a vertical scroll or using multi line display. And let's not forget, customize the tab order. That's been a pretty highly requested feature and should make most magicians very happy.

    4. Tab, Radio, and Check Box Icons - Enrich your application's UI by adding a relevant icon for every tab in a tab control, for every option in a radio button, and for check boxes. These new icons are clean and easy to use. The GUI editor is, well, really a GUI editor now. Cool.

    5. Manageable Radio Buttons - Get better control on Radio Buttons option by freely laying out any Radio Button option. And this means you can put the radio button where you want it for best use of application white space, etc.

    6. 3 States Check Box - Provide a proper visualization for NULL values of logical fields by using the 3 State support of the Check box control. The NULL value is the indeterminate state and it looks like a square filling the check box. Basically letting the user know that in this instant, the check box is not relevant to be checked or unchecked.

    7. Box Style for Radio button and Check box - You can choose between common display of radio button options & check boxes and a button style of appearance. Some people prefer this box around the radio buttons and check boxes, I personally think it makes the user interface a bit too busy and less Web-like. But hey, one of these days the CEO is gonna say, "Can't you put a box around that?" and it will be nice to be able to do it in a second rather than writing some ActiveX or whatnot.

    8. Automatic Wide Mode - Set edit controls to automatically open the Wide view screen whenever the end-user reaches the end of the edit control. Is anybody using this yet? If so, please comment.

    9. Form State Persistency - Easily configure each screen to keep the end-user's customizable state. So we also end on a "wroth the price of admission" type feature. Do you remember what kind of machinations we used to have to go through to retain all this? Sure is easy now. Check. Done.

    10. Report Generator - Does this qualify as a user interface improvement? Not sure. I'll save this one for another post. Blog you later.

    Welcome to The Magic of eDeveloper

    Welcome to the Magic of eDeveloper, a blog for anyone who wants more information, more tutorials, more tips and more news related to Magic Software Enterprises eDeveloper V10 -- a great tool for building, compositing and integrating application software. Since there is a fair amount of material on prior versions of eDeveloper, I will of course focus on eDeveloper V10. Check here for comments on new features, tutorial information, and pretty much anything else that I can think of, borrow or umm, "steal with permission" from the R&D teams to make available to you here.

    I hope that you find this both useful and enjoyable.