What Is L7?

Last Updated: Nov 9, 2004

L7 is a nickname for Cycla Corporation's "Level 7" family of web development tools. The L7 family includes two products:

Status: not publicly available -- we are considering open-source availability in the future.

Documentation/Discussion: http://l7.flexkb.net/wc.dll?L7~HomeTopic

L7 Framework: Requirements and Inclusions

L7 Framework: Summary Description

  1. A single server object provides the interface for the Web Connection ISAPI application, in much the same manner as a stock Web Connection application. (This server object is currently implemented as a very-heavily subclassed version of wwServer.)
  2. An application manager object manages a collection of application objects, thus allowing more than one entire web application to be contained within a single server (VFP project). The application manager is responsible for persisting each application object, and for routing requests to the appropriate application.
  3. Web hits (requests) are routed through application objects, which are persistent objects operating in their own private datasessions. Beyond providing a persistence layer, the primary function of the application object is to marshal requests to the proper page-handling class. The application object uses an extensible class factory for this purpose. 
  4. Individual web pages are processed by objects instantiated from page classes, which can be arranged in a class hierarchy of any depth suited to the complexity of the application. Inheritance proves very valuable in areas such as security and application look-and-feel across pages.
  5. Each response is returned using one of several response assembly strategy objects, each of which encapsulates a "typical" spproach that developers use for returning responses. Built-in strategies include:
    • Standard. This strategy generally relies on code to create the elements that comprise a response. (See discussion of "page elements" further below.)
    • Template. Under this strategy, an entire HTML template is evaluated allowing VFP expressions to be substituted. Limited structural tags are also supported, allowing some basic usage of SCAN, FOR EACH, and IF blocks within a standard HTML page, without requiring either compilation or CodeBlock.
    • File. This strategy is used for returning alternative content types, generally from files on disk. Examples are PDF or Excel files. HTTP header assembly is handled automatically.
    • Co-opted HTML. This strategy allows static HTML pages to be intermixed with an active L7 application without losing user state, even when cookie-less (license plate) session management is utilized. (Feature currently being developed.)
    • Errors. This strategy handles the automatic generation of error responses. The framework automatically switches to this strategy when an error occurs, thus simplifying a developer's tasks.
  6. Standard HTML responses (see first strategy above) are rendered by a composition of page element objects, whose output is concatenated by a master "body" object to form the visible response. The output of that is further combined with a HTTP header and an object that encapsulates the <head> section to create the overall response. Each page element is autonomous, and can either be written to asynchronously or rendered from a source document. Source documents can be pure HTML, or can include embedded VFP expressions or even code blocks. These elements can be completely mixed-and-matched within an application or even a single page. (For example, a left-margin menu could be rendered from a collection of menu items, while the page "content" was expanded from an HTML "template".)
  7. Framework processing is wired to be optionally monitored by developer-created visitor objects named process monitors, with pre-defined hooks at all major framework events. Potential uses of process monitors includes performance analysis, customized logging/accounting, or specialized security requirements.
  8. Slow-running processes can be easily run asynchronously without writing any special code. A single call to Page.OffloadRequest() will cause the request to be placed in a queue, with an intermediate response sent to the user together with automatic polling for completion. Response and polling behavior can be customized if needed.

L7 Toolkit: Highlights

The L7 Toolkit is a package of controls that can be used in standard Web Connection development. These controls are also included as part of the L7 Framework (described further below). There are currently three (3) major components of the L7 Toolkit, although more may be added later. The highlights of the major components are itemized below.

L7 Controls

L7 Reports [just announced -- will replace similar functionality in L7 Table]

L7 Parsers

NOTE: All components of the L7 Toolkit can operate standalone or as part of the L7 Framework.

RAD and Enterprise Features

  1. Liberal usage of hooks, template methods, and factory patterns allows much flexibility for further extension and customization.
  2. Standards-based focus, particularly in emphasis on meeting accessibility guidelines, and in support of using cascading style sheets (CSS).
  3. Input forms and output tables can be constructed using RAD techniques, and then fine-tuned later after basic design has been accepted.
  4. Built-in, automatic support for user identification and session management strategies, including both cookies and "license plates" (which can even be used in combination). Support for an authentication model is also provided, but the approach is not recommended.
  5. Easy deployment of asynchronous processing for long-running requests.
  6. Hosting and scheduled services...


FAQ (and other Questions and Answers)

When will Cycla make a commercial decision on whether or not to market L7?

Cycla has decided not to market L7 commercially. Cycla may release the framework and toolkit as open source at some future point.

How do L7 and Web Connection fit together?

The L7 Framework is designed to be used in conjunction with Web Connection. L7 relies on attaining request information in the format provided by WC.DLL. Further, L7 does not provide any equivalents for some Web Connection classes (wwXML and wwIpStuff), and subclasses some of the others (wwRequest, wwServer). On the other hand, many Web Connection classes are not used in a pure L7 application, including wwResponse and wwProcess.

Does L7 include data access or business object layers?

The L7 Framework focuses on processing dynamic web requests. It does not include any pre-defined approach to data handling whatsoever. It is expected that Visual FoxPro developers would continue to use the same 3rd-party tools and frameworks that they use for desktop applications. In future revisions, L7 may include classes that implement these layers, but usage of any such classes will always be optional, in deference to maintaining compatibility with enterprise investments in other development tools and approaches.

Does L7 use the techniques published in the Hentzenwerke WebRAD book?

Short answer: No.

Although some of the techniques and tools presented in WebRAD have parallel implementation in L7, WebRAD was written to be accessible and useful to all Web Connection developers. The L7 Framework is strictly for serious developers that spend a significant fraction of their time developing web applications with Visual FoxPro.

How can I learn more about L7?

You can send email to L7@cycla.com. You can also ask to be put on an email list to receive future announcements.

© 2003 by Cycla Corporation