Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

I have created a couple of custom workflow activities for SharePoint 2007 and they are working. However, I find that my custom activities share a lot of properties/methods and so I have attempted to make an inheritance structure that makes sense. Everything works like you would expect, almost.

For example, I have a logging function that I use in nearly every custom activity I write. In my base class I have:

Protected Sub Log(ByVal IsError As Boolean, ByVal Message As String, Optional ByVal AlwaysLog As Boolean = False)
    If AlwaysLog OrElse VerboseLogging Then
        WorkflowLogger.LogEvent(__ActivationProperties, IsError, Message)
    End If
End Sub

There are 2 properties, __ActivationProperties and VerboseLogging, that have to be set by the workflow for this to work. If this were the activity (not just a base class) I would declare them like this:

Public Shared __ActivationPropertiesProperty As DependencyProperty = DependencyProperty.Register("__ActivationProperties", GetType(SPWorkflowActivationProperties), GetType(LoggingActivity))

<Browsable(True)> _
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
<ValidationOption(ValidationOption.Required)> _
Public Overrides Property __ActivationProperties() As SPWorkflowActivationProperties
    Get
        Return (CType((MyBase.GetValue(LoggingActivity.__ActivationPropertiesProperty)), SPWorkflowActivationProperties))
    End Get
    Set(ByVal Value As SPWorkflowActivationProperties)
        MyBase.SetValue(LoggingActivity.__ActivationPropertiesProperty, Value)
    End Set
End Property

Public Shared VerboseLoggingProperty As DependencyProperty = DependencyProperty.Register("VerboseLogging", GetType(Boolean), GetType(LoggingActivity))

<Browsable(True)> _
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Public Overrides Property VerboseLogging() As Boolean
    Get
        Return (CType((MyBase.GetValue(LoggingActivity.VerboseLoggingProperty)), Boolean))
    End Get
    Set(ByVal Value As Boolean)
        MyBase.SetValue(LoggingActivity.VerboseLoggingProperty, Value)
    End Set
End Property

This works if the above dependencyproperty registration takes place in the class I am using, however, if I inherit from this class (the registration takes place in the base class) the properties are never set. This is true for all types of properties not just the example above.

For now I have resorted to adding this to my base class:

MustOverride Property __ActivationProperties() As SPWorkflowActivationProperties
MustOverride Property VerboseLogging() As Boolean

Then in EACH derived class I have to override those properties and provide dependencyproperty registration using the specific derived class type.

I have tried several different variations of the dependencyproperty code to try and make it generic and work with my derived classes but I am at a loss. Anyone have any experience with this? My workaround is better than redeclaring everything, but not much better. The code above is VB.NET but solutions/examples in C# are just fine. Thanks in Advance.

This question was manually migrated from StackOverflow (SharePoint Custom Activity Dependency Property Inheritance) where it earned me the Tumbleweed Badge - surely we can do better!

share|improve this question
add comment

1 Answer

You seem to be building SPD activities. My best guess would be that SPD only checks out the properties on your actual class and not the base classes that it inherits from. If so, this is quite unfixable. Too bad!

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.