Data Aquarium Framework

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
Data Aquarium Framework
Friday, July 9, 2010PrintSubscribe
Accessing Filters in Business Rules

Q. Where can I get hold of the filter string that was built when the user applied a set of filters in the grid1 view?  If I can grab that then I can pass it to a SQL query to supply a list of multiple Customers for whom I want to pick up all the orders.

A.

The following screenshot shows the application with the selected master Suppliers record and filtered detail Products records.  This is the same application that was discussed at /blog/2010/06/refreshing-master-when-detail-changed.html

The user has just edited a detail Products record and pressed the Save button.

image

The following screenshot shows a breakpoint that was set in the project. The breakpoint is activated when user saves the record.

image

If you inspect Arguments property of the business rules class in Watch window of Visual Studio or Visual Web Developer then you can clearly see that a wealth of information about the context of the requested action is available to you, including the current filter that was applied by the application user.

Property Arguments.ExternalFilter provides access to the selected master Suppliers record.

Property Arguments.Filter provides access to the user-defined filter.

Property Arguments.SelectedValues providers access to the primary keys of selected detail Products records presented in the page.

You also have access to the SortExpression and physical values that were submitted from the client browser when Update action has been requested.

image

Monday, July 5, 2010PrintSubscribe
Building ASP.NET+AJAX Appointment Manager

Suppose that you need to create an appointment manager for your business. You have a receptionist in the front office and salesmen ready to service customers. Whenever a customer comes in requesting a consultation, the receptionist will make an appointment in the Appointment Manager. The next automatically assigned salesman will be rotated by the application. If a customer requests a specific salesman, then that appointment will not affect the rotation process.

When a new appointment is created, the salesman that performed the smallest number of appointments will be assigned. The rotation process will ensure fair distribution of appointments.

We will show you how to create an ASP.NET+AJAX Appointment Manager web application generated with Code OnTime and enhanced in Visual Web Developer.

Download the step-by-step guide (1029 KB)

Tuesday, June 29, 2010PrintSubscribe
Refreshing Master When Detail Changed

Q. Is there an easy way to force the Master View at the top of a page to automatically refresh (from the server) when an item is edited in the child/detail view at the bottom of the page ?

A. The example below is referring to the Northwind sample application.

Suppose you want to refresh a list of Suppliers when the detail Products view has been changed on page ~/Pages/Suppliers.aspx.

Here is the Suppliers page:

image

If the products shipped by the selected supplier have changed (inserted, updated, or deleted) then you want the list of suppliers to refresh its content.

Open the project in Designer and assign ProductsBusinessRules handler to Products data controller. If you generate the project then business rules class empty shall ~\App_Code\Rules\ProductsBusinessRules.cs file will be created for you. If you are using VB as a programming language of the generated application then the business rules class will be coded in VB.NET.

Here is the sample business rules class written in C#, which will do the trick of refresh the master:

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

namespace MyCompany.Rules
{
    public partial class ProductsBusinessRules : MyCompany.Data.BusinessRules
    {
        [ControllerAction("Products", "Update", ActionPhase.After)]
        [ControllerAction("Products", "Insert", ActionPhase.After)]
        [ControllerAction("Products", "Delete", ActionPhase.After)]
        public void DoRefreshMaster(string companyName, int supplierID)
        {
            if (Result.Errors.Count == 0)
                Result.ExecuteOnClient(
                    "this.set_lastCommandName(null);" + // the action state machine is reset
                    "this.goToView('grid1');" + // show 'grid1'
                    "var dv=Web.DataView.find('view1Extender');" + // find specific master data view
                    "if(dv)dv.refresh();"); // if the view is found then ask it to refresh
        }
    }
}

Note that parameters in DoRefreshMaster are not playing any role here. You could use the field values to perform selective operations in the client when needed.

The view we are looking to refresh is view1Extender. This extender is available on page ~/App_Code/Pages/Suppliers.aspx.

Here is the page markup as created by code generator:

<%@ Page Language="C#" MasterPageFile="~/Main.master" AutoEventWireup="true" CodeFile="Suppliers.aspx.cs"
    Inherits="Pages_Suppliers" Title="Suppliers" %>

<asp:Content ID="Content1" ContentPlaceHolderID="PageHeaderContentPlaceHolder" runat="Server">
    Suppliers</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PageContentPlaceHolder" runat="Server">
    <div factory:flow="NewRow" xmlns:factory="urn:codeontime:app-factory">
        <div id="view1" runat="server">
        </div>
        <aquarium:DataViewExtender ID="view1Extender" runat="server" TargetControlID="view1"
            Controller="Suppliers" View="grid1" ShowInSummary="True" />
    </div>
    <div factory:flow="NewRow" style="padding-top: 8px" xmlns:factory="urn:codeontime:app-factory">
        <div factory:activator="Tab|Products">
            <div id="view2" runat="server">
            </div>
            <aquarium:DataViewExtender ID="view2Extender" runat="server" TargetControlID="view2"
                Controller="Products" View="grid1" FilterSource="view1Extender" FilterFields="SupplierID"
                PageSize="5" AutoHide="Container" />
        </div>
    </div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="SideBarPlaceHolder" runat="Server">
    <div class="TaskBox">
        <div class="Inner">
            <div class="Header">
                About</div>
            <div class="Value">
                This page allows suppliers management.</div>
        </div>
    </div>
</asp:Content>