.NET Framework Source Code to be released

October 3, 2007 Leave a comment

Microsoft announced today that it will be releasing the source code for the .NET Framework in the VS 2008 time frame later this year.  No, it’s not going open source — instead it will be covered by something called the Microsoft Reference License.  The intent is to allow us lowly developers a peek into the inner workings of the framework for debugging purposes.

VS 2008 will also provide an integrated debugging environment where missing bits of source code are downloaded automatically.

Advertisements
Categories: .NET, general, technology

Pro WF on sale at Bookpool

October 2, 2007 Leave a comment

Bookpool.com has all Apress books on sale at 50% off list price. It’s a great time to pick up my Pro WF book if you don’t already have it. Since it’s also published by Apress, my .NET Interop recipes book is also on sale.

Activity Validation for Bound Properties

September 27, 2007 Leave a comment

One of the readers (Andrew) of my Pro WF book recently had a question about page 114 of the book. This page contains the code for a custom activity validator class that enforces design-time requirements. In this example, I wanted to make sure that two properties of the target activity were set at design-time.

Andrew pointed out that the code only accepts statically set values for the properties. If you set these dependency properties by binding them to another property, the validation fails. He’s right. That particular example code only demonstrates how to validate against statically set values.

To solve the problem, all you need to do is call the IsBindingSet method of the base Activity class. Here is the revised code from page 114 (Listing 3-11) that now works for statically set or bound property values:

using System;
using System.Workflow.ComponentModel.Compiler;

namespace CustomActivityComponents
{
    /// <summary>
    /// Validator for MyCustomActivity
    /// </summary>
    public class MyCustomActivityValidator : ActivityValidator
    {
        public override ValidationErrorCollection Validate(
            ValidationManager manager, object obj)
        {
            ValidationErrorCollection errors = base.Validate(manager, obj);
            //only validate a single custom activity type
            if (obj is MyCustomActivity)
            {
                MyCustomActivity activity = obj as MyCustomActivity;
                //only do validation when the activity is in a workflow
                if (activity.Parent != null)
                {
                    if (activity.MyInt == 0)
                    {
                        if (!activity.IsBindingSet(MyCustomActivity.MyIntProperty))
                        {
                            errors.Add(
                                ValidationError.GetNotSetValidationError(
                                    "MyInt"));
                        }
                    }

                    if (activity.MyString == null ||
                        activity.MyString.Length == 0)
                    {
                        if (!activity.IsBindingSet(MyCustomActivity.MyStringProperty))
                        {
                            errors.Add(new ValidationError(
                                "MyString Property is incorrect", 501));
                        }
                    }
                }
            }
            return errors;
        }
    }
}
Categories: .NET, general, technology, workflow

CE 6.0 emulator not working with VS 2005

September 5, 2007 Leave a comment

So, I’m starting to do a bit of embedded Windows development again. For this particular project, the target environment will probably be CE 6.0, so I went ahead and installed the CE 6.0 Platform Builder (eval) on my system.

My first goal was to make sure that I had a decent development environment, including a CE 6.0 emulator that I could use to test and debug my app from VS 2005. It looked like PB for CE 6.0 supported the creation of an SDK and that SDK could include an ARMV4I emulator. Great — that sounds like exactly what I needed. I quickly configured and built an OS image along with an SDK. Everything was looking good.

I installed the SDK and saw that my new CE device and emulator were available for selection within VS. Still looking good. I threw together a quick test app and hit F5 to start debugging. I selected my new emulator as the target device and waited. And waited. And waited. The emulator (version 2) started, but the OS wouldn’t deploy or boot — all I had was an emulator with a black screen and VS just sitting there hanging, trying to deploy the OS image.

Since I didn’t have much experience with this process, I figured I must be doing something wrong. Probably something very simple. After all, I was able to start the emulator and boot the image under Platform Builder, but not from my C# app in VS.

After about 2 days of researching the problem, it turns out that the KITL option in the CE 6.0 image was the problem. KITL is Kernel Independent Transport Layer and is used to debug CE devices. According to this post and a couple of others that I found, KITL and DMA (which is used by VS 2005 to communicate with a device) don’t mix very well. The solution is to turn off the “Enable KITL” option in my CE 6.0 image.

I rebuilt my image and SDK, reinstalled the SDK and tried again. This time the emulator booted up just fine, followed by my test app. Perhaps this is documented somewhere and I just missed it. In any case, thanks to Barry Bond at MS who posted this solution. He really hit one out of the park on this one (sorry).

Categories: .NET, general, technology

Visual Studio 2008 (Orcas) Feature: Instantiating Objects in WF Rules

August 28, 2007 Leave a comment

One of the new WF-related features in Visual Studio 2008 (Orcas) is the ability to new-up objects from within a rule. Previously, this seemingly simple task of creating a new object wasn’t possible within a rule. Now it is.

To illustrate this new feature, consider the following contrived example. Assume that you have a workflow that must return an instance of the following class:

using System;

namespace NewUpRules
{
    public class MyClass
    {
        public MyClass(String dayOfWeekDesc)
        {
            _dayOfWeekDesc = dayOfWeekDesc;
        }

        private String _dayOfWeekDesc;
        public String DayOfWeekDesc
        {
            get { return _dayOfWeekDesc; }
            set { _dayOfWeekDesc = value; }
        }
    }
}

Previously, your workflow could use a PolicyActivity and implement a few rules, but you would have to create an instance of this class in code instead of in the rule. However, now you can implement a rule that directly creates an instance of the object like this:

Condition:
System.DateTime.Now.DayOfWeek == System.DayOfWeek.Monday
Then Actions:
this.MyWFResult = new NewUpRules.MyClass("Starting a new work week")
Else Actions:
this.MyWFResult = new NewUpRules.MyClass("Some other day")

The MyWFResult variable is assumed to be a workflow variable that is used to return the resulting instance of MyClass to the host application.

But you’re not limited to creating objects in the rule actions. You can also new-up objects in the Condition portion of the rule. Consider this class:

using System;

namespace NewUpRules
{
    public class MyDayOfWeekChecker
    {
        private DateTime _dateToCheck;
        public MyDayOfWeekChecker(DateTime value)
        {
            _dateToCheck = value;
        }

        public Boolean IsStartOfWorkWeek
        {
            get
            {
                return (_dateToCheck.DayOfWeek == DayOfWeek.Monday);
            }
        }
    }
}

A DateTime value is passed to the constructor of this class, and an IsStartOfWorkWeek property is defined which returns a Boolean. With the VS 2008 enhancements, you can now create an instance of this class and use it in a rule condition like this:

Condition:
new NewUpRules.MyDayOfWeekChecker(System.DateTime.Now).IsStartOfWorkWeek
Then Actions:
this.MyWFResult = new NewUpRules.MyClass("Starting a new work week")
Else Actions:
this.MyWFResult = new NewUpRules.MyClass("Some other day")

Granted, this isn’t the most exciting new feature in Orcas, but I do think it is a welcomed change that improves the rules capabilities in WF. Note: All of this code works in Beta 2 of Orcas.

Creating the circular reference

August 15, 2007 Leave a comment

My colleague Larry Parker referenced this blog. So now I’ll complete the circle by referencing his.

Categories: general

Another reference

July 25, 2007 Leave a comment

Oops…In my last post, I missed this reference to my Pro WF book:

http://spsfactory.blogspot.com/2007/07/bruces-fantastic-pro-wf-windows.html

Maybe there are others out there that I just haven’t found yet.  If you’ve referenced my book on your blog or site, I’d love to know about it.

Categories: .NET, general, technology, workflow