質問
このコードは、通話外部メソッドにあります。
プライベートボイドcallexternalmethodactivity1_methodinvoking(オブジェクト送信者、eventargs e)
{
callexternalmethodactivitysitename = twinfo.code;
callexternalmethodactivityurl = workflowproperties.weburl;
}
そして、プラグ可能なワークフローサービスの方法には次のとおりです。
public void createTrainingsite(string sitename、string url){//ここにコード}
最初の方法に足を踏み入れると、プロパティが入力されますが、2番目の方法に足を踏み入れると、変数はnullです。
助けてください
編集:
名前空間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();
}
}
}
解決 2
問題を見つけることができました。
オンワークフローでアクティブ化された呼び出し方法は、別のフィールドを設定していました。
そして、これらはありません
callexternalmethodactivitysitename = twinfo.code;
callexternalmethodactivityurl = workflowproperties.weburl;
したがって、外部メソッドに通じるとき、それらは空白で、非常に詳細に見えた後、あいまいでした。
他のヒント
これら2つのプロパティを備えたカスタムビジネスオブジェクトを作成することをお勧めします。さらに、このオブジェクトを作成する必要があります シリアル化可能 このオブジェクトを使用して、ワークフローサービスのメソッドと通信します。
私はこのYestardayのようなことをしましたが、WFサービスに複数のパラメーターを提供する必要があるときに魅力のように機能します。