Blog: Posts from December, 2018

Blog
Posts from December, 2018
Monday, November 26, 2018PrintSubscribe
Limit Access For Particular User Name

Let’s say you want to prevent a user with a certain name from being able to access your app pages.

Application framework provides a centralized method of content retrieval, which makes possible creative ways of content production at runtime. You can produce a custom output for the user with the name mark no matter what page he is trying to access.

If the user with the name mark is logged in then he will be presented with the following message on any application page.

Data Aquarium application framework allows dynamic manipulation and substituion of the content returned by the app to the end user.

Create a code file in ~/custom folder of your app.

Custom code file in the app created with Code On Time.

Enter the following definition of partial class ApplicationServices.

using System.Collections.Generic;
using System.Web;

namespace MyCompany.Services
{
    public partial class ApplicationServices 
    {
        public override void LoadContent(HttpRequest request, HttpResponse response, 
            SortedDictionary<string, string> content)
        {
            // Let the framework to load the file from the file system.
            // Typically the content will be retrieved from ~/app/pages folder.
            base.LoadContent(request, response, content);
            if (content.ContainsKey("File"))
            {
                // The framework has located a physical file, let's check the user identity.
                var identity = HttpContext.Current.User.Identity;
                if (identity.IsAuthenticated && identity.Name == "mark")
                {
                    // remove the original file to prevent any default parsing of its contents
                    content.Remove("File");
                    // simulate the result of parsing by providing Title and Content of the page.
                    content["PageTitle"] = "Mark, go away";
                    content["PageContent"] =
                        "<div data-app-role=\"page\">" +
                        "<h1>Mark has no access!</h1>" +
                        "<p>Please log out or close the browser!</p>" +
                        "</div>";
                }
            }
        }
    }
}

An authenticated user with a name other than mark will see the application pages as defined at design time.

A data page in the app created with Code On Time app builder.

Saturday, November 24, 2018PrintSubscribe
Blank Pages in VB + ASPX Projects

It appears that something has changed in ASP.NET configuration in the latest versions of Microsoft.NET.

Visual Basic compiler used to perform automatic binding of *.aspx.vb methods to events of the lifecycle of the *.aspx page.

It does not happen anymore. The custom code of the pages is not generated and only HTML markup is served to the clients.

The code generator uses a setting in configuration file [Documents]\Code On Time\Library\_Config\CodeOnTime.CodeDom.xml to set up AutoEventWireup attribute in aspx pages.

If you do experience a blank page issue in VB+ASPX projects, then open the file and change attribute autoEventWireup for VB provider as follows:

VB_AutoEventWireup

Save the file and re-generate your project. This will restore its normal operation.

We are still investigating this issue.

Labels: Tips and Tricks
Tuesday, November 13, 2018PrintSubscribe
Release 8.7.6.0 Hot Fix 1

The following features and bug fixes are included in release 8.7.6.0:

  • It is now possible to manually connect  1-to-1 entities in the model builder even when the foreign keys are not defined in the database.
  • Legacy ASPX page implementation does not reveal static content in Touch UI.
  • Unlimited Edition Trial  now supports cultures other than en-US.
  • Method BusinessRules.PreventDefault now accepts optional "cancelSelectedValues" argument. If set to "true" then processing of multiple values is immediately interrupted. This may be useful to avoid iteration over each selected row when the business rule has performed processing of Arguments.SelectedValues array on the first selected value
  • (Classic UI) Bootstrap pages are correctly "sized" for "lg" screen with the expected container width of 970 pixels.
  • (Classic UI) Fixed "match not defined" in _registerSpecialAction method of DataView.
  • "Left join" to "inner join" optimization is now disabled when selecting data if “Quick Find” or “Is Null” filters are detected.
  • (Touch UI) If a new lookup item is created in a from then the parent form in "edit" mode will not lose its selected key value.
  • Fixed incorrect exception reporting from forms. Exceptions were not delivered to the client if there was no transaction on the server.
  • Distinct requests to get values will override the model-defined Order By statement when creating a Group By expression.
  • (Touch UI) Import process correctly starts after the mapping of fields has been completed.
  • Fixed the error with view-level sort expression being ignored.
  • Fixed compilation issue in Standard edition apps caused by new Business Rule Builder available in Site Content.

Model Builder has been enhanced in this release with additional support for 1-to-1 entities. Borrowed/inherited required columns are displayed as bold. The legend in the Spec displays both “W” and “B” letters signifying that the field is writeable and borrowed. If a developer is manually connecting primary key of one entity to another then the 1-to-1 relationship is established.

This is a simplified model of HumanResources.Employee2 table from Adventure Works sample database. The table inherits columns from Person.Person2 and Person.BusinessEntity.

1-to-1 entity in the Model Builder of Code On Time.

The form of Employee will display writable columns from all tables of the 1-to-1 relationship and persist them in a context of a transaction.

Entering a 1-to-1 entity in the app created with Code On Time app builder.

Please note that “rowguid” and “ModifiedDate” columns were also marked as hidden in this sample.