2013 m. gruodžio 17 d., antradienis

Devexpress 13.2 Review - why bother upgrading ?

In my experience, many programmers are careful about upgrading projects to the new versions, especially when they have a application running stable for a period of time.

I'll try to upgrade an existing DX 12.x ERP/CMMS application to v13.2 and share my experiences with You, so You can know what to expect, and to answer 2 basic questions:
  • What's the pain of the upgrade ? 
  • What do You actually Gain from the upgrade

First - I want to point out one very useful feature I've been waiting for ages , and one that has been requested by most of my clients: XAF "Soft Validation". That's the first "bonus" and gain in DX 13.2

One more feature I love - You no longer need to go looking for a "project converter", it's directly in VS !!!
Woo-hoo :) and it's got new look-n-feel, which is also very nice. Plus some extra features like project list to upgrade.

The Bad: You'll need to upgrade to .Net 4+
So if You're using Click-Once or DxUpgrade machine - You need to find a way of getting .Net upgraded on Your client machines (10's, 100's of them ?). For the time being that's a show stopper for me

If you have  a solution for this - plz share it in the comments (meaning - how do You make .Net Framework updates install together with application updates ? )

After the upgrade: few errors - that's expected, but really - all pretty 'basic', and can be fixed in few minutes. So breaking changes - absolutely minimal.

like namespace change for "DevExpress.Xpo.PersistentCriteriaEvaluationBehavior" -> to -> "DevExpress.Persistent.Validation.CriteriaEvaluationBehavior" 
"No overload for method 'ValidateAll' takes 2 arguments " - that just ask You yo add a reference to specific Objectspace .

And - Hooray - The app is running. Didn't expect that :) 1+ for Devexpress team for making the transition this fluent.

So - Let's try out this 'Soft Validation' and see how it goes, and what's it worth :)

I already had an object with a Property "Description" created, and a RuleRequiredField set on it.
So All I had to do is just add the "ResultType" to the attribute descriptor. Really nice !

No breaking changes, no re-factoring, just an additional overload on the attribute constructor. 

Now, lets hit F5, and see how it works. 
I get a standard notification about the error, but it is transformed , and now has a "Ignore" button on it, allowing me to bypass the validation. 
All the icons are there, Warning signs ect.. and all this - with 1 line of code !!!

Great ! This feature alone, made my day and bought me to do the upgrade.

If You're interested in more details about this feature here's a nice post with details about WEB, Info type ect http://bit.ly/1edBp4z  and one more here.

Next comes the "Easy custom members"
So my example on this one - let's say we have a list of "Work Orders", where all of them have a field "Date Created", but what I actually want to know as a business user - is How long has that "order" been opened ? 

Well - I have to say, it's a nice way to add a calculated property, without recompile and stuff

But.. unfortunatelly..

From the business user perspective - I doubt that a person with Zero programming skills can figure this out, meaning - understand that what he or she actually needs is a DateDiff(x, y), by day, and add a proper properties to predefined place holders

From programmers perspective - well.. What I would like to do, is save this modification to the 'base' model, and have it propagated to all the application users. 

This (propagation of model changes) of course is do-able - by exploiting Expand ModelDifference but that's a topic for another post;

Verdict: This is a strong step in right direction, of enabling run-time application customization, though it might requite significant effort.

Reports 2.0
How's this useful ?

The good:

  • it allows You to 'join/merge' predefined reports made by You in VS, with 'Xaf' reports, and show them under the same 'Reports' button. More about this functionality in this video and this post 'runtime integration'. (I personally this this is great. I've personally spent way to many hour on this integration and this is really really great in terms of user experience !)
  • and what's even more exiting - it let's You edit (a copy) of the predefined report !
  • and (this is more than awesome) - You can move Your scripts to C# file - hooray :) You know longer have to code script's blindly, without the intelisense and all the help of VS environment !


  • You can't have both v.1 and v.2 simultaneously
  • Migration support from v.1 to v.2 could be better

Let's start by Adding the new module.
Notice - the new Icon, so it's easy to recognize

Few issues on the road:

  • You have to remove existing 'Reports module' 
  • You have to export Your existing reports, before adding the new module

Verdict : I must say the 'gain' of the module is pretty huge. It comes with some trouble, but in my personal opinion - it's worth it. 

XPView Support for XPObjectSpace 

Finally :) I'm beginning to repeat myself, but still, I must mention this feature, as it has huge impact on the XAF application performance. 

Why ? 
Because - as soon as You get past the first few iteration, and the application starts it life, most probably it's gonna start accumulating data quite quickly. 
What does that mean ? - It means that as soon as You have passed the barrier of the initial application adoption by the client, the next big thing is data analysis, reporting and displaying 'the same' data in various 'Views', various 'directions', various 'cuts' or 'aggregations'

And this is where XpView supports comes in very handy. According to this blog post  makes a difference from 20.000 ms   down to 9 ms. This sounds like a huge gain for me !

"Merge Changes"  

This one - is one more for the user. And for the support team, who's likely to get much less calls from the clients with text "I can't save my changes, what do I do ? "

I won't get into much detail about this module, as there's a quite descriptive Blog here and a pro video here

It's simple to implement, simple to use, and has a potentially big impact in support, especially for the new XAF users.

Final word

What I've found so far:

  • The upgrade is as smooth as possible
  • 13.2 has modules, that solve 'huge' problems, though some might require some effort to implementing
  • You should definitely Do it ! 

2 komentarai:

  1. Thanks for the notion! :)

    For performance comparisons my sample is not very accurate, but calculating records direct in the database can be an absolute life saver :)

    Greetings Manuel

  2. Tinklaraščio administratorius pašalino šį komentarą.