Search This Blog

Friday, December 8, 2017

What's New in XAF Help 17.2

In this post, I would like to provide an overview of the most important additions to XAF documentation introduced in the 17.2 release.




Wednesday, December 6, 2017

Accessing real persistent objects through the SelectedObjects and CurrentObject properties of View and Action's event arguments when DataAccessMode = DataView or InstantFeedback

The View.CurrentObject and View.SelectedObjects properties return XafDataViewRecord objects instead of original business objects when the View operates in DataView mode (and XafInstantFeedbackRecord - in InstantFeedback mode). To get a real object, you can use the View.ObjectSpace.GetObject(obj) method.

I just wanted to remind you of this specificity and detail currently recommended solution strategies:


According to our current figures for support traffic in this regard (for one year of the InstantFeedback mode existence and more than two years of the DataView mode existence), this is not a big deal for our users - I located less than seven support requests in total. Probably, this is due to the fact that our learning materials already describe this or due to the fact that the DataView and InstantFeedback modes are used rarely, only when ListView contains a lot of records. Here I must also emphasize that this behavior exists in the first place because returning real objects by default may prevent you from getting all the benefits of these data access modes... So, we implemented the current design on purpose.

Should you have difficulties with these features and aforementioned solutions or can foresee better options, my team and I are happy to listen. For instance, one of the alternative solutions I saw in a couple places was the implementation of the auxiliary GetRealSelectedObjects/GetRealCurrentObject methods.

FreeImages.com/Gordon Fortune

How to use the ASPxSpreadsheet control as a property editor in an XAF ASP.NET WebForms application


If you want to display a business object that has a byte array property as an Excel document allowing users to modify the content and save it to the database, ASPxSpreadsheet is an appropriate component for this task. Our new example shows how to implement an XAF Web Property Editor based on this control:


If this is something you have already implemented or planned, we would greatly appreciate it if you describe your use-case scenarios or exactly how and for what your end-users are supposed to use spreadsheet control in your app. If possible, attach screenshots, test samples and database to clarify expected results and user steps within the application UI as well as already implemented solutions for this task. With that, we will be able to better understand your requirements and provide more specific solutions or consider improvements to our products for the future. Thanks in advance.

FreeImages.com/Jason Young

Tuesday, December 5, 2017

An overview of approaches to implementing a user-friendly sequential number for use with an XPO business class

Orders, Invoices, Articles or other similar business entities often require an auto-filled Number or Code field that end-users can memorize.



We have prepared a KB article listing possible approaches to implementing an identifier field with sequential values: An overview of approaches to implementing a user-friendly sequential number for use with an XPO business class. In addition to the known E4904 and E2829 approaches, the article suggests a new database-level solution.


Your feedback is needed!
We would greatly appreciate it if you share your feedback here in comments or rather participate in the short survey (~3 min) below (or in a separate window):

Friday, December 1, 2017

Capturing a user's signature in an XAF mobile application - YOUR FEEDBACK IS NEEDED!


FreeImages.com/Carl DwyerWe are in the process of creating learning materials for this task, but polishing and publishing them online for everyone will require additional time. If you are ready to test our solution for your own app, I can provide you with draft instructions and test sample in return. 
It will show how to show a custom control where a user can draw his signature and save the result into an image property within your business class. 

Here is what it looks like in action:


For testing you will need XAF v17.2.3+, because there we supported mobile custom modules: Task-Based Help > How to: Add an XAF Mobile Custom Module

If you are interested in this testing, email me at dennis@devexpress.com.

Monday, November 27, 2017

Welcome the DataStoreCreated event in the ConnectionDataStoreProvider and ConnectionStringDataStoreProvider classes

This is rather a minor improvement, but I bet it will save code lines for some advanced XAFers who touch the internals of the XPO data layer created by XAF for various low-level database-specific customization like setting connection timeouts, changing default schemas, enabling and customizing caching, service end-points, etc. Check out this updated article for some example code showing the new approach in action.
The DataStoreCreated  event is available in XAF v17.2+. Its event arguments (DataStoreCreatedEventArgs) expose the DataStore and Destination parameters that provide access to the current data store and its type (SchemaChecking,  Updating or Working).

