EASE

Labels
AJAX(112) App Studio(9) Apple(1) Application Builder(245) Application Factory(207) ASP.NET(95) ASP.NET 3.5(45) ASP.NET Code Generator(72) ASP.NET Membership(28) Azure(18) Barcode(2) Barcodes(3) BLOB(18) Business Rules(1) Business Rules/Logic(140) BYOD(13) Caching(2) Calendar(5) Charts(29) Cloud(14) Cloud On Time(2) Cloud On Time for Windows 7(2) Code Generator(54) Collaboration(11) command line(1) Conflict Detection(1) Content Management System(12) COT Tools for Excel(26) CRUD(1) Custom Actions(1) Data Aquarium Framework(122) Data Sheet(9) Data Sources(22) Database Lookups(50) Deployment(22) Designer(178) Device(1) DotNetNuke(12) EASE(20) Email(6) Features(101) Firebird(1) Form Builder(14) Globalization and Localization(6) How To(1) Hypermedia(2) Inline Editing(1) Installation(5) JavaScript(20) Kiosk(1) Low Code(3) Mac(1) Many-To-Many(4) Maps(6) Master/Detail(36) Microservices(4) Mobile(63) Mode Builder(3) Model Builder(3) MySQL(10) Native Apps(5) News(18) OAuth(9) OAuth Scopes(1) OAuth2(13) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(11) PKCE(2) Postgre SQL(1) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(184) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(81) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) SSO(1) Stored Procedure(4) Teamwork(15) Tips and Tricks(87) Tools for Excel(3) Touch UI(93) Transactions(5) Tutorials(183) Universal Windows Platform(3) User Interface(338) Video Tutorial(37) Web 2.0(100) Web App Generator(101) Web Application Generator(607) Web Form Builder(40) Web.Config(9) Workflow(28)
Archive
Blog
EASE
Wednesday, September 19, 2012PrintSubscribe
Web App as Application Server

Code On Time web applications have a classic multitier architecture.

  • A backend database engine (Oracle, SQL Server, MySQL, etc.) provides the data tier.
  • The application tier is a generated application. It includes a standard framework with custom business rules created by a developer. Application framework interacts with the data tier. It automatically creates data manipulation SQL statements and invokes business rules as defined by the app configuration.
  • The presentation tier is a standard library implemented in JavaScript. The library is stored with the application files on the web server. The client library is downloaded by a web browser with application pages. The client library components interact with the server-side application framework and business rules.

The client library of the presentation tier has a model-view-controller architecture. It retrieves the model and view configuration from the application tier and presents data in a web browser window. It also sends user-initiated actions to the application framework for execution.

A web app configuration information and data are traveling between application and presentation tiers over HTTP protocol through a single web service implemented in the application framework. The presence of configuration information allows the same client library to be used in many applications without the need for heavy customization of generated apps.

The standard client library can be enhanced with new capabilities and even replaced to support new types of client devices.

Here is an example of Customers data controller from the Northwind sample created with Code On Time.

The highlighted view createForm1 includes the fields from the model  The highlighted action ag3 / a1 requires command New to be executed with the argument createForm1

The highlighted view createForm1 includes the fields from the model.

The highlighted action ag3 / a1 specifies that New command must be executed with the argument createForm1.

These application configuration elements do not imply any specific implementation. A developer can put together a custom app based on such configuration. The client library of a Code On Time web application provides just one of the many possible implementations.

This is how the client library of a Code On Time web app interprets the application configuration of the 'Customers' data controller

Northwind database is the data management system of a mail order trading company. In minutes, a developer can generate a fully functional secure web app straight from the database. The app can be used for back office data management of orders and inventory by company employees.

Today, it is expected that the business data is available literally everywhere – any device and any platform must be supported.

Suppose that the public-facing web site of Northwind Traders must be enhanced to allow self-registration of customers. The web site is deployed to a Linux web server.

This is how the form may look.

This sample form can be used to register new customers in a web app created with Code On Time Unlimited edition

The registration form users are anonymous and have no access to the back office system. The operating system of the web app is Microsoft Windows. The app is deployed to a dedicated Windows Azure server, while the public web site is running on a Linux server hosted by a different provider.

