Web 2.0

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
Web 2.0
Thursday, November 5, 2009PrintSubscribe
Side-by-Side With SharePoint

If you are developing line-of-business applications with Microsoft SharePoint Business Data Catalog then you are well aware of complexities and limitations that it brings to your everyday development tasks.

Now you have a wonderful alternative to have “true” native ASP.NET/AJAX applications run side-by-side with your MOSS or Microsoft SharePoint Services. Data Aquarium Framework has been enhanced to offer a companion Web Site Factory premium code generation project that allows quickly producing ASP.NET/AJAX web sites that look remarkably like Microsoft SharePoint in a matter of minutes.

image

Is goes well beyond the SharePoint styling and provides ASP.NET/AJAX programming model that requires very little development experience and delivers amazing features, such as automatic adaptive filtering, smooth and responsive user interface, and cutting-edge business rules development to promote code reusability.

image

Code OnTime Designer allows point-and-click configuration of the application pages and data controllers further speeding up the delivery of final products that you are working on.

SharePoint Business Data Catalog plays an important role in bringing your business data into the familiar SharePoint web site presentation model. Building business applications with it is especially gratifying when you accomplish any meaningful results since the challenge is quite significant.

You can feel total satisfaction while meeting little challenge all day long with Data Aquarium Framework and Web Site Factory. Web Site Factory code generator project automatically creates ASP.NET/AJAX applications that have zero dependency on Microsoft SharePoint, can be developed with free tools such as Microsoft Web Developer Express, and still look as good if not better then Microsoft SharePoint sites. Just select you programming language and point to your database. In a few clicks a perfect SharePoint-style application is ready.

Be prepared to answer questions of your customers about that new version of SharePoint that looks so smooth and responsive!

Once again, applications produced with Web Site Factory are not SharePoint applications. These are standard ASP.NET/AJAX web sites that can be developed with standard development tools and require the skill set that you already possess.

The look and feel of these applications is controlled 100% by CSS style sheets. A typical Web Site Factory application looks virtually identical in major modern browsers. Here is the page of an application with the style sheets disabled.

image

Here is the same page with the standard style sheets applied to it.

image

You have a choice of all security models supported by ASP.NET. It can be based on standard Windows Authentication. You can also Internet-enable your application and use built-in Membership Manager. This feature is working in conjunction with the standard ASP.NET Membership API.

image

Please take a look at the live preview of Web Site Factory at /blog/2009/11/web-site-factory-preview-3.html.

You could standard building  “Business Data Catalog 2.0” applications in minutes instead of days and weeks and get all the credit you deserve. Simply run Web Site Factory applications side-by-side with your SharePoint or MOSS instance and enjoy simplified development, zero external dependencies and complete source of every single bit of your projects.

No mysteries any more, no wasted time. Business Data Catalog of the future is delivered in Data Aquarium Framework.

Visit us at http://codeontime.com/subscriptions.aspx and subscribe to Premium Projects and Code OnTime Designer.

Friday, October 16, 2009PrintSubscribe
Conditional Visibility in Forms

Data Aquarium Framework supports declarative conditional visibility of fields and field categories in form views.

Conditional Visibility of Fields

Here is a snippet of the data field controller used in Code OnTime Designer that controls visibility of the Formula field if the field is marked as computed.

<category headerText="General" >
    <description><![CDATA[ Specify field name, type, and data properties of the field.]]></description>
    <dataFields>
. . . . .
<dataField fieldName="Computed"> <headerText>The value of this field is computed at run-time.</headerText> </dataField> <dataField fieldName="Formula" columns="50" rows="5"> <visibility> <expression type="ClientScript" test="[Computed]==true"/> </visibility> </dataField> <dataField fieldName="OnDemand"/> </dataFields> </category>

The visibility expression test is written in JavaScript. The expression test can refer to the names of the fields defined in the view. The field referenced must be incased in square brackets.

The expression test is evaluated on the client whenever the field values are changed. Evaluation does not cause the server post-back.

The following screenshots show the form before and after the computed field checked.

