Behind the scenes
How is it done in CLOUDFLOW?
The order portal = customized HTML page
The order portal where Chip places his order is an HTML page that was customized for Reynholm Industry Brands with PAGEBUILDER. It is protected with a scope so that Chip can exclusively land on a private page that is restricted from navigating to other CLOUDFLOW pages.
When Chip opens the page, he fills in the form and submits the file. This initiates a workflow that creates a Job.
See Pagebuilder for more information on how to build custom HTML pages with integrated possibilities to start a workflow.
The workflow

The nodes are configured as follows:
Start From Kiosk
- Name: Request For Proof.
- Category: Jobs.
This will make sure the system creates a Job.
- KIOSK parameters:
- A required Text field with
(variable) Key
jobid and Label
Job ID.
This will create a variable jobid when Chip enters the requested parameter Job ID on the order portal.
- A required Text field with
(variable) Key
customerName and Label
Customer Name.
This will create a variable customerName when Chip enters the requested parameter Customer Name on the order portal.
- A required Text field with
(variable) Key
jobDescription and Label
Job Description.
This will create a variable jobDescription when Chip enters the requested parameter Job Description on the order portal.
- A Number field with (variable)
Key
runQuantity and Label
Run Quantity.
This will create a variable runQauntity when Chip enters the requested parameter Run Quantity on the order portal.
- A required Text field with
(variable) Key
jobid and Label
Job ID.
- Number of files: One.
- Enable upload: selected.
This enables Chip to upload the file that will be processed by Wernham Hogg Offset.
Create Job
- Job Type: PageBuilderExercise.
We will use this Job Type later to filter on this type of job.
- Name: customerName-jobid. The name of the Job is built with two variables:
- customerName: a custom variable created when Chip enters the Customer parameter in the order portal. It is a consequence of the KIOSK parameters in the Start From Kiosk node.
- jobid: a custom variable created when Chip enters the Job ID parameter in the order portal. It is a consequence of the KIOSK parameters in the Start From Kiosk node.
- State: IN REVIEW.
This will set the Job's initial state to IN REVIEW.
- Description: jobDescription.
A custom variable created when Chip enters the Job Description parameter in the order portal. It is a consequence of the KIOSK parameters in the Start From Kiosk node.
- File: All files from node previous
Node.
The variable All files from node previous Node will make sure that a small preview icon of the file is shown when viewing the Job Details.
- Define (custom) data to be assigned to the created
job:
will store the custom data that Chip entered when submitting the Job to the database document for the job:
PATH Value custom.jobId jobId custom.customerName customerName custom.jobDescription jobDescription custom.runQuantity runQuantity
Set Variable
Named Set Variable Job ID. This node will set a variable in the workflow for the current Job.
Name | Type |
---|---|
newJobId | Job ID |
Hold in KIOSK
- Viewable files: All files from
node previous Node
This will make sure that the file can be opened in PROOFSCOPE.
-
Routing labels:
- OK, TO PRODUCTION
This will create a decision button OK, TO PRODUCTION in KIOSK and make sure that the workable is directed to the Job in Production node when Dale selects this decision button.
- NOT OK, BACK TO CUSTOMER
This will create a decision button NOT OK, BACK TO CUSTOMER in KIOSK and make sure that the workable is directed to the Job in Error node when Dale selects this decision button.
- OK, TO PRODUCTION
Update Job
- Activity: Set State
This will make sure the state is changed.
- State: IN PRODUCTION
This will set the state to IN PRODUCTION in Chip's order overview. With this information he knows that his order will be sent to production.
Update Job
- Activity: Set State
This will make sure the state is changed.
- State: ERROR
This will set the state to ERROR in Chip's order overview. With this information he knows that his order will not be sent to production.
Script:
var filesBeingProcessed = getParameters().files;
setResultVariables({filesBeingProcessed:filesBeingProcessed});
Wait
- Delay: 10 seconds.
Update Job
- Activity: Set State.
This will make sure the state is changed.
- State: INTERNAL QC.
Hold in KIOSK
- Viewable files: All files from node previous
Node.
This will make sure that the file can be opened in PROOFSCOPE.
- Routing labels: Internal Approval.
Start Approval
- File to approve: All files from node previous
Node.
This will make sure that the file can be opened in PROOFSCOPE.
- Variable name: approvalInformation.
- User Names: ChipNote: A user named Chip needs to exist in CLOUDFLOW.
Select Job
- Select by: Job ID.
- Job ID: newJobId (this is the variable set earlier in Set Variable Job ID node).
Update Job
This node will set some data for the job, like the Approval ID and Approval user that we will use later in PAGEBUILDER. It has the following specified parameters:
PATH | |
---|---|
custom.approvalId | approvalInformation.id |
custom.approvalUser | Chip |
custom.filesBeingProcessed | filesBeingProcessed |
Update Job
- Activity: Set State.
This will make sure the state is changed.
- State: OUT FOR APPROVAL.
Route After Approval
- Policy: All Participants need to Accept (in this example, Chip is the only participant).
Update Job
- Activity: Set State.
This will make sure the state is changed.
- State: APPROVED.
Update Job
- Activity: Set State.
This will make sure the state is changed.
- State: REJECTED.
The workflow

The nodes are configured as follows:
Start From Web Request
- Name: GetApprovals.
- Workable name: GetApprovals_id.
This will name the workable with GetApprovals_ followed by the id number.
Script
- Input Files: (blank).
- Script:
var id = getParameters().variables.id; var result = api.job.get(id); var approval_id = result.custom.approvalId; if (approval_id !== undefined) { approval_id.split(); var list_of_approvals = api.approval.list(["approval_id", "in", approval_id], []).results; setResultVariables({"result" : {"approvals": list_of_approvals }}); } else { setResultVariables({"result" : {"approvals": [] }}); }
Set HTTP Reply
- Status: 200.
- Contents: result.
This is the variable set from the Script node.
- Delay: 10 seconds.