Best practice to delegate tasks in Sharepoint

sharepointsharepoint-2010sharepoint-workflow

I'd like to create a workflow that should be a quite common scenario, but I'm not sure of the best way to do it. My company has a subsite for every project or team. Each subsite has it's own task list. If i.e. the management team wants to delegate a task to another team, how should I set up that workflow? If I create copies of the task, I'd like changes to them to be synchronized both ways, which I guess might be quite a pain implementing? I'd need one workflow creating a copy in the assigned team's task list, and then one workflow on each list checking for changes and reflecting them to the other instance of the task. Would be a little bit of a pain implementing, wouldn't it? But what are my options? I thought of making one big companywide task list and just filter the tasks based on team name or project, so I would not have to copy the task but let the owner team and the assigned team view the same task, but it ocurred that showing tasks from the parent site on a sub site isn't obvious, and when connecting the list to Outlook all the tasks for all the projects are synchronized. Maybe I could create a view for the management team called "delegated tasks" or something, collecting tasks from all sub sites having the management team as owner?

I don't know if I've misunderstood the main concepts of Sharepoint, cause even if my business cases seam very basic to me, there's never an obvious way to do it in Sharepoint…

Thanks for any input on this, Sebastian

Best Answer

The obvious choice is to provide a reassign task feature in your task edit form. If the team to whom the task has been assigned wishes to delegate the task to another team, he just has to pick the user/group from a people picker control provided in the task edit form,and click on a reassign link. In your workflow where you have the on task changed activity define the function for On_task_changed_Invoked as given below

private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
    {
string reassignContent = onTaskChanged1_AfterProperties.ExtendedProperties["DelegateTo"].ToString();
            if (!string.IsNullOrEmpty(reassignContent))
            {
                Hashtable newUser = Form.XmlToHashtable(reassignContent);

                this._delegateTo = newUser["AccountId"].ToString();

                this._isStateChanged = false;
                this._hasReassigned = true;

            }
 }
Related Topic