Expand |
---|
title | How to switch to classic D365 viewer |
---|
|
Click Solutions → APSD → ... → Switch to classic |
Expand |
---|
title | Resetting an environment (Clean slate) |
---|
|
Note |
---|
Recommend having the owner of each custom connector delete them in the environment before resetting. In order to do this, will need to delete the flows, canvas app, & any other dependencies. |
Go to the https://admin.powerplatform.microsoft.com/environments. Select the environment you wish to reset. Click on Reset in the top menu bar. Ensure that the Name and URL are correct (this is the time to change it if required). Change the Currency to CAD ($). Click Reset . It will take 15-20 minutes for the refresh to finish. Once complete, click on the environment name to view its details. Click on Edit in the top right corner of the Details section. Ensure that Administration mode is disabled (otherwise, only system admins will have access). Grant system administrator access to other developers as needed (see next section).
|
Expand |
---|
title | Granting system administrator access to other developerssecurity roles to users |
---|
|
Go to https://admin.powerplatform.microsoft.com/environments/d4af4054-dad9-431a-8a39-527b4b690886/securityroles/d875496e-3318-ec11-b6e5-000d3a09d85b/members and select the desired environment. In the Access section, click See all under Security roles. Scroll down to System Administrator desired role and click on it. Click + Add people , search for the user then click Add .
|
Expand |
---|
title | Azure Portal Set Upsetup |
---|
|
App RegistrationMust be added as an application user in the PowerApps environment in order to access NAPA API (security controls). Also required for pipelines and as a service principal account in APSD (Dataverse connection). APSD-PAPS-USERS GroupUsed as a security group for the Canvas app as well as for the SharePoint translation list. Key vaultUsed for NAPA-SNAPA API secrets and MTOA JWT token. |
...
Expand |
---|
title | Creating Connections for Do Not Reply APSD / Ne Pas Répondre PAPS |
---|
|
Note |
---|
Perform the steps in this section in a FireFox browser. For some reason, Chrome auto-signs in to your personal account. |
Go to https://myaccount.microsoft.com/, click on your profile icon in the top right corner and select Sign in with a different account . Click + Use another account . Log in to DoNotReplyAPSD-NePasRepondrePAPS@tc.gc.ca (info in RDIMS 17999814). In the same browser, go to Power Apps Studio and login as your own account. Click on Data/Dataverse > Connections in the side menu. Click on + New connection and select Office 365 Outlook. Click Create and select the Do Not Reply APSD account that you signed into in Step 3. Repeat Steps 6-7 for the Office 365 Groups and Excel Online (Business) connections.
You should now have the following connections set up |
Expand |
---|
title | Creating custom connectors in new environment - DEV ONLY |
---|
|
Note |
---|
Only for the DEV environment |
Clone the APSD-PAPS repository to your local computer. On the left hand menu, navigate to Data → Custom Connectors . Click on + New custom connector → Import an OpenAPI file . In the Connector name field, type “NAPA-SNAPA”. Click Import and go to \repos\APSD-PAPS\Custom Connectors\JSON and select the NAPA-SNAPA.json file. Click Continue . Verify that the Host and Base URL point to the correct location for the environment you are in (refer to chart below). For NAPA API only: Set up OAuth security Click Create connector . Click on the Test tab, then + New connection . Enter the API Key (RDIMS 17999814) and click Create connection . Repeat steps 3-10 to create the rest of the connectors using their json files (SIAPI, SPAPI, MTAPI & TMAPI). *Note: SIAPI doesn’t require an API Key. On the left hand menu, navigate to Data → Connections . For each connection, share them with the organization. Click ... → Share → + Add everyone in my org → Save . This must be done so that any changes to the API Key get shared to all users. The update should be instant, if users are not receiving the updated key, they will need to clear their browser’s cache. Give edit access to TC-CivAv Azure group.
|
Migrating the Application Between Environments
Expand |
---|
Expand |
---|
title | Rejected Email Notifications |
---|
|
Name: Timesheet rejected - Send email notification
Description: This Power Automate Flow triggers when the “ap_timesheetstatus” field is modified to “Rejected”. The flow sends an email to the submitter.
Name: Expense rejected - Send email notification
Description: This Power Automate Flow triggers when the “ap_expensestatus” field is modified to “Rejected”. The flow sends an email to the submitter.
Name: Invoice rejected - Send email notification
Description: This Power Automate Flow triggers when the “ap_invoicestatus” field is modified to “Rejected”. The flow sends an email to the submitter.
Expand |
---|
title | Timesheet Approval – Add to CRSM |
---|
|
Name: Flow - Push Approved Time Entries To CRSM
Description: This Power Automate Flow triggers when the “ap_timsheetstatus” field is modified to “Approved”. The flow uses the “TMAPI” custom connector, specifically the following end points:
Add a time entry
To add a time entry, the flow gets all the rows where the current timesheet is approved from the “Time Entries” table filtered via a FetchXML query to only get the rows where “Added to CRSM” is false and hours are not empty or null. Here’s the query:
Code Block |
---|
|
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="ap_timeentry">
<attribute name="ap_timeentryid" />
<attribute name="ap_timeid" />
<attribute name="createdon" />
<order attribute="ap_timeid" descending="false" />
<filter type="and">
<condition attribute="ap_addedtocrsm" operator="eq" value="0" />
<condition attribute="ap_timesheet" operator="eq" uitype="ap_timesheet" value="{@{triggerOutputs()?['body/ap_timesheetid']}}" />
<condition attribute="ap_employeelogin" operator="eq" value="@{triggerOutputs()?['body/ap_employeelogin']}" />
<condition attribute="ap_timecard" operator="eq" value="@{triggerOutputs()?['body/ap_reportingperiod']}" />
<condition attribute="ap_timeentryhours" operator="not-null" />
</filter>
</entity>
</fetch> |
Create a time entry record in the CRSM database.
Image RemovedAdd hours to time entry
This endpoint is used to create a record for adding hours for the time entry that was created in the previous step. Depending upon the “ap_timeentrytype” i.e. title | Microsoft Bug: Cannot share custom connectors contained within a solution (Workaround - FAILED) |
---|
|
Warning |
---|
Not an issue anymore as custom connectors do not need to be shared explicitly if included in a solution. |
There is a bug with D365 that doesn’t allow sharing of custom connectors if they are included in a solution. This means that other developers cannot edit the custom connector. Workaround: https://youtu.be/ROKO589RBnQ Go to Data → Tables → Connector table → Data tab. Select the connector and click on Edit Record . Click SHARE → Add User/Team → Select Team in the Look for dropdown. Check off the team that is named after the environment. Click Select → Add . Ensure that they only have Read access (for other users, refer to chart below). Image RemovedClick Share . Image Removed
|
Migrating the Application Between Environments
Expand |
---|
|
Data will not be migrated between environments through the solution. You will need to perform data migration separately following the steps below. Open the Power Apps Studio and select the environment you are migrating from. Click on Solutions in the side menu, then click Publish all customizations in the top menu bar. Select the APSD solution. Click Export → Next . Increase version number as applicable, and select Managed, then click on Export . Repeat steps 3-5 with the APSD-PAPS Env Variables, APSD-PAPS Flows and APSD-PAPS Custom Connectors solutions but export them as Unmanaged. Any future deployments will only require the APSD and Flows solutions to be migrated. EXCEPTION: Custom Connectors solution must only be migrated if there are any changes to the existing custom connectors or a new custom connector is added. EXCEPTION: Env Variables solution must only be migrated if new environment variables are added.
Info |
---|
The Canvas apps are inside the APSD-PAPS Flows solution. |
|
Expand |
---|
|
Info |
---|
Solution Import Order Must be followed or else will break dependencies APSD-PAPS Env Variables > APSD-PAPS Custom Connectors > APSD > APSD-PAPS Flows Env Variables & Custom Connectors solutions only have to be imported if there are changes. |
Click on Solutions on the left-hand menu and then Import in the top menu bar. Select Browse and point to the zip file, e.g. APSD_PAPS_EnvVariables_1_0_0_X.zip , created in the export solution steps. "X" will be the current iteration number at the time of deployment. New environments only, once Custom Connectors solution is imported: Clone the APSD-PAPS repository to your local computer. Go into the APSD-PAPS Custom Connector solution. Click on + New > Automation > Custom connector Image RemovedEnter in the info as follows: Click Create connector On the left-hand menu, click on Data/Dataverse > Custom connectors Beside the NAPA-SNAPA connector, click ... > Update from OpenAPI file . Image RemovedClick Import and go to \repos\APSD-PAPS\Custom Connectors\JSON and select the NAPA-SNAPA.json file. Click Continue . Toggle the Swagger Editor ON > OFF. Go to the Security tab and enter in the information as per RDIMS 17999814. Click Update connector . Click on the Test tab, then + New connection . Click X Close . For the rest of the connectors, edit them and go to the Test tab, then click + New connection (API key are in RDIMS 17999814). On the left-hand menu, click on Data/Dataverse > Connections. For the MTAPI, SPAPI & TMAPI connections, share them with the organization. Click ... → Share → + Add everyone in my org → Save . This must be done so that any changes to the API Key get shared to all users. The update should be instant, if users are not receiving the updated key, they will need to clear their browser’s cache. Give edit access to TC-CivAv Azure group. Image Removed
New environments (when importing the Flows solution): Make sure the CivAv APSD Service Principal Dataverse connection has been created (see steps above). Click Next twice then select the CivAv APSD Service Principal connection for Dataverse and the shared connections for the APIs. For the Office 365 and Excel Online connections, select the Do Not Reply APSD / Ne Pas Répondre PAPS connection created earlier. Image Removed
Click Import and wait for the process to finish. Import the rest of the solutions as needed. Click on Publish all customizations . New environments: Share the APSD-PAPS Canvas App with Everyone in TC. Uncheck the box at the bottom “Send an email invitation to new users”. Image RemovedNew environments: Assign a security role to yourself in order to test the application through Advanced Settings. Image Removed
If importing the APSD Custom Connectors solution: Even if there are no edits to make, you must still click on Update Connector for it to connect properly. |
Expand |
---|
title | Update connectors and dropdowns in the Canvas app - NO LONGER REQUIRED |
---|
|
Warning |
---|
IGNORE THIS SECTION Not necessary anymore now that the custom connectors are inside solutions. |
Edit the APSD-PAPS Canvas app. When prompted, select Don't Allow . - Image Removed
Remove all connections that are showing as not connected - 5 connections (APSR, MTAPI, SIAPI, SPAPI, TMAPI), Office365Users and APSD_Translations. Image Removed Add all of them back. Image RemovedSharePoint data connector: for APSD_Translation file. In the box enter the following URL: https://034gc.sharepoint.com/sites/DSD-CivilAviation/Lists/APSD_Translations/AllItems.aspx Image RemovedCheck off the APSD_Translations list & click Connect . Image RemovedRun the App Checker and ensure no errors are reported. Image RemovedTurn on “Allow searching” in the properties for the following elements: New Service Request Step One Screen - cboNapaProject element Image Removed New Service Request Step Three Contact Info Screen - cboFindOrganizationAlt element Image RemovedService Request Review Screen - ddSRRChangeReAssignment element Image RemovedNew Invoice Step One Screen - cboInvoiceCustomer and cboCustomerAddress elements Image RemovedWeekly Time Entry Normalized Screen - cmbProject Image Removed
Save and Publish the app.
|
Importing/Migrating Data
When setting up a new environment, all lookup data must be brought into the environment. This can be done either through creating a dataflow to migrate data between environments or by importing the data from an Excel spreadsheet.
Expand |
---|
title | Importing SCRAM task data |
---|
|
Go to the environment that has the master set of data for the SCRAM tasks. Currently, this is QA. On the left menu, go to Data → Tables , then open the Scram Tasks table. On the top menu, click on Data → Export data . Once the export has been successfully completed, click on Download exported data . Unzip the csv file. Switch to the environment you are deploying to. On the left menu, go to Data → Tables , then open the Scram Tasks table. On the top menu, click on Data → > beside Get data → Get data from Excel . Image RemovedUpload the csv file from step 4. If there are any mapping issues, fix them. Image RemovedClick Import . Wait for the process to complete, then verify that the data was imported.
|
Expand |
---|
title | Importing AP task data |
---|
|
Follow the same steps for Importing SCRAM task data using the AP Task table instead. |
Flows
The service principal account should be used for all connections to the DataVerse.
|
Data will not be migrated between environments through the solution. You will need to perform data migration separately following the steps below. Open the Power Apps Studio and select the environment you are migrating from. Click on Solutions in the side menu, then click Publish all customizations in the top menu bar. Select the APSD solution. Click Export → Next . Increase version number as applicable, and select Managed, then click on Export . Repeat steps 3-5 with the APSD-PAPS Env Variables, APSD-PAPS Flows and APSD-PAPS Custom Connectors solutions but export them as Unmanaged. Any future deployments will only require the APSD and Flows solutions to be migrated. EXCEPTION: Custom Connectors solution must only be migrated if there are any changes to the existing custom connectors or a new custom connector is added. EXCEPTION: Env Variables solution must only be migrated if new environment variables are added.
Info |
---|
The Canvas apps are inside the APSD-PAPS Flows solution. |
|
Expand |
---|
|
Info |
---|
Solution Import Order Must be followed or else will break dependencies APSD-PAPS Env Variables > APSD-PAPS Custom Connectors > APSD > APSD-PAPS Flows Env Variables & Custom Connectors solutions only have to be imported if there are changes. |
Click on Solutions on the left-hand menu and then Import in the top menu bar. Select Browse and point to the zip file, e.g. APSD_PAPS_EnvVariables_1_0_0_X.zip , created in the export solution steps. "X" will be the current iteration number at the time of deployment. New environments only, once Custom Connectors solution is imported: Clone the APSD-PAPS repository to your local computer. Go into the APSD-PAPS Custom Connector solution. Click on + New > Automation > Custom connector Image AddedEnter in the info as follows: Click Create connector On the left-hand menu, click on Data/Dataverse > Custom connectors Beside the NAPA-SNAPA connector, click ... > Update from OpenAPI file . Image AddedClick Import and go to \repos\APSD-PAPS\Custom Connectors\JSON and select the NAPA-SNAPA.json file. Click Continue . Toggle the Swagger Editor ON > OFF. Go to the Security tab and enter in the information as per RDIMS 17999814. Click Update connector . Click on the Test tab, then + New connection . Click X Close . For the rest of the connectors, edit them and go to the Test tab, then click + New connection (API key are in RDIMS 17999814). On the left-hand menu, click on Data/Dataverse > Connections. For the MTAPI, SPAPI & TMAPI connections, share them with the organization. Click ... → Share → + Add everyone in my org → Save . This must be done so that any changes to the API Key get shared to all users. The update should be instant, if users are not receiving the updated key, they will need to clear their browser’s cache. Give edit access to TC-CivAv Azure group. Image Added
New environments (when importing the Flows solution): Make sure the CivAv APSD Service Principal Dataverse connection has been created (see steps above). Click Next twice then select the CivAv APSD Service Principal connection for Dataverse and the shared connections for the APIs. For the Office 365 and Excel Online connections, select the Do Not Reply APSD / Ne Pas Répondre PAPS connection created earlier. Image Added
Click Import and wait for the process to finish. Import the rest of the solutions as needed. Click on Publish all customizations . New environments: Share the APSD-PAPS Canvas App with Everyone in TC. Uncheck the box at the bottom “Send an email invitation to new users”. Image AddedNew environments: Assign a security role to yourself in order to test the application through Advanced Settings. Image Added
If importing the APSD Custom Connectors solution: Even if there are no edits to make, you must still click on Update Connector for it to connect properly. |
Expand |
---|
title | Update connectors and dropdowns in the Canvas app - NO LONGER REQUIRED |
---|
|
Warning |
---|
IGNORE THIS SECTION Not necessary anymore now that the custom connectors are inside solutions. |
Edit the APSD-PAPS Canvas app. When prompted, select Don't Allow . - Image Added
Remove all connections that are showing as not connected - 5 connections (APSR, MTAPI, SIAPI, SPAPI, TMAPI), Office365Users and APSD_Translations. Image Added Add all of them back. Image AddedSharePoint data connector: for APSD_Translation file. In the box enter the following URL: https://034gc.sharepoint.com/sites/DSD-CivilAviation/Lists/APSD_Translations/AllItems.aspx Image AddedCheck off the APSD_Translations list & click Connect . Image AddedRun the App Checker and ensure no errors are reported. Image AddedTurn on “Allow searching” in the properties for the following elements: New Service Request Step One Screen - cboNapaProject element Image Added New Service Request Step Three Contact Info Screen - cboFindOrganizationAlt element Image AddedService Request Review Screen - ddSRRChangeReAssignment element Image AddedNew Invoice Step One Screen - cboInvoiceCustomer and cboCustomerAddress elements Image AddedWeekly Time Entry Normalized Screen - cmbProject Image Added
Save and Publish the app.
|
Importing/Migrating Data
When setting up a new environment, all lookup data must be brought into the environment. This can be done either through creating a dataflow to migrate data between environments or by importing the data from an Excel spreadsheet.
Expand |
---|
title | Importing SCRAM task data |
---|
|
Go to the environment that has the master set of data for the SCRAM tasks. Currently, this is QA. On the left menu, go to Data → Tables , then open the Scram Tasks table. On the top menu, click on Data → Export data . Once the export has been successfully completed, click on Download exported data . Unzip the csv file. Switch to the environment you are deploying to. On the left menu, go to Data → Tables , then open the Scram Tasks table. On the top menu, click on Data → > beside Get data → Get data from Excel . Image AddedUpload the csv file from step 4. If there are any mapping issues, fix them. Image AddedClick Import . Wait for the process to complete, then verify that the data was imported.
|
Expand |
---|
title | Importing AP task data |
---|
|
Follow the same steps for Importing SCRAM task data using the AP Task table instead. |
Flows
The service principal account should be used for all connections to the DataVerse.
Expand |
---|
title | Rejected Email Notifications |
---|
|
Name: Timesheet rejected - Send email notification Description: This Power Automate Flow triggers when the “ap_timesheetstatus” field is modified to “Rejected”. The flow sends an email to the submitter. Name: Expense rejected - Send email notification Description: This Power Automate Flow triggers when the “ap_expensestatus” field is modified to “Rejected”. The flow sends an email to the submitter. Name: Invoice rejected - Send email notification Description: This Power Automate Flow triggers when the “ap_invoicestatus” field is modified to “Rejected”. The flow sends an email to the submitter. |
Expand |
---|
title | Timesheet Approval – Add to CRSM |
---|
|
Name: Flow - Push Approved Time Entries To CRSM Description: This Power Automate Flow triggers when the “ap_timsheetstatus” field is modified to “Approved”. The flow uses the “TMAPI” custom connector, specifically the following end points: Add a time entry To add a time entry, the flow gets all the rows where the current timesheet is approved from the “Time Entries” table filtered via a FetchXML query to only get the rows where “Added to CRSM” is false and hours are not empty or null. Here’s the query:
Code Block |
---|
| <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="ap_timeentry">
<attribute name="ap_timeentryid" />
<attribute name="ap_timeid" />
<attribute name="createdon" />
<order attribute="ap_timeid" descending="false" />
<filter type="and">
<condition attribute="ap_addedtocrsm" operator="eq" value="0" />
<condition attribute="ap_timesheet" operator="eq" uitype="ap_timesheet" value="{@{triggerOutputs()?['body/ap_timesheetid']}}" />
<condition attribute="ap_employeelogin" operator="eq" value="@{triggerOutputs()?['body/ap_employeelogin']}" />
<condition attribute="ap_timecard" operator="eq" value="@{triggerOutputs()?['body/ap_reportingperiod']}" />
<condition attribute="ap_timeentryhours" operator="not-null" />
</filter>
</entity>
</fetch> |
Create a time entry record in the CRSM database.
Image Added
Add hours to time entry This endpoint is used to create a record for adding hours for the time entry that was created in the previous step. Depending upon the “ap_timeentrytype” i.e. “Regular”, “Travel” or “Other”, corresponding action is called.
At the end of the flow, the flag “Added to CRSM” is set to true in the Time Entries table.
Push Time Entry to CRSM Step inside flow TypeCode: Regular (REG), Travel (TH), Other (DH) Code Block |
---|
[
{
"ServiceRequestId": @{int(variables('ServiceRequestID'))},
"ServiceId": @{outputs('Get_a_row_by_ID')?['body/ap_serviceid']},
{ "ServiceRequestIdApproverNetworkId": @{int(variables('ServiceRequestID'))triggerOutputs()?['body/ap_approvedby']},
"ServiceIdComment": @{outputsitems('Get_a_row_by_IDApply_to_each_-_Push_to_CRSM')?['body/ap_serviceidcomments']},
"ApproverNetworkIdSubmitterNetworkId": @{triggerOutputs(items('Apply_to_each_-_Push_to_CRSM')?['body/ap_approvedbyemployeelogin']},
"CommentDateTime": @{items('Apply_to_each_-_Push_to_CRSM')?['ap_commentstimeentrydate']},
"Hours": [
"SubmitterNetworkId {
"Quantity": @{items('Apply_to_each_-_Push_to_CRSM')?['ap_employeelogintimeentryhours']},
"DateTime "TypeCode": "REG",
"IsBillable": @{items('Apply_to_each_-_Push_to_CRSM')?['ap_timeentrydatebillable']},},
"HoursStatusCode": [2
{}
]
"Quantity": @{items('Apply_to_each_-_Push_to_CRSM')?['ap_timeentryhours']},
"TypeCode": "REG",
"IsBillable": @{items('Apply_to_each_-_Push_to_CRSM')?['ap_billable']},
"StatusCode": 2
}
]
}
] |
|
Expand |
---|
title | Importing Users and Setting Roles |
---|
|
Name:Flow – Import Users and Roles Description: This Power Automate Flow can be manually triggered to import users from an Excel file (see screenshot below) into the Dynamics 365 “Users” table in the target environment. The Flow also associates users with their managers as listed in the Excel file and assigns them the roles as per the Excel file. This Excel file can be stored on the executing user’s OneDrive. Image RemovedImage Removed |
Expand |
---|
title | Importing Users and Setting Roles |
---|
|
Name:Flow – Import Users and Roles Description: This Power Automate Flow can be manually triggered to import users from an Excel file (see screenshot below) into the Dynamics 365 “Users” table in the target environment. The Flow also associates users with their managers as listed in the Excel file and assigns them the roles as per the Excel file. This Excel file can be stored on the executing user’s OneDrive. Image AddedImage Added |
Archived Sections
Expand |
---|
title | Microsoft Bug: Cannot share custom connectors contained within a solution (Workaround - FAILED) |
---|
|
Warning |
---|
Not an issue anymore as custom connectors do not need to be shared explicitly if included in a solution. |
There is a bug with D365 that doesn’t allow sharing of custom connectors if they are included in a solution. This means that other developers cannot edit the custom connector. Workaround: https://youtu.be/ROKO589RBnQ Go to Data → Tables → Connector table → Data tab. Select the connector and click on Edit Record . Click SHARE → Add User/Team → Select Team in the Look for dropdown. Check off the team that is named after the environment. Click Select → Add . Ensure that they only have Read access (for other users, refer to chart below). Image AddedClick Share . Image Added
|