A web app created with Code On Time offers an amazingly simple and powerful solution to this challenge.

Create a file with “.htm” extension with the following HTML markup.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Customer Registration Form</title>
</head>
<body>
    <form action="http://demo.codeontime.com/northwind/appservices/Customers" method="post">
    <table>
        <tr>
            <td>
                Customer ID
            </td>
            <td>
                <input type="text" name="CustomerID" size="5" />
            </td>
        </tr>
        <tr>
            <td>
                Company Name
            </td>
            <td>
                <input type="text" name="CompanyName" size="40" />
            </td>
        </tr>
        <tr>
            <td>
                Phone
            </td>
            <td>
                <input type="text" name="Phone" size="24" />
            </td>
        </tr>
    </table>
    <input type="submit" value="Register" />
    <!-- redirection parameters  -->
    <input type="hidden" name="_successUrl" value="http://codeontime.com/buy" />
    <input type="hidden" name="_errorUrl" value="http://codeontime.com/support" />
    </form>
</body>
</html>

Open the file in your favorite web browser, fill the form, and hit “Register” button. If the primary key of the new customer is unique, then a new customer record will be automatically created in the database of http://demo.codeontime.com/northwind web app and you will be redirected to the URL specified in _successUrl parameter. Otherwise the browser will be redirected to the URL specified in _errorUrl parameter. The _error variable added to the URL will indicate the source of the problem.

Sign in the application to locate the new registration record at http://demo.codeontime.com/Northwind/Pages/Customers.aspx. Enter admin/admin123% credentials to access the page if prompted.

The data records of a self-registered customer created as a result of standard HTML form submission

The demo application at http://demo.codeontime.com/northwind “listens” to HTTP requests that start with “/appservices” prefix.

If you click on the link http://demo.codeontime.com/northwind/appservices/Customers specified in the “action” attribute of the form, then an XML list of customers will be returned. The web browser will use HTTP GET method when requesting the URL.

The form declares that HTTP POST method shall be used when the form is submitted. The demo app will interpret the request as a command to insert a data row. The application data controller will automatically use createForm1 to perform the action. If there are any custom business rules defined in the app, then they will be automatically engaged as well and may effect the result of the action.

The application framework of a Code On Time web app provides a full fledged custom application server. Developer creates application server APIs  by customizing views, actions, and business rules in the application data controllers. From the developer’s prospective, the customization of these project configuration elements results in a made-to-measure user interface. All of a sudden this work goes a long way towards creating a highly reusable application server.

The user interface of a Code On Time web app can be used on its own or function as a test platform for the application server APIs of the next killer app created for any platform supporting HTTP, JSON, and XML.

The application framework includes components that implement support for Representational State Transfer also known as REST.  The application can handle HTTP requests to the  built-in custom application server with responses encoded in JSON or XML when enabled.

Tuesday, January 31, 2012PrintSubscribe
Roadmap 2012

Code On Time has expanded its rapid application development capabilities during the year of 2011.

In minutes you can build database web applications that are ready for deployment to shared or dedicated hosting server.  We now support Microsoft SQL Server, Oracle, MySQL, and SQL Anywhere.

A new exciting cloud platform called Microsoft Windows Azure attracts the attention of developers and business managers looking to cut deployment costs down and make deployment of web application simpler. Generate an Azure Cloud solution from your SQL Azure database. The solution includes a Web Role and class library implementing a web site with navigation system, role-based security, membership manager, built-in data export, reporting, and much more. Have it online in 15 minutes.

Many line-of-business web applications benefit from tight integration with web content management systems. We now offer two options that allow to take advantage of popular content management systems DotNetNuke and Microsoft SharePoint Foundation 2010.

DotNetNuke Factory creates application pages as controls with data views incorporated in a DotNetNuke module. The registered module can be configured by end users. This particular CMS is perfect for Internet-facing web applications.

SharePoint Factory creates a collection of application pages implemented as user controls, and packages them for deployment as a Microsoft SharePoint 2010 Feature with a single Web Part. Use this type of project for Intranet websites.

We are preparing the new http://codeontime.com website, complete with high quality search and built-in documentation engine.  We expect to launch the new site in a few weeks from now. The new documentation section will be cross-referenced in the Designer.