image

image

Conditional Visibility of Categories

The following snippet from the the same data controller shows visibility expression for a field category.

<category headerText="Lookup">
    <dataFields>
        <dataField fieldName="ItemsStyle"/>
        <dataField fieldName="ItemsDataController"/>
        <dataField fieldName="ItemsDataValueField"/>
        <dataField fieldName="ItemsDataTextField"/>
        <dataField fieldName="ItemsNewDataView"/>
        <dataField fieldName="ContextFields"/>
    </dataFields>
    <visibility>
        <expression type="ClientScript" test="[Type] != 'Byte[]' &amp;&amp; [Type] != 'Object' &amp;&amp; [OnDemand] != true" />
    </visibility>
</category>

The JavaScript expression reads as follows:

[Type] != 'Byte[]'  &&  [Type] != 'Object' && [OnDemand] != true

If the value of field Type is not equal to Byte[] or Object and the field is not OnDemand then the category of fields is visible.

The next screenshot shows the visible Lookup field category.

image

Conclusion

The visibility expressions can be defined directly in the data controller files. The upcoming update to Code OnTime Designer will allow easy modifications of the visibility expressions.

Saturday, April 11, 2009PrintSubscribe
Filtering And Business Rules

Data Aquarium Framework offers a unique approach to creating reusable business rules and logic for ASP.NET applications. Today we will explore filtering with business rules.

All code samples are built for a Data Aquarium application generated from Northwind database.

Task 1

You want to enhance the customer lookup capability of Northwind application to display only USA customers when users are editing orders in a grid view and have a UK customer list when users are editing orders in form view. This should not affect any other views that are presenting customers.

Solution

Create new class Class1 and add property Country as shown in example below.

C#

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

public class Class1 : BusinessRules
{
    public Class1()
    {
    }

    [RowFilter("Customers", "grid1", "Country")]
    public string Country
    {
        get
        {
            RowFilter.Canceled = String.IsNullOrEmpty(
                RowFilter.LookupContextController);
            if (RowFilter.LookupContextController == "Orders" && 
                    RowFilter.LookupContextView == "editForm1")
                return "UK";
            else
                return "USA";
        }
    }

}

VB

Imports Microsoft.VisualBasic
Imports MyCompany.Data

Public Class Class1
    Inherits BusinessRules

    <RowFilter("Customers", "grid1", "Country")> _
    Protected ReadOnly Property Country() As String
        Get
            RowFilter.Canceled = _
                String.IsNullOrEmpty(RowFilter.LookupContextController)
            If RowFilter.LookupContextController = "Orders" AndAlso _
                    RowFilter.LookupContextView = "editForm1" Then
                Return "UK"
            Else
                Return "USA"
            End If

        End Get
    End Property

End Class

This class is inherited from MyCompany.Data.BusinessRules base. 

Property Country is adorned with RowFilter attribute. This attribute will force the framework to evaluate the property whenever grid1 view of data controller Customers is expected to present data. The value of the property will be applied as a server-side filter.

The filtering property Country is notifying the framework that its value shall be ignored when property LookupContextController of RowFilter is null. This can be accomplished by assigning boolean value False to RowFilter.Canceled.

Row filter is constructed only once for each data page request received from the client. The framework will reset the cancellation flag of row filter prior to evaluating each business rules property matched to the requesting data controller view. If evaluation of the property has resulted in cancellation then property value is ignored. Otherwise the value is inserted as a parameterized SQL expression in the WHERE clause of SELECT statement constructed by the framework.

The third argument of RowFilter attribute  applied to Country property specifies the name of the field that must be filtered. This is useful if the property of the business rule is named differently than the actual field defined in the data controller view. It is redundant in our example.

Class BusinessRules features RowFilter property that gives you access to Controller, View, LookupContextController, LookupContextView, and LookupContextFieldName that are useful to determine if and how the filter shall be applied.  Lookup context properties are informing you if the data has been requested by the lookup field. You can examine lookup context field name to apply a server-side filter to the data that might be helpful if the same database lookup data is used to provide lookup values to more than one table in your database. If the data is requested by a standalone data view then you will find that all of the lookup context properties are equal to null.