Frankly speaking, this is quite low-level and rarely needed stuff, so we have not yet have it covered in the online docs, only in KBs. So, please refer to my 
How to customize the underlying database provider options and data access behavior in XAF article to learn more about it. Should you have any questions or additional usability suggestions, please let me know.

FreeImages/Chett Cole

How to show Color Swatches for the Bezier skin and persist the user choice in XAF WinForms apps

If you are a fan of the new SVG Bezier skin, our WinForms components received in v17.2, do not miss the XAF integration on the subject:

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

Both theWinForms and XAF teams are looking forward to hearing from you on this new feature. Learn more about this major release from our What's New documents.


Tuesday, November 21, 2017

Security - How to add OAuth2 authentication to a WinForms app



This is another example of how flexible the security module and our framework are. My colleague Michael has recently published an example on how to use the Microsoft, Google, Facebook or any compatible authentication provider within an XAF WinForms app:
https://www.devexpress.com/kb=T567978


This implementation is based on public community resources like StackOverFlow, so research the links in code comments for more details.

If you are looking for an ASP.NET example, do not miss the article we published earlier:
How to: Use Google, Facebook and Microsoft accounts in ASP.NET XAF applications (OAuth2 authentication demo)

Your feedback is needed!
Originally, we were not going to make a WinForms counterpart, because there were only a couple of requests for it + the whole scenario looked rare for desktop apps.
What is your own experience with it? Have you ever had such integration requests from your end-users? What providers do they need to cover most? Please let us know.

Monday, November 20, 2017

Another example of how Logify helps us improve quality and reflections on how it can help you even more


You might recall my previous post on how DevExpress Logify is used to deliver crash reports in demos, runtime and design time tools for many DevExpress products and technologies.
I wanted to share another real story and discuss an idea, which may improve your user experience as well.


06/28/2017 we published v17.1.4 with these changes.
07/03/2017 (5 days later), we received the first Logify report about the "Unable to cast object of type 'DevExpress.ExpressApp.Win.Layout.XafLayoutControlGroup' to type 'DevExpress.XtraLayout.LayoutControlItem'" error, because our manual and automatic tests did not cover one scenario where the new code stopped working.
07/07/2017, we fixed our code and provided intermediate builds with the fix.
Since that fix, we published 17.1.5, 17.1.6, 17.1.7, 17.1.8 updates, but I still see the same reports in Logify from users sitting on the old v17.1.4 and v16.2.8 with that already fixed bug. For instance, one of our users had this crash 17 days ago, because he is still using that v17.1.4 from 06/28/2017:


Now the improvement idea to discuss with you.

Beware of the PhoneGap's Camera and Geolocation plugins version update



I wanted to warn early adopters of the XAF Mobile UI of the recent change in https://build.phonegap.com due to the updated version of two main plugins that may stop your camera or geolocation functionality on real devices:



Check this thread for a temporary workaround until we release new minor versions with the required changes. We apologize for all the inconvenience here, because we must have been sticking to a fixed version instead of the latest one when building the application package.


Wednesday, November 15, 2017

Database maintenance recommendations for applications created or used with XPO or XAF

We have published a KB article that may help you protect the end application's data and keep the system reliable, fast and running smoothly as time goes on, application data grows and other factors are involved during the application's use in production:

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


FreeImages.com/Sebastian Danon


I hope you find this information helpful.

See Also:
How to measure and improve the application's performance

Monday, November 6, 2017

ASPxGridListEditor - How to customize the column chooser of the Web ListView's grid control

I wanted to promote the article that shows how to  increase the ASPxGridView's customization window size, because last week there were two requests for this + I searched around a dozen tickets in both XAF and ASPxGridView knowledge bases on the same subject. 



Previously, it was possible for developers to hard code the required width and height for this window.
Around v17.1, the ASPxGridView team created the AllowResize option (based on feedback from XAF users mostly) so that end-users could resize this dialog as they wish at runtime.

Currently, the AllowResize option is set to False by default, because the ASPxGridView team is afraid of breaking existing customer projects.

EDIT: The ASPxGridView has implemented AllowResize = True in v17.2 RTM by default.

I am looking forward to hearing from you on whether you or your end-users ever had problems with this so that our both teams can take this into account regarding future product updates. Thanks.

Wednesday, October 25, 2017

Beware of the situation when a signed assembly with a business type used in the dashboard changes its version


