Blog: Posts from July, 2012

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(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(183) 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(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 July, 2012
Friday, July 20, 2012PrintSubscribe
Code Value

The Code Value property is a calculation performed every time the record is inserted or updated. The calculation expression is written in the programming language of your project – Visual Basic or C#.

For example, let’s keep track of the last time an order detail was modified.

Start SQL Server Management Studio. In the Object Explorer, right-click on Databases / Northwind / Tables / dbo.OrderDetails node and select Design.

Design context menu option for Order Details table of the Northwind database.

Add a column to the table:

Column Name Data Type Allow Nulls
ModifiedOn datetime True

Save the table. Switch back to the application generator and refresh the Order Details controller.

Refresh the OrderDetails controller.

Activate the Project Designer. In the Project Explorer, switch to the Controllers tab. Double-click on OrderDetails / Views / editForm1 / c1 – Order Details / ModifiedOn data field node.

ModifiedOn data field in editForm1 of Order Details controller.

Change the following properties:

Property New Value
Text Mode Static

Press OK to save the data field. Double-click on OrderDetails / Fields / ModifiedOn node.

ModifiedOn field of Order Details controller.

Change the following properties:

Property New Value
Code Value DateTime.Now
Data Format String g

Press OK to save. On the toolbar, press Browse.

Navigate to the Order Details page, and edit a record. The Modified On field has no value.

First editing an order detail will reveal that Modified On field has no value.

Change any field value in the record, and save. Open the detail view for the same record – the Modified On field value has been updated.

Opening the same record will reveal that ModifiedOn field value was updated upon insertion.

The field will update on every insert or update.

The web application generator has placed the Code Value formula in an automatically generated business rule associated with the data controller.

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Security;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class OrderDetailsBusinessRules : MyCompany.Data.BusinessRules
    {
        
        [ControllerAction("OrderDetails", "Insert", ActionPhase.Before)]
        [ControllerAction("OrderDetails", "Update", ActionPhase.Before)]
        public void AssignFieldValuesToOrderDetails(int? orderID, 
            string orderCustomerID, string orderCustomerCompanyName, 
            string orderEmployeeLastName, string orderShipViaCompanyName, 
            int? productID, string productProductName, 
            string productCategoryCategoryName, string productSupplierCompanyName, 
            decimal? unitPrice, short? quantity, float? discount, DateTime? modifiedOn)
        {
            FieldValue ModifiedOnFieldValue = SelectFieldValueObject("ModifiedOn");
            object ModifiedOnCodeValue = DateTime.Now;
            if (ModifiedOnFieldValue == null)
                AddFieldValue("ModifiedOn", ModifiedOnCodeValue);
            else
            {
                ModifiedOnFieldValue.NewValue = ModifiedOnCodeValue;
                ModifiedOnFieldValue.Modified = true;
                ModifiedOnFieldValue.ReadOnly = false;
            }
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq
Imports System.Text.RegularExpressions
Imports System.Web
Imports System.Web.Security

Namespace MyCompany.Rules
    
    Partial Public Class OrderDetailsBusinessRules
        Inherits MyCompany.Data.BusinessRules
        
        <ControllerAction("OrderDetails", "Insert", ActionPhase.Before), _
         ControllerAction("OrderDetails", "Update", ActionPhase.Before)> _
        Public Sub AssignFieldValuesToOrderDetails(ByVal orderID As Nullable(Of Integer),
                                                   ByVal orderCustomerID As String,
                                                   ByVal orderCustomerCompanyName As String,
                                                   ByVal orderEmployeeLastName As String,
                                                   ByVal orderShipViaCompanyName As String,
                                                   ByVal productID As Nullable(Of Integer),
                                                   ByVal productProductName As String,
                                                   ByVal productCategoryCategoryName As String,
                                                   ByVal productSupplierCompanyName As String,
                                                   ByVal unitPrice As Nullable(Of Decimal),
                                                   ByVal quantity As Nullable(Of Short),
                                                   ByVal discount As Nullable(Of Single),
                                                   ByVal modifiedOn As Nullable(Of DateTime))
            Dim ModifiedOnFieldValue As FieldValue = SelectFieldValueObject("ModifiedOn")
            Dim ModifiedOnCodeValue As Object = DateTime.Now
            If (ModifiedOnFieldValue Is Nothing) Then
                AddFieldValue("ModifiedOn", ModifiedOnCodeValue)
            Else
                ModifiedOnFieldValue.NewValue = ModifiedOnCodeValue
                ModifiedOnFieldValue.Modified = True
                ModifiedOnFieldValue.ReadOnly = False
            End If
        End Sub
    End Class
End Namespace

This can also be done with SQL Business Rules.

Wednesday, July 18, 2012PrintSubscribe
Custom Input Controls, Status Bars, and ToolTips

Code On Time release 6.0.0.31 introduces the following features, enhancements, and bug fixes:

  • Custom Input Controls are now supported by the client library.
     
  • It is possible to assign input edit controls at runtime.
     
  • Data fields feature the ToolTip property that allows displaying a standard browser tooltip for each field.
     
  • Data views feature Css Class Name property assigned to the 'div' element that represents the data view on a page.
     
  • New tutorials for the Status Bar are now out: 1)http://codeontime.com/learn/feature-tour/status-bars and 2) http://codeontime.com/learn/data-controllers/status-bar.
     
  • Business rules fully support drag and drop.
     
  • Control and User Control property pages and Project Explorer context menu offer "Edit in Visual Studio" option.
     
  • Data Controller properties integrate "Edit Handler" option on the action bar and in Project Explorer. Selection of an option will open either the business rules handler or a shared business rules handler.
     
  • Option "Edit Rule in Visual Studio" is now available for "Code" Business Rules in Project Explorer and designer.
     
  • Dragging a page node after the parent with children is now correctly inserting the dropped page after the last child page of the target.
     
  • Designer toolbar offers Open button to open the project files in Windows Explorer.
     
  • New designer toolbar option "Develop" will open the Visual Studio solution of the code generator project.
     
  • Data Sheet view will automatically set focus on the first cell of the first row when activated from the action bar menu.
     
  • The bug with the loss of focus in the data sheet view in edit mode is fixed.
     
  • The sync is disabled when editing in the data sheet.
     
  • Improved processing of Read-Only When property in form views.
     
  • Advanced menu will work without membership enabled.
     
  • Application pages are sorted by index to fix the "out-of-order" page indexes in legacy projects and projects with custom baseline.
     
  • Designer correctly saves the Status Bar definition.
     
  • Web Site Factory creates a solution file during "Generate" phase instead of when "Develop" action is requested.
     
  • Blob processor uses case-insensitive methods when detecting the utility fields ending with ContentType, Length, and FileName.
     
  • Virtualization node sets now offer CreateField and StatusBar methods.
     
  • Method BusinessRules.NodeSet() can be invoked when processing data controller actions without raising an exception.
Wednesday, July 18, 2012PrintSubscribe
Activating Custom Input Controls at Runtime

Client library automatically assigns a calendar behavior to all date-time input elements. This is the example of the calendar displayed next to input elements of Order Date, Required Date, and Shipped Date fields in the Orders form of the Northwind sample.

The example of the built-in calendar provided by the client library.

With a very little effort you can introduce an alternative calendar for all input elements rendered for the fields representing dates.

image

Start by enabling shared business rules in the application settings and re-generate the project.

Create the file [Documents]\Code OnTime\Client\Sample Editors\DatePicker.js and enter this script.

// The "factory" object for DateTime input elements
MyCompany$DatePicker = function () {
}

MyCompany$DatePicker.prototype = {
    // This method is invoked for an input element of a data controller field
    // associated with the editor. Return 'true' if no other editors are allowed.
    attach: function (element, viewType) {
        // hide the "calendar" button next to the input element
        $(element).next().hide();
        // attach a jQuery datepicker to the input element
        $(element).datepicker();
        return true;
    },
    // This method is invoked by the client library before the input element
    // of the field is destroyed. Return 'true' if no other editors are allowed.
    detach: function (element, viewType) {
        // detach the datepicker from the input element
        $(element).datepicker('destroy'); 
        return true;
    }
}

Start the code generator and the script will be integrated in the client library.

Activate Project Designer and click Browse to cause the application to be generated. Hit the browser Refresh button to ensure that the latest version of the client library is downloaded.

Switch to Project Designer and click  Develop button on the toolbar. Visual Studio or Visual Web Developer will start. Open ~/App_Code/Rules/SharedBusinessRules.cs(vb) file and enter the following code.

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class SharedBusinessRules : MyCompany.Data.BusinessRules
    {
        
        public override bool SupportsVirtualization(string controllerName)
        {
            return true;
        }

        protected override void VirtualizeController(string controllerName)
        {
            NodeSet().Select("field[@type='DateTime']").Attr("editor", "MyCompany$DatePicker");
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq

Namespace MyCompany.Rules
    
    Partial Public Class SharedBusinessRules
        Inherits MyCompany.Data.BusinessRules

        Public Overrides Function SupportsVirtualization(controllerName As String) As Boolean
            Return True
        End Function

        Protected Overrides Sub VirtualizeController(controllerName As String)
            NodeSet().Select("field[@type='DateTime']").Attr("editor", "MyCompany$DatePicker")
        End Sub
    End Class
End Namespace

The methods of the shared business rules class will adjust the definition of data controllers with the help of virtualization node sets. The method VirtualizeController selects all date-time fields and assigns the custom editor at runtime.

Save the file and browse the application from the generator or directly in development environment. Date-time input elements in the entire app are now featuring a new calendar based on jQuery UI date picker.

Make sure to refresh the app when the first page is displayed in the web browser to ensure that the latest version of the custom scripts has been loaded.

Virtualization node sets allow easy assignment of custom input editors to the specific data controller fields at runtime.