DotNetNuke

Blog
DotNetNuke
Thursday, October 26, 2017PrintSubscribe
DotNetNuke + Code On Time = RAD for Business

DotNetNuke Portal and Code On Time apps are great together!

Create an online presence for your business or organization with the help of DNN in minutes. Build powerful data-driven apps for your portal and fully integrate them in the DotNetNuke portal with Single Sign On (SSO). Present data directly in the portal pages or access them offline, online, and on-premises. Use the power of DotNetNuke tokens in the business logic and access control rules of your apps.

App created with Code On Time is integrated in the instance of DotNetNuke Portal.

Rapid Application Development (RAD) tools available in Code On Time will help you build the apps that can be integrated with a DNN portal even if your app is running on its own server.

The introductory video demonstrates an app integrated into a DotNetNuke instance running in Microsoft Azure cloud. The app data can be presented in the online portal, access directly, or execute in offline mode on a mobile device.

This is possible without writing a single line of code. Simply install Cloud On Time Connector for DNN extension in your portal, configure an OAuth endpoint page, and create a corresponding SaaS (Software-as-a-Service) registration record in your app.

The in-depth review of Rapid Application Development for DotNetNuke with Code on Time takes through the various aspects of integration enhanced with the video tutorials.

The tutorial covers the following subjects:

  • Configuring DNN Portal in Azure
  • Creating a Sample App with Code On Time
  • Configuring DNN for Open Authentication
  • Advanced Features (Roles and DotNetNuke tokens)
  • Rapid Application Development and Data Model Builder
  • Server-Side Technology of Code On Time apps
  • Application Programming Interfaces (APIs)
  • Data Access
  • Business Rules
  • Server Deployment
  • Client-Side Technology
  • User Inteface Design (Forms and Navigation)
  • Data Binding
  • Client Deployment

Apps created with Code On Time can also integrate with other content management systems such as SharePoint Online in Office 365.

App created with Code On Time is integrated in SharePoint Online.
Wednesday, October 18, 2017PrintSubscribe
OAuth Wizards, RTF, DNN Integration, Enhanced Quick Find, New Folder Structure, and more.

Code On Time release 8.6.6.0 brings about a new folder structure, RTF support in Touch UI, OAuth registration wizards, built-in integration with DotNetNuke, enhanced Quick Find with history and auto-suggestions. User interface of the generated apps has also changed in subtle ways.New features of Code On Time 8.6.6.0

Keep reading to find out what’s new!

Native Client Apps

The release sets up the stage for the upcoming Native Client Apps (NCA). NCA is a hybrid app composed of HTML,  JavaScript, CSS, and native platform-specific executable that can be installed on a mobile device. NCA makes HTTP requests  to the sever-side components of the application to read-write data. Apps generated with the release 8.6.6.0 have a folder structure compatible with the platform-specific executables designed and developed by our team.

New folder structure of apps created with Code On Time release 8.6.6.0

Folders css, fonts, images, js, and pages are transferred as-is to the mobile device upon installation of the app directly from the server deployment. Various application framework components were added and enhanced to support self-updatable NCA executables.

Presently Code On Time generator produces apps composed of HTML, JavaScript, CSS, and server-side code written in C# or Visual Basic. Apps are hosted on a Microsoft IIS web server and can be accessed via modern web browsers from mobile and desktop devices. Starting with the release 8.7.0.0 (see notes at the end of the post) we will introduce generation of Native Client Apps for distribution via Apple App Store, Google Play Store, and Window App Store.  Also Chromium-based native Windows Apps will be supported for Windows 7 and all other compatible versions of Microsoft OS as alternative to Windows App Store.

Theme Enhancements

The release intoduces numerous subtle Light theme enhancements. The toolbar is now a little taller. The selection indication colors are borrowed from the theme accent. Feedback response is expressed via background color changes.

New “Dark” theme will become available soon to double the theming choices. We are also considering configurable “dark” theme variations to allow custom “main” themes.

All future themes will share the same color accents.

Simple Search With SuperPowers

Quick Find has been greatly enhanced to offer search history, auto suggestions, and field level search.

Auto-suggestions in Quick Find of apps created with Code On Time

Enter the first letters of the field name separated with a colon symbol from the search sample to limit the search scope.

Field-level search in the app created with Code On Time and Touch UI

RTF (Rich Text Format)

Built-in Rich Text editor without any external dependencies is now available in Touch UI. Simply set the Text Mode property of a data field to Rich Text to enable displaying and editing of formatted content.

Built-in Rich Text Editor in a Touch UI app build with Code On Time