I wanted to inform our Dashboard module users about a situation, which we missed originally:
DashboardObjectDataSource serializer fails to load a data source type when signed assemblies with a changed version are used

As you understand, it may occur only when target business types used in XML dashboard definitions with ObjectDataSource are from signed assemblies and the assembly version changes, e.g. when you deliver a new app version to the client:

 <DataSources>
    <ObjectDataSource ComponentName="dashboardObjectDataSource1">
      <Name>Object Data Source 1</Name>
      <DataSource Type="YourNamespace.YourObjectType, YourAssemblyName, Version=17.1.6498.1953, Culture=neutral, PublicKeyToken=YourPublicKeyToken" />
    </ObjectDataSource>
  </DataSources>



Currently, we recommend XAF application developers try a couple of solutions described in that thread, but they are not final solutions. We are currently reviewing them from the security point of view to make sure that the app won't be broken by passing another non-signed dll. For now, this does not seem to be the case, because business type information is obtained using the ReflectionHelper API from the already loaded assemblies, which are protected by the default .NET mechanisms. We just want to double-check or see if there are more suitable options. Ideally, I wish this to be working transparently for an application developer without the need to resolve any assemblies or types manually.


Your feedback is needed!

Have you experienced this behavior in your Dashboard apps? How do you currently cope with it? If there are existing solutions, share their details and also elaborate on their costs. Your feedback is greatly appreciated.


Thursday, October 19, 2017

How to group validation rules by a business type in Model Editor

If you want the same UI as in the screenshot below:


implement a few code lines in YourSolutionName.Module/Module.cs file, as follows:

using DevExpress.ExpressApp.ModelEditor;
using DevExpress.ExpressApp.Validation;
using DevExpress.ExpressApp.Model;

namespace MainDemo.Module {
    public sealed partial class MainDemoModule : ModuleBase {
        public MainDemoModule() {
            InitializeComponent();
            ModelEditorGroupingHelper.Instance.RegisterNodeGroupPathDelegate(
            typeof(IModelValidationRules), node => DefaultGroupPathCalculator("TargetType.Name", node));
        }
        public string[] DefaultGroupPathCalculator(string propertyName, IModelNode modelNode) {
            string groupName = "";
            object propertyValue = ModelEditorGroupingHelper.Instance.GetPropertyValue(propertyName, modelNode);
            if(propertyValue != null) {
                groupName = propertyValue.ToString();
            }
            return ModelEditorGroupingHelper.Instance.SplitGroupPath(groupName, modelNode);
        }
        //...
    }
}

This is just one example of the Model Editor nodes grouping customizations that you can achieve with the ModelEditorGroupingHelper  API.

I remember our loyal customer Mario Blataric doing magic using this helper for his specific project needs (multi-level grouping of Actions by Controllers and their namespaces/functional blocks). If you have similar needs in your project, feel free to contact our support team so we can help you make your life easier.

Tuesday, October 10, 2017

ImmediatePostData attribute support in XAF Mobile v17.1.7

I am happy to inform you that starting with version 17.1.7, XAF Mobile (CTP) supports ImmediatePostDataAttribute. You can see how it works in action using our https://demos.devexpress.com/XAF/MainDemoMobile/ demo in the Payment object's View. 


You are welcome to download the latest version and test this feature in scenarios you are interested in. As usual, your feedback is greatly appreciated. Do not hesitate to submit tickets in our Support Center.

NOTE: Automatic updates will not work for non-persistent calculated reference properties due to an OData specificity.

Friday, September 15, 2017

Ways to migrate old XAF reports to the ReportsV2 module


The old Reports Module is obsolete, though it is still shipped with XAF to provide compatibility with legacy XAF applications. While we do not urge or request that our clients migrate their existing solutions to the new ReportsV2 module immediately (since the former module is valid and can be used in existing apps), we do recommend using the new Reports V2 Module  module for new projects. You can also use ReportsV2 and the previously available Reports modules within the same application if you want to maintain use of existing reports along-side of new reports generated with XAF's ReportsV2 module. 

