Действия настраиваемого рабочего процесса sharepoint ничего не делают, даже сообщения журнала

Я пытаюсь создать настраиваемое действие рабочего процесса, которое дает мне список получателей, которые я сохраняю в списке. Но после развертывания и запуска рабочего процесса ничего не происходит, даже не приходят сообщения журнала. Итак, я попытался отладить код, но точки останова не установлены, и я получаю сообщение об ошибке «Точка останова в настоящее время не будет достигнута. Для этого документа не загружены символы». Может ли кто-нибудь помочь мне разобраться с этой проблемой.

Ниже приведены шаги, которые я выполнил при создании этого занятия. 1. создал библиотеку действий рабочего процесса. (пожалуйста, найдите прикрепленный файл с моим кодом)

  1. добавил .dll в GAC
  2. обновлены файлы web.config и WSS.actions.
  3. Теперь я вижу действие в конструкторе, поэтому я создал рабочий процесс с помощью конструктора.
  4. запустил рабочий процесс вручную для элемента.

Здесь ничего не происходит, даже ошибки. Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.

Пожалуйста, найдите код ниже.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Linq;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;
using Microsoft.SharePoint;
using System.Diagnostics;
using Microsoft.SharePoint.Workflow;
using Microsoft.SharePoint.WorkflowActions;

namespace CustomWorkflowActivityLibrary
{
    public partial class CustomWorkflowActivity: SequenceActivity
    {
        SPList _list;
        private EventLog _log;
        SPFieldUserValueCollection objUserFieldValueCol;
        string semailsettingKeyword1;
        string semailsettingKeyword2;
        public CustomWorkflowActivity()
        {
            InitializeComponent();
        }

        public static DependencyProperty __ContextProperty = DependencyProperty.Register("__Context", typeof(WorkflowContext), typeof(CustomWorkflowActivity));
        [DescriptionAttribute("__Context")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]

