Frage

Ich habe diesen Code in der externen Methode CALL.

private void Callexternalmethodaktivität1_Methodinvoking (Objektabsender, Eventargs E)

{

CallexTernalMethodActivitySiteName = Twinfo.Code;

CallexTernalMethodActivityurl = WorkflowProperties.Weburl;

}

Und die Methode im steckbaren Workflow -Service hat:

public void createTrainingSite (String Sitename, String url) {// Code hier}}

Wenn ich in die erste Methode einstehe, werden die Eigenschaften gefüllt. Wenn ich jedoch in die zweite Methode einstehe, sind die Variablen null.

Bitte helfen Sie


Bearbeitet:

Namespace Training ApprovalSiteWorkflow {

[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();
    }
}

}

War es hilfreich?

Lösung 2

Ich konnte das Problem finden.

Auf dem Onworkflow -Aktivierungsmethode habe ich weitere Felder festgelegt,

Und nein diese

CallexTernalMethodActivitySiteName = Twinfo.Code;

CallexTernalMethodActivityurl = WorkflowProperties.Weburl;

Wenn es also mit der externen Methode aufgerufen wird, waren sie leer, zu objektiv, nachdem sie sehr detailliert aussah.

Andere Tipps

Ich würde Ihnen vorschlagen, ein benutzerdefiniertes Geschäftsobjekt zu erstellen, das diese beiden Eigenschaften hat. Ferner müssen Sie dieses Objekt machen Serialisierbar und verwenden Sie dieses Objekt, um mit der Methode in Ihrem Workflow -Dienst zu kommunizieren.

Ich habe so etwas wie diesen Yestarday gemacht und es funktioniert wie ein Zauber, wenn Sie Ihrem WF -Dienst mehrere Parameter liefern müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top