SharePoint 2007: программно запустить ошибку попадания рабочего процесса - PullRequest
2 голосов
/ 03 апреля 2011

Я хотел программно запустить рабочий процесс, когда itemAdded в Pages Library. Я делаю так:

public override void ItemAdded(SPItemEventProperties properties)
{
    SPListItem listItem = properties.ListItem;

    StartWF(listItem);
}

public void StartWF(SPListItem listItem)
{
    using(SPWeb web = listItem.Web) {
        using(SPSite site = web.Site) {
            SPWorkflowManager manager = site.WorkflowManager;
            SPList parentList = listItem.ParentList;
            SPWorkflowAssociationCollection associationCollection =
                parentList.WorkflowAssociations;

            foreach(SPWorkflowAssociation association in
                associationCollection) {
                if (association.Name == "APWFAnn2010") {
                    string data =
                        association.AssociationData;
                    SPWorkflow wf =
                        manager.StartWorkflow(listItem,
                                  association,
                                  association.
                                  AssociationData);
                }
            }
        }
    }
}

тогда я нажимаю эту ошибку " Системе не удается найти указанный файл. (Исключение из HRESULT: 0x80070002) "

"APWFAnn2010" - это имя рабочего процесса, которое я хотел запустить. Это рабочий процесс утверждения SP по умолчанию, созданный в библиотеке страниц.

Пожалуйста, помогите, спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 25 июня 2011

Вы также можете передать имя в вышеприведенную функцию, выполнив это следующим образом, и тогда у вас будет функция, которая может запустить любой рабочий процесс для любого элемента:

public void StartWF(SPListItem listItem, SPSite spSite, string wfName)  
{ 
   SPList parentList = listItem.ParentList;      
   SPWorkflowAssociationCollection associationCollection = parentList.WorkflowAssociations;        
   foreach (SPWorkflowAssociation association in associationCollection) 
   {
       if (association.Name == wfName) 
       {
           association.AutoStartChange = true;
           association.AutoStartCreate = false;
           association.AssociationData = string.Empty; 
           spSite.WorkflowManager.StartWorkflow(listItem, association,  association.AssociationData);
      }
   }
}
0 голосов
/ 07 апреля 2011

Во-первых, у вас есть using site в using web. Это должно быть наоборот - с другой стороны, я даже не вижу, как вы используете SPWeb, так зачем он там? А во-вторых, я бы немного переписал код:

public override void ItemAdded(SPItemEventProperties properties)
{
    SPListItem listItem = properties.ListItem;
    spSite = properties.OpenWeb().Site;
    spWeb = properties.Web;
    using(spSite) {
        StartWF(listItem, spSite);
    }
}

public void StartWF(SPListItem listItem, SPSite spSite)
{

    SPList parentList = listItem.ParentList;
    SPWorkflowAssociationCollection associationCollection =
        parentList.WorkflowAssociations;

    foreach(SPWorkflowAssociation association in associationCollection) {
        if (association.Name == "APWFAnn2010") {
            association.AutoStartChange = true;
            association.AutoStartCreate = false;
            association.AssociationData = string.Empty;

            spSite.WorkflowManager.StartWorkflow(listItem,
                                 association,
                                 association.AssociationData);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...