Blog: Posts from May, 2011

Labels
AJAX(112) App Studio(7) 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(177) 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(8) OAuth Scopes(1) OAuth2(11) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(10) PKCE(2) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(179) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(80) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) SSO(1) Stored Procedure(4) Teamwork(15) Tips and Tricks(87) Tools for Excel(2) 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
Posts from May, 2011
Tuesday, May 17, 2011PrintSubscribe
File Upload / Download

Code On Time applications support direct uploading of external files into the database.

Basics

Consider the following database schema based on the Northwind sample available with Microsoft SQL Server. Table Categories features Picture field of type image. This data type allows capturing binary content. The purpose of this particular field is to capture a picture representing a category as suggested by the field name.

image

Generate a Web Site Factory web application with this three tables and navigate to Categories page. The screen shot below shows an automatically created page of categories stored in the database. Field Picture is provided with an automatic preview thumbnail.

image

Users can create new categories and upload category pictures as shown next.

Create a new category record in createForm1 view by selecting New Categories button on action bar.

image

Save and edit the new category and indicate that you want to upload a file.

image

Click Browse button and select the image file. File uploading will start immediately.

image

The file is being uploaded in editForm1.

image

The file has been uploaded as indicated by the message at the top of the page.

image

Note that file uploading works only with existing records. The Picture field is available only in editForm1 and grid1 view.

Uploading of binary content is executed asynchronously. If a record does not exist yet then it is not possible to save a file to the database.  Create a new record first, save it, and only at that time upload any files that must be associated with a record.

Code On Time applications will be offering a delayed uploading option that will work with new records by postponing operation until a new record is successfully stored in the database. Creation of  a new record and file uploading will become one smooth operation.

Capturing Extended File Properties

Generated applications do not limit the type of content submitted by end users. If an Adobe PDF file or Microsoft Word document is uploaded instead of an image then the file content will be saved in the database. The thumbnail will not display a preview in that case. If you were to download the file from the application to your hard drive by right-clicking on the thumbnail and selecting Save Target As option then you will notice the following message.

image

The name of the file is represented as generic CategoriesPicture_27, the file type is unknown, the content type is octet-stream.

The binary file stores the file contents only. The file name and content type are not known.

You can easily remedy the situation by introducing utility fields to capture the file name, content type, and length of the uploaded file. The latter is not strictly needed since the application can determine the size of the file by inspecting the database. File length can be useful if you users need to known the file size prior to downloading the file on their computer.

Change Categories table as shown below. Three new columns complement field Picture in table Categories. We have added columns PictureFileName, PictureContentType, and PictureLength. Make sure to allocate enough space for Content Type field to accommodate very long content types introduced in the latest versions of Microsoft Office.

image

Refresh the meta data of your project and regenerate the application.

Create a new category, select the category in the grid view and start editing category properties. New utility fields are displayed right under the Picture field.

image

Upload any document or image.

Notice that the thumbnail of the uploaded file shows the file extension. The utility fields have captured their corresponding properties.

image

Right-click  the thumbnail, select Save Target As and observe the prompt that may look as follows.

image

The name of the file is correctly suggested in “Save As” dialog. The type of the file is also correct.

If you click on the thumbnail directly then the file will open in the application associated with the file type on your computer.

We suggest that your further customize the data controller in the project Designer as shown in the next screen shot. 

image

All utility fields are marked as hidden in createForm1.

Field PictureContentType is “hidden” in editForm1 and grid1.

Field PictureFileName has its Text Mode property set to Static in editForm1 and grid1.

Field PictureLength is “hidden” in editForm1 and Static in view grid1.

These changes will ensure that utility information is captured and only the file name and file size are displayed as read-only values.

Implementing Virtual Fields to Store BLOB/ FILE Content

The new architecture of the framework in Code On Time applications allows full control of the upload / download processing of binary fields with the data controller business rules.

Let’s create a virtual “Picture” field in Products data controller and store the uploaded files in the external file system folder. Such approach may help to reduce the size of the database and provides developers with total control of the process.

To be continued.

Tuesday, May 17, 2011PrintSubscribe
Bug Fixes

The following bugs / issues were addressed in this release:

  • Read-only primary key field values are now passed from the client to the server with both properties NewValue and OldValue set to the original value of the primary key field. This ensures that Value property of a FieldValue class instance is returning the correct result. The change is required to bring the read-only primary key fields in compliance with the new processing model for read-only fields. The enhancement also ensures that annotations will not raise an exception when a new annotation is saved.
  • Data Sheet view will now render a “pretty” annotation column.
  • Free version of Code On Time will allow creating projects with up to ten database tables or views.