        public WorkflowContext __Context
        {
            get { return ((WorkflowContext)(base.GetValue(CustomWorkflowActivity.__ContextProperty))); }
            set { base.SetValue(CustomWorkflowActivity.__ContextProperty, value); }
        }
        public static DependencyProperty ListIdProperty = DependencyProperty.Register("ListId", typeof(string), typeof(CustomWorkflowActivity));
        [DescriptionAttribute("ListId")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        public string ListId
        {
            get { return ((string)(base.GetValue(CustomWorkflowActivity.ListIdProperty))); }
            set { base.SetValue(CustomWorkflowActivity.ListIdProperty, value); }
        }
        public static DependencyProperty ListItemProperty = DependencyProperty.Register("ListItem", typeof(int), typeof(CustomWorkflowActivity));
        [DescriptionAttribute("ListItem")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        public int ListItem
        {
            get { return ((int)(base.GetValue(CustomWorkflowActivity.ListItemProperty))); }
            set { base.SetValue(CustomWorkflowActivity.ListItemProperty, value); }
        }
        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
        }
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            _log = new EventLog("Add Description");
            _log.Source = "Share Point Workflows";
            try
            {
                //Execute method as a elevated method                 
                SPSecurity.CodeToRunElevated elevatedExecuteMethod = new SPSecurity.CodeToRunElevated(ExecuteMethod);
                SPSecurity.RunWithElevatedPrivileges(elevatedExecuteMethod);
            }
            catch (Exception ex)
            {
                _log.WriteEntry("Error" + ex.Message.ToString(), EventLogEntryType.Error);
            }
            return ActivityExecutionStatus.Closed;
        }
        private void ExecuteMethod()
        {
            try
            {
                //retrieveing the Site object       
                SPSite _site = new SPSite(__Context.Site.Url);
                //retrieveing the Web object                 
                SPWeb _web = (SPWeb)(__Context.Web);
                //retrieveing the list object                 
                _list = _web.Lists[new Guid(this.ListId)];
                //retrieveing the list item object              
                SPListItem _listItem = _list.GetItemById(this.ListItem);
                _site.AllowUnsafeUpdates = true;
                _web.AllowUnsafeUpdates = true;
                string semailsubject = _listItem["E-Mail Subject"].ToString();
                string semailfrom = _listItem["emailfrom"].ToString();
                _log = new EventLog("get vendor info");
                _log.WriteEntry("semailsubject");
                _log.WriteEntry("semailfrom");

                /* _listItem.Update();
                 _list.Update();
                 _site.AllowUnsafeUpdates = false;
                 _web.AllowUnsafeUpdates = false;*/
                using (SPSite mysite = new SPSite("http://dlglobaltest.dl.com/Admin/IT/Application%20Development%20Group/LibraryEmailDistribution"))
                {
                    using (SPWeb myweb = mysite.OpenWeb())
                    {
                        SPList settingsList = myweb.Lists["EmailDistributionSettings"];
                        SPQuery oQuery = new SPQuery();
                        oQuery.Query = "<Where><Eq><FieldRef Name='Sender' /><Value Type='Text'>" + semailfrom + "</Value></Eq></Where>";
                        SPListItemCollection ColListItems = settingsList.GetItems(oQuery);
                        foreach (SPListItem oListItem in ColListItems)
                        {
                            semailsettingKeyword1 = oListItem["Keyword1"].ToString();
                            semailsettingKeyword2 = oListItem["Keyword2"].ToString();
                            //SPFieldUserValue objUserFieldValue = new SPFieldUserValue(myweb, oListItem["Recipients"].ToString());

                            if ((semailsubject.Contains(semailsettingKeyword1)) || (semailsubject.Contains(semailsettingKeyword2)))
                            {
                                objUserFieldValueCol = new SPFieldUserValueCollection(myweb, oListItem["Recipients"].ToString());
                                _log = new EventLog(objUserFieldValueCol.ToString());

                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            { }
        }
    }
}

Web.Config:

<authorizedType Assembly="CustomWorkflowActivityLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a95e146fc1062337" Namespace="CustomWorkflowActivityLibrary" TypeName="*" Authorized="True" />

WSS.Actions:

<Action Name="Get Recipients" 
            ClassName="CustomWorkflowActivityLibrary.CustomWorkflowActivity"
            Assembly="CustomWorkflowActivityLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a95e146fc1062337" 
            AppliesTo="all" Category="Custom">
            <RuleDesigner Sentence="Get Recipients for %1 "> 
           <FieldBind Field="ListId,ListItem" Text="this list" Id="1" DesignerType="ChooseListItem" />
        </RuleDesigner>   
         <Parameters> 
        <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext" Direction="In" /> 
        <Parameter Name="ListId" Type="System.String, mscorlib" Direction="In" /> 
        <Parameter Name="ListItem" Type="System.Int32, mscorlib" Direction="In" /> 
            </Parameters> 

    </Action>

Спасибо,


person user346514    schedule 19.01.2011    source источник
comment
Вы выполнили iisreset после развертывания в GAC?   -  person Kit Menke    schedule 20.01.2011
comment
Да, я выполнил IISRESET. По-прежнему то же самое. Я ничего не вижу после завершения рабочего процесса.   -  person user346514    schedule 20.01.2011
comment
Вы можете запустить рабочий процесс вручную, но ничего не происходит? Вы знаете, работают ли в вашем рабочем процессе стандартные нестандартные действия? Я мог бы попробовать создать рабочий процесс без вашего настраиваемого действия и сначала убедиться, что он работает.   -  person Kit Menke    schedule 20.01.2011


Ответы (2)


Я не уверен, что это поможет, но вы можете попробовать изменить следующую строку в своем коде из этого:

SPSecurity.RunWithElevatedPrivileges(elevatedExecuteMethod); 

К этому:

SPSecurity.RunWithElevatedPrivileges(delegate(){
    ExecuteMethod();
}); 
person Luke    schedule 30.01.2011

Еще один выстрел в темноте:

Попробуйте изменить наследуемый класс (http://msdn.microsoft.com/en-us/library/ms173149(v=VS.80).aspx) от SequenceActivity к Activity (SequenceActivity наследуется от CompositeActivity, которая сама наследуется от Activity. См.: http://msdn.microsoft.com/en-us/library/system.workflow.activities.sequenceactivity(v=VS.90).aspx)

Если это не сработает, попробуйте полностью удалить конструктор. Вы должны иметь возможность использовать базовый конструктор (последовательность) Activity (поскольку вы наследуете класс, а не реализуете его)

Надеюсь, это поможет...

person DaveD    schedule 23.06.2011