Our Code On Time team is working diligently to further the appeal of our web application generator. We would like to share the 2012 roadmap and explain the direction our product is taking.

The following upcoming features are presented in the approximate order of delivery. We will continue releasing bug fixes and introduce various product enhancements that are not listed in the roadmap. Updates will continue being delivered monthly.

Sync Server

Team development will become simple and hassle-free with the release of Sync Server. This is a cloud service from Code On Time designed to support groups of users working on the same project. Web application generator will feature Commit, Update, and Rollback actions to allow merging of the change logs created in the application Designer.

This tool will not replace existing powerful source control managements systems such as SVN or TFS. The sole purpose of the tool is to make the maintenance of Code On Time designer files as transparent and carefree as possible. Developers will be able to customize any part of the project and share their work with a push of a button.

Native Import of CSV Files

Shared hosting servers and restrictive host environments such as Windows Azure and Microsoft SharePoint Foundation make it impossible to use the Import feature available in the generated applications.

The current implementation relies on Microsoft Access Database Engine to process the submitted CSV, XLS, and XLSX files. It is not always possible to have them installed in the hosting environment.

We will offer a native reader of CSV files that will be embedded in the source code of generated application in Premium and Unlimited editions of the product.

Tree View

There is a partial implementation of “Tree” view in the current library. The implementation will be completed and become an official feature of the product.

Drag & Drop in Project Explorer

We have recently introduced the Project Explorer displayed alongside the Project Designer. The hierarchy of web application pages and data controllers allow easy access to the properties of various elements of an application. The hierarchies offer a holistic view of an application.

A full drag & drop manipulation of nodes in the hierarchies will allow easy reordering and changes in the composition of the project.

For example, you will be able to drag and drop “page” nodes to quickly change the navigation system of an application. Dragging of data fields will allow quick changes to the data presentation.

We will also allow Alt and Ctrl keys to affect the outcome of drag and drop actions. For example, one can imagine dragging a “view” node while keeping Ctrl pressed and dropping it on the parent node in the hierarchy. The outcome of such action may be creation of a “duplicate” view. We hope to work with the community to develop useful drag and drop actions.

“SELECT” Data Using Stored Procedures and Web Services

Code On Time web applications dynamically compose SQL SELECT statements to efficiently retrieve data. The generated application incorporates server side access control rules, user-defined filters, and sort order in the single SELECT expression. The application uses parameters to incorporate the user provided values.

This works great in many situations. Sometimes you may need a complex business logic to produce a data set presented to a user. There may be a stored procedure or a call to an external web service that produces data.

We will allow various levels of control to execute code before and after the data is processed. Developers will be able to supply a virtual dataset  if needed. We will also support native “virtualization” for stored procedures.

Business Rules in Project Explorer

Code On Time web applications offer a simple and powerful approach to the separation of business logic from the user interface. Developers create business rules for this purpose. Business rules are implemented as classes.  The classes contain methods adorned with ControllerAction, AccessControl, and RowBuilder attributes. These attributes allow the methods to participate in the application lifecycle.

Project Explorer will automatically parse the source code of all available business rules and match them to action nodes. Nodes of type controller and data view will feature Business Rules child node that will provide a summary of detected methods and will also allow easy creation of business rules. Methods and arguments will be automatically inserted in the source code. We will also allow selecting a purpose of the method. The boilerplate method implementation will reference the web resources explaining how a particular task can be accomplished in a Code On Time application.

Business rules are generated first time only. Customization will be preserved between the code generation sessions. New methods will be injected directly in the existing business rules. If a class implementing the business rules does not exist then a new class will be created.

EASE: My Account

Imagine that you are creating a web application to support a non-profit organization.

There are application users responsible for administration of the site. Event organizers will suggest the events supporting the cause of the organization. There are volunteers willing to sign up to help in organizing the events. There are donors who may wish to contribute financial resources.

Code On Time web applications offer a self-service sign up. Users create their own accounts with ease, which works great and requires minimal administration of the process. Users can login immediately. The application must ensure that the role of a user account is known to allow further access to the application pages. User “a” may wish to become a donor. User “b” would like to suggest an event. User “c” is burning with desire to volunteer.

Generated web applications will implement a class invoked to determine if a user account requires additional configuration when a page is accessed. Developer will have the power to make a determination and force the appropriate user configuration page presented in the browser. “My Account” link on the task bar will allow programmatic selection of the user configuration page.

This feature is a component of EASE (Enterprise Application Services Engine).

EASE: Dynamic Access Control List

Suppose you have created a successful line-of-business application for your client. Another client gets on board – things cannot be any better. Soon you discover that maintaining two clients with the same code base is very difficult. Complexity escalates quickly as you gain more and more customers.

If you have defined access control rules for one client then most likely your rules with have to be expanded to accommodate the other clients as well. Code On Time makes it easy, but the static nature of the access control rules will require frequent re-deployment of the application and possibly database changes.

Dynamic Access Control List will introduce a custom set of tables in the database of your application to support access control rules defined at runtime. The management tool will be built into your web application. Administrators will be able to define access control rules and assign them to roles and individual users.

This feature is a component of EASE (Enterprise Application Services Engine).

Code On Time Tools for Excel

Project Explorer makes it easy to have a bird-eye hierarchical view of your project. Many developers and business users feel more comfortable interacting with the application configuration setting presented in Microsoft Excel spreadsheet.

Code On Time Tools for Excel will provide an alternative to the built-in Designer. Custom ribbon tab will offer access to Code On Time projects. It will be possible to import all elements of a project into separate sheets and make changes to them en-masse. Ribbon controls will allow incorporating changes to the project designer log files.

Mobile Web Applications

Code On Time web applications display well in modern touch phones and tablets. However, the form factor of the web applications is designed to work best in the desktop browsers. The user interface is mouse-driven.

The unique design of Code On Time web applications allows seamless replacement of the client JavaScript library to accommodate new presentation paradigm. Upcoming releases of Code On Time will automatically link the mobile client library when touch screen phones and tablets are detected and render web applications accordingly.

There will be no need to change the existing applications or develop additional “mobile” pages that must be kept in sync with the desktop counterparts.

This feature will be available in Unlimited edition.

Ribbon Action Group

Recently released SharePoint Factory practically calls for a new action scope “Ribbon” to be supported.

New action scope will be available to expose the data controller actions on the tabs of the SharePoint ribbon.

We will also incorporate the SharePoint-style ribbon in other types of projects to offer this popular feature of Microsoft Office in the generated web applications that are not based on Microsoft SharePoint. You will find an example of an action group scope here.

EASE: Custom Membership Providers

Microsoft has introduced ASP.NET Membership to enable quick creation of sophisticated user and role management in the web applications. Code On Time makes it easy to take advantage of this standard feature. Generated web applications offer built-in Membership Manager, the visual tool that works on top of ASP.NET Membership.

Some developers do not trust Microsoft to do the job right and rely on their own tables and plumbing to handle the security. Full support for ASP.NET Membership providers is built in the ASP.NET.

Code On Time will offer automatic generation of custom membership providers directly from the custom database tables.

This feature is a component of EASE (Enterprise Application Services Engine).

A restricted version of custom membership provider will be available in all product editions if a web application is generated from SQL Compact, Microsoft Access, or DB2 database. This will apply to data sources that do not offer a standard ASP.NET membership provider.

Data Source: SQL Compact

Code On Time will support generation of web application from Microsoft SQL Compact databases.

Data Source: Microsoft Access

Code On Time will support generation of web application from Microsoft Access databases.

Data Source: DB2

Code On Time will support generation of web application from IBM DB2 databases.

Binary Fields: Upload When Inserting Records

Web applications generated with Code On Time allow direct upload/download of binary content to and from the binary columns of existing table  rows. It is not possible at this time to upload the binary content when a new row is created. The upload process streams the data straight to the database and a physical row has to exists for this to happen.

The new record does not exist in the database at the time when an end user selects a file to upload. The same limitation applies to binary content stored externally.

The upcoming revisions of the application framework and client library will allow selecting the binary files when a new record is created. The application framework will not upload the files instantly. Instead the upload will start when the database row has been created successfully.

Binary Fields: File System Adaptor

The web application generator will produce the “adapter” class that will make it easy to direct the uploaded content to the external file system folders.  No programming will be required.

Binary Fields: Azure Adapter

