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 want to build a custom activity for SPD 2010 that can extract the full url of a workflow task.

  1. I did not found something like this OOB. Did I missed something ?

  2. I wrote the following code :

    public Hashtable GetWorkflowTaskUrl(SPUserCodeWorkflowContext context, int taskItemId)
    {
        System.Diagnostics.Debugger.Break();
        var result = new Hashtable();
        result["Except"] = string.Empty;
    
        try
        {
            using (var site = new SPSite(context.SiteUrl))
            {
                using (var web = site.OpenWeb(context.WebUrl))
                {
                    var list = web.Lists[context.ListId];
                    var item = list.GetItemById(context.ItemId);
                    var wfInst = item.Workflows[context.WorkflowInstanceId];
                    var taskItem =  wfInst.TaskList.GetItemById(taskItemId);
                    result["EncodedAbsUrl"] = taskItem[taskItem.Fields.GetFieldByInternalName("EncodedAbsUrl").Id];
                }
            }
        }
        catch (Exception exc)
        {
            result["Except"] = exc.ToString();
        }
        return result;
    }
    

The code seems to work, as I can step into it. However, I'm struggling with the action.xml file :

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <WorkflowActions>
        <Action Name="Extraire l'url de la tâche"
                Category="Tâches"
                Assembly="$SharePoint.Project.AssemblyFullName$"
                ClassName="myproject.ListItemUrlResolver"
                FunctionName="GetWorkflowTaskUrl"
                AppliesTo="all"
                UsesCurrentItem="true"
                SandboxedFunction="true">
            <RuleDesigner Sentence="Recherche l'url de la tâche d'ID %1 et la stocke dans %2">
                <FieldBind Field="taskItemId" 
                           Text="Task Item ID"
                           DesignerType="Default"
                           Id="1"
                           />
                <FieldBind Field="EncodedAbsUrl" 
                           Text="Item url"
                           DesignerType="ParameterNames"
                           Id="2"
                           />
            </RuleDesigner>
            <Parameters>
                <Parameter Name="__Context"
                           Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions"
                           Direction="In"
                           DesignerType="Hide"/>
                <Parameter Name="taskItemId"
                           Type="System.Int32, mscorlib"
                           Direction="In"

                           Description="Id de l'élément de liste"
                           />
                <Parameter Name="EncodedAbsUrl"
                           Type="System.String, mscorlib"
                           Direction="Out"
                           DesignerType="ParameterNames"
                           Description="Url absolu de l'élément"/>
            </Parameters>
        </Action>
    </WorkflowActions>
</Elements>

Especially this :

<FieldBind Field="taskItemId" 
                           Text="Task Item ID"
                           DesignerType="Default"
                           Id="1"
                           />

I didn't find what I have to put in the DesignerType attribute :

  • If I put "ChooseListItem", I can't choose my current task
  • If I put "Default", I get an error telling me the default is not in the enumeration
  • If I put nothnig, same error

What I simply want, is to be able to set the parameter to the current task id within a task process;

thx in advance

share|improve this question
add comment

Your Answer

 
discard

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

Browse other questions tagged or ask your own question.