Introduction
We highly recommend reviewing the following Progressus DevOps/Jira Integration Overview article first: Progressus DevOps/Jira Integration Overview
Introduction to DevOps Progressus Integration Extension/Apps
This is an Integration solution to allow data entered in DevOps\Jira to flow to Progressus in order to minimize the number of places that users need to enter their time. These enhancements will connect DevOps\Jira objects such as Projects, Features, and Tasks with their related Progressus Objects. This Power Platform automated solution consists of the following key features:
Progressus
Setup
Integration Setup page (Page ID: 14046103) This page is used to initial setup, in the “Integration Type” field one can select whether integration is with DevOps or Jira.
Integration Project List (Page ID 14046104)
This page is used to display the list of Projects in Integrated System and data in this page is non-editable and populated from Integrated System (DevOps or Jira) using Power Automation.
When a Progressus Project is specified as valid for external time entry the user should be presented with a list of projects from the target integration system.
The user can choose a project to link with the Progressus Project. The unique identifier and the name for the project needs to be stored in Progressus.
A user should not be able to link the same project to multiple Progressus projects.
Integration Task List (Page ID 14046106)
This page is used to display the list of tasks in Integrated System and data in this page is non-editable and populated from Integrated System (DevOps or Jira) using Power Automation.
When a Progressus Task is specified as valid for external time entry the user should be presented with a list of Features under the parental Project from the target integration system.
The user can choose a feature to link with the Progressus task. The unique identifier and the name for the feature needs to be stored in Progressus.
A user should not be able to link the same Feature to multiple Progressus tasks.
Resource Card (Page ID 76)
In the Resource Card for enabling the user for time entry from integration system, use the Boolean field “External Time Entry”
Need to add a field to designate a user as an external time entry system (DevOps/Jira)
When this is set to true email address is required.
If “External Time Entry User” is set as True, then E-Mail should not be blank, system will throw error if the E-Mail is blank. E-Mail has validation and it checks the corresponding resource in the integrated system (DevOps/ Jira) and there should be unique resource corresponding to the email ID. In case there is no resource found or more than 1 resource is found in the integrated system corresponding to the E-Mail then system will give error.
Project Card (Page ID 14045671)
A user should be able to specify a project as valid for external time entry
If The integration is enabled the user should be able to mark a project as valid for external time entry.
When a Progressus Project is specified as valid for external time entry the user should be presented with a list of projects from the target integration system.
The user can choose a project to link with the Progressus Project. The unique identifier and the name for the project needs to be stored in Progressus.
A user should not be able to link the same project to multiple progressus projects.
New Fields Added:
- External Time Entry (Boolean)
- Integration Project Name (Text)
Job Task Card (Page ID 1003)
A User should be able to specify a task as valid for external time entry.
If The integration is enabled and The parental project is specified as a development project And The parental project is linked to an external system project.
When a Progressus Task is specified as valid for external time entry the user should be presented with a list of Features under the parental Project from the target integration system.
The user can choose a feature to link with the Progressus task. The unique identifier and the name for the feature needs to be stored in Progressus.
A user should not be able to link the same Feature to multiple Progressus tasks.
New Fields Added:
- External Time Entry (Boolean)
- Integration Task Name (Text)
Integration Log (Page ID 14046115)
New page and table created for creating log entries of API calls. There is provision to retry/ resolve the errors by setting the Boolean field “Retry” as true.
Time Entry
From Power Automate, Time Entry of resources are pushed to Progressus.
APIs Used
The End Point for calling API using basic authorization will be following:
https://api.businesscentral.dynamics.com/v1.0/<tenantid>/api/<API publisher>/<API group>/<API version>/companies(<company id>)/EntityName
Reference Documents for more details:
Example URL:
https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe9-6a2aad51085c/sandbox/api/progressus/resource/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/resources
Name | Page ID | Page Name | Example URL |
---|---|---|---|
Resources | 14046092 | Resources API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/<tenantid>/sandbox/api/progressus/resource/v1.0/companies(<companyid>)/resources |
Projects | 14046090 | Project API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/project/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/projects |
External Projects | 14046108 | External Project API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/externalproject/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/externalprojects |
Integration Projects | 14046105 | Integration Projects API PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/integrationproject/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/integrationprojects |
Tasks | 14046091 | Task API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/task/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/tasks |
External Tasks | 14046109 | External Task API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/externaltask/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/externaltasks |
Integration Tasks | 14046107 | Integration Task API PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/integrationtask/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/integrationtasks |
TimeEntry/TimeCard | 14046095 | Time Cards API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/timecard/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/timecards |
TimePeriods | 14046093 | Time Periods API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/timeperiod/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/timeperiods |
Integration Entry Log | 14046114 | Integration Log API PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/integrationlog/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/integrationlogs |
Integration Setup | 14046097 | Integration Setup API v1 PGS | https://api.businesscentral.dynamics.com/v1.0/7ff9c274-542c-4f17-9fe96a2aad51085c/sandbox/api/progressus/integrationsetup/v1.0/companies(6ff64c7a-b1fd-ea11-bc7d-00155df3a615)/integrationsetup |
Power Automate
GetConnectionInfo
Triggered By | Flow Inputs | Triggers | Progressus APIs |
---|---|---|---|
CheckRecentChanges, Get Project Tasks, GetTime, Logging_Progressus, Project_Progressus, Task_Progressus, Timecard_Progressus | None | None | Integration Setup |
Description: This is a child flow that contains setup information that is referenced and used by most of the other flows. This flow should be edited when doing initial setup of the integration. Values in this flow are used to replace the {bracketed} items of URL requests such as this:
https://api.businesscentral.dynamics.com/{ProgressusAPIVersion}/{TenantID}/{EnvironmentName}/api/progressus/project/{ProgressusAPIVersion2}/companies({CompanyID})/projects
It also contains authentication information for connecting to DevOps or another source system.
CheckRecentChanges
Triggered By | Flow Inputs | Triggers | DevOps APIs |
---|---|---|---|
None (Scheduled) | None | GetProject Tasks, Get Time, GetConnectionInfo | None |
Description:
This flow runs every 30 minutes by default and triggers the GetProjectsTasks and GetTime flows to run. Can be edited to change the frequency that it runs. Will trigger DevOps or JIRA flows based on IntegrationType field from Progressus Setup.
GetProjectsTasks_DevOps
Triggered By | Flow Inputs | Triggers | DevOps APIs |
---|---|---|---|
CheckRecentChanges | Type of Update (All or Recent), Minutes (Recent timespan) | WorkItems |
Description: Checks for recent Feature changes in DevOps. If there are recent feature changes, it will find the parent projects of the features that have changed and then call the Project_Progressus flow for each project and the Task_Progressus flow for each Feature.
This flow can also be triggered manually and can be told to check for All Features rather than just ones that have changed recently. This manual trigger option is helpful when doing the initial syncing of all Features\Projects.
GetTime_DevOps
Triggered By | Flow Inputs | Triggers | DevOps APIs |
---|---|---|---|
CheckRecentChanges | Minutes (Recent timespan) | GetConnectionInfo, Timecard_Progressus, Logging_Progressus | WorkItems, WorkItemRevisions |
Description: Checks for recent Task changes in DevOps. For each recently changed task, it will check for previous versions of the Task to determine what hours were added to the task today. The task’s parent Feature is also found in order to properly match the DevOps Task to the appropriate Task in Progressus. Relevant information for each task is then passed to the Timecard_Progressus flow.
Project_Progressus
Triggered By | Flow Inputs | Triggers | Progressus APIs |
---|---|---|---|
GetProjectsTasks | ProjectID, ProjectName | GetConnectionInfo, Logging_Progressus | IntegrationProjects |
Description: Receives ProjectID and ProjectName from a source such as DevOps. This flow then creates or updates the project name and id in the Progressus IntegrationProjects table. Progressus projects, using the project card, can then be linked to these Integration Projects.
Task_Progressus
Triggered By | Flow Inputs | Triggers | Progressus APIs |
---|---|---|---|
GetProjectsTasks | TaskID, TaskName, ParentProject | GetConnectionInfo, Logging_Progressus | ExternalTasks, ExternalProjects, IntegrationTasks |
Description: Receives TaskID, TaskName, and ParentProject from a source such as DevOps. By default, this is coming from Features in DevOps. This flow takes the task data in order to create\update a record in the Integration Task table. It also checks to see if there is a Progressus task linked to the integration task. If there is a matching task, it will update that record. If no matching Progressus task exists, this flow will create a new Progressus task and link it to the integration task.
Timecard_Progressus
Triggered By | Flow Inputs | Triggers | Progressus APIs |
---|---|---|---|
GetTime | WorkItemId, Title, AssignedUserEmail, HoursWorked, DateWorked, ParentFeatureID, ParentProjectID | GetConnectionInfo, Logging_Progressus | Resources, ExternalTasks, Timeperiods, Timecards |
Description: Receives information related to time being entered in a source system such as DevOps. This flow checks to ensure a matching resource, timeperiod, and task exists in Progressus. If it finds a match, it will log the hours worked on the Resource’s timecard in Progressus. The Progressus Timecards Task will match the Feature in DevOps by default while the description in the timecard will contain the DevOps Task WorkItemId and Title.
Logging_Progressus
Triggered By | Flow inputs | Triggers | Progressus APIs |
---|---|---|---|
GetProjectTasks, GetTime, Project_Progressus, Task_Progressus, Timecard_Progressus | Flow, Body, Status, ProgressusTable, Description | GetConnectionInfo | IntegrationLogs |
Description: This flow is called by most of the other flows. If advanced logging is turned on, this flow will be called for both successes and failures of the flows triggering it. If advanced logging is turned off, only failures of the flows will be logged. It includes information about the name of the Flow being logged, the JSON body of the request, the status of whether it failed or succeeded, the related Progressus Table, and a description of the error if known.
ErrorRetry
Triggered By | Flow inputs | Triggers | Progressus APIs |
---|---|---|---|
Progressus Integration Log, Log | Integration Log Row ID | Project_Progressus, Task_Progressus, Timecard_Progressus | IntegrationLogs |
Description: This flow is triggered when the ‘Retry’ checkbox of an Integration Log record in Progressus is checked. Based on what type of record is being retried, this flow will call the appropriate Project, Task, or Timecard flow to be retried. Once the retry has completed, this flow will uncheck the retry field in Progressus. If the retry succeeded, the status will be updated to ‘Success’.
Progressus Custom Connector
https://api.businesscentral.dynamics.com/{ProgressusAPIVersion}/{TenantID}/{EnvironmentName}/api/progressus/resource/{ProgressusAPIVersion2}/companies({CompanyID})/projects?$filter=externalTimeSystem eq true and type eq ‘person’ and tolower(email) eq tolower (‘AssignedUserEmail’)&$select=no,externalTimeSystem,email,type
A Progressus Custom Connector is included in the solution and used by many of the flows. This provides a way to do more complex queries against the Progressus APIs including options for filtering, field selection, and order by. Other operations such as Posting and Patching can be handled by the Business Central Connector included in Power Automate. All the key parameters are included in the GetConnectionInfo flow for easy reference in all the accompanying flows. The parameters in the above example are used in the following type of Http Get request:
https://api.businesscentral.dynamics.com/{ProgressusAPIVersion}/{TenantID}/{EnvironmentName}/api/progressus/resource/{ProgressusAPIVersion2}/companies({CompanyID})/projects?$filter=externalTimeSystem eq true and type eq ‘person’ and tolower(email) eq tolower (‘AssignedUserEmail’)&$select=no,externalTimeSystem,email,type
JIRA
This solution is designed to be used for either DevOps or JIRA. When JIRA is selected as the integration type in Progressus Integration Setup, the GetTime_JIRA and GetProjectsTasks_JIRA flows will be called by the CheckRecentChanges flow instead of using the GetTime_DevOps and GetProjectTasks_DevOps flows. This also means that if a different product similar to DevOps or JIRA is being used, only the GetTime and GetProjectTasks flows need to be adjusted in order to get this solution to work with a different product.
See Also
Progressus DevOps/Jira Integration
Developer Guide - Introduction to APIs Used In DevOps-Progressus Integration Project