Domanda

Ho questo codice nel metodo esterna chiamata.

callExternalMethodActivity1_MethodInvoking private void (object sender, EventArgs e)

{

callExternalMethodActivitysitename = twInfo.Code;

callExternalMethodActivityurl = workflowProperties.WebUrl;

}

E il metodo nel servizio di flusso di lavoro pluggable ha:

CreateTrainingSite public void (string sitename, stringa URL) { // CODICE QUI }

Quando passo nel primo metodo le proprietà sono riempite, tuttavia quando passo nel secondo metodo le variabili sono nulli.

Si prega di aiuto


A cura:

namespace TrainingApprovalSiteWorkflow {

[ExternalDataExchange]
public interface ITrainingSiteCreationService
{
    event EventHandler<CommunicationObjArgs> MessageIn;
    void CreateTrainingSite(string sitename, string url);
}

[Serializable]
public class CommunicationObjArgs : ExternalDataEventArgs
{
    public CommunicationObjArgs(Guid id) : base(id) { }
    public string webID;
}

class StateObject
{
    public SPWeb web;
    public Guid instanceId;
    public StateObject(Guid instanceId, SPWeb web)
    {
        this.instanceId = instanceId;
        this.web = web;
    }
}

class TrainingSiteCreationService : SPWorkflowExternalDataExchangeService, ITrainingSiteCreationService
{
    public event EventHandler<CommunicationObjArgs> MessageIn;

    public void CreateTrainingSite(string sitename, string url)
    {
        ThreadPool.QueueUserWorkItem(delegate(object state)
        {
            StateObject sObject = state as StateObject;
            string webID = string.Empty;
            using (SPSite siteCollection = new SPSite(url))
            {
                using (SPWeb web = siteCollection.OpenWeb())
                {
                    using (SPWeb trainingWeb = web.Webs.Add(sitename))
                    {
                        trainingWeb.Description = "This site is created by a pluggable workflow service.";
                        trainingWeb.Title = sitename;
                        trainingWeb.Update();
                        webID = trainingWeb.ID.ToString();
                    }

                }
            }
            RaiseEvent(sObject.web, sObject.instanceId,
                typeof(ITrainingSiteCreationService),
                "MessageIn", new object[] { webID });
        }, new StateObject(WorkflowEnvironment.WorkflowInstanceId,
            this.CurrentWorkflow.ParentWeb));
    }

    public override void  CallEventHandler(Type eventType, string eventName, object[] eventData, SPWorkflow workflow, string identity, IPendingWork workHandler, object workItem)
    {
        var msg = new CommunicationObjArgs(workflow.InstanceId);
        msg.webID = eventData[0].ToString();
        msg.WorkHandler = workHandler;
        msg.WorkItem = workItem;
        msg.Identity = identity;
        this.MessageIn(null, msg);
    }

    public override void CreateSubscription(MessageEventSubscription subscription)
    {
        throw new NotImplementedException();
    }

    public override void DeleteSubscription(Guid subscriptionId)
    {
        throw new NotImplementedException();
    }
}

}

È stato utile?

Soluzione 2

sono stato in grado di trovare il problema.

Sul metodo Invocare onworkflow attivato stavo installando altri campi,

e non questi

callExternalMethodActivitysitename = twInfo.Code;

callExternalMethodActivityurl = workflowProperties.WebUrl;

così, quando si arriva al metodo esterno chiamata, erano in bianco, troppo obvius dopo aver guardato molto dettagliato.

Altri suggerimenti

vorrei suggerire di creare un oggetto business personalizzato che ha queste due proprietà. Inoltre è necessario fare questo oggetto serializable e utilizzare questo oggetto per comunicare con il metodo nel vostro servizio del flusso di lavoro.

Ho fatto qualcosa di simile yestarday e funziona come un fascino quando è necessario fornire più parametri per il servizio di WF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top