“See All” to Fullscreen

Summary data views will open in “fullscreen” mode when “See All” option is selected. This screenshot shows a summary view of suppliers.

Summary view of records in an app with Touch UI

A fullscreen infinite “grid” of suppliers without paging is displayed when the user taps “See All” in the right top corner or when the user taps on the pager area.

Infinite view of records in the app created with Code On Time

Previously a modal view of data items was displayed instead.

User Avatars

App administrators can now upload user photos directly into the built-in conent management system of the app. First enable CMS for your project. Next ;ogin as administrator and navigate to Site Content. Upload a custom image and set its name to the name of the corresponding user and leave .PNG or .JPG extension. Set Path to sys/users. If the user logs out and logs in again, then the image is automatically displayed on the app toolbar.

Uploading a user photo into Content Management System on an app created with Code On Time

The same mechanism is automatically engaged upon Single Sign On (SSO) with Facebook, Google, Windows Live, DotNetNuke, etc.

Automatic Focus and Modal Fullscreen

Developers are now able to set a focus on an arbitrary field in a form by specifing focus-auto tag. The field will be focused in edit/new mode.

Frequently requested feature to display forms in “fullscreen” mode is now a part of the framework. Developers can specify modal-fullscreen tag on the form view to accomplish this effect.

A fullscreen editForm1 view in edit mode with the automatic focus on the second field is shown in the screenshot.

A fullscreen form view with the focus automatically set on the second field in an app created with Code On Time

CMS + OAuth Registration

Content Management System now supports OAuth Registration wizards to enable easy registration of external OAuth providers in the apps to enable SSO and optional communication services. Custom wizard forms are now available for Facebook, Google, Windows Live, Microsoft Graph, SharePoint, Identity Server, and DotNetNuke.

Open Registration Authentication for Microsoft SharePoint is displayed below.

OAuth registration form for Microsoft SharePoint integration of an app created with Code On Time

You will find implementation of the OAuth Wizards under ~/js/surveys/cms folder. Take a look to see how the wizards are working and build your own surveys.

We will be adding more custom editors for CMS content to enable easy runtime configuration of data controllers, pages, access control rules, workflow register, and much more.

Cloud On Time Connector for DotNetNuke

An app created with any edition of Code On Time can now be integrated with a popular content management system DotNetNuke. DNN allows easy deployment of customer-facing web portals built with Microsoft.NET. 

Just a few lines of code are now included in every generated app to allow easy integration with DotNetNuke portal instances. The portal administrator must install the free module Cloud On Time Connector for DNN available on our website. The application administrator will have to configure the app for integration. Integration with DNN is discussed in details if you follow the links.

We have also developed a collection of video tutorials to provide step-by-step guidance for the process of integrating DotNetNuke and apps created with Code On Time.

Watch a brief intro to learn how to rapidly build database forms, reports, apps for DotNetNuke portals. Use the links above to find the full details and instructions.

 

Applications generated with Unlimited edition can also be integrated with Microsoft SharePoint Online (Office 365) in a similar fashion.

You may not need a full featured portal as the front end for your app, but be assured that the technology making integration with DNN and SharePoint possible has singificant implications. Soon you will be able to use Code On Time to build your own apps that act as providers of identity information such as users, roles, and various custom data properties. It will be possible to create custom business applications that outsource user/role management to the identity provider app via OAuth. Apps acting as identity consumers will not have a built-in user management and will defer authentication and authorization decisions to the identity provider application created with Code On Time.  This will greatly simplify user management and enhance application security when large collections of apps are developed. This mechanism is the core component of the upcoming Cloud Edition of the v9, the next generation app builder of mobile and desktop apps. The new Cloud Identiy component of generated apps will become the default universal option for “Authentication and Membership” instead of ASP.NET Membership.

See Also

