Page tree

Versions Compared

Key

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

In this tutorial you will learn how to configure ConfiForms to provide sequential approvals workflow using actions defined by IFTTT macro rules.

This tutorial is not very simple, and you have to pay attention to details. And it is an alternative to the tutorial: Form with sequential approvals workflow

To learn the basics about ConfiForms see Creating a simple form

 


Same setup as in Form with sequential approvals workflow , but instead of Field Definition Rule for  "statelabel" with a formula field we will have a number of IFTTT macros (macro updates the original record based on the condition we set) 


We will have 3 user groups who should be able to approve a proposal in a sequential way, one by one and only when a proposal is in a certain state.

...

So in total we will have 5 fields here:

 


 


  • form has additional user groups set as administrators

...

  • Checkbox to track approvals by developers (see "devs" set as a user group this field is visible to)
  • Checkbox to track approvals by projects managers (see "pm" set as a user group this field is visible to)
  • Checkbox to track approvals by finance (see "fin" set as a user group this field is visible to)
  • We have also specified the rules to hide check box fields when record is created

    The rule means that when an entry (record) does not have an ID (id:) then hide checkbox fields (field names are listed as csv: approvedByDevs,approvedByPM,approvedByFin)
  • statelabel field is a simple text field which will hold the status label for us

...


And we will have 4 IFTTT rules which handle the approval state for us

  1. The record get's created with state "Created"
  2. When it is approved by Devs it get's a state "Approved By Devs" (condition in IFTTT:  approvedByDevs:true)
  3. When it is approved by PMs it get's a state "Approved by PMs" (condition in IFTTT:  approvedByPM:true)
  4. When it is approved by Finance it get's a state "Approved by Finance" (condition in IFTTT:  approvedByFin:true)

...


3 IFTTTs are set on modify event and 1 is on created 


 


The whole storage format for the form is listed below:

Code Block
<ac:structured-macro ac:macro-id="81b6f18d-2cd2-4604-b9f3-7a3ea40d77fd" ac:name="confiform" ac:schema-version="1">
  <ac:parameter ac:name="additionalFormAdmins">devs,pm,fin</ac:parameter>
  <ac:parameter ac:name="formName">proposals</ac:parameter>
  <ac:parameter ac:name="saveButtonLabel">Register proposal</ac:parameter>
  <ac:parameter ac:name="registrationFormTitle">Register</ac:parameter>
  <ac:rich-text-body>
    <p>
      <ac:structured-macro ac:macro-id="5e9e1e46-2d3d-4847-b4c4-01e7345b2a6c" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="fieldName">proposaltext</ac:parameter>
        <ac:parameter ac:name="fieldLabel">Proposal text</ac:parameter>
        <ac:parameter ac:name="type">textarea</ac:parameter>
      </ac:structured-macro>
    </p>
    <p>
      <ac:structured-macro ac:macro-id="e4ddb043-92a7-4608-81f3-1e5b2138c58c" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="fieldName">statelabel</ac:parameter>
        <ac:parameter ac:name="fieldLabel">State</ac:parameter>
        <ac:parameter ac:name="type">text</ac:parameter>
      </ac:structured-macro>
    </p>
    <p>
      <ac:structured-macro ac:macro-id="2e4eeef9-293e-4054-9e94-4297ea87ee17" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="editRestrictions">devs</ac:parameter>
        <ac:parameter ac:name="fieldName">approvedByDevs</ac:parameter>
        <ac:parameter ac:name="fieldLabel">Approved (Devs)</ac:parameter>
        <ac:parameter ac:name="restrictions">devs</ac:parameter>
        <ac:parameter ac:name="type">checkbox</ac:parameter>
      </ac:structured-macro>
    </p>
    <ac:structured-macro ac:macro-id="cad189f1-b3b6-4f33-8b79-95bd09898572" ac:name="confiform-field-definition" ac:schema-version="1">
      <ac:parameter ac:name="editRestrictions">pm</ac:parameter>
      <ac:parameter ac:name="fieldName">approvedByPM</ac:parameter>
      <ac:parameter ac:name="fieldLabel">Approved By (PMs)</ac:parameter>
      <ac:parameter ac:name="restrictions">pm</ac:parameter>
      <ac:parameter ac:name="type">checkbox</ac:parameter>
    </ac:structured-macro>
    <p>
      <ac:structured-macro ac:macro-id="15424339-b023-4f46-8924-5798fa2246bb" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="editRestrictions">fin</ac:parameter>
        <ac:parameter ac:name="fieldName">approvedByFin</ac:parameter>
        <ac:parameter ac:name="fieldLabel">Approved By (Finance)</ac:parameter>
        <ac:parameter ac:name="restrictions">fin</ac:parameter>
        <ac:parameter ac:name="type">checkbox</ac:parameter>
      </ac:structured-macro>
      <ac:structured-macro ac:macro-id="bace5ca5-6709-4915-ab2a-d460871e892d" ac:name="confiform-entry-register" ac:schema-version="1">
        <ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter>
        <ac:rich-text-body>
          <p> </p>
        </ac:rich-text-body>
      </ac:structured-macro>
      <ac:structured-macro ac:macro-id="4cf642af-0a9e-41ab-817c-53dbf575db48" ac:name="confiform-field-definition-rules" ac:schema-version="1">
        <ac:parameter ac:name="condition">id:[empty]</ac:parameter>
        <ac:parameter ac:name="fieldName">approvedByDevs,approvedByPM,approvedByFin</ac:parameter>
        <ac:parameter ac:name="action">Hide field</ac:parameter>
        <ac:parameter ac:name="actionFieldName">statelabel</ac:parameter>
      </ac:structured-macro>
    </p>
    <p>
      <ac:structured-macro ac:macro-id="dc49fcc8-7dd0-4ebe-b062-da5f88970cea" ac:name="confiform-field-definition-rules" ac:schema-version="1">
        <ac:parameter ac:name="condition">id:[empty]</ac:parameter>
        <ac:parameter ac:name="fieldName">statelabel</ac:parameter>
        <ac:parameter ac:name="action">Hide field</ac:parameter>
        <ac:parameter ac:name="actionFieldName">statelabel</ac:parameter>
      </ac:structured-macro>
    </p>
    <ac:structured-macro ac:macro-id="e0764127-8f55-4ff0-bbc8-d942186acae6" ac:name="confiform-ifttt" ac:schema-version="1">
      <ac:parameter ac:name="action">Create ConfiForms Entry</ac:parameter>
      <ac:parameter ac:name="event">onCreated</ac:parameter>
      <ac:parameter ac:name="title">entryId=[entry.id]&amp;statelabel=Created</ac:parameter>
      <ac:rich-text-body>
        <p> </p>
      </ac:rich-text-body>
    </ac:structured-macro>
    <ac:structured-macro ac:macro-id="a6829260-ae72-47a8-8ab6-10e2052f3e3a" ac:name="confiform-ifttt" ac:schema-version="1">
      <ac:parameter ac:name="condition">approvedByDevs:true</ac:parameter>
      <ac:parameter ac:name="action">Create ConfiForms Entry</ac:parameter>
      <ac:parameter ac:name="event">onModified</ac:parameter>
      <ac:parameter ac:name="title">entryId=[entry.id]&amp;statelabel=Approved By Devs</ac:parameter>
      <ac:rich-text-body>
        <p> </p>
      </ac:rich-text-body>
    </ac:structured-macro>
    <ac:structured-macro ac:macro-id="d7732e21-cc32-4e70-97f2-a2af333ff262" ac:name="confiform-ifttt" ac:schema-version="1">
      <ac:parameter ac:name="condition">approvedByPM:true</ac:parameter>
      <ac:parameter ac:name="action">Create ConfiForms Entry</ac:parameter>
      <ac:parameter ac:name="event">onModified</ac:parameter>
      <ac:parameter ac:name="title">entryId=[entry.id]&amp;statelabel=Approved By PMs</ac:parameter>
      <ac:rich-text-body>
        <p> </p>
      </ac:rich-text-body>
    </ac:structured-macro>
    <ac:structured-macro ac:macro-id="d635786d-7a00-478f-a308-7cb7dfb6f030" ac:name="confiform-ifttt" ac:schema-version="1">
      <ac:parameter ac:name="condition">approvedByFin:true</ac:parameter>
      <ac:parameter ac:name="action">Create ConfiForms Entry</ac:parameter>
      <ac:parameter ac:name="event">onModified</ac:parameter>
      <ac:parameter ac:name="title">entryId=[entry.id]&amp;statelabel=Approved By Finance</ac:parameter>
      <ac:rich-text-body>
        <p> </p>
      </ac:rich-text-body>
    </ac:structured-macro>
  </ac:rich-text-body>
