Just created a basic workflow and it works fine, but one obvious question came out of this - whilst approval emails would normally target a specific user or user type, any approval/rejection email notifications would likely need to go to the author of the document attached to the workflow. How does one specify the document author as the recipient of an email task - I can only select a specific user or user type?!
I'd introduce a new task and an accompanying entity UI - The task below sets the users to send to programatically by first adding the workflow instantiator and then looping all attached documents and adding their owner.
The entity UI just removes the choice of users and usertypes to send to because it doesn't make any sense in this case.
Let me know if you have any questions. I've built and tested this - you should be able to just drop the DLL into your /bin folder. I'll add this code to my next patch release as it makes perfect sense for this to be a default task!
Thanks Darren - I'll give that a go - would make a great addition as a default task!
Also, when I use a before-publish instantiation criteria I see the red speech bubble saying 'blocked by a 3rd party add-in' whereas I noticed in one of your screencasts a nicer (green) speech bubble stating that the workflow (title) had been started - how is this achieved, as it's a much nicer end user experience? Or is it simply related to what Umbraco event is used to instantiate the workflow - so impossible to achieve for publishing approval as the publish has to be blocked?
However, the sample custom email task above causes the following error in the dashboard - is this a naming conflict caused by the new entity UI?
Server Error in '/' Application.
An item with the same key has already been added.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: An item with the same key has already been added.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: An item with the same key has already been added.]
System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) +52
System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) +9382923
System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) +11
FergusonMoriyama.Workflow.Sample.InstantiatorEmailWorkflowTaskEntityUi..ctor() +35
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +0
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +72
System.Reflection.RuntimeConstructorInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +450
FergusonMoriyam.Workflow.Ui.WorkflowEntityUiResolver.Resolve(Object typeToFindUiFor) +206
FergusonMoriyam.Workflow.Ui.Factory.WorkflowTaskUiAdapterFactory.CreateWorkflowTaskUiAdapter(IWorkflowTask adaptedTask) +142
FergusonMoriyam.Workflow.Ui.Adapter.WorkflowTaskCollectionUiAdapter..ctor(IEnumerable`1 tasksToAdapt) +146
FergusonMoriyam.Workflow.Umbraco.Web.Ui.EditDesign.OnLoad(EventArgs e) +178
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207
Can you try downloading the version that is there now and copying the debug DLL in to your bin directory - I was updating the post while testing and I think our posts may have crossed.
Email task to document author?
Darren,
Just created a basic workflow and it works fine, but one obvious question came out of this - whilst approval emails would normally target a specific user or user type, any approval/rejection email notifications would likely need to go to the author of the document attached to the workflow. How does one specify the document author as the recipient of an email task - I can only select a specific user or user type?!
Thanks,
James
Hi James,
I'd introduce a new task and an accompanying entity UI - The task below sets the users to send to programatically by first adding the workflow instantiator and then looping all attached documents and adding their owner.
The entity UI just removes the choice of users and usertypes to send to because it doesn't make any sense in this case.
Let me know if you have any questions. I've built and tested this - you should be able to just drop the DLL into your /bin folder. I'll add this code to my next patch release as it makes perfect sense for this to be a default task!
I've also posted the code at: http://static.darren-ferguson.com/example.zip
using System;
using System.Collections.Generic;
using FergusonMoriyam.Workflow.Interfaces.Domain;
using FergusonMoriyam.Workflow.Umbraco.Domain;
using FergusonMoriyam.Workflow.Umbraco.Domain.Task;
using umbraco.cms.businesslogic.web;
using FergusonMoriyam.Workflow.Interfaces.Application.Runtime;
namespace FergusonMoriyama.Workflow.Sample
{
[Serializable]
public class InstantiatorEmailWorkflowTask : BaseEmailWorkflowTask, IRunnableWorkflowTask
{
public string Body { get; set; }
public void Run(IWorkflowInstance workflowInstance, IWorkflowRuntime runtime)
{
var workflow = (UmbracoWorkflowInstance) workflowInstance;
Users = new List<int> { workflow.Instantiator };
foreach(var nodeId in workflow.CmsNodes)
{
var document = new Document(nodeId);
Users.Add(document.Creator.Id);
}
SendMail(Body + Environment.NewLine + GetAttachmentLinks(workflow.CmsNodes));
runtime.Transition(workflowInstance, this, "done");
}
}
}
using System.Collections.Generic;
using FergusonMoriyam.Workflow.Umbraco.Ui.Property.Email;
using FergusonMoriyam.Workflow.Umbraco.Ui.WorkflowTaskUi;
using FergusonMoriyam.Workflow.Interfaces.Ui;
using FergusonMoriyam.Workflow.Interfaces.Application;
namespace FergusonMoriyama.Workflow.Sample
{
public class InstantiatorEmailWorkflowTaskEntityUi : BaseEmailWorkflowTaskEntityUi, IWorkflowTaskEntityUi, IGlobalisable
{
public InstantiatorEmailWorkflowTaskEntityUi() : base()
{
UiProperties = new List<IWorkflowUiProperty>
{
(IWorkflowUiProperty) CreateGlobalisedObject(typeof (SubjectPropertyUi)),
(IWorkflowUiProperty) CreateGlobalisedObject(typeof (FromPropertyUi)),
(IWorkflowUiProperty) CreateGlobalisedObject(typeof (BodyPropertyUi))
};
}
public override bool SupportsType(object o)
{
return o.GetType() == typeof(InstantiatorEmailWorkflowTask);
}
public override string EntityName
{
get { return TheGlobalisationService.GetString("my_custom_email_task"); }
}
}
}
Thanks Darren - I'll give that a go - would make a great addition as a default task!
Also, when I use a before-publish instantiation criteria I see the red speech bubble saying 'blocked by a 3rd party add-in' whereas I noticed in one of your screencasts a nicer (green) speech bubble stating that the workflow (title) had been started - how is this achieved, as it's a much nicer end user experience? Or is it simply related to what Umbraco event is used to instantiate the workflow - so impossible to achieve for publishing approval as the publish has to be blocked?
Thanks,
James
The installer should apply a patch to:
~/umbraco/umbraco.aspx
it appends the following script directly before the closing body tag:
This has the affect of making the speech bubble chain. the default behaviour is to show only one message hence the ugly error.
As you've had issues with the installer perhaps this patch wasn't applied?
Yes, that's in there OK.
However, the sample custom email task above causes the following error in the dashboard - is this a naming conflict caused by the new entity UI?
Server Error in '/' Application.
An item with the same key has already been added.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: An item with the same key has already been added.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
Thanks,
James
Hi James,
Can you try downloading the version that is there now and copying the debug DLL in to your bin directory - I was updating the post while testing and I think our posts may have crossed.
Let me know if the latest Debug DLL is OK?
Thanks.
Darren.
Darren,
All working fine now with the latest debug dll.
Many thanks,
James
Hi James,
I've updated workflow for Umbraco so the base email task - and hence all other OOTB email tasks now have two check boxes in their task properties:
Hope this helps. You can just install the latest version over the top of your old one.
is working on a reply...