Take special note that supporting the old module required and continues to require our resources (which are taken from new features), because dealing with the new IDEs/.NET versions is costly (not to mention changes in the underlying components). It was thus far not critical for our team to think about the removal date at this stage, but we will see how it goes in the future. So, you must definitely plan this migration for the future, but it is not that urgent. When we decide on the date with our management, we will surely communicate these plans to our customers in advance before their projects stop compiling.


To switch to the Reports V2 in your existing application, follow one of the approaches detailed below: https://www.devexpress.com/kb=T515516

FreeImages.com/Jeff Prieb

Wednesday, September 13, 2017

Simplifying the use of ASPxGridListEditor with XPO classes that have composite keys


Starting with the 17.1.4 version, you can use the built-in StructTypeConverter<T> for composite or compound key properties to enable some built-in DevExpress.Web.ASPxGridView functions in ASPxGridListEditor (e.g., inplace editing and the selection column), which would be missing without a type converter.


This converter can be applied to a struct (Structure in VB.NET) representing your complex key using the standard TypeConverterAttribute:

[TypeConverter(typeof(StructTypeConverter<CompoundKey>))]
public struct CompoundKey { ... }


You can view the full example by the documentation link above.


Despite this minor improvement making the lives of certain XAF users easier (and reducing our support costs too), I must emphasize that we do not recommend using composite keys in new apps. XPO supports such keys for legacy databases only and their use imposes some limitations on the default XAF functionality. You can learn more about this from How to create a persistent object for a database table with a compound key


FreeImages.Com/Kirill Levin

Thursday, September 7, 2017

Minor improvements to the Web editors for image and reference properties

Starting with version 17.1.6, we simplified access to the internal upload control of the ASPxImagePropertyEditor, because several users wanted to tweak it. Here is the KB Article showing how to access ASPxImagePropertyEditor's ASPxUploadControl and customize it to set the maximum file size and allowed file extensions for the uploaded images:






Starting with version 17.1.6, we added the static DefaultViewModeBehavior property and the ViewModeBehavior property to the ASPxObjectPropertyEditorBase class (the base class for ASPxLookupPropertyEditor and ASPxObjectPropertyEditor used for reference properties).

To globally disable or show links, we recommend using the static ASPxObjectPropertyEditorBase.DefaultViewModeBehavior property instead of the former ASPxObjectPropertyEditorBase.ShowLink property. For instance, you can do this in the YourSolutionName.Web/Global.asax.xx or WebApplication.xx files:

