<div id="main-content" class="wiki-content group"> <h3 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-7.1.Objetivo"> <strong>7.1. Objective</strong> </h3> <p align="LEFT">Enable a Metadata form to interact with the workflow engine at Fluig, performing operations such as:</p> <ul> <ul> <li><p align="LEFT" class="western"> <span>Starting a new process (start request)</span> </p></li> <li><p align="LEFT" class="western"> <span>Cancel a request</span> </p></li> <li><p align="LEFT" class="western"> <span>Change the deadline date of a task</span> </p></li> <li><p align="LEFT" class="western"> <span>Change the task comments</span> </p></li> <li><p align="LEFT" class="western"> <span>Return the value of a workflow form field</span> </p></li> <li><p align="LEFT" class="western"> <span>Move request to next activity</span> </p></li> <li><p align="LEFT" class="western"> <span>Select user(s) and advance automatic activity</span> </p></li> <li><p align="LEFT" class="western"> <span>Assume a task</span> </p></li> <li><p align="LEFT" class="western"> <span>Obtain the attachments of a request</span> </p></li> <li><p align="LEFT" class="western"> <span>Return the activity number where the request is</span> </p></li> <li><p align="LEFT" class="western"> <span>Return the number of the next activity in a request</span> </p></li> <li><p align="LEFT" class="western"> <span>Return activity details available for selection</span> </p></li> <li><p align="LEFT" class="western"> <span>Return users who can perform a current task in a request</span> </p></li> <li><p align="LEFT" class="western"> <span>Return the processes the user can initiate in a request</span> </p></li> <li><p align="LEFT" class="western"> <span>Returns the users available in opening a request</span> </p></li> <li><p align="LEFT" class="western"> <span>Searches processes available for initialization </span> </p></li> </ul> </ul> <p align="LEFT"> Interaction with the wokflow engine will be made via ABLScript codes using the command <strong>ECM-REQUEST-SERVICE()</strong>. This command will perform calls to the <strong>WorkflowEngineService</strong>, as shown in the following diagram: </p> <p align="LEFT"> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/81789205/Screenshot1.png?version=1&modificationDate=1381259170000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/81789205/Screenshot1.png?version=1&modificationDate=1381259170000&api=v2"> </p> <p align="LEFT" style="text-align: center;"> <strong>Figure 6.1.a</strong> </p> <h3 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-7.2.GuiadeProgramação"> <strong>7.2. Programming Guide</strong> </h3> <p> <strong>Syntax for command ECM-REQUEST-SERVICE:</strong> </p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: xml; gutter: false" style="font-size: 12px;">variable = ECM-REQUEST-SERVICE(serviceID, operationId, [param1, param2, param3, ...]).</pre> </div> </div> <p> </p> <p> <strong>Where:</strong> </p> <ul> <li><p align="LEFT" class="western"> <strong>variable</strong>:<span> variable of the CHARACTER type which will receive the command execution response. The answer may come as a single character, which can be converted to another type through functions DECIMAL(), INTEGER() or DATE(). Or it may be a JSON character that will be converted to a TEMP-TABLE through the JSON function - DECODE().</span> </p></li> </ul> <ul> <li><p align="LEFT" class="western"> <strong>serviceID</strong>:<span> character with the ID of the service to be performed in Fluig. To meet the requirements defined in this document, the <strong>serviceId</strong>="<strong>WORKFLOW</strong>" should be used. In the future, methods may be implemented for accessing other services at Fluig, as for example DocumentService or FolderService. </span> </p></li> </ul> <ul> <li><p align="LEFT" class="western"> <strong>operationID</strong>:<span> it identifies the operation (method) to be performed in WorkflowEngineService. Example: “START-PROCESS”.</span> </p></li> </ul> <ul> <li><p align="LEFT" class="western"> <strong>param1, param2, ...</strong>:<span> list of parameters to be sent to the service.</span> </p></li> </ul> <h3 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-Operações"> <strong>Operations</strong> </h3> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">START-PROCESS</span></strong> </p> <p> <strong>Description:</strong> Start a process. </p> <p> <strong>Return:</strong>TempTable </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> <th class="confluenceTh">Details</th> </tr> <tr> <td class="confluenceTd">processId</td> <td class="confluenceTd">character</td> <td class="confluenceTd">Process code</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">colleagueIds</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Users who will receive the task</td> <td colspan="1" class="confluenceTd">use character in format: "colab1,colab2,colab3"</td> </tr> <tr> <td class="confluenceTd">activityNumber</td> <td class="confluenceTd">int</td> <td class="confluenceTd">Activity number</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">comments</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Comments</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">completeTask</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd">Indicates if the task must be completed (true) or only saved (false)</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">ttAttachments</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Request attachments</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttAttach</p> <p>    FIELD documentId AS INTEGER</p> <p>    FIELD documentVersion AS INTEGER</p> <p>    FIELD description AS CHARACTER</p> <p>    FIELD filename AS CHARACTER</p> <p>    FIELD filepath AS CHARACTER</p> <p>    FIELD principal AS LOGICAL.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">ttCardData</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Form data</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttCard</p> <p>    FIELD fieldName AS CHARACTER</p> <p>    FIELD fieldValue AS CHARACTER.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">ttAppointment</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Task annotations</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttAppointment</p> <p>    FIELD appointmentDate AS CHARACTER</p> <p>    FIELD appointmentSeconds AS INTEGER</p> <p>    FIELD appointmentSequence AS INTEGER.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">managerMode</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd">Indicates whether the user is initiating the request as a process manager.</td> <td colspan="1" class="confluenceTd"> </td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID:</strong> <span style="color: rgb(255, 0, 0);"><strong>CANCEL-PROCESS</strong></span> </p> <p> <strong>Description:</strong> Cancels a process. </p> <p> <strong>Return: character<br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">cancelText</td> <td class="confluenceTd"><p>character</p></td> <td class="confluenceTd">Cancellation comments</td> </tr> </tbody> </table> </div> <p> <strong><br /></strong> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">SET-DUE-DATE</span><br /></strong> </p> <p> <strong>Description: </strong>Changes the deadline date for the task.<strong><br /></strong> </p> <p> <strong>Return:</strong> character </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">threadSequence </td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of parallel</p> <p>activities existing in the process. </p></td> </tr> <tr> <td colspan="1" class="confluenceTd">newDueDate</td> <td colspan="1" class="confluenceTd">character </td> <td colspan="1" class="confluenceTd">New deadline date for the task. </td> </tr> <tr> <td colspan="1" class="confluenceTd">timeInSeconds</td> <td colspan="1" class="confluenceTd">integer</td> <td colspan="1" class="confluenceTd">Task time in seconds.</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">SET-TASK-COMMENTS</span><br /></strong> </p> <p> <strong>Description:</strong> Changes the results of the task. </p> <p> <strong>Return: </strong>character<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId </td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code </td> </tr> <tr> <td class="confluenceTd">threadSequence </td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process. </p></td> </tr> <tr> <td colspan="1" class="confluenceTd">comments</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Comment </td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-CARD-VALUE</span><br /></strong> </p> <p> <strong>Description: </strong>Returns the value of a form field. </p> <p> <strong>Return:</strong> character </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">fieldName</td> <td class="confluenceTd">character</td> <td class="confluenceTd">Name of form field</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">SAVE-AND-SEND-TASK</span><br /></strong> </p> <p> <strong>Description: </strong>Moves the request to the next activity.<strong><br /></strong> </p> <p> <strong>Return:</strong> TempTable </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> <th class="confluenceTh">Details</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">colleagueIds</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Users who will receive the task</td> <td colspan="1" class="confluenceTd">use character in format: "colab1,colab2,colab3"</td> </tr> <tr> <td class="confluenceTd">activityNumber</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Activity number</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">comments</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Comments</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">completeTask</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd">Indicates if the task must be completed (true) or only saved (false)</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">ttAttachments</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Request attachments</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttAttach</p> <p>    FIELD documentId AS INTEGER</p> <p>    FIELD documentVersion AS INTEGER</p> <p>    FIELD description AS CHARACTER</p> <p>    FIELD filename AS CHARACTER</p> <p>    FIELD filepath AS CHARACTER</p> <p>    FIELD principal AS LOGICAL.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">ttCardData</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Form data</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttCard</p> <p>    FIELD fieldName AS CHARACTER</p> <p>    FIELD fieldValue AS CHARACTER.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">ttAppointment</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Task annotations</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttAppointment</p> <p>    FIELD appointmentDate AS CHARACTER</p> <p>    FIELD appointmentSeconds AS INTEGER</p> <p>    FIELD appointmentSequence AS INTEGER.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">managerMode</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd"><p>Indicates whether the user is initiating the request as a</p> <p>process manager.</p></td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">threadSequence</td> <td colspan="1" class="confluenceTd">integer</td> <td colspan="1" class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are no activities,</p> <p>the value is 0 (zero), if there are any, this value can range</p> <p>from 1 to infinity depending on the amount of parallel</p> <p>activities existing in the process.</p></td> <td colspan="1" class="confluenceTd"> </td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">SAVE-AND-SEND-TASK-BY-REPLACEMENT</span><br /></strong> </p> <p> <strong>Description: </strong>Moves the request to the next activity using substitute user.<strong><br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> <th class="confluenceTh">Details</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">colleagueIds</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Users who will receive the task</td> <td colspan="1" class="confluenceTd">use character in format: "colab1,colab2,colab3"</td> </tr> <tr> <td class="confluenceTd">activityNumber</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Activity number</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">comments</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Comments</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">completeTask</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd">Indicates if the task must be completed (true) or only saved (false)</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">ttAttachments</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Request attachments</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttAttach</p> <p>    FIELD documentId AS INTEGER</p> <p>    FIELD documentVersion AS INTEGER</p> <p>    FIELD description AS CHARACTER</p> <p>    FIELD filename AS CHARACTER</p> <p>    FIELD filepath AS CHARACTER</p> <p>    FIELD principal AS LOGICAL.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">ttCardData</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Form data</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttCard</p> <p>    FIELD fieldName AS CHARACTER</p> <p>    FIELD fieldValue AS CHARACTER.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">ttAppointment</td> <td colspan="1" class="confluenceTd">TempTable</td> <td colspan="1" class="confluenceTd">Task annotations</td> <td colspan="1" class="confluenceTd"><p>DEFINE TEMP-TABLE ttAppointment</p> <p>    FIELD appointmentDate AS CHARACTER</p> <p>    FIELD appointmentSeconds AS INTEGER</p> <p>    FIELD appointmentSequence AS INTEGER.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">managerMode</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd"><p>Indicates whether the user is initiating the request as a</p> <p>process manager.</p></td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">threadSequence</td> <td colspan="1" class="confluenceTd">integer</td> <td colspan="1" class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If</p> <p>there are no activities, the value is 0 (zero), if there are any, this value</p> <p>can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">replacementId</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Registration of the substitute user</td> <td colspan="1" class="confluenceTd"> </td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">SET-AUTOMATIC-DECISION</span><br /></strong> </p> <p> <strong>Description: </strong>Selects user(s) and advance automatic activity<strong>.<br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> <th class="confluenceTh">Details</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> <td class="confluenceTd"> </td> </tr> <tr> <td class="confluenceTd">autoTaskNum</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Automatic activity number</td> <td class="confluenceTd"> </td> </tr> <tr> <td class="confluenceTd">taskNum</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Current activity number</td> <td class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">condition</td> <td colspan="1" class="confluenceTd">integer</td> <td colspan="1" class="confluenceTd">Automatic activity condition number</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">colleagueIds</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Users who will receive the task</td> <td colspan="1" class="confluenceTd">use character in format: "colab1,colab2,colab3"</td> </tr> <tr> <td colspan="1" class="confluenceTd">comments</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Comments</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">managerMode</td> <td colspan="1" class="confluenceTd">logical</td> <td colspan="1" class="confluenceTd">Indicates if the user is performing the task as a process manager</td> <td colspan="1" class="confluenceTd"> </td> </tr> <tr> <td colspan="1" class="confluenceTd">threadSequence</td> <td colspan="1" class="confluenceTd">integer</td> <td colspan="1" class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> <td colspan="1" class="confluenceTd"> </td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">TAKE-PROCESS-TASK</span><br /></strong> </p> <p> <strong>Description: </strong>Assumes a task<strong>.<br /></strong> </p> <p> <strong>Return:</strong> character </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">threadSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">TAKE-PROCESS-TASK-BY-REPLACEMENT</span><br /></strong> </p> <p> <strong>Description: </strong>Assumes a task using substitute user<strong>.<br /></strong> </p> <p> <strong>Return:</strong> character </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">threadSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> </tr> <tr> <td colspan="1" class="confluenceTd">replacementId</td> <td colspan="1" class="confluenceTd">character</td> <td colspan="1" class="confluenceTd">Registration of the substitute user.</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-ATTACHMENTS</span><br /></strong> </p> <p> <strong>Description: </strong>Returns the request attachments<strong><br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-ALL-ACTIVE-STATES</span><br /></strong> </p> <p> <strong>Description: </strong>Returns the activity number where the request is. </p> <p> <strong>Return:</strong> TempTable </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-ACTUAL-THREAD</span><br /></strong> </p> <p> <strong>Description:</strong> Returns the thread sequence of a request. </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">stateSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">State sequence</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-AVAILABLE-STATES</span><br /></strong> </p> <p> <strong>Description: </strong>Returns the number of the next activity in a request<strong>.<br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processId</td> <td class="confluenceTd">character</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">threadSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-AVAILABLE-STATES-DETAIL</span><br /></strong> </p> <p> <strong>Description:</strong> Returns details on the activities available for selection. </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processId</td> <td class="confluenceTd">character</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">threadSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-AVAILABLE-USERS</span><br /></strong> </p> <p> <strong>Description: </strong>Returns users who can perform a current task in a request.<strong><br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">taskNumber</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Activity number</td> </tr> <tr> <td class="confluenceTd">threadSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-INSTANCE-CARD-DATA</span><br /></strong> </p> <p> <strong>Description: </strong>Returns the field values of form<strong>.<br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processInstanceId</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Process code</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-AVAILABLE-PROCESS</span><br /></strong> </p> <p> <strong>Description:</strong> Returns the processes the user can initiate in a request. </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong><br /></strong> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">GET-AVAILABLE-USERS-START</span><br /></strong> </p> <p> <strong>Description: </strong>Returns the users available in opening a request.<br /> </strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">processId</td> <td class="confluenceTd">character</td> <td class="confluenceTd">Process code</td> </tr> <tr> <td class="confluenceTd">taskNum</td> <td class="confluenceTd">integer</td> <td class="confluenceTd">Activity number</td> </tr> <tr> <td class="confluenceTd">threadSequence</td> <td class="confluenceTd">integer</td> <td class="confluenceTd"><p>Indicates if there is any parallel activity in the process. If there are none, the value is 0 (zero),</p> <p>if there are any, this value can range from 1 to infinity depending on the amount of</p> <p>parallel activities existing in the process.</p></td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Operation ID: <span style="color: rgb(255, 0, 0);">SEARCH-PROCESS</span><br /></strong> </p> <p> <strong>Description: </strong>Searches processes available for initialization<strong>.<br /></strong> </p> <p> <strong>Return: </strong>TempTable<strong><br /></strong> </p> <p> <strong>Parameters:</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh">Name</th> <th class="confluenceTh">Type</th> <th class="confluenceTh">Description</th> </tr> <tr> <td class="confluenceTd">content</td> <td class="confluenceTd">character</td> <td class="confluenceTd">Name of the process to be searched</td> </tr> <tr> <td class="confluenceTd">favorite</td> <td class="confluenceTd">logical</td> <td class="confluenceTd">Search in the favorite list or the standard list.</td> </tr> </tbody> </table> </div> <p> </p> <h3 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-ExemplodeUso"> <u>Usage example</u> </h3> <p> Find below an example of a Datasul Metadata Freeform form that performs some operations with the <strong>ECM-REQUEST-SERVICE</strong> command. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/81789205/TesteWorkflow1.png?version=1&modificationDate=1381343934000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/81789205/TesteWorkflow1.png?version=1&modificationDate=1381343934000&api=v2"> </p> <p style="text-align: center;"> <strong>Figure 6.2.a</strong> </p> <p> Figure 6.2.a shows a form that when loaded performs the search for available processes for the logged user and presents them in a grid. In Figure 6.2.a, the process "Proc3" was selected, which has an associated form. The form fields and annotation data were informed. Finally, the user clicked the START-PROCESS button, creating a new instance of the process, resulting in the <em>process ID</em> 119. </p> <p>Below, several form scripts are presented.</p> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-varDefinition">varDefinition</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">/* Start WIDGET-HANDLE - Do not edit, use CTRL + SHIFT + H */ DEFINE VARIABLE txtComment AS WIDGET-HANDLE. DEFINE VARIABLE txtDescricao AS WIDGET-HANDLE. DEFINE VARIABLE canvasCard AS WIDGET-HANDLE. DEFINE VARIABLE txtCodigo AS WIDGET-HANDLE. DEFINE VARIABLE lblProcList AS WIDGET-HANDLE. DEFINE VARIABLE canvasAppointment AS WIDGET-HANDLE. DEFINE VARIABLE lblProcInstId AS WIDGET-HANDLE. DEFINE VARIABLE lblAttach AS WIDGET-HANDLE. DEFINE VARIABLE txtProcInstId AS WIDGET-HANDLE. DEFINE VARIABLE lblApp AS WIDGET-HANDLE. DEFINE VARIABLE gridProcess AS WIDGET-HANDLE. DEFINE VARIABLE dtf AS WIDGET-HANDLE. DEFINE VARIABLE canvasAttach AS WIDGET-HANDLE. DEFINE VARIABLE txtSec AS WIDGET-HANDLE. DEFINE VARIABLE lblForm AS WIDGET-HANDLE. /* End WIDGET-HANDLE */ DEFINE VARIABLE resp AS CHARACTER. DEFINE VARIABLE ttResult AS TEMP-TABLE.</pre> </div> </div> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-Canvas.creationComplete">Canvas.creationComplete</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">PROCESS-WAIT(TRUE). /* Style arrow for some components */ CALLFUNCTION(lblProcList, "setStyle", "fontSize", 11). CALLFUNCTION(lblProcList, "setStyle", "fontWeight", "bold"). CALLFUNCTION(lblProcInstId, "setStyle", "fontSize", 11). CALLFUNCTION(lblProcInstId, "setStyle", "fontWeight", "bold"). CALLFUNCTION(canvasAttach, "setStyle", "backgroundColor", "#d9dbe1"). CALLFUNCTION(lblAttach, "setStyle", "fontSize", 11). CALLFUNCTION(lblAttach, "setStyle", "fontWeight", "bold"). CALLFUNCTION(canvasCard, "setStyle", "backgroundColor", "#d9dbe1"). CALLFUNCTION(lblForm, "setStyle", "fontWeight", "bold"). CALLFUNCTION(canvasAppointment, "setStyle", "backgroundColor", "#d9dbe1"). CALLFUNCTION(lblApp, "setStyle", "fontWeight", "bold"). /* Obtains the processes available for the user */ resp = ECM-REQUEST-SERVICE("WORKFLOW", "GET-AVAILABLE-PROCESSES"). if RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error while running GET-AVAILABLE-PROCESS". ELSE DO: ttResult = JSON-DECODE(resp). gridProcess:QUERY-OPEN(ttResult). END. PROCESS-WAIT(FALSE).</pre> </div> </div> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-btoStartProcess.click">btoStartProcess.click</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">DEFINE VARIABLE idx AS INTEGER. DEFINE VARIABLE processId AS CHARACTER. DEFINE VARIABLE procComment AS CHARACTER. DEFINE VARIABLE aux AS CHARACTER. DEFINE VARIABLE once AS LOGICAL INITIAL true. DEFINE VARIABLE dt AS DATE. DEFINE VARIABLE iaux AS INTEGER. /* Obtains the process selected on the Grid */ idx = GETPROPERTY(gridProcess, "selectedIndex"). ttResult:SET-CURRENT(idx). processId = ttResult.processId. /* Obtains the comment */ procComment = txtComment:SCREEN-VALUE. /* Obtains files to attach from the upload component */ DEFINE VARIABLE upload AS WIDGET-HANDLE. DEFINE TEMP-TABLE ttFiles FIELD name AS CHARACTER FIELD type AS CHARACTER FIELD appServerPath AS CHARACTER FIELD jbossPath AS CHARACTER FIELD size AS DECIMAL. ttFiles = GETPROPERTY(upload,"files"). /* Prepares Temp-Table for attachments */ DEFINE TEMP-TABLE ttAttach FIELD documentId AS INTEGER FIELD documentVersion AS INTEGER FIELD description AS CHARACTER FIELD filename AS CHARACTER FIELD filepath AS CHARACTER FIELD principal AS LOGICAL. FOR EACH ttFiles: CREATE ttAttach. ttAttach.documentVersion = 1000. ttAttach.description = ttFiles.name. ttAttach.filename = ttFiles.name. ttAttach.filepath = ttFiles.jbossPath. IF once THEN DO: ttAttach.principal = true. once = false. END. END. /* Prepares Temp-Table with values from the form */ DEFINE TEMP-TABLE ttCard FIELD fieldName AS CHARACTER FIELD fieldValue AS CHARACTER. CREATE ttCard. ttCard.fieldName = "A1_CODIGO". aux = txtCodigo:SCREEN-VALUE. ttCard.fieldValue = aux. CREATE ttCard. ttCard.fieldName = "A1_DESCRICAO". aux = txtDescricao:SCREEN-VALUE. ttCard.fieldValue = aux. /* Prepares Temp-Table with values from the Annotation */ DEFINE TEMP-TABLE ttAppointment FIELD appointmentDate AS CHARACTER FIELD appointmentSeconds AS INTEGER FIELD appointmentSequence AS INTEGER. aux = txtSec:SCREEN-VALUE. IF aux <> "" THEN DO: CREATE ttAppointment. dt = GETPROPERTY(dtf, "selectedDate"). aux = STRING(dt, "99/99/9999"). aux = aux + " 00:00:00". ttAppointment.appointmentDate = aux. iaux = INTEGER(txtSec:SCREEN-VALUE). ttAppointment.appointmentSeconds = iaux. ttAppointment.appointmentSequence = 1. END. /* Starts the process */ resp = ECM-REQUEST-SERVICE("WORKFLOW", "START-PROCESS", processId, "framework", 2, procComment, true, ttAttach, ttCard, ttAppointment, false). IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error when running START-PROCESS". ELSE DO: txtProcInstId:SCREEN-VALUE = resp. END.</pre> </div> </div> <p> </p> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-btoCancelProcess.click">btoCancelProcess.click</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">DEFINE VARIABLE processInstId AS INTEGER. processInstId = INTEGER(txtProcInstId:SCREEN-VALUE). /* If cancellation Ok, it returns ' true ', if not, it returns the error message */ resp = ECM-REQUEST-SERVICE("WORKFLOW", "CANCEL-PROCESS", processInstId, "Finaliza processo!"). IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error while running GET-AVAILABLE-PROCESS". ELSE DO: MESSAGE "Process successfully cancelled!" VIEW-AS ALERT-BOX INFORMATION TITLE "CANCEL-PROCESS". txtProcInstId:SCREEN-VALUE = "". END.</pre> </div> </div> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-btoGetCardData.click">btoGetCardData.click</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">DEFINE VARIABLE procInstId AS INTEGER. procInstId = INTEGER(txtProcInstId:SCREEN-VALUE). /* Obtains one field at a time: GET-CARD-VALUE resp = ECM-REQUEST-SERVICE("WORKFLOW", "GET-CARD-VALUE", procInstId, "A1_CODIGO"). IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error when running GET-CARD-VALUE". ELSE DO: txtCodigo:SCREEN-VALUE = resp. END. resp = ECM-REQUEST-SERVICE("WORKFLOW", "GET-CARD-VALUE", procInstId, "A1_DESCRICAO"). IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error when running GET-CARD-VALUE". ELSE DO: txtDescricao:SCREEN-VALUE = resp. END. */ /* Obtains all fields from the form: GET-INSTANCE-CARD-DATA */ resp = ECM-REQUEST-SERVICE("WORKFLOW", "GET-INSTANCE-CARD-DATA", procInstId). DEFINE VARIABLE ttCard AS TEMP-TABLE. DEFINE VARIABLE fieldName AS CHARACTER. DEFINE VARIABLE fieldValue AS CHARACTER. IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error when running GET-INSTANCE-CARD-DATA". ELSE DO: ttCard = JSON-DECODE(resp). FOR EACH ttCard: fieldName = ttCard.fieldName. fieldValue = ttCard.fieldValue. IF fieldName = "A1_CODIGO" THEN DO: txtCodigo:SCREEN-VALUE = fieldValue. END. IF fieldName = "A1_DESCRICAO" THEN DO: txtDescricao:SCREEN-VALUE = fieldValue. END. END. END.</pre> </div> </div> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-btoAvailableUsers.click">btoAvailableUsers.click</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">DEFINE VARIABLE procInstId AS INTEGER. procInstId = INTEGER(txtProcInstId:SCREEN-VALUE). /* Obtains a user list for the task */ resp = ECM-REQUEST-SERVICE("WORKFLOW", "GET-AVAILABLE-USERS", procInstId, 2, 0). DEFINE VARIABLE ttUsers AS TEMP-TABLE. IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error when running GET-AVAILABLE-USERS". ELSE DO: ttUsers = JSON-DECODE(resp). FOR EACH ttUsers: DISPLAY ttUsers.user. END. END.</pre> </div> </div> <h4 id="id-7.InteraçãocomoEnginedeWorkflowAtravésdeFormuláriosMetadados-btoTakeTask.click">btoTakeTask.click</h4> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Eclipse; brush: plain; gutter: true" style="font-size: 12px;">DEFINE VARIABLE procInstId AS INTEGER. /* Obtains the process instance Id */ procInstId = INTEGER(txtProcInstId:SCREEN-VALUE). /* Assumes current task */ resp = ECM-REQUEST-SERVICE("WORKFLOW", "TAKE-PROCESS-TASK", procInstId, 0). IF RESULT-WITH-ERROR(resp) THEN DO: MESSAGE resp VIEW-AS ALERT-BOX ERROR TITLE "Error when running TAKE-PROCESS-TASK". ELSE DO: DISPLAY resp. END.</pre> </div> </div> </div> |