The web application generator will produce the “adapter” class that will make it easy to direct the uploaded content to the Windows Azure Storage. No programming will be required.

Binary Fields: Amazon S3 Adapter

The web application generator will produce the “adapter” class that will make it easy to direct the uploaded content to the Amazon S3 storage. No programming will be required.

Binary Fields: Multi-File Upload

Code On Time web applications will support optional multi-file uploading with a progress indicator.

EASE: Workflow Register

Workflow Register will complement the runtime capabilities of generated web applications. This feature will join the Membership Manager and Dynamic Access Control List.

If you are developing an application that services multiple customers, then a common requirement is to allow customization of the user interface according to the needs of each customer. Workflow Register will bring elements of Code On Time Designer to the generated applications. End users will be able to create new virtual pages, data views, and actions groups.

This feature is a component of EASE (Enterprise Application Services Engine).

View Type: Calendar

If your dataset has a date column then it is not a bad idea to see the records in calendar format. This is precisely what we intend to do.

The new view type will render data in a calendar format and will behave similar to the grid view for all intents and purposes.

EASE: Dynamic Web Content Management System – Site Builder

Search Engine Optimization and web content management may not be on your mind when you are creating a line-of-business web application. If your software-as-a-service solution is ready for production then the next step is to start a marketing campaign.

You will likely seek a 3rd party solution such Wordpress or Office 365. You do have the option of incorporating your software in the popular content management systems with DotNetNuke Factory and SharePoint Factory.

If none of the above options are appealing then Code On Time will have another option for you. Built-in site builder will allow creation of virtual pages within your own application that are seamlessly integrated in your web application. No 3rd party software will be required.

This feature is a component of EASE (Enterprise Application Services Engine).

View Type: Rollup

We will deliver a new view type that will present a variation of data sheet view with the ability to collapse the data rows. The view will differ from the data sheet view. It will behave more inline with traditional spreadsheet style of presentation. The overflow data in the cells will not wrap to the next line and will stay hidden.

View Type: Map

Location presentation is easy in modern web development thanks to mapping solutions from Google and Microsoft. We will offer a new view type to present the dataset on the map.

Cloud On Time

We hope to end this year with the launch of http://cloudontime.com. The hosted version of Code On Time with ability to create tables will require zero software on the computer. The service will be subscription-based.

Developers will be able to start the project in the cloud and optionally migrate to a custom version of the cloud app that will be under their full control with the help of Cloud Factory project.

1-to-1 Entities

A common database design practice is to use 1-to-1 entities.

For example, you may implement the Person table that provides the base shared columns LastName and FirstName for tables Student and Teacher.  Both the Student and Teacher tables have PersonID column that allows inclusion of common attributes.

Code On Time does not recognize such relationships and generates the master-detail page where Person is the master view and Student and Teacher are detail views.

The developer’s intent is to have the two independent pages and two controllers that match Student and Teacher. Both controllers must incorporate the personal information (LastName and FirstName) as if it is defined in the base tables.

We will offer a special mapping area to identify the 1-to-1 entities and will generate the code to handle the distributed nature of the data in such relationships.

Tuesday, December 13, 2011PrintSubscribe
EASE Auditing

Tracking of user activities is a frequent requirement in many line-of-business applications. Knowing when a particular database record has been created, as well as who changed it is crucial in many industries.

Application developers rely on a proven set of techniques to satisfy data auditing requirements. They introduce data auditing columns in relevant database tables and utilize event logs to keep a journal of the system events. Values of auditing columns are updated by the application.

If the field name contains words “create”, “modified” or “update” , it’s purpose is probably to track user actions.

Examples

Consider customer table of Sakila database used to train MySQL developers. Field create_date tells when the record was created. Field last_update indicates when the customer record has changed.

image

If you generate an app based on this database then you will find out that additional manual configuration will be required to prevent users from entering values directly in the input fields and to ensure that fields are updates as intended. Manual configuration of auditing fields is described at /Documents/CB-CreatedBy_CreatedOn_ModifiedBy_ModifiedOn.pdf.

image

Unlimited edition of Code On Time offers a powerful option that makes configuration of auditing fields virtually effortless.

Select your project on the start page of the code generator and choose Settings action.

Select Features and activate EASE Configuration section.