Multiple RowFilter attributes can be applied to the same property.

Now you have to link the new business rules to Customers data controller defined in ~/Controllers/Customers.xml. This is done by adding attribute handler as shown here.

<dataController name="Customers" 
    conflictDetection="overwriteChanges" 
    label="Customers" xmlns="urn:schemas-codeontime-com:data-aquarium" 
    handler="Class1">
    ......

Run your application or navigate to the online demo at http://dev.codeontime.com/demo/filteringrules/?controller=Orders

Start editing any order in the grid view of orders.

image

Click on the link with the customer name.

image

Customer lookup window will display 13 records of customers from USA.

image

Press Escape key and click on any other link in Customer Company Name column. Click Edit button to start editing record in the form view editForm1.

image

Click on the lookup link in Customer Company Name field. Notice that only UK customers are presented.

image

Let’s see if our business rules have affected the global list of customers. Navigate to http://dev.codeontime.com/demo/filteringrules?controller=Customers. About ninety customer records shall be displayed. We have used RowFilter.Canceled property to prevent filtering when the data is no requested in the context of the lookup field.

image 

Task 2

You want to limit the list of employees to those born between 1/1/1950 and 11/1/1960.

Solution

Continue modifying our class and add BirthDate and BirthDate2 properties.

C#

[RowFilter("Employees", "grid1", "BirthDate", 
    RowFilterOperation.GreaterThanOrEqual)]
public DateTime BirthDate
{
    get
    {
        return new DateTime(1950, 1, 1);
    }
}

[RowFilter("Employees", "grid1", "BirthDate", 
    RowFilterOperation.LessThanOrEqual)]
public DateTime BirthDate2
{
    get
    {
        return new DateTime(1960, 1, 1);
    }
}

VB

<RowFilter("Employees", "grid1", "BirthDate", _
            RowFilterOperation.GreaterThanOrEqual)> _
            Protected ReadOnly Property BirthDate() As DateTime
     Get
         Return New DateTime(1950, 1, 1)
     End Get
End Property

<RowFilter("Employees", "grid1", "BirthDate", _
            RowFilterOperation.LessThanOrEqual)> _
           Protected ReadOnly Property BirthDate2() As DateTime
    Get
        Return New DateTime(1960, 1, 1)
    End Get
End Property

Link Class1 to ~/Controllers/Employees.xml data controller in the same fashion as we did for Customers data controller. Properties BirthDate and BirthDate2 are creating a range filter for employee field BirthDate.

You can see filtering by BirthDate in action at http://dev.codeontime.com/demo/filteringrules/?controller=Employees.

This filter is consistently applied whenever employee information is presented in data views.

Task 3

You want to filter data based on ASP.NET session variable.

Solution

Business rules have property Context that provide access to standard Request, Response, Session, Cache, and Application objects available in ASP.NET web forms. If you have a value stored in the session variable then you can easily apply its value as a filter.

<RowFilter("Customers", "grid1", "Country")> _
Protected ReadOnly Property CountryFilter() As String
    Get
        Return Context.Session("Country")
    End Get
End Property

Task 4

You want to filter data for a certain user roles.

Solution

The following code will inspect user role if a current user is not a member of Admin role then only customers from Finland are presented. Administrator’s view is not limited by a filter, which is accomplishing by cancelling filtering caused by CountryFilter property.

<RowFilter("Customers", "grid1", "Country")> _
Protected ReadOnly Property CountryFilter() As String
    Get
        If Context.User.IsInRole("Admin") Then
            RowFilter.Canceled = True
            Return String.Empty
        Else
            Return "Finland"
        End If
    End Get
End Property

Remember that if multiple filter properties are applicable to a give data page request then each filtering property must cancel row filter on its own.

Conclusion

Business rules in Data Aquarium Framework web applications allow efficient data filtering logic that is reused throughout your application. Subscribe to premium projects and start being productive today.

Continue to Present What You Want