The following bug fixes, enhancements, and new features were introduced:

  • Light theme has been enhanced to use the “grey” background for visual response on click/touch with additional accent colors from to indicate the “selected” state of the elements of user interface.
  • There is no gap between modal pages and screen edge if the screen width is less than 480px.
  • Rich Text Formatting is now available in Touch UI when the Text Mode of a data field is set to Rich Text.
  • Read Only When expression works correctly when the field is specified in the Copy property of the lookup field.
  • List/Grid/Cards display a text-only tooltip limited to 300 characters.
  • Fixed. Model Builder sets up the sort expression of the baseline data controller view grid1 according to the order of the fields.
  • Enhanced rendering on Windows 10 tablets and horizontal touch-scrolling in grid view style.
  • Property Visible When of tabbed categories works correctly in Touch UI with container-level data views and DataView fields in forms. Tabs in forms will continuosly respond to changes to the fields used in Visible When expressions. Tabs of container-level data view fields will respond only to the initial values of the master row.
  • Switching between tabs will maintain the scroll position in forms even when the tabs reveal a small amount of content to prevent “jumping” effect.
  • Forms templates created by the framework at runtime will not include data-visibility attribute on field and category elements unless there is a Visible When expression on the corresponding object of the data controller.
  • JSON serialization of dates now uses String.Format method instead of DateTime.ToString to prevent culture related exceptions for some date values.
  • Globalization scripts are now included explicitly in the framework file set under ~/js/sys/culture folder of the app. If only the en-US culture is supported in the app, then the folder does not exist. New culture files are automatically generated when globalization settings of the project are changed. Calendars Hijri and UmAlQura are incuded directly in the corresponding globalization script as needed.
  • Controller MyProfile now includes culture-specific translated resources.
  • Added German membership translations - Thank you Peter Teutsch.
  • Fixed the double selection of auto-complete with the mouse in Touch UI on Mac OSX.
  • Fixed issue with custom session state with "DELETE * FROM..."
  • OAuth login using token in cookie and auto login causing redirect loop has been fixed.
  • Added check to fix issue with EnsureFieldValues when no values are submitted (Export, Download, etc).
  • Added JSON serialization support for the fields of type “Date” to work the same as “DateTime”.
  • Application framework now implements GetIdentity, GetManifest, GetManifestFile to support the native client apps.
  • Tag focus-auto will cause the form to set the focus on the corresponding data field in the form in new/edit mode on devices with a mouse pointer.
  • Tag modal-fullscreen will cause the form view to open as “fullscreen” modal view when the screen width allow “modal” presentation.
  • Ensured that the field outputs use the proper model name when available, instead of column name.
  • Added default user roles to user accounts created by external authentication.
  • Added new OAuth Registration Surveys to SiteContent.
  • Password recovery is denied if user has "Source: \w" in the comment (i.e. came from SSO source).
  • SiteContent is now sorted by FileName, Path.
  • Disabled ASP.NET request validation. Added RequestValidationService class as a replacement.
  • Client Framework now HTML-encodes the entire request. The server-side framework HTML-decodes the request to prevent HTML injection on HTTP level.
  • DotNetNuke integration via OAuth and Cloud On Time Connector for DotNetNuke is introduced in the apps. DNN tokens are now persisted in the database. OAuthHandler can now set email separately from the username.
  • Classic UI: Mandatory dropdownlist/radiobuttonlist/listbox will display NULL option if the field value is null. This will force the user to make a choice.
  • Touch UI: "N/A" text is not displayed in mandatory dropdownlist/radiobuttonlist/listbox when the field with null value is activated. Instead the placeholer is displayed in the empty input text box.
  • Fixed. Operation "$lastweek" missing from RowFilterOperations.
  • It is now possible to use culture-specific “comma” in decimal values on iOS devices when entering numbers.
  • Fixed left sidebar shifting with glyphicon icon.
  • New methods added to SiteContentFile: WriteAllBytes, WriteAllText, Exists, Delete.
  • User pictures (avatars) can now be saved in CMS as "sys/users/[UserName].(jpg|png)".
  • Quick Find now supports auto-suggestions, history, and field-level search. Improved search results for "search anywhere" and "search in field".
  • Universal Input: Refactored for speed the implementation of "change" function that monitors lookup input.
  • Ensured application name is "/" for apps using ASP.NET membership.
  • Publish will re-ask permissions if expired or incorrect.
  • Fixed. “Required” Tooltip shows up incorrectly when the field is on an inactive tab.
  • Search On Start works in Summary mode.
  • New tag search-on-start-simple will force search to be displayed in "simple" mode instead of "advanced". Advanced is the default mode for "Search On Start".
  • Client framework ignores HTTP error codes < 0 frequently causes by user navigating away when a data request is still in progress.
  • Ensure date picker closes after selection if no time component in Touch UI.
  • Context Values are passed as External Filters to enable additional server-side analysis and filtering similar to https://codeontime.com/learn/data-controllers/fields/context-field/implicit-lookup-filters-with-filter-expression.
  • It is now again possible to specify literal values on the right side of mappings in "Context Fields" expression in Touch UI.
  • Application Framework: Legacy security attribute legacyCasModel of "trust" element is restored to enable better performance of Report Viewer on more secure Windows Servers.
  • Folder structure of generated apps has changed:.
    • All javascript goes under ~/js with /js/sys and /js/daf folders.
    • All touch CSS goes under ~/css.
    • Lowercase pages, reports, controls.
    • Method sm_ResolveScriptReference has been removed from Site.cs(vb), and instead sm.AjaxFrameworkMode = Disabled for both ASPX and HTML projects.
  • Renamed import-1.0.0.0.js to touch-import.js. Included jQuery 2.2.4 into release.

Next

Monitor our roadmap 2017 updates over this weekend to see what is coming next (Native Client Apps for mobile devices, Chromium-based client for Windows, Offline Data Processor, etc.)

    Friday, September 8, 2017PrintSubscribe
    Announcing Cloud On Time Connector for DotNetNuke

    Starting with release 8.6.6.0, apps created with any edition of Code On Time generator can be integrated with external DotNetNuke websites with the help of Cloud On Time Connector for DotNetNuke.

    Cloud On Time Connector for DotNetNuke is a ready-to-deploy module that provides OAuth 2.0 endpoints for any number of external apps created with Code On Time. It also enables application data presentation/links within the portal pages. Utilize the power of Code On Time to rapidly build database applications integrated with DotNetNuke.

    Users will also have the ability to “Login with DotNetNuke”, and use their existing DotNetNuke accounts in the Code On Time app.

    The instructions below will use the Northwind sample and a fresh instance of DNN 9.0.2 hosted on Microsoft Azure.

    Make sure to enable Content Management System for the database of your app. 

    Installing Cloud On Time Connector for DotNetNuke module

    The next step is to install the Cloud On Time Connector for DotNetNuke module into your DNN portal instance. Download the latest release of the module from the Releases page.

    Using your preferred browser, navigate to your DNN portal and sign in with a SuperUser account.

    Logging into DotNetNuke with a SuperUser  account.

    In the sidebar, hover over the gear icon and press “Extensions”.

    Opening extensions panel.

    At the top of the Extensions panel, press “Install Extension”.

    Installing a new extension.

    Upload the zip file containing the Cloud On Time Connector for DotNetNuke module.

    Uploading the extension.

    Press “Next” to confirm the package information, and press “Next” again to confirm reviewing the release notes. Accept the license, and press “Next” one more time to begin installation.

    Accepting the extension license.

    Once installation is complete, the installation report will be displayed.

    The package installed successfully.

    The module is now installed in your DotNetNuke instance.  Note that the website will restart, which may cause some delay immediately after installation.

    Configuring Authentication Endpoint

    Cloud On Time Connector for DotNetNuke can integrate any number of external applications into your DotNetNuke portal. An endpoint page with an instance of the module will need to be created in the portal for each integrated application. The developer must configure the Code On Time app and the module instance on the portal page with matching parameters to enable communications over OAuth 2.0 protocol.

    First, let’s create a publicly-accessible endpoint page.  Under the “Content” icon in the sidebar, select the “Pages” option.

    Opening the Pages panel.

    In the top right corner of the Pages panel, press “Add Page”.

    Adding a new page.

    Specify the following properties:

    Property Value
    Name end-point-app1
    URL /end-point-app1
    Display In Menu Off

    The name and URL provided above are for demonstration purposes only. You can choose any name and URL that you like.

    Under the Permissions tab, check the box to allow all users to view tab. This will enable both anonymous and authenticated users to access the page.

    Allowing all users to view the tab.

    Press “Add Page”. On the next screen, drag the page to the end of the page list.

    Positiong the page in the menu.

    The browser will then redirect to the page in edit mode. In the bottom-left corner, press the “Add Module” button.

    Adding a module to the page.

    From the Add Module screen, click on “Cloud On Time Connector”.

    Adding the "Cloud On Time Connector" module.

    Drag the floating module and drop on the first dashed placeholder in the end-point-app1 page.

    Dropping the module into the first placeholder.

    Mouse over the top right corner of the module instance on the page to reveal the control bar.  Mouse over the gear icon, and press “Settings” in the hover menu.

    Opening the settings for the module.

    Switch to the “Configuration” tab. Use the following settings:

    Property Value Explanation
    Mode Authentication Endpoint This module instance will serve to authenticate users and offer an endpoint for the Code On Time app.
    Client ID app1 The unique identifier for your Code On Time app.
    App URL [Your app URL] The location that your application is accessible from.
    example: https://cotapp1.azurewebsites.net
    Client Secret [randomly generated] A secret value used for server-to-server communications.
    example: 4eba319ad0fe41c9b1f02ae69b7466f2
    Allowed Tokens Portal:PortalName User:DisplayName A comma- or space-separated list of DNN tokens that will be passed to the app created with Code On Time at the time of user login. Optional.

    When configuration is complete, press “Update” to save your changes. Now the module instance on the page end-point-app1 has been configured to accept authentication connections.

    We will need to configure the app created with Code On Time to request authentication connections to the DotNetNuke portal.

    Navigate to your app, login as admin, and switch to the Site Content page. Press the Plus icon to create a new record.

    Adding a new Site Content record.

    Select “Open Authentication Registration”, and press OK.

    Creating a new Open Authentication Registration.

    Configure the following:

    Property Value
    Authentication DotNetNuke
    Client Id app1
    Client Secret [randomly generated secret from the module settings]
    Client Uri [Your DNN portal URL]/end-point-app1
    Redirect Uri [Public URL of your app]/appservices/saas/dnn
    Tokens Portal:PortalName User:DisplayName

    Your configuration should look like the one below:

    Open Authentication registration form has been filled out.

    Press the checkmark icon to save the new record. Your app is now configured for authentication connections with DotNetNuke portal.

    To test the connection, log out of your app.

    Logging out of the app.

    Once logged out, your app will show the login form. Notice that a new action “LOGIN WITH DOTNETNUKE” is now available.

    Login with DotNetNuke is now visible on the login form.

    Push the new action, and you will be navigated to your DotNetNuke portal. If you are not signed into your portal, the login page will be displayed.

    Redirected to the DNN login page.

    After user has logged in, the login page will redirect to the authentication endpoint. If there are no issues with the configuration, the portal and app will communicate over OAuth2.0 protocol. A user account will be created in the app membership database with the DotNetNuke username, email, roles, picture, and random password. If tokens were requested in the configuration of the app, then the values will be captured by the application.

    The DotNetNuke user has been signed in.

    If the Account Manager is enabled in the application, subsequent logins will not authenticate with DotNetNuke portal again until the user logs out. You can add “Auto Login: true” parameter to the sys/saas/dnn entry in the SiteContent table to automatically redirect unauthenticated users to DotNetNuke.

    If you have developed multiple applications, then create additional authentication endpoint pages following the instructions above for each app. Note that your apps can be deployed anywhere and do not need to physically reside on the same server as the DotNetNuke portal.

    Data Presentation in DNN Portal

    The Cloud On Time Connector for DotNetNuke module also allows displaying data from your application directly in the portal pages.

    Navigate to your DotNetNuke portal with the configured application endpoint as a SuperUser account.

    Hover over the Content icon on the sidebar, and press “Pages”.

    Opening the Pages panel.

    In the top right corner of the Pages panel, press “Add Page”.

    Adding a new page to the DNN portal.

    Specify the following properties:

    Property Value
    Name Products
    URL /products

    Switch to the Permissions tab, and check the box to allow registered users to view tab.

    Allowing registered users to access the tab.

    Press “Add Page”. On the next screen, drag to place the new page after the Home page.

    Positioning the Products page.

    You will be navigated to the new Products page. In the bottom left corner, press “Add Module”.

    Adding a module to the page.

    Select the “Cloud On Time Connector” module from the list.

    Adding the Cloud On Time Connector module.

    Drag the floating module and drop on the first dashed area in the page.

    Dropping the module onto the page.

    Hover over the gear icon above the module, and press “Settings”.

    Opening the settings for the module.

    Switch to the Configuration tab. If the authentication endpoint has already been configured, then the Mode property of this module instance will be set to “Data Presentation”. Enter the following:

    Property Value
    Mode Data Presentation
    App App1 ([your URL])
    Page URL ~/pages/products
    Height 600px
    Show Navigation false

    Press “Update” to save your changes. Proceed to refresh the page. The module will now display a grid of products.

    A grid of products is now displayed within the DotNetNuke portal

    Accessing User Tokens

    If tokens were configured for both sys/saas/dnn entry and the authentication endpoint of DotNetNuke portal, then the values can be used in the implementation of business rules in the application. For example, token “User:DisplayName” can be accessed by the following sample code:

    SQL:

    set @Result_ShowAlert = 'Hello ' + @Profile_User_DisplayName

    C#:

    Result.ShowAlert("Hello " + Convert.ToString(GetProperty("Profile_User_DisplayName")));

    Visual Basic:

    Result.ShowAlert("Hello " & Convert.ToString(GetProperty("Profile_User_DisplayName")))