I have a problem..

hi

I am working in a project. Acc. to my scenario, a worker fills a form and then manager approve or reject the worker's request but after the worker fills the form, manager cannot reply the request immediately. The workflow should wait the response of the manager. How to do this break without a problem and how to continue the workflow from that point.

Please help me.

[391 byte] By [madenci] at [2007-12-24]
# 1

Hi,

In your workflow, you can use the HandleExternalEvent Activity.

It's well illustrated in this video : http://wf.netfx3.com/files/folders/screencasts/entry4998.aspx

Serge

SergeLuca at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 2

Firstly thank you,

I used CallExternalMethod activity to call the form.

will I use HandleExternalEvent activity after the CallExternalMethod activity .

The workflow will wait the event. will this break cause a problem. (think of many request are waiting)

madenci at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 3

it will work : if you use ExternalDataExchange service, the workflow calls the host by using the CallExternalMethod activity and the Host answers by sending an event which is managed by the HandleExternalEvent activity. This pattern is often used.

Serge

SergeLuca at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 4

many thanks

I will repeat the second question. In this process(waiting response from manager), will it create a problem. When waiting the response, is the workflow idled or ....

madenci at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 5

yes, the workflow is idled while waiting and it's not a problem at all; by default it will remain in memory; it will be persisted automaticallly if you add the persistence serviceand reloaded when you send an event (approval event here).

Serge

SergeLuca at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 6

I wrote the following codes but CallExternalMethods activity do not see the interface type. why?

second, in izinTalepService, in the raiseFormEvent event, how I reach the instanceID? in below code, the compiler give a warning about getting the instanceID.

thanks

namespace izinService

{

[ExternalDataExchange]

public interface IizinTalepService

{

event EventHandler<izinEventArgs> raiseFormEvent;

void getForm();

void loadForm();

}

}

namespace izinService

{

class izinTalepService : IizinTalepService

{

public WorkflowInstance instanceID;

public void getForm()

{

talepFormu.talepForm myform = new talepFormu.talepForm();

myform.Show();

}

public event EventHandler<izinEventArgs> raiseFormEvent;

public void loadForm()

{

izinEventArgs e = new izinEventArgs(instanceID.InstanceId);

raiseFormEvent(null, e);

}

}

}

namespace izinService

{

public class izinEventArgs : ExternalDataEventArgs

{

public izinEventArgs(Guid instanceID):base(instanceID)

{

}

}

}

madenci at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 7
Its worth working through these 10 hands-on labs if you haven't already as they go through this sort of example. You can download the labs here - http://wf.netfx3.com/files/folders/documentation/entry4919.aspx
BabyGBear at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 8

In you case, one quick & dirty solution is to store the workflow instance in your service; that works , but it's not a good idea because the service is supposed to be used by several workflow instances.

The best solution is to pass the workflow instance id as parameter of you fireEvent method.

To have more details watch this video (bidirectionnal communication) : http://wf.netfx3.com/files/folders/screencasts/entry4999.aspx

Hope this helps

Serge

SergeLuca at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 9

I know that you exhausted due to my question. :)

I have a difficulty not only in WF but also c# essentials.

in your link, there are codes below. I dont understand the meaning of the code especially thread and threadpool.

many thanks

public class CalculationEngine : ICalculationRequest

{

public void RequestAdd(int x, int y)

{

Guid instanceID = WorkflowEnvironment.instanceId;

int result=x+y;

ThreadPool.QueueUserWorkItem(delegate { Thread.Sleep(10000);

CalculationResultEventArgs args = new CalculationResultEventArgs (instanceId);

args.Result=result;

if(CalculationReady!=null)

{

CalculationReady(this, args);

}

} ; )

}

madenci at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...
# 10

Here are more explanations :

I've removed the threadpool code which is interesting but not mandatory here. :

public void RequestAdd(int x, int y)

{

Guid instanceID = WorkflowEnvironment.instanceId;

int result=x+y;

// we encapsulate the result in the Event argument; specifying the workflow is important : you will send the event to a workflow instance, you have to specify which one

CalculationResultEventArgs args = new CalculationResultEventArgs (instanceId);

args.Result=result;

// we check to make sure somebody (the workflow here) is listening to our event

if(CalculationReady!=null) // null if nobody is waiting for it

{

// we trigger the event

CalculationReady(this, args);

}

}

Does it help ?

Serge

SergeLuca at 2007-8-31 > top of Msdn Tech,Software Development for Windows Vista,Windows Workflow Foundation...

Software Development for Windows Vista

Site Classified