</ac:structured-macro>



...

  • First edit button, we call it "ApproveDEV" has the following settings

    Visible to only "devs" user group and hidden if already approved

  • Second edit button, we call it "ApprovePM" has the following settings

    Visible to only "pm" group and hidden when the following condition is met: 

    Code Block
    approvedByFin:true OR approvedByPM:true OR approvedByDevs:false

    Explanation: Button will be hidden when it already approved by PMs, or not approved yet by DEVs, or already approved by FINANCE

  • Third edit button, we call it "ApproveFIN" has the following settings

    Visible to only users in "fin" user group and hidden when the following condition is met: 

    Code Block
    approvedByFin:true OR approvedByPM:false OR approvedByDevs:false

    Explanation: Button will be hidden when it already approved by FINANCE, or not approved yet by PMs or not yet approved by DEVs

    Full storage format for this list view is listed below

    Code Block
    <ac:structured-macro ac:macro-id="96b70748-706b-4115-aaf2-5b9ae013b151" ac:name="confiform-list"
                                               ac:schema-version="1">
    <ac:parameter ac:name="formName">proposals</ac:parameter>
    <ac:rich-text-body>
      <h3>Proposal:</h3>
      <p>
        <ac:structured-macro ac:macro-id="ab7fd363-7416-40c7-b9fa-58d253f49c81" ac:name="confiform-field"
                             ac:schema-version="1">
          <ac:parameter ac:name="fieldName">proposaltext</ac:parameter>
        </ac:structured-macro>
      </p>
      <p>
        <strong>
          <ac:structured-macro ac:macro-id="cf8c064e-18f4-48ea-922c-18b9b348f13d" ac:name="confiform-field"
                               ac:schema-version="1">
            <ac:parameter ac:name="fieldName">statelabel</ac:parameter>
          </ac:structured-macro>
        </strong>
        <ac:structured-macro ac:macro-id="f04196d7-d5fe-49ed-a347-7a7234fe1b96" ac:name="confiform-entry-edit"
                             ac:schema-version="1">
          <ac:parameter ac:name="restrictions">devs</ac:parameter>
          <ac:parameter ac:name="showBoth">false</ac:parameter>
          <ac:parameter ac:name="hideIfMatches">approvedByDevs:true</ac:parameter>
          <ac:parameter ac:name="updateMessage">Approved</ac:parameter>
          <ac:parameter ac:name="editButtonLabel">ApproveDEV</ac:parameter>
        </ac:structured-macro>
        <ac:structured-macro ac:macro-id="c69b2a2c-b742-448d-be62-118d36680eb3" ac:name="confiform-entry-edit"
                             ac:schema-version="1">
          <ac:parameter ac:name="restrictions">pm</ac:parameter>
          <ac:parameter ac:name="showBoth">false</ac:parameter>
          <ac:parameter ac:name="hideIfMatches">approvedByFin:true OR approvedByPM:true OR approvedByDevs:false
          </ac:parameter>
          <ac:parameter ac:name="updateMessage">Approved</ac:parameter>
          <ac:parameter ac:name="editButtonLabel">ApprovePM</ac:parameter>
        </ac:structured-macro>
        <ac:structured-macro ac:macro-id="4ae8ce8d-066b-40b4-a74a-a564f58dc03a" ac:name="confiform-entry-edit"
                             ac:schema-version="1">
          <ac:parameter ac:name="restrictions">fin</ac:parameter>
          <ac:parameter ac:name="showBoth">false</ac:parameter>
          <ac:parameter ac:name="hideIfMatches">approvedByFin:true OR approvedByPM:false OR approvedByDevs:false
          </ac:parameter>
          <ac:parameter ac:name="updateMessage">Approved</ac:parameter>
          <ac:parameter ac:name="editButtonLabel">ApproveFIN</ac:parameter>
        </ac:structured-macro>
      </p>
      <p>&nbsp;</p>
    </ac:rich-text-body>
    </ac:structured-macro>

    And this is how the form looks like in Confluence view mode:


    This is how it is seeing by FINANCE team


 

 

 

 

 

 

...