ASP.NET

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
ASP.NET
Saturday, April 9, 2011PrintSubscribe
Deploying Web Site Factory Apps to Winhost.com

Deployment of Web Site Factory applications to http://winhost.com ASP.NET hosting provider requires additional Web.Config modification instructions.

Start Code On Time web application generator, click on the name of your project and step to the Web Server page in the project wizard by clicking a few times the Next button.

image

Enter the following Web.Config modification instructions in the text box at the bottom of the wizard page.

InsertAfter: /configuration/system.web/*[last()]

<trust level="Full" legacyCasModel="true" />

This instruction will ensure that the hosting provider will allow ASP.NET to compile the web site without errors.

Generate the project and open the web site in Visual Studio 2010 or Visual Web Developer 2010 to initiate deployment. Follow instructions at http://support.winhost.com/KB/a809/deploying-visual-studio-2010-web-site-project-to-winhost.aspx.

The screen shot below shows the Copy Web Site window in Visual Studio 2010.

image

Wednesday, March 23, 2011PrintSubscribe
Using $external() Function in Filter Expressions

Code On Time applications support custom functions in view filter expressions. The new function $external() has been introduced in the latest web application generator update. You can use this function to access values in the URLs of the pages and values of fields listed in Context Fields property of lookup fields.

Consider the EmployeeTerritories table from the Northwind sample database.

Any territory can be associated with an employee only once due to the primary key constraint.

image

Here is the screen shot of the form that allows creating new EmployeeTerritories records.

image

The employee last name is already selected. If a user clicks on (select) link in Territory Description field then an entire set of 53 territories will be presented.

image

Let’s make sure the the territories that are already assigned to a selected employee are not available in the list. For example, if we assign a new territory to employee Davolio then the last territory on the first page  in the list of territories in the screen shot above, Wilton from Eastern region, is not listed along with a couple of other territories.

Start the code generator, click on the project name, click Design button, and select EmployeeTerritories data controller, click Edit, and enter EmployeeID in the input labeled Context Fields under Dynamic Properties section. Save changes.

From now on, the application will pass the value of the selected EmployeeID to the lookup view Territories.grid1 attached to field TerritoryID. If the lookup view has the field EmployeeID then the rows of Territories will be automatically filtered to match the value of EmployeeID selected in the new record.

Well, there is no field named EmployeeID in the table Territories.

Let’s create a filter expression for grid1 view in data controller Territories. Click on Home link in the bread crumbs of the Designer at the top of the page. Select Territories data controller. Activate Views tab and choose grid1. Click Edit button.

Enter the following in Filter Expression property:

$external('EmployeeID') is null or not TerritoryID in (
   select "TerritoryID" from "EmployeeTerritories"
   where "EmployeeID" = $external('EmployeeID')
)

image

Save changes, exit Designer and generate the application, navigate to Employee Territories page, select Davolio in the Employee Last Name field, and click (select) in Territory Description input. You will see a lookup window with 50 records in it. The three records that are already assigned to Ms. Davolio are not presented in the list.

image

Navigate to dedicated Territories page and observe that 53 records are still available there. If you enter a URL parameter EmployeeID with value of “1” in the address bar of your browser and hit Enter key then 50 records will be displayed as well. Your URL may look as the one below.

http://localhost:36745/Pages/Territories.aspx?EmployeeID=1

The filter expression assigned to grid1 view does not work if there is no external filter passed in the page URL or in the Context Fields of the lookup view. This is guaranteed by the first comparison in the expression.

$external('EmployeeID') is null or . . .

The second part of the filter expression will test the TerritoryID to ensure that it is not matched to any territories that are already present in EmployeeTerritories and uses $external(‘EmployeeID’) to further limit the scope of test.

Notice the use of double quotations around field and table names. Please use the appropriate symbol that works with your database server to ensure that application will not be trying to resolve the name against the dictionary of fields of the data controller.

Here is physical SQL statement executed by your application. Note that parameters @p0 and @p1 will be replaced with the value of the EmployeeID passed in a URL or as a context field.

with page_cte__ as (
select
row_number() over (order by "Territories"."TerritoryID") as row_number__
,"Territories"."TerritoryID" "TerritoryID"
,"Territories"."TerritoryDescription" "TerritoryDescription"
,"Territories"."RegionID" "RegionID"
,"Region"."RegionDescription" "RegionRegionDescription"
from
"dbo"."Territories" "Territories"
    left join "dbo"."Region" "Region" on "Territories"."RegionID" = "Region"."RegionID"

where
(
(((@p0) is null or not "Territories"."TerritoryID" in (
   select "TerritoryID" from "EmployeeTerritories"
   where "EmployeeID" = (@p1)
))))
)
select * from page_cte__ where row_number__ > @PageRangeFirstRowNumber and row_number__ <= @PageRangeLastRowNumber
Tuesday, March 15, 2011PrintSubscribe
MySQL, IIS Express 7.5, Search Bar Improvements

The latest release of Code On Time generator includes significant new features and bug fixes.

Major Features

  • Code On Time generator now fully supports MySQL. Generate sophisticated web applications with native membership support, amazing end user capabilities such as live Excel data feeds, RSS, and on-the-fly reports.
     
  • In an effort to simplify product installation and to offer up-to-date development experience we have integrated support for IIS Express 7.5 in the web application generator. Code On Time generator will automatically use IIS Express to run and test generated applications. IIS Express can be installed on any Windows computer starting with XP and can run side-by-side with the production version of IIS bundled in many versions of Windows.
     
  • Search bars are now enhanced to support the new Search property of data fields. The search bars will no longer display “Hidden” data fields in the field options. The following values of the Search property allow precise control of the search bar behavior:
    • Default – if the field is no hidden then it is allowed to be displayed in the search bar options. Up to three fields are automatically presented on the search bar by default.
    • Required – the field must be presented on the search bar and cannot be left blank. If at least one field is marked as Required or Suggested then only required and suggested fields are displayed in the search bar.
    • Suggested – the field is automatically presented in the search bar when a search bar is activated.
    • Allowed – the field is allowed to be displayed in the search bar. This value may be useful to expose the “hidden” fields in the search bar.
    • Forbidden – the field is not allowed to be displayed in the search bar even if the field is present in the grid / data sheet / tree view.

Bug Fixes and Minor Improvements

  • The application will correctly hide the tab in a form if there are no visible categories.
     
  • Method SqlText.Execute has been renamed to SqlText.ExecuteScalar
     
  • SqlText class has been enhanced with several static methods that make it easy to execute an SQL statement with parameters. The name of the methods are Execute, ExecuteNonQuery, and ExecuteScalar. For example,
    object[] values = MyCompany.Data.SqlText.Execute(
        "select CompanyName, ContactName from Customers where CustomerID = @CustomerID", 
        "ANTON");
    will return Company Name and Contact Name of a customer with ID = “ANTON”.
     
  • An exception raised when registering an activation code has been fixed.
  • Table of Contents user control now adjusts targets of TreeNode elements if the URL is of a page is spelled as “_blank:….” or starts with any other standard browser window name.
     
  • Business rules now support “array” filters. If you enter a view filter as “CustomerID in @CustomerIDList” and implement property CustomerIDList as an array or any enumerable property then the application will expand the filter into “CustomerID in (@p1, @p2,@p3)” if the property is returning three values.
     
  • Code generator will automatically remove read-only flag if detected when generated the project protected by a source control system.
     
  • Membership Business Rules were refactored. All methods are now virtual and can be overridden when needed.
     
  • The bug with conflict detection when read-only fields are present in a view has been resolved.
     
  • Mandatory boolean fields now automatically display first option “(select)” instead of “N/A”.
     
  • If the property ItemsStyle of a mandatory boolean field is set to “CheckBox” then field will correctly render as a check box.
     
  • The speed of metadata processing when generating a project for the first time or when refreshing the metadata to reflect changes in the database is now significantly improved.
     
  • Export as CSV  will use the List Separator of the client UI culture instead of a fixed “comma” character.
     
  • If a form view has more than one column then the form will automatically take enough of real estate of the screen to fit the contents of the form into available space.
     
  • All boxes displayed in the search bar now feature an additional CSS class signifying the purpose of the box. The classes are Summary, TaskList, About, and See Also. This makes it possible to permanently hide the boxes from the UI when needed.
     
  • An exception is no raised if there is an error in the code formula. Previously the application silently ignored the runtime error making it difficult to detect the problem.
     
  • Summary box automatically trims words that are too long to fit in the side bar. This was frequently happening to email addresses and other “long” text sequences with spaces.

Coming Soon

Many new exciting features are coming soon.

  • Data Sheet view will be available in Premium and Unlimited editions of the product to provide a spreadsheet-style data entry.
     
  • Data Pivot capability will allow creating powerful data entry views with side-by-side presentation of categorized values.
     
  • Dynamic Access Control List will be available soon in Unlimited edition. Enterprise class dynamic security system will be available to control access to data on a user and role level without modifying application code.
     
  • Support for Sybase SQL Anywhere is being prepared for release.
      
  • Date Time Picker will be automatically displayed when data format string of a field is G or g.
     
  • New “Purpose” property will be introduced in the fields to allow specifying the business purpose of the field, such as Modified On, Created By, Membership User Name, Phone Number, etc. The code generator will automatically create the necessary business rules to support the expressed purpose of the field.
     
  • Azure Factory code generation project is being finalized and will be available to create applications working with Microsoft SQL Azure.
     
  • Extended support for file uploading is finally coming to conclusion. It will be possible to capture File Name, File Size, File Content Type, and to redirect file storage / retrieval to an external location. Azure Factory applications will use this capability to store uploaded files and annotations in Azure tables.
     
  • Tree View will complement Grid View, Data Sheet, Form, and Chart.
Continue to Order Form Sample