Click on the “here” link under Audit Field Map to create sample map entries. Change the entries as shown below or in the picture.

Modified By User Name =
Modified By User ID =
Modified On Date = last_update
Created By User Name =
Created By User ID =
Created On Date = create_date

image

Click Finish  and regenerate the project. Try to update existing records or create new ones - you will notice that users are not able to change the auditing  fields directly, and that values of the fields are processed automatically.

image

Consider another example.

Almost all tables in the sample Adventure Works database are provided with ModifiedDate column. There are 99 tables and views in the R2 release of this popular training database used to illustrate the capabilities of Microsoft SQL Server 2008.

image

Here is how the audit field ModifiedDate look is presented if you generate a brand new Adventure Works application.

image

Change the Audit Field Map as follows:

Modified By User Name =
Modified By User ID      =
Modified On Date          = ModifiedDate
Created By User Name  =
Created By User ID       =
Created On Date           =

Generate the app and the same screen will look differently. Try editing records and observe that the field value is changed accordingly.

image

Understanding Audit Field Map

Audit Field Map associates predefined “logical” field names with the patterns of actual field names of the application database tables and views.

The “logical” field names are self-explanatory. If your application does not require a specific type of auditing then do not enter a pattern matching the logical audit field or delete the logical field from the map.

The pattern is treated as a regular expression. If you are consistently using the same field names for auditing purposes then enter the full field names as patterns. If there are variations of the fields conceptually playing the same audit role then separate the full names or name fragments with the symbol of “|” (do not include  double quotes).

Let’s build an application with the complete set of audit fields in at least one database table.

Start by creating a Web Site Factory application using the Northwind Sample.

Locate the Products page in the generated web application and begin editing a product record. Here is our version of the Products page.

image

Modify the Products table in SQL Server Management Studio by adding the six audit columns that follow right after the Discontinued column in the next screenshot. Allow null values in the new columns and save the changes.

image

Code generator does not know that the database has changed. We need to refresh the application baseline.

Select the project name on the start page of the code generator and choose Refresh action.

image

Toggle the check box next to the name of the data controller Products and click OK button.

image

Generate the application and select a product record one more time. New fields are now available and clearly require additional configuration.

image

Select the project on the start page of the code generator and choose Settings. Proceed to Features | EASE Configuration and enter the following Audit Field Map.

Modified By User Name = ModifiedByUserName
Modified By User ID      = ModifiedByUserId
Modified On Date          = ModifiedOnDate
Created By User Name  = CreatedBy
Created By User ID       = CreateId
Created On Date           = CreatedOn

Generate the web application and edit the exact same record.

If you compare the previous screen with the next one then you will notice that we are left with the four visible audit fields. The two fields designed to capture user IDs are not visible. Both CreateId and ModifiedByUserId are hidden from the application end users. The rest of the new audit fields are blank.

Click OK button to save the record.

image

Start editing the same record one more time. If you are signed in as user admin then your will see “admin” in the fields Created By and Modified By User Name.

Notice that both field names are rendered as links. If you click on a link then the default email software installed on your computer will be activated with the user’s email in the “To” input of the new message.

image

The physical ID of the user has been captures as well.

image

We suggest that you experiment edited data under different user identities to see the audit processing in action.

If you start creating new records then the audit fields will be prepopulated right away.

Future Audit Enhancements

The impressive ease of EASE Auditing will not stop here.

We are working on adding three major auditing enhancements that will become available in February of 2012.

  1. Access By/On columns will allow tracking the event of the web application user selecting a master record on the page. Typically users are looking for a record and then drill in the details. This moment in time and the user identity will be captured when needed. A perfect example of such event is a customer service representative accessing a customer account. Nothing has been changed but the fact of a person looking at the data is captured.
  2. Deleted By/On columns will help implementing a “soft delete”. The application will detect the presence of such fields and will convert “Delete” action into “Update” of the field values. The application will also filter out the “deleted” rows. Many businesses are now trying to avoid a loss of important business information and “soft delete” is a popular technique.
  3. Code On Time  web applications have unique knowledge of the data and actions that pass from the client to the server. The upcoming release of Dynamic Access Control List will also introduce an automatic logging of all user actions as a part of EASE Auditing.