The concepts behind the Teams Approvals app are well known: simple workflow that’s easy to use. Well, things get a little less simple but remain still simple to use with the introduction of approval templates. Microsoft signaled the new functionality at Ignite last March, blogged about approval templates (among other features) in April, and followed up with message center notification MC246003. The latest update is that approval templates will achieve general availability at the end of May 2021 with all tenants receiving the functionality by mid-June. The feature is available now in preview, if this is allowed by your tenant.
Up to now, only basic Teams approvals are available. Basic approvals use a standard form which Microsoft recently upgraded to support eSignature capabilities. However, the basic approval request is very basic and includes approver names and some details about the request. It’s enough to get some work done, but not good enough for many workflow scenarios. This is where approval templates come in.
Sample Approval Templates and the Role of Forms
Microsoft 365 roadmap item 81408 briefly informs us that “User can simply choose a template provided by their tenant admins or a Team Owner when creating a new approval request.” Putting some more flesh on the bones of this sketchy description, to give customers a start, Microsoft has a set of sample approval templates in the “template store” (Figure 1).
Figure 1: Teams sample approval templates
Organizations can use the sample templates as the basis for the templates they publish to users or create new templates from scratch to satisfy specific business requirements. Sample templates like purchase orders, business trips, and item maintenance show how to be creative when composing templates, but you’re always limited by the form designer. Teams has chosen a cut-down version of Microsoft Forms for this purpose which supports a subset of the field types available in normal Forms. In saying that, you can still get a lot of work done with text fields, date fields, attachments, and choices. The good thing about choosing Forms is that users can process approvals on mobile devices.
Scoping Templates
Not everyone needs access to Teams approval templates. When you create a new template, you scope it to define who can create approval requests using the template. The choices are:
Org-wide: Anyone in the organization can use the template to create a new approval request.
Org-wide but limited to specific people: Only the specified users can use the template.
Team-wide: Any team member can use the template.
Creating a New Approvals Template
Now that we know the basics, let’s move on to how to create a template. On an ongoing basis, the Office 365 for IT Pros team conducts chapter reviews to ensure technical accuracy and to pick up errors like grammar and spelling mistakes. At present, we are in the middle of a full-scale review cycle as we prepare for the launch of the 2022 edition in July. Given this, it seemed to make sense to build an approval template from scratch to allow an author to ask an editor for a technical or copy edit.
Anyone with experience of using Microsoft Forms will not be challenged when creating a new approvals template. A three-stage process is used:
Assign basic settings like the template name, its category, description, and scope.
Edit the template layout (Figure 2).
Figure 2: Editing the form design for a new Teams approvals template
Add workflow settings. For example, can the requester decide who should approve requests or should the template include a fixed set of approvers. You can also set custom responses for approvers and define if the sender needs to include an attachment. As you can see in Figure 3, our template mandates an attachment (the file to review) and we use custom responses to approve or deny requests created using the template.
Figure 3: Adding workflow settings for an approvals template
After saving the template, you can preview it to see how approval requests look like when created. This is useful, but a better test is to use the template to create a new request to see how the form looks when received by an approver. Figure 4 shows why. On the left, the descriptions used for the fields in the form are quite long, so they take up a lot of space when viewed by an approver. Making the descriptions shorter (the right-hand image) allows Teams to display more of the important data. Including that an attachment is present. Figure 4 also shows how the custom responses appear to a reviewer.
Figure 4: The importance of text descriptions when displaying approval requests
Apart from displaying different information to a basic approval request, the processing of requests created using a template follows the same route. Users can see the requests they have sent and received through the Approvals app (Figure 5). There’s no obvious difference in the appearance of requests created using the basic form and those created with a custom template.
Figure 5: A set of approvals received by a Teams user
The Approvals Admin Team
The first time you create a custom approvals template, Teams creates a new team called the Approvals App Admin team. While team owners can create new approval templates for use in their teams, the owners of this team are allowed to create new org-wide templates. Although the Teams development group wants to use their own product, a mail-enabled security group would be a better choice for this purpose, not least because the danger that the team is removed by an expiration policy because of lack of activity. If something happens to the team and it isn’t restored in the 30-day soft-deletion period, the link between the Approvals app and the team will be broken. Microsoft isn’t saying, but I assume that some support magic will then be needed to restore the connection.
Adding Value
Adding approval templates makes the Teams Approvals app much more functional while retaining its ease of use. There’s a lot to like about the new capabilities and it will be interesting to see how inventive people are in how they use templates. I expect Microsoft to add more features (and probably more sample templates) over time to build out the Teams Approvals app. It’s something worth keeping an eye on.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}