Saturday, May 14, 2011PrintSubscribe
Extended BLOB Processing

This update of Code On Time web application generator introduces a major enhancement of file upload/download feature and several bug fixes.

Make sure to refresh the browser cache after re-generating your application.

Bug Fixes / Enhancements

  • Data Sheet view rendering has been improved. Users will notice that sometimes column header of a selected cell is not rendered in “bold” font. This is happening only if assigning a “bold” font will cause the column to become wider. This cosmetic change makes it easier to work with the data sheet.
  • Tab and Shit+Tab keys will always skip read-only fields in the data sheet view. You can still select a read-only cell with a mouse click or with arrow keys.
  • Dates are now displayed exactly as stored in the database regardless of the time zone of the client browser. ASP.NET Ajax client library automatically adjusts dates to the browser’s time zone, which creates logical problems with date and time processing. Data serialization enhancement ensures that difference between the time zone of the web server and the time zone of the browser is ignored.
  • ASP.NET SQL Server Session State is now fully supported. This important feature allows running generated applications on web farms. Read about configuring SQL Server Session State at http://support.microsoft.com/kb/317604. You need to create Web.Config modification instructions for your application to enable the session state as described at /blog/2010/03/customizing-webconfig.html.
  • Form views no longer hide the top row of buttons regardless of the number of fields in a data view.
  • Business rules processor will only try to convert values if ICovertible interface is supported.
  • Microsoft SQL Server membership registration has been changed to remove LocalSqlServer connection string prior to the new registration of a connection string with the same name. This allows generating applications for SQL Server when the latest Oracle / NET library is installed on the same computer.
  • Import processor now implements BeforeProcess and AfterProcess. The class has been refactored in a partial ImportProcessor based on class ImportProcessorBase. This allows creating a new code file in your project with implementation of new virtual methods if you need to execute custom business logic before of after the import process.
  • The bug with field map processing when Import command is selected in IE 9 and Chrome has been corrected.
  • WebKit (Chrome and Safari) browsers will no longer display a modal popup information box stating that the “GetPage method has failed..”. This was happening when user were selecting a menu option while the page was waiting for a response from the server.
  • Read-Only fields are now always correctly passed to business rules. FieldValue class now  returns NewValue if a field is read-only or modified, which makes it possible to “see” the read-only value in a business rule method. Client library has been changed to enable value conversion on the client. Read-only values of non-string type are passed as their native representation to the server instead of being passed as strings.

File Upload/Download

The application framework of generated web applications allows enhanced processing of BLOB (Binary Large Object) fields. The framework will capture Content Type, Length, and File Name automatically if utility fields matching the BLOB field name are present.

This can be done by simply implementing additional fields in your database. For example, if you modify the Norwind.dbo.Categories table as shown below, refresh the metadata of your project and re-generate the project then the utility fields PictureFileName, PictureContentType, and PictureLength will automatically capture the corresponding properties of an uploaded file.

CREATE TABLE [dbo].[Categories](
    [CategoryID] [int] IDENTITY(1,1) NOT NULL,
    [CategoryName] [nvarchar](15) NOT NULL,
    [Description] [ntext] NULL,
    [Picture] [image] NULL,
    [PictureLength] [int] NULL,
    [PictureFileName] [nvarchar](50) NULL,
    [PictureContentType] [nvarchar](80) NULL,
 CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED 
(
    [CategoryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

If you upload a file of non-image format (PDF, Word Document, etc.) and try downloading the file then the application will return the correct content type and file name to the browser.

Important: Make sure to allocate enough length for <BLOB_FIELD_NAME>ContentType field to ensure that Microsoft Office documents will have their content type captured correctly. The content types of the latest Microsoft Office documents are extremely long.

If is also possible to process files through business rules. The tutorial will be available shortly.

Coming Soon

We have finally completed the necessary templates to roll out Azure Factory project. Premium and Unlimited edition users will be able to begin generating Azure Factory applications  starting with the next update.

Owners of Unlimited edition will be able to create enterprise-class applications with EASE (Enterprise Application Services Engine). The engine will include two major components – Dynamic Access Control List and Status Transitions.

We will be releasing a new project DotNetNuke Factory that will allow incorporating Code On Time applications in DotNetNuke web sites shortly thereafter.