Changed Code Run activity to use generic UpdateAttributeIfNeededActivity
Few more source code comments and other minor cosmetic changesmaster
parent
fa136059fb
commit
58c857d05c
Binary file not shown.
|
@ -26,23 +26,12 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
private void InitializeComponent()
|
||||
{
|
||||
this.CanModifyActivities = true;
|
||||
System.Workflow.Activities.CodeCondition codecondition1 = new System.Workflow.Activities.CodeCondition();
|
||||
System.Workflow.ComponentModel.ActivityBind activitybind1 = new System.Workflow.ComponentModel.ActivityBind();
|
||||
System.Workflow.ComponentModel.ActivityBind activitybind2 = new System.Workflow.ComponentModel.ActivityBind();
|
||||
System.Workflow.Activities.CodeCondition codecondition1 = new System.Workflow.Activities.CodeCondition();
|
||||
System.Workflow.Activities.CodeCondition codecondition2 = new System.Workflow.Activities.CodeCondition();
|
||||
System.Workflow.Activities.CodeCondition codecondition3 = new System.Workflow.Activities.CodeCondition();
|
||||
this.CatchAndArgumentException = new System.Workflow.Activities.CodeActivity();
|
||||
this.faultHandlerActivity1 = new System.Workflow.ComponentModel.FaultHandlerActivity();
|
||||
this.faultHandlersActivity3 = new System.Workflow.ComponentModel.FaultHandlersActivity();
|
||||
this.UpdateTargetResource = new Microsoft.ResourceManagement.Workflow.Activities.UpdateResourceActivity();
|
||||
this.NoUpdateNeeded = new System.Workflow.Activities.IfElseBranchActivity();
|
||||
this.UpdateTarget = new System.Workflow.Activities.IfElseBranchActivity();
|
||||
this.NullOrInvalidGrammar = new System.Workflow.Activities.CodeActivity();
|
||||
this.CompareAndPrepareUpdate = new System.Workflow.Activities.IfElseActivity();
|
||||
this.ReadTarget = new Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity();
|
||||
this.faultHandlerActivity2 = new System.Workflow.ComponentModel.FaultHandlerActivity();
|
||||
this.ExitGracefully = new System.Workflow.Activities.CodeActivity();
|
||||
this.UpdateIfNecessary = new System.Workflow.Activities.SequenceActivity();
|
||||
this.UpdateTargetIfNeeded = new Granfeldt.FIM.ActivityLibrary.UpdateSingleValueAttributeAsNeededActivity();
|
||||
this.faultHandlersActivity2 = new System.Workflow.ComponentModel.FaultHandlersActivity();
|
||||
this.SaveResolvedParameterValue = new System.Workflow.Activities.CodeActivity();
|
||||
this.ResolveParameterValue = new Microsoft.ResourceManagement.Workflow.Activities.ResolveGrammarActivity();
|
||||
|
@ -50,84 +39,30 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
this.ConditionalUpdateTarget = new System.Workflow.Activities.IfElseBranchActivity();
|
||||
this.faultHandlersActivity1 = new System.Workflow.ComponentModel.FaultHandlersActivity();
|
||||
this.ResolveAndSave = new System.Workflow.Activities.SequenceActivity();
|
||||
this.ShouldUpdateTarget = new System.Workflow.Activities.IfElseActivity();
|
||||
this.ShouldUpdateTargetOrWorkflowData = new System.Workflow.Activities.IfElseActivity();
|
||||
this.ExecuteCode = new System.Workflow.Activities.CodeActivity();
|
||||
this.CompileCode = new System.Workflow.Activities.CodeActivity();
|
||||
this.ResolveAllParameters = new System.Workflow.Activities.WhileActivity();
|
||||
//
|
||||
// CatchAndArgumentException
|
||||
//
|
||||
this.CatchAndArgumentException.Name = "CatchAndArgumentException";
|
||||
this.CatchAndArgumentException.ExecuteCode += new System.EventHandler(this.CatchArgumentException_ExecuteCode);
|
||||
//
|
||||
// faultHandlerActivity1
|
||||
//
|
||||
this.faultHandlerActivity1.Activities.Add(this.CatchAndArgumentException);
|
||||
this.faultHandlerActivity1.FaultType = typeof(System.ArgumentNullException);
|
||||
this.faultHandlerActivity1.Name = "faultHandlerActivity1";
|
||||
//
|
||||
// faultHandlersActivity3
|
||||
//
|
||||
this.faultHandlersActivity3.Activities.Add(this.faultHandlerActivity1);
|
||||
this.faultHandlersActivity3.Name = "faultHandlersActivity3";
|
||||
//
|
||||
// UpdateTargetResource
|
||||
//
|
||||
this.UpdateTargetResource.ActorId = new System.Guid("00000000-0000-0000-0000-000000000000");
|
||||
this.UpdateTargetResource.ApplyAuthorizationPolicy = false;
|
||||
this.UpdateTargetResource.Name = "UpdateTargetResource";
|
||||
this.UpdateTargetResource.ResourceId = new System.Guid("00000000-0000-0000-0000-000000000000");
|
||||
this.UpdateTargetResource.UpdateParameters = null;
|
||||
//
|
||||
// NoUpdateNeeded
|
||||
//
|
||||
this.NoUpdateNeeded.Name = "NoUpdateNeeded";
|
||||
//
|
||||
// UpdateTarget
|
||||
//
|
||||
this.UpdateTarget.Activities.Add(this.UpdateTargetResource);
|
||||
this.UpdateTarget.Activities.Add(this.faultHandlersActivity3);
|
||||
codecondition1.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.isTargetUpdateNeeded_Condition);
|
||||
this.UpdateTarget.Condition = codecondition1;
|
||||
this.UpdateTarget.Name = "UpdateTarget";
|
||||
//
|
||||
// NullOrInvalidGrammar
|
||||
//
|
||||
this.NullOrInvalidGrammar.Name = "NullOrInvalidGrammar";
|
||||
this.NullOrInvalidGrammar.ExecuteCode += new System.EventHandler(this.NonExistingGrammarException_ExecuteCode);
|
||||
//
|
||||
// CompareAndPrepareUpdate
|
||||
//
|
||||
this.CompareAndPrepareUpdate.Activities.Add(this.UpdateTarget);
|
||||
this.CompareAndPrepareUpdate.Activities.Add(this.NoUpdateNeeded);
|
||||
this.CompareAndPrepareUpdate.Name = "CompareAndPrepareUpdate";
|
||||
//
|
||||
// ReadTarget
|
||||
//
|
||||
this.ReadTarget.ActorId = new System.Guid("00000000-0000-0000-0000-000000000000");
|
||||
this.ReadTarget.Name = "ReadTarget";
|
||||
activitybind1.Name = "CodeRunActivity";
|
||||
activitybind1.Path = "TargetResource";
|
||||
this.ReadTarget.ResourceId = new System.Guid("00000000-0000-0000-0000-000000000000");
|
||||
this.ReadTarget.SelectionAttributes = null;
|
||||
this.ReadTarget.SetBinding(Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity.ResourceProperty, ((System.Workflow.ComponentModel.ActivityBind)(activitybind1)));
|
||||
//
|
||||
// faultHandlerActivity2
|
||||
//
|
||||
this.faultHandlerActivity2.Activities.Add(this.NullOrInvalidGrammar);
|
||||
this.faultHandlerActivity2.FaultType = typeof(System.ArgumentException);
|
||||
this.faultHandlerActivity2.Name = "faultHandlerActivity2";
|
||||
//
|
||||
// ExitGracefully
|
||||
// UpdateTargetIfNeeded
|
||||
//
|
||||
this.ExitGracefully.Name = "ExitGracefully";
|
||||
this.ExitGracefully.ExecuteCode += new System.EventHandler(this.ExitGracefully_ExecuteCode);
|
||||
//
|
||||
// UpdateIfNecessary
|
||||
//
|
||||
this.UpdateIfNecessary.Activities.Add(this.ReadTarget);
|
||||
this.UpdateIfNecessary.Activities.Add(this.CompareAndPrepareUpdate);
|
||||
this.UpdateIfNecessary.Name = "UpdateIfNecessary";
|
||||
this.UpdateTargetIfNeeded.ActorId = new System.Guid("00000000-0000-0000-0000-000000000000");
|
||||
this.UpdateTargetIfNeeded.AttributeName = null;
|
||||
this.UpdateTargetIfNeeded.Name = "UpdateTargetIfNeeded";
|
||||
this.UpdateTargetIfNeeded.NewValue = null;
|
||||
this.UpdateTargetIfNeeded.TargetId = new System.Guid("00000000-0000-0000-0000-000000000000");
|
||||
this.UpdateTargetIfNeeded.TargetResource = null;
|
||||
//
|
||||
// faultHandlersActivity2
|
||||
//
|
||||
|
@ -143,10 +78,10 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
//
|
||||
this.ResolveParameterValue.GrammarExpression = null;
|
||||
this.ResolveParameterValue.Name = "ResolveParameterValue";
|
||||
activitybind2.Name = "CodeRunActivity";
|
||||
activitybind2.Path = "ResolvedParameterExpression";
|
||||
activitybind1.Name = "CodeRunActivity";
|
||||
activitybind1.Path = "ResolvedParameterExpression";
|
||||
this.ResolveParameterValue.WorkflowDictionaryKey = null;
|
||||
this.ResolveParameterValue.SetBinding(Microsoft.ResourceManagement.Workflow.Activities.ResolveGrammarActivity.ResolvedExpressionProperty, ((System.Workflow.ComponentModel.ActivityBind)(activitybind2)));
|
||||
this.ResolveParameterValue.SetBinding(Microsoft.ResourceManagement.Workflow.Activities.ResolveGrammarActivity.ResolvedExpressionProperty, ((System.Workflow.ComponentModel.ActivityBind)(activitybind1)));
|
||||
//
|
||||
// UpdateWorkflowData
|
||||
//
|
||||
|
@ -154,10 +89,9 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
//
|
||||
// ConditionalUpdateTarget
|
||||
//
|
||||
this.ConditionalUpdateTarget.Activities.Add(this.UpdateIfNecessary);
|
||||
this.ConditionalUpdateTarget.Activities.Add(this.ExitGracefully);
|
||||
codecondition2.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.ShouldUpdateTarget_Condition);
|
||||
this.ConditionalUpdateTarget.Condition = codecondition2;
|
||||
this.ConditionalUpdateTarget.Activities.Add(this.UpdateTargetIfNeeded);
|
||||
codecondition1.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.ShouldUpdateTarget_Condition);
|
||||
this.ConditionalUpdateTarget.Condition = codecondition1;
|
||||
this.ConditionalUpdateTarget.Name = "ConditionalUpdateTarget";
|
||||
//
|
||||
// faultHandlersActivity1
|
||||
|
@ -171,11 +105,11 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
this.ResolveAndSave.Activities.Add(this.faultHandlersActivity2);
|
||||
this.ResolveAndSave.Name = "ResolveAndSave";
|
||||
//
|
||||
// ShouldUpdateTarget
|
||||
// ShouldUpdateTargetOrWorkflowData
|
||||
//
|
||||
this.ShouldUpdateTarget.Activities.Add(this.ConditionalUpdateTarget);
|
||||
this.ShouldUpdateTarget.Activities.Add(this.UpdateWorkflowData);
|
||||
this.ShouldUpdateTarget.Name = "ShouldUpdateTarget";
|
||||
this.ShouldUpdateTargetOrWorkflowData.Activities.Add(this.ConditionalUpdateTarget);
|
||||
this.ShouldUpdateTargetOrWorkflowData.Activities.Add(this.UpdateWorkflowData);
|
||||
this.ShouldUpdateTargetOrWorkflowData.Name = "ShouldUpdateTargetOrWorkflowData";
|
||||
//
|
||||
// ExecuteCode
|
||||
//
|
||||
|
@ -191,8 +125,8 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
//
|
||||
this.ResolveAllParameters.Activities.Add(this.ResolveAndSave);
|
||||
this.ResolveAllParameters.Activities.Add(this.faultHandlersActivity1);
|
||||
codecondition3.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.MoreParametersToResolve_Condition);
|
||||
this.ResolveAllParameters.Condition = codecondition3;
|
||||
codecondition2.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.MoreParametersToResolve_Condition);
|
||||
this.ResolveAllParameters.Condition = codecondition2;
|
||||
this.ResolveAllParameters.Name = "ResolveAllParameters";
|
||||
//
|
||||
// CodeRunActivity
|
||||
|
@ -200,7 +134,7 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
this.Activities.Add(this.ResolveAllParameters);
|
||||
this.Activities.Add(this.CompileCode);
|
||||
this.Activities.Add(this.ExecuteCode);
|
||||
this.Activities.Add(this.ShouldUpdateTarget);
|
||||
this.Activities.Add(this.ShouldUpdateTargetOrWorkflowData);
|
||||
this.Name = "CodeRunActivity";
|
||||
this.CanModifyActivities = false;
|
||||
|
||||
|
@ -208,31 +142,13 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
|
||||
#endregion
|
||||
|
||||
private CodeActivity CatchAndArgumentException;
|
||||
|
||||
private FaultHandlerActivity faultHandlerActivity1;
|
||||
|
||||
private FaultHandlersActivity faultHandlersActivity3;
|
||||
|
||||
private CodeActivity ExitGracefully;
|
||||
|
||||
private Microsoft.ResourceManagement.Workflow.Activities.UpdateResourceActivity UpdateTargetResource;
|
||||
|
||||
private IfElseBranchActivity NoUpdateNeeded;
|
||||
|
||||
private IfElseBranchActivity UpdateTarget;
|
||||
|
||||
private IfElseActivity CompareAndPrepareUpdate;
|
||||
|
||||
private Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity ReadTarget;
|
||||
|
||||
private SequenceActivity UpdateIfNecessary;
|
||||
private UpdateSingleValueAttributeAsNeededActivity UpdateTargetIfNeeded;
|
||||
|
||||
private IfElseBranchActivity UpdateWorkflowData;
|
||||
|
||||
private IfElseBranchActivity ConditionalUpdateTarget;
|
||||
|
||||
private IfElseActivity ShouldUpdateTarget;
|
||||
private IfElseActivity ShouldUpdateTargetOrWorkflowData;
|
||||
|
||||
private FaultHandlersActivity faultHandlersActivity2;
|
||||
|
||||
|
@ -268,6 +184,12 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
// January 17, 2013 | Soren Granfeldt
|
||||
// - changed activity name from CodeActivity to CodeRunActivity
|
||||
// due to clashes with built-in naming convention
|
||||
// January 18, 2013 | Soren Granfeldt
|
||||
// - changed update to use helper update activity
|
||||
|
||||
using System;
|
||||
using System.CodeDom.Compiler;
|
||||
|
@ -175,9 +177,7 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
|
||||
public CodeRunActivity()
|
||||
{
|
||||
Debugging.Log("Enter :: Initialize");
|
||||
InitializeComponent();
|
||||
Debugging.Log("Exit :: Initialize");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -291,9 +291,10 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
else if (destinationObject.Equals("Target", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
e.Result = true;
|
||||
ReadTarget.ActorId = WellKnownGuids.FIMServiceAccount;
|
||||
ReadTarget.ResourceId = containingWorkflow.TargetId;
|
||||
ReadTarget.SelectionAttributes = new string[] { destinationAttribute };
|
||||
UpdateTargetIfNeeded.ActorId = WellKnownGuids.FIMServiceAccount;
|
||||
UpdateTargetIfNeeded.AttributeName = destinationAttribute;
|
||||
UpdateTargetIfNeeded.NewValue = codeReturnValue;
|
||||
UpdateTargetIfNeeded.TargetId = containingWorkflow.TargetId;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -302,39 +303,6 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
}
|
||||
}
|
||||
|
||||
private void isTargetUpdateNeeded_Condition(object sender, ConditionalEventArgs e)
|
||||
{
|
||||
List<UpdateRequestParameter> updateParameters = new List<UpdateRequestParameter>();
|
||||
|
||||
e.Result = false;
|
||||
object currentValue = TargetResource[destinationAttribute];
|
||||
if (object.Equals(currentValue, codeReturnValue))
|
||||
{
|
||||
Debugging.Log(string.Format("No need to update {0}. Value is already '{1}'", destinationAttribute, codeReturnValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Result = true;
|
||||
|
||||
// if code returns null then remove current value; otherwise
|
||||
// update to new value
|
||||
updateParameters.Add(new UpdateRequestParameter(destinationAttribute, codeReturnValue == null ? UpdateMode.Remove : UpdateMode.Modify, codeReturnValue == null ? currentValue : codeReturnValue));
|
||||
|
||||
Debugging.Log("Updating", containingWorkflow.TargetId);
|
||||
UpdateTargetResource.ActorId = WellKnownGuids.FIMServiceAccount;
|
||||
UpdateTargetResource.ResourceId = containingWorkflow.TargetId;
|
||||
UpdateTargetResource.UpdateParameters = updateParameters.ToArray();
|
||||
if (codeReturnValue == null)
|
||||
{
|
||||
Debugging.Log(string.Format("Removing existing value '{0}' from {1}", currentValue, destinationAttribute));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debugging.Log(string.Format("Updating {0} from '{1}' to '{2}'", destinationAttribute, currentValue == null ? "(null)" : currentValue, codeReturnValue == null ? "(null)" : codeReturnValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CatchArgumentException_ExecuteCode(object sender, EventArgs e)
|
||||
{
|
||||
// if we get here, the resolve has failed. If the value that we're
|
||||
|
@ -345,10 +313,5 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
Debugging.Log("Error: Argument Exception");
|
||||
}
|
||||
|
||||
private void ExitGracefully_ExecuteCode(object sender, EventArgs e)
|
||||
{
|
||||
Debugging.Log("Activity exited");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
|
||||
#endregion
|
||||
|
||||
private Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity ReadResource;
|
||||
//private Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity ReadResource;
|
||||
private IfElseBranchActivity UpdateWorkflowDataBranch;
|
||||
private IfElseBranchActivity UpdateTargetBranch;
|
||||
private IfElseActivity UpdateTargetOrWorkflowData;
|
||||
|
|
|
@ -121,6 +121,8 @@ namespace Granfeldt.FIM.ActivityLibrary
|
|||
|
||||
e.Result = false;
|
||||
object CurrentValue = TargetResource[this.AttributeName];
|
||||
Debugging.Log("Type current", CurrentValue == null ? "NULL" : CurrentValue.GetType().ToString());
|
||||
Debugging.Log("Type new value", this.NewValue == null ? "NULL" : this.NewValue.GetType().ToString());
|
||||
if (object.Equals(CurrentValue, this.NewValue))
|
||||
{
|
||||
Debugging.Log(string.Format("No need to update {0}. Value is already '{1}'", this.AttributeName, this.NewValue));
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,5 @@
|
|||
If you add one of the Helper workflow to an existing workflow and you get
|
||||
the error 'Cannot use custom activities - failed to load toolbox item', it may
|
||||
be because you have the target assembly Granfeldt.FIM.ActivityLibrary.dll
|
||||
in the GAC already. Try removing it from C:\Windows\Assembly
|
||||
in the GAC already. Try removing it from C:\Windows\Assembly or add
|
||||
a version with a working activity compiled into it.
|
||||
|
|
Loading…
Reference in New Issue