1
votes

I created an event receiver that should trigger a SharePoint designer workflow, however this never happens. This part of the code never evaluates to true for the guid and workflow association: if (association.BaseId == workflowGuid). I am a bit stumped and not quite sure why it's not working. Any insight would be appreciated...and my code is below. Basically when an item is added to my list, it should trigger my Sharepoint designer workflow but this never happens and I can manually start the workflow fine.

public override void ItemAdded(SPItemEventProperties properties)
{
       base.ItemAdded(properties);
       startWF(properties);
}

private void startWF(SPItemEventProperties properties)
{
       try
       {
           //bool startWF = false;
           string strWorkflowID = "{c66ff94f-ba7c-4495-82fe-e73cdd18bad9}";
           //string statusVal = properties.AfterProperties["eRequest Division"].ToString();
           SPListItem li = properties.ListItem;
           //using (SPWeb web = li.Web)
           using (SPWeb web = properties.OpenWeb())
           {
               using (SPSite site = web.Site)
               {
                   SPWorkflowManager mgr = site.WorkflowManager;
                   SPList parentList = li.ParentList;
                   //SPList list = web.Lists["Charitable and Political"];
                   SPWorkflowAssociationCollection associationCollection = parentList.WorkflowAssociations;
                   LookUpAndStart(li, mgr, associationCollection, "{c66ff94f-ba7c-4495-82fe-e73cdd18bad9}");
               }

           }

       }
       catch (Exception ex)
       {

       }
   }

private static void LookUpAndStart(SPListItem listItem, SPWorkflowManager mgr, SPWorkflowAssociationCollection associationCollection, string workflowID)
{

    foreach (SPWorkflowAssociation association in associationCollection)
    {
           Guid workflowGuid = new Guid(workflowID);
           //if (association.Name.ToLower().Equals(workflowGuid))
          //if (association.BaseId == workflowGuid)
           //if (association.BaseId.ToString("B").Equals(workflowGuid))
           if (association.BaseId == workflowGuid)
           {
               string data = association.AssociationData;
               SPWorkflow wf = mgr.StartWorkflow(listItem, association, data, true);
               break;
           }
       }
    }
  }
}
1
Empty catch clauses are a bad practise.Ondrej Tucny

1 Answers

0
votes

In my case the following was the problem.

Declarative workflows will not start automatically if the following conditions are true:

  1. The Windows SharePoint Services Web application runs under a user's domain account.
  2. The user logs in by using this domain account.
  3. The site displays the user name as System Account.