From b45a9c6b663f32288dd835e93dc39cc3a25045f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:14:23 +0000 Subject: [PATCH] deploy: b80c45e779f7db11c377ae8f65efb1a49adbc70a --- 404.html | 2 +- assets/js/6ddfedc5.815ded3c.js | 1 - assets/js/6ddfedc5.e634bfd5.js | 1 + ...e~main.8d0c582c.js => runtime~main.9550676a.js} | 2 +- blog/archive/index.html | 2 +- blog/authors/coltmcnealy/index.html | 2 +- blog/authors/index.html | 2 +- blog/authors/lh-council/index.html | 2 +- blog/authors/mitchellh/index.html | 2 +- blog/basics-of-workflow/index.html | 2 +- blog/challenge-of-microservices/index.html | 2 +- blog/index.html | 2 +- blog/littlehorse-0.10-release/index.html | 2 +- blog/littlehorse-0.11-release/index.html | 2 +- blog/littlehorse-0.2.0-release/index.html | 2 +- blog/littlehorse-0.5.0-release/index.html | 2 +- blog/littlehorse-0.7-release/index.html | 2 +- blog/littlehorse-0.8-release/index.html | 2 +- blog/littlehorse-0.9-release/index.html | 2 +- blog/microservices-and-workflow/index.html | 2 +- blog/promise-of-microservices/index.html | 2 +- blog/saga-pattern/index.html | 2 +- blog/tags/analysis/index.html | 2 +- blog/tags/index.html | 2 +- blog/tags/integration-patterns/index.html | 2 +- blog/tags/littlehorse/index.html | 2 +- blog/tags/microservice-and-workflow/index.html | 2 +- blog/tags/release/index.html | 2 +- blog/transactional-outbox/index.html | 2 +- docs/api/index.html | 2 +- docs/architecture-and-guarantees/index.html | 2 +- docs/concepts/advanced/index.html | 2 +- .../concepts/advanced/wfspec-versioning/index.html | 2 +- docs/concepts/external-events/index.html | 2 +- docs/concepts/index.html | 2 +- docs/concepts/principals-and-tenants/index.html | 2 +- docs/concepts/tasks/index.html | 2 +- docs/concepts/user-tasks/index.html | 2 +- docs/concepts/workflow-events/index.html | 2 +- docs/concepts/workflows/index.html | 2 +- .../client-configuration/index.html | 2 +- docs/developer-guide/grpc/basics/index.html | 2 +- docs/developer-guide/grpc/index.html | 2 +- .../grpc/managing-metadata/index.html | 2 +- .../grpc/posting-external-events/index.html | 2 +- .../grpc/running-workflows/index.html | 2 +- docs/developer-guide/grpc/user-tasks/index.html | 2 +- docs/developer-guide/index.html | 2 +- docs/developer-guide/install/index.html | 2 +- docs/developer-guide/lhctl/index.html | 2 +- .../task-worker-development/index.html | 2 +- .../wfspec-development/advanced/index.html | 2 +- .../advanced/wait-for-condition/index.html | 2 +- .../wfspec-development/basics/index.html | 2 +- .../wfspec-development/child-threads/index.html | 2 +- .../wfspec-development/conditionals/index.html | 2 +- .../exception-handling/index.html | 2 +- .../wfspec-development/external-events/index.html | 2 +- docs/developer-guide/wfspec-development/index.html | 2 +- .../wfspec-development/interrupts/index.html | 2 +- .../mutating-variables/index.html | 2 +- .../wfspec-development/user-tasks/index.html | 14 +++++++------- docs/faq/index.html | 2 +- docs/operations/client-configuration/index.html | 2 +- docs/operations/dashboard-configuration/index.html | 2 +- docs/operations/docker-compose/basic/index.html | 2 +- .../docker-compose/confluent-cloud/index.html | 2 +- docs/operations/docker-compose/index.html | 2 +- .../docker-compose/three-servers/index.html | 2 +- docs/operations/index.html | 2 +- docs/operations/overview/index.html | 2 +- docs/operations/server-configuration/index.html | 2 +- docs/overview/index.html | 2 +- index.html | 2 +- markdown-page/index.html | 2 +- search/index.html | 2 +- 76 files changed, 81 insertions(+), 81 deletions(-) delete mode 100644 assets/js/6ddfedc5.815ded3c.js create mode 100644 assets/js/6ddfedc5.e634bfd5.js rename assets/js/{runtime~main.8d0c582c.js => runtime~main.9550676a.js} (99%) diff --git a/404.html b/404.html index 3d763c26c..0404d3019 100644 --- a/404.html +++ b/404.html @@ -18,7 +18,7 @@ - +
diff --git a/assets/js/6ddfedc5.815ded3c.js b/assets/js/6ddfedc5.815ded3c.js deleted file mode 100644 index 37d45b395..000000000 --- a/assets/js/6ddfedc5.815ded3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklh_site=self.webpackChunklh_site||[]).push([[6928],{5638:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=a(4848),n=a(8453),t=a(1470),i=a(9365);const l={},o="User Tasks",u={id:"developer-guide/wfspec-development/user-tasks",title:"User Tasks",description:"User Tasks allow you to manage tasks involving humans alongside standard computer tasks in your LittleHorse Workflow.",source:"@site/docs/05-developer-guide/08-wfspec-development/08-user-tasks.md",sourceDirName:"05-developer-guide/08-wfspec-development",slug:"/developer-guide/wfspec-development/user-tasks",permalink:"/docs/developer-guide/wfspec-development/user-tasks",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Child Threads",permalink:"/docs/developer-guide/wfspec-development/child-threads"},next:{title:"Advanced Features",permalink:"/docs/developer-guide/wfspec-development/advanced/"}},d={},c=[{value:"Assigning User Tasks",id:"assigning-user-tasks",level:2},{value:"Assigning to Users",id:"assigning-to-users",level:3},{value:"Assigning to Groups",id:"assigning-to-groups",level:3},{value:"Using User Task Outputs",id:"using-user-task-outputs",level:2},{value:"Using the Form Output",id:"using-the-form-output",level:3},{value:"Reminder Tasks",id:"reminder-tasks",level:3},{value:"Automatic Reassignment",id:"automatic-reassignment",level:3}];function h(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"user-tasks",children:"User Tasks"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/docs/concepts/user-tasks",children:"User Tasks"})," allow you to manage tasks involving humans alongside standard computer tasks in your LittleHorse Workflow."]}),"\n",(0,r.jsx)(s.p,{children:"You can use the Workflow SDK's to schedule User Tasks, and also create lifecycle hooks such as:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Automatic Reassignment"}),"\n",(0,r.jsx)(s.li,{children:"Reminder Tasks"}),"\n",(0,r.jsx)(s.li,{children:"Automatic Cancellation."}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["See the ",(0,r.jsx)(s.a,{href:"/docs/developer-guide/grpc/managing-metadata",children:"Metadata Management docs"})," for information about how to create a ",(0,r.jsx)(s.code,{children:"UserTaskDef"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"assigning-user-tasks",children:"Assigning User Tasks"}),"\n",(0,r.jsx)(s.p,{children:"You can assign a User Task in two ways:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"To a specific User, specified by an arbitrary user id (and optionally a user group)."}),"\n",(0,r.jsx)(s.li,{children:"To a group of users."}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"assigning-to-users",children:"Assigning to Users"}),"\n",(0,r.jsxs)(s.p,{children:["To assign a user task to a specific user who is not a part of a group, you can use ",(0,r.jsx)(s.code,{children:"WorkflowThread#assignTaskToUser()"}),"."]}),"\n","\n",(0,r.jsxs)(t.A,{children:[(0,r.jsx)(i.A,{value:"java",label:"Java",default:!0,children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-java",children:'String hardCodedUserId = "some-user-id-or-email";\nWfRunVariable userIdVariable = wf.addVariable("user-id", VariableType.STR);\n\n// Hard-coded using a string\nwf.assignUserTask("some-user-task-def", hardCodedUserId, null);\n\n// Using a variable to set User Id\nwf.assignUserTask("another-user-task-def", userIdVariable, null);\n'})})}),(0,r.jsx)(i.A,{value:"go",label:"Go",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-go",children:'hardCodedUserId := "some-user-id-or-email"\nuserIdVariable := wf.AddVariable("user-id", lhproto.VariableType_STR)\n\n// Hard-coded using a string\nwf.AssignUserTask("some-user-task-def", &hardCodedUserId, nil)\n\n// Using a variable to set User Id\nwf.AssignUserTask("some-user-task-def", userIdVariable, nil)\n'})})}),(0,r.jsx)(i.A,{value:"python",label:"Python",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-python",children:'hard_coded_user_id = "some-user-id-or-email"\nuser_id_variable = wf.add_variable("user-id", VariableType.STR)\n\n# assign using a hard coded string\nwf.assign_user_task("some-user-task", user_id=hard_coded_user_id)\n\n# assign using a variable\nwf.assign_user_task("some-user-task", user_id=user_id_variable)\n'})})})]}),"\n",(0,r.jsxs)(s.p,{children:["You can also assign a user task to a user as part of a group using ",(0,r.jsx)(s.code,{children:"WorkflowThread#assignUserTask"}),":"]}),"\n",(0,r.jsxs)(t.A,{children:[(0,r.jsx)(i.A,{value:"java",label:"Java",default:!0,children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-java",children:'WfRunVariable userIdVariable = wf.addVariable("user-id", VariableType.STR);\nWfRunVariable userGroupVariable = wf.addVariable("user-group", VariableType.STR);\nString hardCodedUserGroup = "finance";\n\n// Hard-coded using a string\nwf.asignUserTask("some-user-task-def", userIdVariable, hardCodedUserGroup);\n\n// Using a variable to set User Group\nwf.assignUserTask("another-user-task-def", userIdVariable, userGroupVariable);\n'})})}),(0,r.jsx)(i.A,{value:"go",label:"Go",children:(0,r.jsxs)(s.p,{children:["Golang user task docs coming soon. But if you want, you can try it out anyways ","\ud83d\ude09","."]})})]}),"\n",(0,r.jsx)(s.h3,{id:"assigning-to-groups",children:"Assigning to Groups"}),"\n",(0,r.jsxs)(s.p,{children:["You can assign a task to a user group using ",(0,r.jsx)(s.code,{children:"WorkflowThread#assignUserTask()"}),"."]}),"\n",(0,r.jsxs)(t.A,{children:[(0,r.jsx)(i.A,{value:"java",label:"Java",default:!0,children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-java",children:'String hardCodedUserGroup = "sales";\nWfRunVariable userGroupVariable = wf.addVariable("user-group", VariableType.STR);\n\n// Hard-coded using a string\nString userId = null;\nwf.assignUserTask("some-user-task-def", userId, hardCodedUserGroup);\n\n// Using a variable to set User Group\nwf.assignUserTask("another-user-task-def", userId, userGroupVariable);\n'})})}),(0,r.jsx)(i.A,{value:"go",label:"Go",children:(0,r.jsxs)(s.p,{children:["GoLang docs for user tasks coming soon. But if you want, you can try it out anyways ","\ud83d\ude09","."]})})]}),"\n",(0,r.jsx)(s.h2,{id:"using-user-task-outputs",children:"Using User Task Outputs"}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"assignTaskToUser"})," and ",(0,r.jsx)(s.code,{children:"assignTaskToUserGroup"})," methods return a ",(0,r.jsx)(s.code,{children:"UserTaskOutput"}),", which is a special type of ",(0,r.jsx)(s.code,{children:"NodeOutput"}),". It can be used to:"]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Mutate variables"}),"\n",(0,r.jsx)(s.li,{children:"Schedule reminder tasks"}),"\n",(0,r.jsx)(s.li,{children:"Schedule user task reassignment."}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"using-the-form-output",children:"Using the Form Output"}),"\n",(0,r.jsxs)(s.p,{children:["You can use a ",(0,r.jsx)(s.code,{children:"UserTaskOutput"})," to mutate variables. Note that a ",(0,r.jsx)(s.code,{children:"UserTaskDef"})," has a series of fields, where each field has a ",(0,r.jsx)(s.code,{children:"name"})," and ",(0,r.jsx)(s.code,{children:"value"})," (which is a ",(0,r.jsx)(s.code,{children:"VariableValue"})," containing a primitive type)."]}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"UserTaskOutput"})," is essentially a Json output where each key is the name of each field, and the value is the value typed by the user. Let's say I have a user task def with two fields:"]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"userName"}),", which is a ",(0,r.jsx)(s.code,{children:"STR"})]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"age"}),", which is an ",(0,r.jsx)(s.code,{children:"INT"})]}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"You can use the value as follows:"}),"\n",(0,r.jsxs)(t.A,{children:[(0,r.jsx)(i.A,{value:"java",label:"Java",default:!0,children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-java",children:'WfRunVariable age = wf.addVariable("age", VariableType.INT);\nWfRunavariable userName = wf.addVariable("user-name", VariableType.STR);\n\nUserTaskOutput formResults = wf.assignUserTask("my-user-task", "obi-wan", null);\nwf.mutate(age, VariableMutationType.ASSIGN, formResults.jsonPath("$.age"));\nwf.mutate(userName, VariableMutationType.ASSIGN, formResults.jsonPath("$.userName"));\n'})})}),(0,r.jsx)(i.A,{value:"go",label:"Go",children:(0,r.jsxs)(s.p,{children:["GoLang docs for user tasks coming soon. But if you want, you can try it out anyways ","\ud83d\ude09","."]})})]}),"\n",(0,r.jsx)(s.h3,{id:"reminder-tasks",children:"Reminder Tasks"}),"\n",(0,r.jsxs)(s.p,{children:["You can use the ",(0,r.jsx)(s.code,{children:"UserTaskOutput"}),' to schedule a "Reminder Task", which is a ',(0,r.jsx)(s.code,{children:"TaskRun"})," that runs a set period of time after the User Task is scheduled. If the ",(0,r.jsx)(s.code,{children:"UserTaskRun"})," has been completed, cancelled, or reassigned by the time the Reminder Task is scheduled, ",(0,r.jsx)(s.em,{children:"the Reminder Task does not execute."})]}),"\n",(0,r.jsxs)(t.A,{children:[(0,r.jsx)(i.A,{value:"java",label:"Java",default:!0,children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-java",children:'UserTaskOutput userTask = wf.assignTaskToUser("some-task", "yoda");\n\nint delaySeconds = 60; // wait one minute before reminder\n\nString taskArg1 = "reply to my email, you must!";\nString taskArg2 = "for my ally is the Force, and a powerful ally it is";\n\nString taskDefName = "send-reminder";\nwf.scheduleTaskAfter(userTask, delaySeconds, taskDefName, taskArg1, taskArg2);\n'})})}),(0,r.jsx)(i.A,{value:"go",label:"Go",children:(0,r.jsx)(s.p,{children:"GoLang support for user tasks coming soon."})})]}),"\n",(0,r.jsx)(s.h3,{id:"automatic-reassignment",children:"Automatic Reassignment"}),"\n",(0,r.jsxs)(s.p,{children:["You can use the ",(0,r.jsx)(s.code,{children:"UserTaskOutput"}),' to automatically "release" a task from a specific user to that user\'s group after a period of time passes.']}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["This only works if you assign the user task to a user ",(0,r.jsx)(s.em,{children:"and specify the group the user belongs to"}),"."]})}),"\n",(0,r.jsxs)(t.A,{children:[(0,r.jsx)(i.A,{value:"java",label:"Java",default:!0,children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-java",children:'String userGroup = "jedi-council";\nUserTaskOutput userTask = wf.assignUsrTask("some-task", "Mace Windu", userGroup);\n\n// If Mace Windu doesn\'t respond in 1 hour, allow any other Jedi Council member to claim\n// the task.\nwf.releaseToGroupOnDeadline(userTask, 60 * 60);\n'})})}),(0,r.jsx)(i.A,{value:"go",label:"Go",children:(0,r.jsxs)(s.p,{children:["GoLang support for user tasks coming soon. But if you want, you can try it out anyways ","\ud83d\ude09","."]})})]})]})}function p(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},9365:(e,s,a)=>{a.d(s,{A:()=>i});a(6540);var r=a(8215);const n={tabItem:"tabItem_Ymn6"};var t=a(4848);function i(e){let{children:s,hidden:a,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.A)(n.tabItem,i),hidden:a,children:s})}},1470:(e,s,a)=>{a.d(s,{A:()=>T});var r=a(6540),n=a(8215),t=a(3104),i=a(6347),l=a(205),o=a(7485),u=a(1682),d=a(679);function c(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: BadTo assign a user task to a specific user who is not a part of a group, you can use WorkflowThread#assignTaskToUser()
.
To assign a user task to a specific user who is not a part of a group, you can use WorkflowThread#assignUserTask()
.
String hardCodedUserId = "some-user-id-or-email";
WfRunVariable userIdVariable = wf.addVariable("user-id", VariableType.STR);
// Hard-coded using a string
wf.assignUserTask("some-user-task-def", hardCodedUserId, null);
// Using a variable to set User Id
wf.assignUserTask("another-user-task-def", userIdVariable, null);
hardCodedUserId := "some-user-id-or-email"
userIdVariable := wf.AddVariable("user-id", lhproto.VariableType_STR)
// Hard-coded using a string
wf.AssignUserTask("some-user-task-def", &hardCodedUserId, nil)
// Using a variable to set User Id
wf.AssignUserTask("some-user-task-def", userIdVariable, nil)
hard_coded_user_id = "some-user-id-or-email"
user_id_variable = wf.add_variable("user-id", VariableType.STR)
# assign using a hard coded string
wf.assign_user_task("some-user-task", user_id=hard_coded_user_id)
# assign using a variable
wf.assign_user_task("some-user-task", user_id=user_id_variable)
You can also assign a user task to a user as part of a group using WorkflowThread#assignUserTask
:
WfRunVariable userIdVariable = wf.addVariable("user-id", VariableType.STR);
WfRunVariable userGroupVariable = wf.addVariable("user-group", VariableType.STR);
String hardCodedUserGroup = "finance";
// Hard-coded using a string
wf.asignUserTask("some-user-task-def", userIdVariable, hardCodedUserGroup);
// Using a variable to set User Group
wf.assignUserTask("another-user-task-def", userIdVariable, userGroupVariable);
Golang user task docs coming soon. But if you want, you can try it out anyways 😉.
String hardCodedUserId = "some-user-id-or-email";
WfRunVariable userIdVariable = wf.addVariable("user-id", VariableType.STR);
// Hard-coded using a string, notice that the second parameter (group id) is null
wf.assignUserTask("some-user-task-def", hardCodedUserId, null);
// Using a variable to set User Id
wf.assignUserTask("another-user-task-def", userIdVariable, null);
hardCodedUserId := "some-user-id-or-email"
userIdVariable := wf.AddVariable("user-id", lhproto.VariableType_STR)
// Hard-coded using a string
wf.AssignUserTask("some-user-task-def", &hardCodedUserId, nil)
// Using a variable to set User Id
wf.AssignUserTask("some-user-task-def", userIdVariable, nil)
hard_coded_user_id = "some-user-id-or-email"
user_id_variable = wf.add_variable("user-id", VariableType.STR)
# assign using a hard coded string
wf.assign_user_task("some-user-task", user_id=hard_coded_user_id)
# assign using a variable
wf.assign_user_task("some-user-task", user_id=user_id_variable)
You can also assign a user task to a user as part of a group:
+WfRunVariable userIdVariable = wf.addVariable("user-id", VariableType.STR);
WfRunVariable userGroupVariable = wf.addVariable("user-group", VariableType.STR);
String hardCodedUserGroup = "finance";
// Hard-coded using a string
wf.asignUserTask("some-user-task-def", userIdVariable, hardCodedUserGroup);
// Using a variable to set User Group
wf.assignUserTask("another-user-task-def", userIdVariable, userGroupVariable);
Golang user task docs coming soon. But if you want, you can try it out anyways 😉.
user_id = wf.add_variable("user-id", VariableType.STR)
user_group = wf.add_variable("user_group", VariableType.STR)
hard_coded_user_group = "finance";
# assign using a hard coded string
wf.assign_user_task("some-user-task", user_id=user_id, user_group=hard_coded_user_group)
# assign using a variable
wf.assign_user_task("some-user-task", user_id=user_id, user_group=user_group)
You can assign a task to a user group using WorkflowThread#assignUserTask()
.
String hardCodedUserGroup = "sales";
WfRunVariable userGroupVariable = wf.addVariable("user-group", VariableType.STR);
// Hard-coded using a string
String userId = null;
wf.assignUserTask("some-user-task-def", userId, hardCodedUserGroup);
// Using a variable to set User Group
wf.assignUserTask("another-user-task-def", userId, userGroupVariable);
GoLang docs for user tasks coming soon. But if you want, you can try it out anyways 😉.
String hardCodedUserGroup = "sales";
WfRunVariable userGroupVariable = wf.addVariable("user-group", VariableType.STR);
// Hard-coded using a string
String userId = null;
wf.assignUserTask("some-user-task-def", userId, hardCodedUserGroup);
// Using a variable to set User Group
wf.assignUserTask("another-user-task-def", userId, userGroupVariable);
GoLang docs for user tasks coming soon. But if you want, you can try it out anyways 😉.
user_group_str = "sales
user_group_var = wf.add_variable("user_group", VariableType.STR)
# assign using a hard coded string
wf.assign_user_task("some-user-task", user_group=user_group_str)
# assign using a variable
wf.assign_user_task("some-user-task", user_group=user_group_var)
The assignTaskToUser
and assignTaskToUserGroup
methods return a UserTaskOutput
, which is a special type of NodeOutput
. It can be used to:
The assignUserTask
method return a UserTaskOutput
, which is a special type of NodeOutput
. It can be used to: