From a7e270e02f6aabbfe45690ad3c03a1c6fccb8a73 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Tue, 2 Jan 2024 16:11:13 -0500 Subject: [PATCH] add early code examples and cross links Signed-off-by: Hannah Hunter --- .../workflow/howto-author-workflow.md | 88 +++++++++++++++++-- .../workflow/howto-manage-workflow.md | 57 ++++++++++-- .../workflow/workflow-architecture.md | 3 +- .../workflow/workflow-features-concepts.md | 6 +- .../workflow/workflow-overview.md | 1 + .../workflow/workflow-patterns.md | 3 +- 6 files changed, 141 insertions(+), 17 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md index 7fb31d19f..648d769a2 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md @@ -169,13 +169,40 @@ public class DemoWorkflowActivity implements WorkflowActivity { -Define the workflow activities you'd like your workflow to perform. Activities are wrapped in the public `DemoWorkflowActivity` class, which implements the workflow activities. +Define the workflow activities you'd like your workflow to perform. Activities are wrapped in the public `callActivityOptions` class, which implements the workflow activities. ```go +type ActivityContext struct { + ctx task.ActivityContext +} +func (wfac *ActivityContext) GetInput(v interface{}) error { + return wfac.ctx.GetInput(&v) +} + +func (wfac *ActivityContext) Context() context.Context { + return wfac.ctx.Context() +} + +type callActivityOption func(*callActivityOptions) error + +type callActivityOptions struct { + rawInput *wrapperspb.StringValue +} + +func WithActivityInput(input any) callActivityOption { + return func(opt *callActivityOptions) error { + data, err := marshalData(input) + if err != nil { + return err + } + opt.rawInput = wrapperspb.String(string(data)) + return nil + } +} ``` -[See the Go SDK workflow activity example in context.](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflowActivity.java) +[See the Go SDK workflow activity example in context.](todo) {{% /codetab %}} @@ -289,10 +316,61 @@ public class DemoWorkflowWorker { Next, register the workflow with the `WorkflowRuntimeBuilder` and start the workflow runtime. ```go +package workflow +// Register workflow +func (wr *WorkflowRuntime) RegisterWorkflow(w Workflow) error { + wrappedOrchestration := wrapWorkflow(w) + + // get decorator for workflow + name, err := getDecorator(w) + if err != nil { + return fmt.Errorf("failed to get workflow decorator: %v", err) + } + + err = wr.tasks.AddOrchestratorN(name, wrappedOrchestration) + return err +} + +// Activity wrapper +func wrapActivity(a Activity) task.Activity { + return func(ctx task.ActivityContext) (any, error) { + aCtx := ActivityContext{ctx: ctx} + + return a(aCtx) + } +} + +// Register wrapped activity +func (wr *WorkflowRuntime) RegisterActivity(a Activity) error { + wrappedActivity := wrapActivity(a) + + // get decorator for activity + name, err := getDecorator(a) + if err != nil { + return fmt.Errorf("failed to get activity decorator: %v", err) + } + + err = wr.tasks.AddActivityN(name, wrappedActivity) + return err +} + +// Start workflow runtime +func (wr *WorkflowRuntime) Start() error { + // go func start + go func() { + err := wr.client.StartWorkItemListener(context.Background(), wr.tasks) + if err != nil { + log.Fatalf("failed to start work stream: %v", err) + } + }() + <-wr.quit + + return nil +} ``` -[See the Go SDK workflow in context.](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflowWorker.java) +[See the Go SDK workflow in context.](todo) {{% /codetab %}} @@ -515,7 +593,7 @@ public class DemoWorkflow extends Workflow { -[As in the following example](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java), a hello-world application using the Go SDK and Dapr Workflow would include: +[As in the following example](todo), a hello-world application using the Go SDK and Dapr Workflow would include: - A Go package called `todo` to receive the Go SDK client capabilities. - An import of `todo` @@ -527,7 +605,7 @@ public class DemoWorkflow extends Workflow { ``` -[See the full Go SDK workflow example in context.](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java) +[See the full Go SDK workflow example in context.](todo) {{% /codetab %}} diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md index 50205f23a..9f6021114 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md @@ -167,19 +167,58 @@ public class DemoWorkflowClient { {{% codetab %}} -Manage your workflow within your code. [In the workflow example from the Go SDK](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflowClient.java), the workflow is registered in the code using the following APIs: +Manage your workflow within your code. [In the workflow example from the Go SDK](todo), the workflow is registered in the code using the following APIs: -- **scheduleNewWorkflow**: Starts a new workflow instance -- **getInstanceState**: Get information on the status of the workflow -- **waitForInstanceStart**: Pauses or suspends a workflow instance that can later be resumed -- **raiseEvent**: Raises events/tasks for the running workflow instance -- **waitForInstanceCompletion**: Waits for the workflow to complete its tasks -- **purgeInstance**: Removes all metadata related to a specific workflow instance -- **terminateWorkflow**: Terminates the workflow -- **purgeInstance**: Removes all metadata related to a specific workflow +- **StartWorkflow**: Starts a new workflow instance +- **GetWorkflow**: Get information on the status of the workflow +- **PauseWorkflow**: Pauses or suspends a workflow instance that can later be resumed +- **RaiseEventWorkflow**: Raises events/tasks for the running workflow instance +- **ResumeWorkflow**: Waits for the workflow to complete its tasks +- **PurgeWorkflow**: Removes all metadata related to a specific workflow instance +- **TerminateWorkflow**: Terminates the workflow ```go + // StartWorkflowAlpha1 starts a workflow. + StartWorkflowAlpha1(ctx context.Context, req *StartWorkflowRequest) (*StartWorkflowResponse, error) + // GetWorkflowAlpha1 gets a workflow. + GetWorkflowAlpha1(ctx context.Context, req *GetWorkflowRequest) (*GetWorkflowResponse, error) + + // PurgeWorkflowAlpha1 purges a workflow. + PurgeWorkflowAlpha1(ctx context.Context, req *PurgeWorkflowRequest) error + + // TerminateWorkflowAlpha1 terminates a workflow. + TerminateWorkflowAlpha1(ctx context.Context, req *TerminateWorkflowRequest) error + + // PauseWorkflowAlpha1 pauses a workflow. + PauseWorkflowAlpha1(ctx context.Context, req *PauseWorkflowRequest) error + + // ResumeWorkflowAlpha1 resumes a workflow. + ResumeWorkflowAlpha1(ctx context.Context, req *ResumeWorkflowRequest) error + + // RaiseEventWorkflowAlpha1 raises an event for a workflow. + RaiseEventWorkflowAlpha1(ctx context.Context, req *RaiseEventWorkflowRequest) error + + // StartWorkflowBeta1 starts a workflow. + StartWorkflowBeta1(ctx context.Context, req *StartWorkflowRequest) (*StartWorkflowResponse, error) + + // GetWorkflowBeta1 gets a workflow. + GetWorkflowBeta1(ctx context.Context, req *GetWorkflowRequest) (*GetWorkflowResponse, error) + + // PurgeWorkflowBeta1 purges a workflow. + PurgeWorkflowBeta1(ctx context.Context, req *PurgeWorkflowRequest) error + + // TerminateWorkflowBeta1 terminates a workflow. + TerminateWorkflowBeta1(ctx context.Context, req *TerminateWorkflowRequest) error + + // PauseWorkflowBeta1 pauses a workflow. + PauseWorkflowBeta1(ctx context.Context, req *PauseWorkflowRequest) error + + // ResumeWorkflowBeta1 resumes a workflow. + ResumeWorkflowBeta1(ctx context.Context, req *ResumeWorkflowRequest) error + + // RaiseEventWorkflowBeta1 raises an event for a workflow. + RaiseEventWorkflowBeta1(ctx context.Context, req *RaiseEventWorkflowRequest) error ``` {{% /codetab %}} diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md index 18ec9110b..9887f2826 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md @@ -196,4 +196,5 @@ See the [Reminder usage and execution guarantees section]({{< ref "workflow-arch - Try out the following examples: - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [.NET](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) - - [Java](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) \ No newline at end of file + - [Java](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) + - [Go example](todo) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md index 05e250bdd..518317af4 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md @@ -411,4 +411,8 @@ To work around these constraints: - [Try out Dapr Workflow using the quickstart]({{< ref workflow-quickstart.md >}}) - [Workflow overview]({{< ref workflow-overview.md >}}) - [Workflow API reference]({{< ref workflow_api.md >}}) -- [Try out the .NET example](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) +- Try out the following examples: + - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) + - [.NET](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) + - [Java](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) + - [Go example](todo) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md index 783915229..c19f417d0 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md @@ -114,3 +114,4 @@ Watch [this video for an overview on Dapr Workflow](https://youtu.be/s1p9MNl4VGo - [.NET example](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) - [Python example](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [Java example](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) + - [Go example](todo) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md index c7474322b..1ac4f70f2 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md @@ -789,4 +789,5 @@ External events don't have to be directly triggered by humans. They can also be - Try out the following examples: - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [.NET](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) - - [Java](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) \ No newline at end of file + - [Java](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) + - [Go example](todo)