static MainDemoWebApplication() {
            DevExpress.ExpressApp.Web.Editors.ASPx.ASPxObjectPropertyEditorBase.DefaultViewModeBehavior 
                = DevExpress.ExpressApp.Web.Editors.ASPx.ObjectPropertyEditorViewModeBehavior.ShowLabel;

If it is necessary to disable or show links in a specific situation, you no longer need to inherit a custom property editor from ASPxLookupPropertyEditor; just get access to the required PropertyEditor (see Access Editor Settings) and set the ViewModeBehavior property to the ShowLabel or ShowLink value. 


How to implement the CreatedBy, CreatedOn and UpdatedBy, UpdatedOn properties in a business class

I would like to promote a KB article, which may be interesting for users who are just getting started with our application framework. This information is actually not new and it was already available in the FAQ and Reference sections of our online documentation as well as the support knowledge base.


I must emphasize that there are actually many ways to implement such auditing properties, and your current code may differ from what we show. For instance, one may declare it as "internal  set {...}" or use the PersistentAlias attribute. Just do not be at all concerned. 

You are welcome to share your own implementations in post comments - maybe we can vote for the most concise and beautiful code, eh?:-P


Friday, September 1, 2017

Focusing the newly added grid column in the Column Chooser dialog of the WinForms GridListEditor

Has anybody noticed this small improvement in XAF v17.1.5 (added as per this customer request)?
If not, check out this video to see what I am referring to:



Hopefully, this will help eliminate extra time when scrolling and searching for your end-users, especially if there are many-many columns.


We've not yet enabled this by default in DetailView and look forward to hearing your thoughts on this.

Friday, August 18, 2017

How to: Save and share custom view settings


An often scenario is when an end-user changes certain View settings (columns and editors' layout, filters, etc.) and wants to share these customizations with other users. The XAF core team has prepared an example demonstrating how to allow users to create new View Variants, persist them and load shared variants from the application database.


You can download the example source code and read the detailed description at

Your feedback is needed!
Should you face any issue using this solution or difficulty implementing it in your project, please describe your own scenario of sharing View settings. We will research this information to make the functionality better. 

Thursday, July 27, 2017

Survey (~1min): Default location of the Reset View Settings Action - YOUR FEEDBACK IS NEEDED!!!

This command is provided by the standard ResetViewSettingsController and resets all the user customizations of the View's model. It may be helpful when your client customized a lot and was stuck getting things to normal. Due to this scenario the command is available in the main menu toolbar or ribbon by default (+additionally duplicated in context menu in WinForms).



However, we wanted to hear the XAF community thoughts on this default design after receiving several user requests in this regard (examples: onetwo, three). As of now, we have no easy capability to know real usages and customizations of XAF Actions in end client apps, so we would greatly appreciate it if you participate in this and coming surveys. Thanks for your help in advance.

https://dxsurvey.com/published?id=45965fae-dfc7-48ac-af26-aee17d2c3ec4

In fact, we already asked our user preferences when this feature was in development, but did not receive much feedback back then to hide this command from the main menu by default.

Friday, July 21, 2017

Tracing - How to exclude loaded assemblies from the eXpressAppFramework.log file

Just a small tip for XAF developers who have never needed or liked this large "Loaded assemblies" section written into the eXpressAppFramework.log file at startup or every time an exception is thrown:



Friday, July 14, 2017

Controller creation performance optimization v17.2 Preview - YOUR FEEDBACK IS NEEDED!

Starting with version 17.2, we've further optimized the process of creating Controllers that should positively affect forms loading performance and thus overall end user experience, especially in very complex detail forms.  In addition to List Property Editors (learn more about v17.1 improvements in this regard), Detail, Object and Lookup Property Editors, DashboardViewItem and popup windows created in a special way were supported. We are publishing this KB article prior to the 17.2 release to collect early user feedback and improve the overall stability:





If you are an active v17.1 subscriber and want to test this feature with your real world applications on a virtual machine (or another suitable test environment) prior to the official release, please leave a comment to this KB article or rather create a separate private ticket, so that we can verify your account and provide you with a v17.2 preview installation privately.

We would appreciate your thoughts and feedback once you've had the opportunity to try this new feature in your upgraded v17.2 project. Please report any issues and suggestions in our Support Center. Thanks for your help in advance!






How To: Use Google, Facebook and Microsoft accounts in ASP.NET XAF applications (OAuth2 authentication)


XAF security team has prepared a small demo illustrating the use of  OWIN OAuth 2.0 Authorization Server. Users can log in with their Google, Facebook or Microsoft accounts.


You can download the demo source code from DevExpress Support Center:
https://www.devexpress.com/Support/Center/Example/Details/T535280/

Technical details and instructions on how to use this approach in your existing applications are available in the example description in Support Center.


Your feedback is welcome!
We would greatly appreciate it if you try this example and share your feedback here in comments.

Wednesday, July 12, 2017

What happens when the current user is deleted (by himself/herself or another user) while still using the application?

Deletion of the user who is actively using the app is NOT handled by our security module at the moment (e.g., NullReferenceException and other errors may occur). That is mainly because this operation is very rare, and so far we have not received real-life scenarios from our users where this could be useful. Moreover, deleting by accident is already prevented by showing a confirmation message by the standard DeleteObjectsViewController > DeleteAction.

Refer to this Support Center ticket for more considerations and possible custom solutions.


Your feedback is needed!
Even though we do not provide ready solutions for this specific scenario, we will be more than happy to learn more about your experience in this regard to consider improvements to our product for the future. If you needed to handle such scenarios on your own, please elaborate more on your real-life requirements and implemented solutions. Thanks in advance.


FreeImages.Com/Kirill Levin

Thursday, July 6, 2017

What's New in XAF Help 17.1.3 and 17.1.4

In this post, I would like to provide an overview of the most important additions to XAF documentation introduced after the 17.1 release.


Monday, June 26, 2017

AuditTrail - How to show the change history for the current object in a separate form instead of a nested ListView

I wanted to draw your attention to the scenario and solution in our Support Center, which were found helpful by at least 4 other XAF customers using XPO for data access. As you know, by default, we offer our users a solution based on the nested ListView, which is automatically generated when you declare a collection property like this one:

    public XPCollection<AuditDataItemPersistent> AuditTrail {
        get {
            if(auditTrail == null) {
               auditTrail = AuditedObjectWeakReference.GetAuditTrail(Session, this);
            }
            return auditTrail;
        }
    }


The solution I am promoting allows you to keep the layout less complex and invoke this rarely used or quite advanced feature from a small PopupWindowShowAction showing a ListView:


It will be interesting to hear about your preferences in this regard. Please let me know in comments. Thanks!


Thursday, June 22, 2017

How to display another web site or custom HTML inside IFRAME embedded into an XAF View

I would like to share links to the solutions for ASP.NET WebForms apps allowing you to display arbitrary HTML content in XAF Views. For instance, one may want to use it to display HTML emails in a DetailView or load a complete third-party web site. Take special note that these custom solutions are NOT based on the built-in HTML Property Editor Module and its ASPxHtmlPropertyEditor that uses the DevExpress ASPxHtmlEditor control.

The T178588 ticket describes a very basic solution for displaying a static URL within a DetailView.
The T180499  ticket provides a more complex solution where HTML content is loaded dynamically from a business class property.



Both solutions are based on a very popular way to integrate custom controls in XAF - custom View Items. A custom ViewItem is often preferred over a custom PropertyEditor when you just need to display data without editing and other capabilities. Of course, you can choose from more integration options based on your exact business requirements: Concepts > UI Construction > Using a Custom Control that is not Integrated by Default.

It would be great to hear about whether you experienced similar scenarios and which solutions you are using for them in your Web app. Please let me know in comments to this post. Thanks.

P.S.
While we are at it, it is worth noting that we do not support displaying an XAF Web app inside an IFRAME element by default.

Tuesday, June 20, 2017

Performance tuning of the saving/validation process using the PersistenceValidationController events

Regardless of how good and sophisticated your development tools are, real production use often imposes research and solving speed issues. In this tip, I will talk about tuning the Validation Module to do its best when saving a master object exposing  large collections of aggregated data. 

By default, aggregated objects are considered to be an integral part of a master object, and thus, they should be validated together with the master object, which may take significant time if you have hundreds or thousands of complex detail records. The entire detail collection will be loaded and validated in this instance.

The good news is that XAF is very flexible and has a customizable framework that provides many ways to intercept this validation process. 

Linking XAF security roles and Active Directory Security Groups by name

We have recently created a new help topic devoted to one of the popular scenarios our users described: How to: Assign the Same Permissions for All Users of an Active Directory Group. This topic demonstrates how to map XAF security roles to AD groups. When a user logs on for the first time, existing roles with names matching the user's AD group names are automatically assigned. If the user membership in AD groups was modified, the associated roles collection will be updated accordingly on the next logon. Take special note that the corresponding XAF security roles with required permissions and matching the names of AD groups must be created first!

This article also required for us to avoid confusion with the AuthenticationActiveDirectory component name, because it does not support Active Directory Security Groups out of the box.  What this component does is just allow logging by the currently logged Windows user automatically or without the logon form.  To initialize the created XAF security user record, the AuthenticationActiveDirectory authentication uses the WindowsIdentity.Name property of an object obtained via the static WindowsIdentity.GetCurrent method to get a user name in the DOMAIN\USERNAME format.

I want to point out one implementation aspect that might be unclear: why did we create a AuthenticationActiveDirectory descendant instead of handling the CustomCreateUser event, which looks simpler? The main reason for using the descendant is that with it, the synchronization of XAF security roles is easier to implement when AD groups are updated.

I hope you find this example helpful. Please let us know in comments if you experienced a similar scenario and describe how you are currently handling it. Thanks in advance!


Addition to the VisibleInXXX attributes family for controlling available types and fields in the application UI

With v16.2.6 and v17.1.3DevExpress.Persistent.Base > VisibleInReportsAttribute  can be applied to a business class property as well. When the VisibleInReports attribute is applied to a business class property, it specifies whether or not the target property is visible in the Report Designer field list.




BTW, with the introduction of the Dashboards ModuleVisibleInDashboardsAttribute was added as well. I hope you did not miss it as well.

Thursday, June 15, 2017

The recommended approach to hiding the 'Protected Content' columns and Property Editors is improved - YOUR FEEDBACK IS NEEDED!


I have recently updated the HideProtectedContentController code in the How to: Hide the 'Protected Content' Columns in a List View and Property Editors in a Detail View topic. The main change is that the HideProtectedContentController now checks if a visibility state for the target UI element is customized by existing Conditional Appearance rules before applying its own customizations.

void appearanceController_CustomApplyAppearance(object sender, ApplyAppearanceEventArgs e) {
    if(e.AppearanceObject.Visibility == null || e.AppearanceObject.Visibility == ViewItemVisibility.Show) {
        // ...
    }
}

This prevents possible conflicts with existing appearance rules.

If you are using the HideProtectedContentController code in your projects, we would greatly appreciate it if you try the updated code and share your feedback here in comments.

Please note that HideProtectedContentController may make a negative impact on the application performance in complex scenarios.

Wednesday, June 7, 2017

XPQuery changes regarding non-persistent properties in v17.1

In version 17.1, we have improved error detection in XPQuery when non-persistent properties are used in it. Previously, such queries didn't work (either failed with various exceptions or worked incorrectly) and thus there were hidden errors in your programs. Now, we throw an exception that describes which non-persistent properties are used in XPQuery to help diagnosing these errors. If such properties are used intentionally, consider implementing them using PersistentAliasAttribute or adding the ToList method call to explicitly process these properties on the client side.

Refer to the https://www.devexpress.com/kb=T523335 KB Article for examples and more details.

FreeImages.Com/sanja gjenero

Wednesday, May 31, 2017

XAF ASP.NET WebForms - Beware of the FormatException (Input string was not in a correct format) when clicking a record in a popup ListView

I want to draw your attention to the T514321: ASPxGridListEditor - FormatException is thrown when selecting an object in a lookup ListView shown from an aggregated collection issue, which is already fixed in XAF for v16.2.7/17.1.4

If you came across a similar issue (check the call stack), the highlighted thread contains the hotfix installation for v17.1.


Tip:
When you experienced an exception in DevExpress code, I recommend you locate its callstack and search for one or several topmost method names in our support database, because this behavior might be reported by someone else: https://search.devexpress.com/?q=ASPxGridViewContextMenu.SelectObject&m=SupportCenter


In addition, I recommend checking the Known Issues sections in our What's New documentation:

Tuesday, May 30, 2017

How to hide the New Action from the main menu, but still have it available inline as the New Item Row feature of ListEditor

I would like to promote a Support Center article on the subject, which I heavily updated with new code examples and implementation considerations after receiving a similar customer request yesterday.
As I found later when searching our support database, many users wanted this specific customization in nested ListViews, mainly not to overload end-users with a separate root DetailView in this inner context. I must say that I saw similar reasoning for MasterDetailMode = ListViewAndDetailView too (for this scenario, we offered a solution like this one).


I personally prefer the 2nd solution from this article, but I must admit that both solutions could be simpler, ideally. Please let our team know if you experienced a similar need and clarify exactly where and why as well as how you are solving it now. With that, we will be a better position to consider further improvements. Thanks in advance, guys!


Thursday, May 25, 2017

Improved ASPxGridListEditor performance when selecting records in the grid control


Starting with version 16.2.7, we improved the selection behavior of ASPxGridListEditor. Currently, ASPxGridView does not re-render itself when selection is changed. 

See screenshots of the Network tab in Chrome Developer Tools (F12) that demonstrates how the size and time of a response in the Opportunity_ListView of the XCRM demo is reduced. The size and time of a response is reduced about 4 times and 35% respectively.

v16.2.7, 17.1.3+












v16.2.6 and lower



Tuesday, May 23, 2017

Web - How to preserve the FullTextSearch Action filter after opening details for a record and returning back to ListView

I want to repost an interesting ASP.NET WebForms scenario and a solution for it I provided to a customer yesterday. Watch this video to see how this works:



If you are interested in having something like this, check out this Support Center thread for a relatively simple Controller.

Friday, May 19, 2017

Questions on managing the Application Model settings in the database - YOUR FEEDBACK IS NEEDED!

We are reviewing usability of the mechanism responsible for storing and managing Application Model differences in the database (aka ModelDifferenceDbStore), and hence wanted to ask you to tell us about your practical experience with it.

In order to do this, please consider these questions:
1. Differences for which levels are you currently storing in the database and how well does this work for you (shared, user, or both)?

2. Have you required customizing differences stored in the database for already deployed production apps? If so, clarify the following points:
2.1. Was this customization done for shared or user levels?

2.2. List the exact use-case scenarios that needed such customizations (e.g., a client screwed up a View layout and could not reset it back to normal)?
2.3. Which solutions and how often did you use for this customization (e.g., direct database updates, editing raw XML after enabling the Administrative UI inside the app, etc.)?
2.4. How well did your current solutions for different customizations work for you so far and what could be improved in them and why?


3. Have you considered the opportunity to customize shared or user differences using the Standalone Model Editor, which visualizes the actual differences in XML content as a nodes tree? If so, clarify the following points to help us better understand the behavior you expect from such a feature:
3.1. Do you need to customize differences for shared, user or both levels?
3.2. Taking the severeness and effect of this operation over all application users, do you think that a logon form should be shown before someone can perform this customization for security reasons? Or, how do you plan to prevent a power user from obtaining the Standalone Model Editor tool binaries and running it locally for this or even harmful purposes?


We would greatly appreciate your answering these questions or providing any other information that would help us see how the current feature works for you and what can be improved further. 

Please provide answers here in comments or rather in the Support Center to track them easier: https://www.devexpress.com/support/center/question/create
Thanks in advance.


FreeImages.com/Ronit Geller

Monday, May 15, 2017

Default XAF configuration options and feature toggles

In short post, I would like to promote the Default XAF configuration options and feature toggles knowledge base article, which lists configuration options and settings that are specified in code generated by the most recent Solution Wizard version. In most cases, these options are feature toggles used to enable new features and functionality without affecting the existing applications behavior.

FreeImages.com/John Munsch

If your XAF application is created using an older version of the Solution Wizard, you can review the KB article and enable required features manually.

With v17.1, for better discoverability and more convenience, the Solution Wizard will set the default options in a common place - the InitializeDefaults method called in the YourSolutionName.Wxx/WxxApplication.xx files. This call is wrapped in a region and contains a link to the aforementioned KB article, which will be updated in the future.

Tuesday, May 9, 2017

XAF ASP.NET WebForms v16.2 - Beware of the ArgumentException (An item with the same key has already been added) in Web Dashboards

I want to draw your attention to the T511396: Web Dashboards - ArgumentException - An item with the same key has already been added issue, which is already fixed in XAF for v16.2.7
This error can occur if the application model contains different BO Models with the same Caption and is visible in dashboards.

If you came across a similar issue (check the call stack), the highlighted thread contains a simple temporary solution (make captions different or remove the VisibleInDashboardsAttribute from classes that are not required in dashboards)  + hotfix installation.



Thursday, April 27, 2017

How to copy or clone an existing report

Today I've updated a related Support Center article where I listed several possible ways of accomplishing this task. 

I would appreciate it if you describe in comments which approach # you are using yourself or describe your own solution, if it is not listed there. Thanks in advance!

FreeImages.com/Alexander Kalina

Friday, April 21, 2017

Documentation updates with regard to ways to resize windows in XAF

We have recently updated our online documentation in this regard, so you may be interested to check it out:
    Task-Based Help > How to: Adjust the Size and Style of Pop-up Dialogs (WinForms)
    Task-Based Help > How to: Adjust the Size and Style of Pop-up Dialogs (ASP.NET)

Attentive readers could notice that the PopupWindowShowAction.CustomizePopupWindowParams event arguments now provide the new Size and Maximized properties that can be used to specify the popup window size from a platform-agnostic module in certain cases (check the end of both articles above for more details on the limitations).

Of course, these code solutions can be further improved based on your business requirements. For instance, if you want to provide a developer or application user with the capability to specify sizes in the Model Editor, you can extend required View node types (e.g., IModelView) with the Width and Height attributes in the Application Model and then modify the aforementioned code to read these attributes respectively. Refer to the eXpressApp Framework > Concepts > Application Model > Extend and Customize the Application Model in Code article for more details.


Please tell me about your experience with these solutions or about anything you would love to improve in this regard. Thanks in advance.

FreeImages.com/Carolina Rodríguez