eXpress App Framework Team

This Blog

News

You are welcome to test the new XAF features prior to the 17.2 release: one, two, three, four, five, five
  • XAF - New example, updated documentation on property editors and yet more updates on the Mobile UI development

    We've added a mobile property editor to the following Support Center example: How to show a hyper link (URL, email, etc.) for a business class property. The example demonstrates how to create custom data representations (hyperlinks) for your text properties. To view implementation details, open the example's page and show MobileHyperLinkStringPropertyEditor.cs/vb in the code file selector at the bottom.

    If you create and deploy a mobile XAF app using this custom editor, it will look like the following:



    We have also published numerous online documentation updates for related mobile and core XAF APIs demonstrated earlier. For instance, the following topics have been updated to describe mobile versions of property editors for various data types:

    String Properties   - Numeric Properties   - Date and Time Properties   - Boolean Properties   - Collection Properties   - Reference (Foreign Key, Complex Type) Properties   - File Attachment Properties   - Enumeration Properties   - Type Properties

    In addition to screenshots and text descriptions, the most interesting information for developers would be links to corresponding DevExtreme widgets on which these mobile property editors are based on. This documentation is not yet finished, and we hope to provide more information on extending the standard XAF mobile UI with custom-tailored editors in the coming weeks.

    Additionally, we have improved documentation that helps explain how you can register XAF property editors:

    In particular, the EditorAlias-based approach is demonstrated in the aforementioned example.


    As a side note,  I wanted to remind everyone that XAF 17.1.6 (released this week) provides a simpler way to register plugins through the new MobileApplication > AdditionalPhoneGapPlugins property (instead of the general-purpose CustomizePhoneGapConfig event). Also note that our most active customers are testing custom PhoneGap plugins integration based on the examples we published recently (onetwothree). For instance, here is how one customer from the Netherlands (thanks, Martin!) is testing

    the background geolocation tracking plugin integration in an XAF mobile app when walking with his two dogs:

    The mobile user's route on the map in a separate administrative XAF Web application

    Martin's dogs

    Should you have any questions, feel free to leave a comment. Happy XAFing!
  • How to Change the Default Data Service URL in XAF Mobile Applications at Runtime

    We've created a KB article that describes how you can extend your XAF mobile application so that can change the application's Data Service dynamically after logon:

    https://www.devexpress.com/go/XAF_Try_Mobile_DataServiceUrlSelection_v17.1_August.aspx

    This information will be helpful to those who need to supply the same application to different customers (companies). Company data should be stored separately in different databases. The database (or, to be more precise, the Data Service connected to it) should be selected in one of the following ways: 
    - The user enters his or her credentials, and the application's Data Service is changed dynamically based on the logged in user.
    - The user specifies his or her Data Service manually in the logon screen.

    It's possible that we'll extend this feature so that you'll not need to maintain separate data services for each company (a different database will be chosen dynamically), but first, we would love to learn whether the current implementation covers your specific use-case scenarios.


    Your feedback is needed!
    This is not an official feature of our Mobile UI (CTP) and our API may change in future release cycles. We are publishing this article prior to the 17.2 release to collect early user feedback and improve overall functionality. We would appreciate your thoughts on this feature once you've had the opportunity to review it. Please report any issues, missing capabilities or suggestions in separate tickets in our Support Center. Thanks for your help in advance!

    Test XAF's newest features prior to the 17.2 release!

    We want to hear what you think - please don't forget to check out my other blog posts on upcoming XAF features...
        Performance improvements (Core)
        OAuth2 authentication (Web)
        Barcode scanner (Mobile)
        Push Notifications (Mobile)
        Background Geolocation (Mobile)
  • Case-studies from ISDK LTD: building Point of Sales Terminal Network and CRM apps with XAF Web UI

    We recently published a case study regarding two ISDK web projects built with the eXpressApp Framework: https://www.devexpress.com/Home/Case-Studies/ISDK/ 

    Please note that they opted to generate their web UI using our Classic Web UI option (learn more about the other option).


    I want to thank Dmitry Kovrizhko, General Manager at ISDK LTD, for finding the time in his busy schedule to share his project with us. I first met Dmitry in person several years ago at a conference. We talked a length about his experiences with XAF and have obviously engaged one another via the DevExpress Support Center, Facebook and email since. 

    If you are considering XAF for your development needs, you may want to note the following comments from Dmitry:

    "With these tools, they didn't need to think about basic development and other things that take up time, such as database setup, low-level data layers, low-level UI drawings and so on. They basically used out-of-the box capabilities so they could focus on the core business needs."

    "About 80% of the project's objectives and features were met using the standard XAF/XPO methodology. Using our framework, ISDK could quickly and easily add modules for Appearances, Audit, Reporting, etc. The other 20% was met using common .NET and JavaScript."

    The latter point is important and something we try to emphasize with all of our customers - XAF does not pretend to be a single-point solution for everything. For over a decade, we've been focused on a true *framework,* with a solid and extendable foundation: a set of ready-to-use general best patterns and practices designed around DevExpress visual components. You can obviously use XAF "as is" or customize it to build various line-of-business applications tailored to your specific customer requirements. For more information on the XAF approach to software development, please visit the following page: eXpressApp Framework > Fundamentals > XAF Overview

    Should you have an XAF project you'd like to showcase on our site OR want to share your opinions with us, please email me. Happy XAFing

  • XAF - Background Geolocation tracking example and yet more updates on the Mobile UI development

    Another development sprint is over, and I want to publish some of our results for those interested in creating mobile apps with XAF.

    We have created an example that demonstrates the use of a mobile device positioning system via Cordova's Background Geolocation plugin and Cordova Device plugin

        https://www.devexpress.com/go/XAF_Try_Mobile_BackgroundGeoLocation_v17.1_August.aspx

    These features are helpful when you wish to automatically track the whereabouts of an XAF mobile app user and display the user's route on a map (e.g., in a separate administrative XAF Web application):


    You can test this example live with XAF v17.1.5, which we released earlier this week.


    We are completing our work on XAF's PhoneGap plugins support and as a result, we've updated our online documentation to describe basic concepts and include information about the APIs used in recent examples (onetwo). The updated topics include, but are not limited to the following:

    DevExpress.ExpressApp.Mobile > MobileApplication
        CustomizePhoneGapConfig
        RegisterClientScriptBeforeSendRequest
        RegisterClientScriptOnApplicationStart

    DevExpress.ExpressApp.Mobile > MobileWindow
        RegisterClientScriptOnDispose
        RegisterClientScriptOnHide
        RegisterClientScriptOnLoad
        RegisterClientScriptOnShow

    DevExpress.ExpressApp.Actions > ActionBaseExtensions
        GetProcessActionOnServerScript
        RegisterClientScriptOnExecute

    Concepts > Application Life Cycle > Mobile Application Life Cycle

    The next XAF version (17.1.6) will also provide a simpler way to register plugins through the new MobileApplication > AdditionalPhoneGapPlugins property instead of the general-purpose CustomizePhoneGapConfig event, but we'll focus on this and other improvements next time.

    Happy XAFing and have nice weekend!

    Test the new XAF features prior to the 17.2 release!

    We would also appreciate your thoughts on these features once you've had the opportunity to review them:
        Performance improvements (Core)
        OAuth2 authentication (Web)
        Barcode scanner (Mobile)
        Push Notifications (Mobile)
  • How to send push notifications to the XAF Mobile application using Azure Notifications Hub

    We've created a KB article that describes how to integrate push notifications into your XAF mobile application:

    https://www.devexpress.com/go/XAF_Try_Mobile_PushNotifications_17.1_July.aspx

    To help implement our solution, we used both the phonegap-plugin-push and Azure Notification Hub tool. We've opted for the latter because it is an easy-to-use, multi-platform, scaled-out push engine that allows you to make a single cross-platform API call to send targeted and personalized push notifications to any mobile platform (Android/iOS/Windows) from any cloud or on-premises backend. Of course, you can use the native APIs offered by Google/Apple/Microsoft or any other third-party notification services instead.

    Your feedback is needed!
    This is not an official feature of our Mobile UI (CTP) and our API may change in future release cycles. We are publishing this article prior to the 17.2 release to collect early user feedback and improve overall functionality. We would appreciate your thoughts on this feature once you've had the opportunity to review it. Please report any issues, missing capabilities or suggestions in separate tickets in our Support Center. Thanks for your help in advance!



    Test the new XAF features prior to the 17.2 release!

    We would also appreciate your thoughts on these features once you've had the opportunity to review them:
        Performance improvements (Core)
        OAuth2 authentication (Web)
        Barcode scanner (Mobile)
        Background Geolocation (Mobile)
  • How to use a Barcode Scanner in XAF Mobile

    We've created a KB article that describes how to scan barcodes in your XAF mobile application using the Cordova Barcode Scanner plugin

    https://www.devexpress.com/kb=T530459

    In this KB article, we'll show you how to implement an Action in a DetailView to save a scanned barcode to a current object property. Additionally, you will learn how to access the PhoneGap config file (regular XML file), add the plugin to your application and get access to the camera functionality with it.


    Your feedback is needed!
    This is not an official feature of our Mobile UI (CTP) and our API may change in future release cycles. We are publishing this article prior to the 17.2 release to collect early user feedback and improve overall functionality. We would appreciate your thoughts on this feature once you've had the opportunity to review it. Please report any issues, missing capabilities or suggestions in separate tickets in our Support Center. Thanks for your help in advance!


    Test the new XAF features prior to the 17.2 release!

    We would appreciate your thoughts on these features once you've had the opportunity to review them:
        Performance improvements (Core)
        OAuth2 authentication (Web)
        Push notifications (Mobile)
  • How to replace XAF exception handling with Logify

    With our most recent update (v17.1.4), the easiest way to integrate Logify within an XAF app is to use the LogifyAlertTraceListener API. You will find common and platform-dependent integration instructions for this recommended approach in the the following KB article https://www.devexpress.com/kb=T474018

    Please note that we are using this exact approach for our online Web and Mobile demos (available at https://www.devexpress.com/Products/NET/Application_Framework/demos.xml). As you would expect, using Logify helps us improve product stability and product quality for both XAF's Mobile UI (CTP) platform and associated demo apps https://demos.devexpress.com/XAF/MainDemoMobile.


    Logify itself is also widely used to deliver crash reports in other demos, runtime and design time tools for many DevExpress products and technologies:


    Feel free to contact us if you're already using Logify (the product is currently an invitation only beta) and want to try this new approach. We will be more than happy to provide you with the assistance needed to get started.

  • XAF - Using TestCafe for Functional Testing of Our Mobile UI

    In addition to the Mobile UI features announced last month, we've been hard at work improving the quality and stability of mobile apps generated via XAF's mobile UI platform. Specifically, we have developed an internal functional testing system based upon TestCafe and successfully used it with our internal tests apps (MainDemo.Mobile among others). This online demo also uses our new DevExpress Logify service to track exceptions and improve overall product quality.

    Frankly speaking, the main reasons we chose TestCafe was its simplicity and flexibility. TestCafe can be installed as npm package with a simple command, and its API can emulate all necessary webpage actions. We're using our own wrappers for the Selector function to find different element types:

    const activeViewSelector = Selector('.dx-active-view');
    const textboxClassName = '.dx-texteditor-input';
    //...
    this.findTextBox = function (fieldName) {
        return activeViewSelector.find('div[data-options*="name: \'' + fieldName + '\'"]').find(textboxClassName);
    }
    //...

    We've also implemented custom wrappers for TestCafe actions (click, drag, etc.) to handle the moment wherein all the activities on the page (animation, movements, queries) are complete and all required elements become visible:
    this.click = async function () {
         await this.waitElementToAppeared.apply(this, arguments);
         await this.testCafe.click.apply(this.testCafe, arguments);
         await this.wait(); 
         await checkForExceptions();
    }
    These wrappers are combined in a large helper (I will not show its full source code here) that allows us to write cleaner and more user-friendly test code. For instance, this is what a test case looks like:

    import { Selector, ClientFunction } from 'testcafe';
    import { XafMobileTestHelper } from './lib/helper';
    var helper = new XafMobileTestHelper();
    
    fixture`MainDemo.Mobile.CRUD`
    .beforeEach(async (t) => {
        helper.testCafe = t; await t.navigateTo('http://localhost/');
        await helper.switchToIframe("#simulatorFrame");
        await helper.typeText(helper.findTextBox("UserName"), "Sam", { replace: true });
        await helper.click(helper.findActionButton("Log On"));
    });
    test('Delete action(action with detail view)', async t => {
        await helper.click(helper.findNavigationMenuButton("menu"));
        await helper.click(helper.findNavigationItem('Task'));
        await helper.click(helper.findToolbarButton("New"));
        await helper.typeText(helper.findTextBox("Subject"), "Task To Delete");
        await helper.click(helper.findToolbarButton("Save"));
        await t.expect(helper.findListViewRecord("Task To Delete").exists).ok();
        await helper.click(helper.findListViewRecord("Task To Delete"));
        await helper.click(helper.findToolbarButton("Delete"));
        await helper.click(helper.findPopupActionButton("Yes"));
        await t .expect(helper.findListViewRecord("Task To Delete").exists).notOk();
    });

    Running tests and accumulating results is easy with TestCafe via a single command line:




    Our mobile tests are integrated into the advanced and CCTray-based system used for automated execution and monitoring of all our unit and functional tests:


    If you are interested in learning more about our Mobile UI (CTP), check out eXpressApp Framework > Getting Started > XAF Mobile (CTP) Tutorial and feel free to contact us with any questions or suggestions via the Support Center (https://www.devexpress.com/ask).

  • XAF - Application Performance and Improved Usability (Coming soon in v17.1)

    In this post, I'd like to highlight a few of the more interesting enhancements we've made to XAF in this release cycle.

    Platform Agnostic Notifications 

    You can now display notifications to users (e.g. confirmation messages, warnings, errors) with ease by calling the new platform-independent ShowViewStrategyBase.ShowMessage method. Depending on method parameters and target platform, your message can be represented by Outlook-like alerts, Windows 10-like toast windows or flyout panels (all powered by DevExpress WinForms Controls and/or DevExtreme HTML 5 widgets). A typical example will look something like this: 

    public class ProjectTaskController : ViewController {
        //… 
        MessageOptions options = new MessageOptions();
        options.Duration = 2000;
        options.Message = string.Format("{0} task(s) have been completed!", e.SelectedObjects.Count);
        options.Type = InformationType.Success;
        options.Web.Position = InformationPosition.Bottom;
        options.Win.Caption = "Success";
        options.Win.Type = WinMessageType.Toast;
        Application.ShowViewStrategy.ShowMessage(options);
    }

    Here are a couple of examples of the UX within Windows and XAF's Web UI:



    You can play with this feature in our FeatureCenter. This feature has been successfully test-driven since its initial preview in v16.2.5. v17.1 includes enhancements based on customer requests and offers improved stability due to extended test coverage. Be sure to visit Concepts > UI Construction > Text Notifications to learn more about possible customizations and usage limits.


    Optimized controller creation in ListPropertyEditor for detail collections

    With this release, XAF powered applications with numerous Controllers associated with detail collections load faster. That is possible because we no longer instantiate non-activated View Controllers due to TargetViewType, TargetViewNesting, TargetObjectType or TargetViewId restrictions. This optimization is automatically enabled in newly generated XAF v17.1 apps. In apps created using older XAF versions, you can set the XafApplication > OptimizedControllersCreation property manually.

    The second screenshot (B) illustrates where this improvement will be the most noticeable - a huge application with hundreds of Controllers:



    High DPI improvements

    In v17.1, desktop apps powered by XAF will offer a consistent appearance across a wide variety of high-DPI display settings. Your WinForms XAF applications will now be scaled correctly when setting the scaling factor (change text size, app and other item options) to a value greater than 100%. To enable the High DPI support, add the 'app.manifest' file to your project and enable the 'dpiAware' option. DPI-aware scaling is also enabled in XAF design-time tools.

    Other important changes

    Finally, I'd like to repost information from XAF's "Breaking Changes" section. Though not breaking changes, they are important things to consider for every single XAF user:

    BC4063 - More secure password generation algorithms for built-in security system classes are available in XAF v16.2 and v17.1
    Refer to the FIPS-compliance changes to the DevExpress.Persistent.Base.PasswordCryptographer and DevExpress.ExpressApp.Utils.ImageLoader classes KB Article for additional information.

    BC4062 - The Frame.GetController<ControllerType> method may return null when the XafApplication.OptimizedControllersCreation property is set to true
    XAF Solution Wizard now sets the XafApplication.OptimizedControllersCreation property to true for newly generated XAF projects. To avoid possible null reference exceptions in nested List Views, always check whether the Frame.GetController<ControllerType> method result is not null when the OptimizedControllersCreation property is true.

    BC4038 - WebLayoutManager - Initialization and usage of LayoutItemTemplateContainerBase descendants has been changed
    Refer to the Web Layout Manager improvements and important changes in XAF v17.1 KB Article for additional information.

  • XAF - New Maps Module and other enhancements to the Mobile UI (Coming in v17.1)

    With our new Maps module for XAF Mobile applications you can incorporate interactive maps and customize their provider and data source. You can start using this feature with the Visual Studio Toolbox and XAF designers or Solution Wizard - where you can add the new MapsMobileModule component:


    Note: You must specify the MapsMobileModule.GoogleApiKey property in the MobileApplication.cs (MobileApplication.vb) file (refer to the Get API Key article to learn more).


    This module includes both List and Property Editors designed to display, add and edit business objects such as addresses, companies or anything that implements the IMapsMarker interface on a map. The MobileMapsListEditor is the default List Editor used to display objects implementing this interface:


    Once you configure the desired ListView using the Model Editor, it will convert the default data representation from a simple list into an interactive map displaying a list of markers:


    You can also create new objects using the New Action or after a long tap on a map.

    In the DetailView, you can manually specify required coordinates or if you prefer to hide these properties, you can instead use the built-in Get Current Position command.

    In DetailView, you can force the MobileMapsPropertyEditor to display IMapsMarker business objects as a map instead of standard drop down editors:


    Minor Enhancements

    In addition to this new module, we've also worked on a number of other minor features. For instance, with v17.1, non-persistent properties will be supported in XAF Mobile and XPO OData Service. If a non-persistent property includes business logic, our OData Service will automatically execute it and return the resulting value to the client. We have also developed a functional testing system based on our TestCafe product to improve the quality of mobile apps and I hope to briefly describe this feature in a future post. You can also explore and modify our pre-built mobile application at C:\Users\Public\Documents\DevExpress Demos 17.1\Components\eXpressApp Framework\MainDemo\CS\MainDemo.Mobile\ as we made it a part of the default installation. This should help you get you up to speed with of our mobile platform. We also made numerous improvements to the online documentation, though this process is not yet finalized and there are more changes to come.

1
2 3 4 5 6 7 8 9 10
LIVE CHAT

Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383

FOLLOW US

DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, along with high-performance HTML JS Mobile Frameworks for developers targeting iOS, Android and Windows Phone. Whether using WPF, ASP.NET, WinForms, HTML5 or Windows 10, DevExpress tools help you build and deliver your best in the shortest time possible.

Copyright © 1998-2017 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners