Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagexml
titleNon-repeatable workflow example
linenumberstrue
placeholder for example of non-repeatable workflow<AppFacet name="CSVLoader">
    <String name="destModelName" />
    <String name="DriverId" />
    <String name="ParkingLotId" />
    <String name="fileName" KnownBy="csvLoaderAc" Update="auto" />
    <Action name="csvLoaderAc" documentation="Data Facet to load CSV Data">
        <Workflow Limit="1" Live="1" Timeout="-1">
            <Task name="Main">
                <Event name="Argument" as="ActionArgument" />
                <Invoke name="CSVDataLoader" waitFor="Argument">
                    <FacetScript>
                        <Log Message="Loading file..."/>
                        <LoadFromCSV fileName="[%:Event.Argument.fileName.Value:%]" 
                                     destModelName="[%:Event.Argument.destModelName.Value:%]"
                                     DriverId="[%:Event.Argument.DriverId.Value:%]"
                                     ParkingLotId="[%:Event.Argument.ParkingLotId.Value:%]" />
                        <Log Message="Loading complete!!!"/>
                    </FacetScript>
                </Invoke>
                <Output name="ActionResult">
                    <Value>
                        <Log Message="Output file name: [%:Event.Argument.fileName.Value:%]"/>
                        <fileName>[%:Event.Argument.fileName.Value:%]</fileName>
                    </Value>
                </Output>
            </Task>
        </Workflow>
    </Action>
</AppFacet>

b. Repeatable (multi-run, stream) workflows

...

Note
titleUse While = "true" in the first task

Due to the current compiler limitation, you must use While = "true" for the first task that appears in your workflow definition (source code) in order for the compiler to recognize that this is a repeatable workflow. You do not need to specify While = "true" for the subsequent tasks in the same workflow definition.

Code Block
languagexml
titleRepeatable workflow example
linenumberstrue

<ThingFacet Name="TempFacetSerial">
    <Number Name="tempValue" update="auto" KnownBy="SerialReadAction" />
    <String Name="unit" default="Celsius" Documentation="Celsius or Fahrenheit" />
    <String Name="peripheral" />
    <String Name="interfacePort" />
    <String Name="interface" />
    <String Name="uniqueId" default="56789" />
    <String Name="baudrate" />
    <String Name="format" default="ascii" />
    <String Name="operation" />
    <String Name="payload" />

    <Action Name="SerialReadAction" Documentation="Start the serial port">
        <Workflow Limit="1" Live="1" Timeout="-1">
            <Task name="Main" while="true">
                <Event name="Argument" as="ActionArgument" />

                <Invoke name="InvokeSerialRead" waitFor="Argument" get="perif://">
                    <Message>
                        <Value>
                            <InterfacePort>"[%:Event.Argument.interfacePort.Value:%]"
                            </InterfacePort>
                            <Baudrate>"[%:Event.Argument.baudrate.Value:%]"</Baudrate>
                            <Interface>"[%:Event.Argument.interface.Value:%]"</Interface>
                            <UniqueId>"[%:Event.Argument.uniqueId.Value:%]"</UniqueId>
                            <Operation>"[%:Event.Argument.operation.Value:%]"</Operation>
                            <format>"[%:Event.Argument.format.Value:%]"</format>
                            <Payload>"[%:Event.Argument.payload.Value:%]"</Payload>
                            <Peripheral>"[%:Event.Argument.peripheral.Value:%]"</Peripheral>
                        </Value>
                    </Message>
                </Invoke>
                <Output name="Result" as="ActionResult">
                    <Value>
                        <tempValue>
                            [%:Invoke.InvokeSerialRead.Message.Value/number(
                            substring-before(substring-after("[%:Invoke.InvokeSerialRead.Message.Value:%]",
                            '#TCB:'), '#')):%]
                        </tempValue>
                    </Value>
                </Output>

            </Task>
        </Workflow>
    </Action>
</ThingFacet>

Non-waiting versus externally-activated workflows

...