Deployment

Labels
AJAX(112) App Studio(6) 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(8) OAuth Scopes(1) OAuth2(10) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(10) PKCE(2) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(177) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(80) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) 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
Deployment
Thursday, November 30, 2017PrintSubscribe
Changing Application Configuration

The file Web.config is the main settings and configuration database of a ASP.NET web application. The file is encoded in XML format. Code On Time generator automatically creates and configures the web.config file based on the selected project settings.

Every subsequent generation of the project will recreate the web.config file.

It may be necessary to change the web.config file to link custom component libraries or enter custom entries required for the project. The application generator allows specifying Web.Config modification instructions to manipulate the file contents.

Start the web application generator, click on the project name, and select Settings. Click on Web Server Configuration.

Web Server Configuration option on the Settings page of Code On Time web application generator.

The page of the wizard will have the Web.Config modification instructions textbox.

Web.Config modification instructions on the Web Server Configuration page.

AppendChild

The AppendChild modification instruction will add elements as children of the specified element, provided that the element exists.

For example, consider the /configuration/appSettings section of a Web Site Factory project.

<configuration>
  <appSettings>
    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
  </appSettings>
  ...
</configuration>

Insert the following snippet in the Web.Config modification instructions:

AppendChild: /configuration/appSettings

<add key="Setting1" value="Value1" />
<add key="Setting2" value="Value2" />

Generate the application. Open the web.config file, and find the new add elements. They were placed as children of /configuration/appSettings node.
<configuration>
  <appSettings>
    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
    <add key="Setting1" value="Value1" />
    <add key="Setting2" value="Value2" />
  </appSettings>
  ...
</configuration>

InsertBefore and InsertAfter

The InsertBefore modification instruction will add elements on the same level, before the specified node.

Append the previous modification instruction with the following snippet to insert the third add element before the second add element with key of “Setting1”:

InsertBefore: /configuration/appSettings/add[2]

<add key="Setting3" value="Value3" />

The web.config file will look like this:

<configuration>
  <appSettings>
    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
    <add key="Setting3" value="Value3" />
    <add key="Setting1" value="Value1" />
    <add key="Setting2" value="Value2" />
  </appSettings>
  ...
</configuration>
Alternatively, the InsertAfter instruction can be used to place the new element after the first add element with key of “ChartImageHandler”:

InsertAfter: /configuration/appSettings/add[1]

<add key="Setting3" value="Value3" />

The result will be the same.

<configuration>
  <appSettings>
    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
    <add key="Setting3" value="Value3" />
    <add key="Setting1" value="Value1" />
    <add key="Setting2" value="Value2" />
  </appSettings>
  ...
</configuration>

Delete

The Delete modification instruction will delete the element and any siblings. The nothing element is not incorporated in the web.config file but must be provided for the instruction to work.

For example, the configuration/appSettings element contains one add element by default:

<configuration>
  <appSettings>
    <add key="ChartImageHandler" value="storage=file;timeout=60;dir=c:\TempImageFiles\;" />
  </appSettings>
  ...
</configuration>

Use the following modification instructions:

Delete: /configuration/appSettings/add

<nothing/>

This will result in all add elements being removed.

<configuration>
  <appSettings />
... </configuration>

Editing an Element Property

Use the “SetAttribute” instruction to modify the value of an attribute.

For example, let’s have the application compile with debug mode enabled. The debug attribute of the compilation element is set to “false” by default:

<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.6">
    ...
    </compilation>
  </system.web>
</configuration>

Use the following instructions (each application will probably use different key tokens, so you will need to copy your own <assemblies> section):

SetAttribute: /configuration/system.web/compilation
debug: true

This will result in the following:

<compilation debug="true" targetFramework="4.0">
  <assemblies> … </assemblies>
</compilation>
Sunday, July 2, 2017PrintSubscribe
Advanced Search 3.0, Integrated Deployment, Enhanced Baskets & Lookups

Release 8.6.3.0 is here! While the revision number is minor, some major features are contained in this release.
 
First on the headline is brand new Advanced Search 3.0 for Touch UI. Major upgrades were required for the Form Rendering Engine to support dynamically created forms. Survey capabilities have been greatly expanded in order to support the functionality required for Advanced Search. 
 
One important aspect of every app is dealing with deployment. The new Publish capabilities introduced in 8.6.3.0 make it easy to get your apps running on the cloud or a dedicated server. Read on below for more information.
 
A large number of other enhancements and fixes are also included in this release.

Advanced Search 3.0

The original implementation of Advanced Search for Touch UI was a custom solution. The introduction of modal pages in release 8.6.0.0 necessitated a rewrite of the functionality. The new implementation in release 8.6.3.0 brings integration with the latest features available in Touch UI - lookups, basket lookups, date inputs, modal forms, surveys, and custom form templates.
 
The new default layout for Advanced Search will read a story to the user. Use Tab, Enter, or arrow keys to quickly navigate through field values. Push Enter key to perform the Search.
 
Advanced Search 3.0 now correctly handles typed inputs. A date picker will be displayed for date fields. Lookups are used for every field to allow the user to select existing values.
 
image
 
For fields in a “Match All” group, the lookups will be cross-dependent on each other and apply filters to available values based on the current selection. This greatly helps the user explore and understand the dataset without having to perform searches.

Integrated Publishing/Deployment

A major step of every app is to deploy it to the web. Release 8.6.3.0 makes it easy to bring the app to your users with the push of a button.
 
The “Publish” action in previous releases would simply compile the app and open the target folder. In the new release, the action will now display the list of options below.
  image

The “File System” option allows publishing directly a folder in the file system.
 
image
 
The “FTP” option allows publishing the app directly to an FTP-enabled server.
 
image

Publishing to Microsoft Azure is covered in great details in the brand new tutorials at  

https://www.youtube.com/playlist?list=PLy2g3SjvDe2YbSdvoXilUh9BvkllO50jh

Integrated publishing to the cloud if the foundation of the mobile application deployment in the upcoming release 8.7.0.0.  Only Code On Time will allow creating a server-side application that becomes automatically mobile and capable of working entirely offline in the release 8.8.0.0. Consult our roadmap for more details at http://codeontime.com/roadmap.

Each Publish option offers the ability to specify overrides for app settings that will be applied when Publish is complete. Here are some of the options:

  • Primary and membership connection strings
  • Enabling remote debug messages
  • Blob adapter configurations

Support for Microsoft Visual Studio 2017

The app generator now fully supports Visual Studio 2017.

Rich Text Format

Support for rich text has been now introduced in the grid, list, and cards presentation styles. Forms display a keyboard freindly rich text editor. We will be making a few enhancements in the follow-up releases (toolbar, formattings options, etc.) in the coming weeks.

Identity Server OAuth Provider

You can now use Identity Server 4 for the purpose of user authentication based on Microsoft Identity technology.

Microsoft Graph OAuth Provider (Windows Live, Outlook, Office, SharePoint, Azure AD)

This releases also introduces new options that allow authentication of users via Microsoft Azure Active Directory. We are preparing video tutorials that will explain how that works.

Additional Enhancements

  • Baskets are now displaying the selected items inline with the text input for a more compact presentation. Selected options are eliminated from the list of options available for selection.
  • Powerful client-side caching in database lookups brings performance of applications to a new level.
  • Changing models will no longer rebuild data model from the database - much faster for users using remote database servers.
  • Project backups are now zipped, reducing Backup folder size by ~90%.
  • Published projects are now backed up and zipped.
  • New ServiceRequestHandler class allows extending “_invoke” API with new custom handlers.
    Web.config modification instructions now support “SetAttribute” command. See example below:
        SetAttribute: /configuration/system.web/pages
        validateRequest:false
  • Azure Blob Adapter updated to use API version 2015-12-11.
  • Sitemaps defined in CMS now support “CSS Class” property.
  • It is now possible to control default modal behavior using touch-settings.json file using “ui.modal.max” and “ui.modal.when” properties.. See example below:
    {
      "ui": {
        "modal": {
          "max": "lg",
          "when": "sm"
        }
      }
    }
  • Added ability to set thumbnail size in touch-settings.json using the “ui.thumbnail.width” and “ui.thumbnail.height” properties.
  • New icons in the app generator.
  • Warning shown under connection string when it differs from the membership connection string.
  • Only one connection string is created in web.config if primary and membership connection string are equal.
  • Updated translations for Portuguese - thank you Nielsen Batista!
  • Updated translations for German - thank you Peter Teutsch!
  • Added tag “lookup-collapsible” to automatically collapse ListBox and RadioButtonList controls when the user makes a selection. A  chevron is displayed to expand the lookup again.
  • Custom button support in surveys.
  • ExportBase.ToClientUrl() is now overridable to allow customization of IQY files.
  • Calendar Input will focus next field after the date is selected on DateTime fields on desktop devices.
  • Basket lookups will hide values that have already been selected.
  • Lookup controls will expand faster to ensure text does not scroll as the user types.
  • Enhanced support for conversion of strings to date values. For example, type in “011215” to get Jan 12, 2015.
  • Close button added to Calendar Input when mouse is primary pointer.
  • Blob Adapter values are stored in the web.config as app settings.
  • Many-to-many field processing is moved before “After” business rules, and after “Before” business rules, to ensure rules use the correct values.
  • Tag “open-on-tap” will open a lookup dropdown instead of focusing on text input.
  • Tag “lookup-distinct” allows reducing the available lookup options to distinct values.
  • Custom JavaScript files will now be read and appended to the framework when placed under ~/js folder. ApplicationServices.ConfigureScripts() allows controlling which scripts are included.
  • Custom Cascading Stylesheet files (CSS) will be read and appended to the library when placed under ~/css folder.
  • Surveys are now loaded from ~/js/surveys folder. When using survey called “mysurvey”, API will pick up files in this order:
  • Survey definition: mysurvey.min.js, mysurvey.js
  • Survey rules: mysurvey.rules.min.js, mysurvey.rules.js
  • Survey template: mysurvey.html
     

Miscellaneous Fixes:

  • Fixed dedicated login redirect issue with projects using ASPX page implementation.
  • Fixed issue “Error 500: Dangerous request in form” when a form is submitted with HTML formatted values.
  • Fixed issue with Membership Manager not updating LoweredRoleName column.
  • Fixes with page sizing after device rotation.
  • Custom Membership supports optional PasswordQuestion/Answer.
  • Charts are now supported with custom controllers.
  • Blob Adapters with Source Field value containing spaces is now supported.
  • MyProfileBusinessRules properly inherits from SharedBusinessRules when the feature is enabled.
  • Fixed “Unable to get property ‘1’ of undefined” error in Project Designer.
  • Disabled discard changes prompt in MyProfile controller.
  • Fixed issue with Model class objects using Turkish “i” in field names.
  • Export action ignores DataView fields.
  • Tag “action-call-disabled” now works.
Friday, August 26, 2016PrintSubscribe
Deploying Web Site Factory Project to Azure

Microsoft Azure is composed of a collection of integrated cloud services. It enables easy storage of databases and deployment of web applications to the Internet, without having to deal with the hassle of infrastructure maintenance. When it comes time to offer your application to a larger number of users, your services can be scaled easily to fit your needs. Azure offers pay-as-you go services to scale up or down to match demand.

Let’s deploy a sample Northwind Web Site Factory project to Azure using Visual Studio 2015.

Start the app generator, click on the project name, and press “Develop” to open the project in Visual Studio.

Opening Northwind project in Visual Studio.

In the Solution Explorer (F4), right-click on the “WebSite” node and press “Publish Web App”.

Publishing a web app from Visual Studio.

In the list of publish targets, select “Microsoft Azure App Service”.

Publishing to Microsoft Azure App Service.

If you have not logged into your Microsoft account, enter your credentials in the login window that appears and proceed to log in.

In the App Service window, press “New..” to create a new resource group for your application.

Creating a new resource group for Azure.

Assign a Web App Name to this deployment. Next to App Service Plan, press “New…”.

Specifying a web app name and app service plan for the azure deployment.

Select an app service plan suitable for your deployment. Every tier provides different compute capabilities and features at different price points.

Please note that a dedicated (non-shared) app service plan must be selected in order for reports to be generated. The smallest available size that enables the use of reporting is “Basic – 1” (B1).

Configuring an app service plan for the web app.

Press “OK” to save the app service plan. Then, click “Create” to create the required Azure resources.

When the process is complete, the Publish screen will open with pre-filled values. Leave the values as default and press “Next” to configure settings.

The Publish configuration has been automatically populated.

Check the box next to “Remove additional files at destination”. This will ensure that the deployment directory will match the local directory.

Enabling removal of additional files at the destination.

Press “Publish” to deploy your application to the cloud. When publish is complete, the application will open in your default web browser.

Including Report Viewer DLLs

If Reporting is enabled in the web application, a server error will be displayed. ReportViewer DLLs must be included in the published app.

Open File Explorer by pressing Win+E, and navigate to

C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms

Open the folder for the version of Report Viewer required by your application. Applications using “.NET 4.6” require version 12.

Right-click on the DLL file and press “Copy”.

Creating a copy of the ReportViewer DLL.

In Visual Studio’s Solution Explorer, right-click on “WebSite” project node and press “Add | New Folder”.

Adding a new folder to the project.

Assign the name “bin” to the folder. Right-click on the new folder and press “Paste”.

Pasting Report Viewer DLL to the bin folder.

The DLL will copy into the “bin” folder.

Copy two more DLLs, found at these locations:

  1. C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common
  2. C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.ProcessingObjectModel

Next, re-publish the app by right-clicking on the “WebSite” node and pressing “Publish Web App”.

Publishing the web app with report viewer DLLs.a

Then, press “Publish” to initiate the process. Once complete, the app will open in your web browser and open the home page of your application running in the cloud.