├── .gitignore
├── Collaboration
├── Collaboration.cdsproj
└── src
│ ├── CanvasApps
│ ├── collab_connectionsapp_06f79.meta.xml
│ ├── collab_connectionsapp_06f79_BackgroundImageUri
│ └── collab_connectionsapp_06f79_DocumentUri.msapp
│ ├── Connectors
│ ├── collab_azurekeyvault.xml
│ ├── collab_azurekeyvault_connectionparameters.json
│ ├── collab_azurekeyvault_iconblob.Png
│ ├── collab_azurekeyvault_openapidefinition.json
│ └── collab_azurekeyvault_policytemplateinstances.json
│ ├── Other
│ ├── Customizations.xml
│ └── Solution.xml
│ └── environmentvariabledefinitions
│ └── collab_Instance
│ ├── environmentvariabledefinition.xml
│ └── environmentvariablevalues.json
├── LICENSE
├── Lab-instructions-power-platform-tools-for-visual-studio-code.md
├── LinearInputControl
├── LinearInputControl.pcfproj
├── LinearInputControl
│ ├── ControlManifest.Input.xml
│ ├── css
│ │ └── LinearInputControl.css
│ ├── index.ts
│ └── strings
│ │ └── LinearInputControl.1033.resx
├── package.json
├── pcfconfig.json
└── tsconfig.json
├── README.md
├── SECURITY.md
└── media
├── image1.png
├── image10.png
├── image11.png
├── image12.png
├── image13.png
├── image14.png
├── image15.png
├── image16.png
├── image17.png
├── image18.png
├── image19.png
├── image2.png
├── image20.png
├── image21.png
├── image22.png
├── image23.png
├── image24.png
├── image25.png
├── image26.png
├── image27.png
├── image28.png
├── image29.png
├── image3.png
├── image30.png
├── image31.png
├── image32.png
├── image33.png
├── image34.png
├── image35.png
├── image36.png
├── image37.png
├── image4.png
├── image5.png
├── image6.png
├── image7.png
├── image8.png
└── image9.png
/.gitignore:
--------------------------------------------------------------------------------
1 | # nodejs packages
2 | node_modules/
3 |
4 | # dotnet / MSBuild artifacts
5 | obj/
6 | bin/
7 |
8 | # PCF Control build artifacts
9 | out/
10 | generated/
11 |
--------------------------------------------------------------------------------
/Collaboration/Collaboration.cdsproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\PowerApps
5 |
6 |
7 |
8 |
9 |
10 |
11 | 195379d6-f48a-45e7-8316-087f5055902f
12 | v4.6.2
13 |
14 | net462
15 | PackageReference
16 | src
17 |
18 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | PreserveNewest
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Collaboration/src/CanvasApps/collab_connectionsapp_06f79.meta.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | collab_connectionsapp_06f79
4 | 2022-03-07T04:05:37Z
5 | Ready
6 | 3.22022.31.0
7 | 3.22022.31.0
8 | {"primaryDeviceWidth":"640","primaryDeviceHeight":"1136","sienaVersion":"20220305T013021Z-3.22022.31.0","deviceCapabilities":"","supportsPortrait":"true","supportsLandscape":"true","primaryFormFactor":"Phone","publisherVersion":"3.22022.31","minimumRequiredApiVersion":"2.2.0","hasComponent":"false","hasUnlockedComponent":"false","isUnifiedRootApp":"false"}
9 | 0
10 |
11 | RGBA(0,176,240,1)
12 | Connections App
13 |
14 |
15 |
16 | []
17 | {}
18 | {"default.cds":{"databaseDetails":{"referenceType":"Environmental","environmentName":"default.cds","overrideValues":{"status":"NotSpecified"}},"dataSources":{"Connection References":{"entitySetName":"connectionreferences","logicalName":"connectionreference"}}}}
19 | []
20 | []
21 | 1
22 | 0
23 | 0
24 | 0
25 |
26 | 1.0
27 | {"cdsdependencies":[{"componenttype":1,"logicalname":"connectionreference"}]}
28 | 1
29 | /CanvasApps/collab_connectionsapp_06f79_BackgroundImageUri
30 | /CanvasApps/collab_connectionsapp_06f79_DocumentUri.msapp
31 |
--------------------------------------------------------------------------------
/Collaboration/src/CanvasApps/collab_connectionsapp_06f79_BackgroundImageUri:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/Collaboration/src/CanvasApps/collab_connectionsapp_06f79_BackgroundImageUri
--------------------------------------------------------------------------------
/Collaboration/src/CanvasApps/collab_connectionsapp_06f79_DocumentUri.msapp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/Collaboration/src/CanvasApps/collab_connectionsapp_06f79_DocumentUri.msapp
--------------------------------------------------------------------------------
/Collaboration/src/Connectors/collab_azurekeyvault.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 237bb2c4-f777-47d3-ad5e-4844e434c0d3
4 | A sample connector for the Azure Key Vault service. This connector is built for the Azure Key Vault REST API. You can see the details of the API here: https://docs.microsoft.com/rest/api/keyvault/.
5 | AzureKeyVault
6 | #007ee5
7 | collab_azurekeyvault
8 | 1
9 | /Connector/collab_azurekeyvault_openapidefinition.json
10 | /Connector/collab_azurekeyvault_connectionparameters.json
11 | /Connector/collab_azurekeyvault_policytemplateinstances.json
12 | /Connector/collab_azurekeyvault_iconblob.Png
13 |
--------------------------------------------------------------------------------
/Collaboration/src/Connectors/collab_azurekeyvault_connectionparameters.json:
--------------------------------------------------------------------------------
1 | {"token":{"type":"oauthSetting","oAuthSettings":{"identityProvider":"aad","clientId":"d4416ad8-8ed5-4776-95b7-80985180bcc0","scopes":[],"redirectMode":"Global","redirectUrl":"https://global.consent.azure-apim.net/redirect","properties":{"IsFirstParty":"False","AzureActiveDirectoryResourceId":"https://vault.azure.net","IsOnbehalfofLoginSupported":true},"customParameters":{"loginUri":{"value":"https://login.windows.net"},"tenantId":{"value":"common"},"resourceUri":{"value":"https://vault.azure.net"},"enableOnbehalfOfLogin":{"value":"false"}}}},"token:TenantId":{"type":"string","metadata":{"sourceType":"AzureActiveDirectoryTenant"},"uiDefinition":{"constraints":{"required":"false","hidden":"true"}}}}
--------------------------------------------------------------------------------
/Collaboration/src/Connectors/collab_azurekeyvault_iconblob.Png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/Collaboration/src/Connectors/collab_azurekeyvault_iconblob.Png
--------------------------------------------------------------------------------
/Collaboration/src/Connectors/collab_azurekeyvault_openapidefinition.json:
--------------------------------------------------------------------------------
1 | {"swagger":"2.0","info":{"description":"A sample connector for the Azure Key Vault service. This connector is built for the Azure Key Vault REST API. You can see the details of the API here: https://docs.microsoft.com/rest/api/keyvault/.","title":"Azure Key Vault [Sample]","version":"1.0"},"host":"mycdstestprod.vault.azure.net","basePath":"/","schemes":["https"],"consumes":[],"produces":[],"paths":{"/keys":{"get":{"description":"List keys in the specified vault. For details, see https://docs.microsoft.com/rest/api/keyvault/getkeys/getkeys.","operationId":"ListKey","parameters":[{"in":"query","name":"maxresults","required":false,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"}],"responses":{"200":{"description":"default","schema":{"properties":{"nextLink":{"description":"nextLink","type":"string"},"value":{"description":"value","items":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"recoverylevel":{"description":"recoverylevel","type":"string"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"kid":{"description":"kid","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}}},"summary":"List keys"}},"/keys/{key-name}":{"get":{"description":"Gets the public part of a stored key. If the requested key is symmetric, then no key material is released in the response. For more details, refer: https://docs.microsoft.com/rest/api/keyvault/getkey/getkey.","operationId":"GetKey","parameters":[{"in":"path","name":"key-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"}],"responses":{"200":{"description":"default","schema":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"recoverylevel":{"description":"recoverylevel","type":"string"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"key":{"description":"key","properties":{"e":{"description":"e","type":"string"},"key_ops":{"description":"key_ops","items":{"type":"string"},"type":"array"},"kid":{"description":"kid","type":"string"},"kty":{"description":"kty","type":"string"},"n":{"description":"n","type":"string"}},"type":"object"},"tags":{"description":"tags","properties":{"purpose":{"description":"purpose","type":"string"},"test name ":{"description":"test name ","type":"string"}},"type":"object"}},"type":"object"}}},"summary":"Get key"}},"/keys/{key-name}/create":{"post":{"description":"Creates a new key, stores it, then returns key parameters and attributes. For details, see: https://docs.microsoft.com/rest/api/keyvault/createkey/createkey.","operationId":"CreateKey","parameters":[{"in":"path","name":"key-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"},{"in":"body","name":"body","required":true,"schema":{"properties":{"key_ops":{"description":"key_ops","items":{"description":"JSON web key operations","enum":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"type":"string"},"type":"array"},"key_size":{"description":"The key size in bits. For example: 2048, 3072, or 4096 for RSA.","format":"int32","type":"integer"},"kty":{"description":"The type of key to create. For valid values, see JsonWebKeyType.","enum":["EC","EC-HSM","RSA","RSA-HSM","oct"],"type":"string"}},"required":["kty"],"type":"object"}}],"responses":{"200":{"description":"default","schema":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"recoverylevel":{"description":"recoverylevel","type":"string"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"key":{"description":"key","properties":{"e":{"description":"e","type":"string"},"key_ops":{"description":"key_ops","items":{"type":"string"},"type":"array"},"kid":{"description":"kid","type":"string"},"kty":{"description":"kty","type":"string"},"n":{"description":"n","type":"string"}},"type":"object"},"tags":{"description":"tags","properties":{"purpose":{"description":"purpose","type":"string"},"test name ":{"description":"test name ","type":"string"}},"type":"object"}},"type":"object"}}},"summary":"Create key"}},"/keys/{key-name}/decrypt":{"post":{"description":"Decrypts a single block of encrypted data. For details, see: https://docs.microsoft.com/rest/api/keyvault/decrypt/decrypt.","operationId":"Decrypt","parameters":[{"in":"path","name":"key-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"},{"in":"body","name":"body","required":true,"schema":{"properties":{"alg":{"description":"The encryption algorithm","enum":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"type":"string"},"value":{"description":"The data to be decrypted","format":"byte","type":"string"}},"required":["value","alg"],"type":"object"}}],"responses":{"200":{"description":"default","schema":{"properties":{"kid":{"description":"Key identifier","type":"string"},"value":{"description":"The decrypted value","format":"byte","type":"string"}},"type":"object"}}},"summary":"Decrypt data"}},"/keys/{key-name}/encrypt":{"post":{"description":"Encrypts an arbitrary sequence of bytes using an encryption key that is stored in a key vault. For details, see: https://docs.microsoft.com/rest/api/keyvault/encrypt/encrypt.","operationId":"Encrypt","parameters":[{"in":"path","name":"key-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"},{"in":"body","name":"body","required":true,"schema":{"properties":{"alg":{"description":"The encryption algorithm to be used","enum":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"type":"string"},"value":{"description":"The data to be encrypted","format":"byte","type":"string"}},"required":["alg","value"],"type":"object"}}],"responses":{"200":{"description":"default","schema":{"properties":{"kid":{"description":"Key identifier","type":"string"},"value":{"description":"Encrypted data","format":"byte","type":"string"}},"type":"object"}}},"summary":"Encrypt data"}},"/secrets":{"get":{"description":"List secrets in a specified key vault. For details, see: https://docs.microsoft.com/rest/api/keyvault/getsecrets/getsecrets.","operationId":"ListSecret","parameters":[{"description":"Maximum number of results to return in a page. If not specified, the service will return up to 25 results.","in":"query","name":"maxresults","required":false,"type":"integer","x-ms-summary":"Max results"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"}],"responses":{"200":{"description":"default","schema":{"properties":{"nextLink":{"description":"nextLink","type":"string"},"value":{"description":"value","items":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"contentType":{"description":"contentType","type":"string"},"id":{"description":"id","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}}},"summary":"List secrets"}},"/secrets/{secret-name}":{"get":{"description":"Get a specified secret from a given key vault. For details, see: https://docs.microsoft.com/rest/api/keyvault/getsecret/getsecret.","operationId":"GetSecret","parameters":[{"in":"path","name":"secret-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"}],"responses":{"200":{"description":"default","schema":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"recoverylevel":{"description":"recoverylevel","type":"string"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"id":{"description":"id","type":"string"},"value":{"description":"value","format":"byte","type":"string"}},"type":"object"}}},"summary":"Get secret"},"put":{"description":"Sets a secret in a specified key vault. This operation adds a secret to the Azure Key Vault. If the named secret already exists, Azure Key Vault creates a new version of that secret. This operation requires the secrets/set permission. For details, see: https://docs.microsoft.com/rest/api/keyvault/setsecret/setsecret.","operationId":"SetSecret","parameters":[{"in":"path","name":"secret-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"},{"in":"body","name":"body","required":true,"schema":{"properties":{"attributes":{"description":"attributes","properties":{"enabled":{"description":"Determines whether the object is enabled.","type":"boolean"}},"type":"object"},"value":{"description":"The value of the secret.","type":"string"}},"required":["value"],"type":"object"}}],"responses":{"200":{"description":"default","schema":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"recoverylevel":{"description":"recoverylevel","type":"string"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"id":{"description":"id","type":"string"},"value":{"description":"value","type":"string"}},"type":"object"}}},"summary":"Create or update secret value"}},"/secrets/{secret-name}/versions":{"get":{"description":"List all versions of the specified secret. For details, see: https://docs.microsoft.com/rest/api/keyvault/getsecretversions/getsecretversions.","operationId":"ListSecretVersions","parameters":[{"in":"path","name":"secret-name","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"}],"responses":{"200":{"description":"default","schema":{"properties":{"nextLink":{"description":"nextLink","type":"string"},"value":{"description":"value","items":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"id":{"description":"id","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}}},"summary":"List secret versions"}},"/secrets/{secret-name}/{secret-version}":{"get":{"description":"Get the value of a specified secret version from a given key vault. For details, see: https://docs.microsoft.com/rest/api/keyvault/getsecret/getsecret.","operationId":"GetSecretVersion","parameters":[{"in":"path","name":"secret-name","required":true,"type":"string"},{"in":"path","name":"secret-version","required":true,"type":"string"},{"default":"7.0","in":"query","name":"api-version","required":true,"type":"string","x-ms-visibility":"internal"}],"responses":{"200":{"description":"default","schema":{"properties":{"attributes":{"description":"attributes","properties":{"created":{"description":"created","format":"int32","type":"integer"},"enabled":{"description":"enabled","type":"boolean"},"recoverylevel":{"description":"recoverylevel","type":"string"},"updated":{"description":"updated","format":"int32","type":"integer"}},"type":"object"},"id":{"description":"id","type":"string"},"value":{"description":"value","type":"string"}},"type":"object"}}},"summary":"Get secret version"}}},"definitions":{},"parameters":{},"responses":{},"securityDefinitions":{"oauth2_auth":{"authorizationUrl":"https://login.windows.net/common/oauth2/authorize","flow":"accessCode","scopes":{},"tokenUrl":"https://login.windows.net/common/oauth2/authorize","type":"oauth2"}},"security":[{"oauth2_auth":[]}],"tags":[]}
--------------------------------------------------------------------------------
/Collaboration/src/Connectors/collab_azurekeyvault_policytemplateinstances.json:
--------------------------------------------------------------------------------
1 | [{"TemplateId":"dynamichosturl","Title":"Route to keyvault","Parameters":{"x-ms-apimTemplateParameter.urlTemplate":"https://@connectionParameters('keyVaultName').vault.azure.net"}}]
--------------------------------------------------------------------------------
/Collaboration/src/Other/Customizations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | 1033
18 |
19 |
--------------------------------------------------------------------------------
/Collaboration/src/Other/Solution.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Collaboration
5 |
6 |
7 |
8 |
9 | 1.0.0.0
10 | 2
11 |
12 | Collaboration
13 |
14 |
15 |
16 |
17 |
18 |
19 | collab
20 | 50509
21 |
22 |
23 | 1
24 | 1
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | 1
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | 2
52 | 1
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | 1
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/Collaboration/src/environmentvariabledefinitions/collab_Instance/environmentvariabledefinition.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 1.0.0.0
6 | 1
7 | 0
8 | 0
9 | 100000000
10 |
--------------------------------------------------------------------------------
/Collaboration/src/environmentvariabledefinitions/collab_Instance/environmentvariablevalues.json:
--------------------------------------------------------------------------------
1 | {
2 | "environmentvariablevalues": {
3 | "environmentvariablevalue": {
4 | "@environmentvariablevalueid": "bd01ab74-249c-ec11-b400-000d3a99f03a",
5 | "iscustomizable": "1",
6 | "value": "Development"
7 | }
8 | }
9 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
22 |
--------------------------------------------------------------------------------
/Lab-instructions-power-platform-tools-for-visual-studio-code.md:
--------------------------------------------------------------------------------
1 | # Power Platform Tools for Visual Studio Code Lab
2 | ## What is expected after the completion of this Lab
3 | - You will learn how to install the Power Platform Tools for Visual Studio Code
4 | - You will learn how to authenticate to Power Platform from within Visual Studio Code
5 | - You will be able to build an existing PCF control within Visual Studio Code
6 | - You will be able add the PCF control in a solution using Power Platform Tool for Visual Studio Code
7 | - Build the solution provided by the extension
8 | - Import the solution into your Power Platform environment from within Visual Studio Code
9 |
10 |
11 | ## Lab prerequisites
12 |
13 | If you want to do this lab using GitHub Codespaces, you will need to:
14 |
15 | - Have a GitHub alias
16 |
17 | - Create your own GitHub repository
18 |
19 | - Download the sample's solution and the PCF control from the lab's GitHub repository
20 |
21 | - Have access to Codespaces
22 |
23 | - Have access to a Power Platform environment (a new environment is preferred)
24 |
25 | - The type of environment does not matter (It can be a Trial, Time bound Trial, Sandbox, or Production)
26 |
27 | - Import the provided Collaboration.zip file into your repository
28 |
29 | If you want to do this lab without GitHub Codespaces, you will need to:
30 |
31 | - Have a GitHub alias
32 |
33 | - Create your own GitHub repository
34 |
35 | - Have access to a Power Platform environment (a new environment is preferred)
36 |
37 | - The type of environment does not matter (It can be a Trial, Time bound Trial, Sandbox, or Production)
38 |
39 | - Import the provided Collaboration.zip file into your repository
40 |
41 | - Have *npm* and *node.js* installed on your computer
42 |
43 | ## Installation
44 |
45 | The installation of the Visual Studio Code extension can happen in three ways:
46 |
47 | 1. Install from within the VS Code extension
48 |
49 | 2. Install from the VS Code Marketplace
50 |
51 | 3. Sideload the VSIX extension file
52 |
53 | ### Installation from Within Visual Studio Code
54 |
55 | To install the extension, follow these steps.
56 |
57 | 1. Launch Visual Studio Code or GitHub Codespaces (if you have access to Codespaces).
58 |
59 | 2. Select the **Extensions** icon on the **Activity bar** and search for Power Platform on the **Extensions** side bar.
60 |
61 | If you are installing in GitHub Codespaces, you will see the following option for installation
62 |
63 | 
64 |
65 | or you will see the following in your native VS Code instance.
66 |
67 | 
68 |
69 | 3. Choose the **Install** button.
70 |
71 | ### Installing from Visual Studio marketplace
72 |
73 | To install the extension, follow these steps.
74 |
75 | 1\) Navigate your browser to the following URL:
76 |
77 | 2\) Select the **Visual Studio Code** tab, search for Power Platform, and select the extension as shown below
78 |
79 | This will take you to the extensions page and from there you can launch the installation in your local instance of VS Code.
80 |
81 | 3\) Select **Install**
82 |
83 | ### Side load install of the extension
84 |
85 | In some organizations, running an installation process directly off the web is prohibited. In most cases the organization downloads the installation in a secure location, tests it to make sure it does not violate company policy, and then makes it available to the rest of the organization. To do this, from the marketplace site for the extension and instead of pressing the **Install** button, select the **Download extension** link from the page.
86 |
87 | This will download a VSIX file onto your workstation. On a PC, it downloads the file to the default download folder.
88 |
89 | 
90 |
91 | Once that file is downloaded, launch Visual Studio Code on your workstation.
92 |
93 | 1. Select the **Extensions** icon from the **Activity bar**
94 |
95 | 2. Click on the ellipsis … icon on the **Extensions** side bar
96 |
97 | 3. Select **Install from VSIX**
98 |
99 | This will now install the Power Platform extension in your Visual Studio Code or GitHub Extension. On the bottom right-hand corner, you will see the following message.
100 |
101 | 
102 |
103 | Once the installation is done, launch the terminal interface from the Visual Studio Code interface
104 |
105 | 
106 |
107 | and you will see the following icon show-up on the activity panel.
108 |
109 | 
110 |
111 | ## Authenticating to power Platform and listing environments and solutions
112 |
113 | When you click on the Power Platform icon on the **Activity bar** within the side bar, you will see two panels. These panels are called:
114 |
115 | - Authentication Profiles Panel
116 |
117 | - Environments and Solution Panel
118 |
119 | The authentication panel will only list the Dataverse environments to which you are connected, and based on that connection, it will populate the environment and solutions to which you have access to.
120 |
121 | If you don't have any authentication profiles listed, you will see the following on Codespaces.
122 |
123 | .
124 |
125 | If you select **Add Dataverse Auth Profile**, the terminal window opens and shows how to create the authentication profile using Power Platform CLI. The CLI command in this case is "pac auth create".
126 |
127 | 
128 |
129 | The "pac auth create" command enables you to create two kinds of connection profiles.
130 |
131 | 1. Administrator – used to create, list, backup, and remove environments
132 |
133 | 2. Dataverse – authenticated to the relevant environment to execute solution operations
134 |
135 | In the Visual Studio Code extension, we focus on the latter.
136 |
137 | 
138 |
139 | The CLI command to create an authentication profile is "pac auth create". This command by default creates a Dataverse authentication profile unless you specify admin as part of the --kind or -k parameter.
140 |
141 | You can specify username and password for the connection with the --username or –password parameters, but these are optional. If you don't specify these parameters, the AAD authentication window pops up. You can also authenticate using service principal credentials, as in using your client ID and secret. You also have the option to use the device code authentication flow if you don't want to show your username and password when you are doing this lab. In this example, we are using the device code authentication flow.
142 |
143 | 
144 |
145 | To start the authentication flow, follow these steps.
146 |
147 | 1. Launch a browser session and navigate to the URL
148 |
149 | 2. Provide the device code.
150 |
151 | 
152 |
153 | 3. Proceed to provide the name of the account you want to authenticate with Azure AD credentials.
154 |
155 | The authentication profile token gets updated, and the authentication profile side bar shows the authenticated profile with a star against it.
156 |
157 | 
158 |
159 | 
160 |
161 | In the environments and solution section you will see the solutions that are available in the environment to which you are authenticated.
162 |
163 | 
164 |
165 | You have now authenticated Power Platform in the Visual Studio Code interface. When you right-click on a solution you have the following options to select from.
166 |
167 | - Copy the friendly name of the solution
168 |
169 | - Copy the unique name (this is the important one, for command operations)
170 |
171 | - Copy the version number of the solution
172 |
173 | If you right-click on your authentication profile, you will see the following options.
174 |
175 | - Copying username used to authenticate with Power Platform
176 |
177 | - Name/Rename the authentication profile to a friendly name
178 |
179 | - Open a new tab and navigate to the environment URL
180 |
181 | If you want to delete the profile you can press the trash icon, and that will delete your authentication profile.
182 |
183 | If you have multiple authentication profiles, you can select the star icon of the profile that you want to change to, and that will be the profile that will be in effect.
184 |
185 | 
186 |
187 | This makes it easier to navigate across different authentication profiles. To create a second authentication profile, just repeat the same steps that you did to create the first one.
188 |
189 | ## Working with the Power Platform tools extension for Visual Studio Code
190 |
191 | Now that we have installed the extension and authenticated to the environment, we are going to work with solutions using the Visual Studio Code user interface.
192 |
193 | 1. Download the compressed .zip files that you need for this project from the [GitHub repository](https://github.com/microsoft/powerplatform-vscode-lab). This compressed zip file contains a solution and a PCF control that we are going to use for this project.
194 |
195 | 
196 |
197 | 2. In your GitHub repository upload the extracted contents of the zip file. The ability to upload files is under the **Add file** button. This will give you the option to drag files from your workstation and commit them to GitHub.
198 |
199 | 
200 |
201 | Your personal GitHub repository should look like the following:
202 |
203 | 
204 |
205 | If you are using Visual Studio Code locally on your workstation, then proceed to clone your repository on to your workstation.
206 |
207 | 1. Under the **Code** button select **Clone** and copy the link to your repository.
208 |
209 | 2. In Visual Studio Code select **Git** from the **Activity bar**, press the **Clone Repository** button in the side bar, and then paste the copied URL in the command palette. If you have not authenticated with GitHub, Visual Studio Code will prompt for your GitHub credentials. After providing the credentials, you will be able to clone your repository.
210 |
211 | 
212 |
213 | Now that your repository has been successfully cloned, let us start working with the solutions and controls. **Note: If you are using GitHub Codespaces, you do not have to authenticate with GitHub as you are already authenticated. All you must do is launch Codespaces from the Code button.**
214 |
215 | ### Working with controls and Solutions
216 |
217 | Now that we are in our Visual Studio Code environment, let's install the required libraries and build the component.
218 |
219 | To install the required libraries, follow these steps.
220 |
221 | 1. Select the **Explorer** icon in the **Activity bar**. Your side bar should look like the following figure with the folders completely expanded.
222 |
223 | 
224 |
225 | 2. Right-click on the **LinearInputControl** folder and select **Open in integrated terminal**.
226 |
227 | 
228 |
229 | 3. In the terminal window, type the following:
230 |
231 | 
232 |
233 | This will install the appropriate node libraries needed for your PCF control. If there are things that need to be fixed, run "npm audit fix" to fix any vulnerabilities.
234 |
235 | Once you have completed the above-mentioned operations, let's view the control and proceed to build it.
236 |
237 | 1. Select the **Explorer** icon and expand the LinerInputControl folder contained within the LinearInputControl folder.
238 |
239 | 
240 |
241 | 2. Select the index.ts file and you can see that this is a slider control. Now when we proceed to build the control, the build will take these Typescript files and create the appropriate JavaScript for the web control.
242 |
243 | 3. In the terminal window, type npm run build. You should see the following:
244 |
245 | 
246 |
247 | 4. Test the control by using the command npm run start. This command will launch the web control in a browser under the component framework testing environment.
248 |
249 | 5. Slide the control back and forth and see the values change in the Data Input section.
250 |
251 | 
252 |
253 | Now that we know our control works properly, let go ahead and add it to our solution.
254 |
255 | 1. On the **Explorer** window, select the collaboration folder, and then right-click and select **Open in integrated terminal.**
256 |
257 | 
258 |
259 | 2. In the integrated terminal, type the "pac solution add-reference --path <path to the pcf control>". This will add the PCF control to the solution.
260 |
261 | 
262 |
263 | 3. Now proceed to build the solution by typing "dotnet build". This will start building the compressed zip file needed to import into your Power Platform environment.
264 |
265 | 
266 |
267 | 4. Once the project is built, navigate to the bin\\Debug folder under the Collaboration folder. Run the following solution import command to import the solution back into our dev environment.
268 |
269 | 
270 |
271 | 5. Confirm that the solution has updated in your environment using the Power Platform web interface.
272 |
273 | 
274 |
275 | You have now successfully used the Visual Studio Code extension for Power Platform. This completes the lab.
276 |
--------------------------------------------------------------------------------
/LinearInputControl/LinearInputControl.pcfproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\PowerApps
5 |
6 |
7 |
8 |
9 |
10 |
11 | LinearInputControl
12 | 80c5048b-fd27-4e63-be44-7ed175643413
13 | $(MSBuildThisFileDirectory)out\controls
14 |
15 |
16 |
17 | v4.6.2
18 |
19 | net462
20 | PackageReference
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/LinearInputControl/LinearInputControl/ControlManifest.Input.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Whole.None
6 | Currency
7 | FP
8 | Decimal
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/LinearInputControl/LinearInputControl/css/LinearInputControl.css:
--------------------------------------------------------------------------------
1 | /*
2 | This file is part of the Microsoft PowerApps code samples.
3 | Copyright (C) Microsoft Corporation. All rights reserved.
4 | This source code is intended only as a supplement to Microsoft Development Tools and/or
5 | on-line documentation. See these other materials for detailed information regarding
6 | Microsoft code samples.
7 |
8 | THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
9 | EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
10 | MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
11 | */
12 | .SampleNamespace\.LinearInputControl input[type=range].linearslider {
13 | margin: 1px 0;
14 | background:transparent;
15 | -webkit-appearance:none;
16 | width:100%;padding:0;
17 | height:24px;
18 | -webkit-tap-highlight-color:transparent
19 | }
20 | .SampleNamespace\.LinearInputControl input[type=range].linearslider:focus {
21 | outline: none;
22 | }
23 | .SampleNamespace\.LinearInputControl input[type=range].linearslider::-webkit-slider-runnable-track {
24 | background: #666;
25 | height:2px;
26 | cursor:pointer
27 | }
28 | .SampleNamespace\.LinearInputControl input[type=range].linearslider::-webkit-slider-thumb {
29 | background: #666;
30 | border:0 solid #f00;
31 | height:24px;
32 | width:10px;
33 | border-radius:48px;
34 | cursor:pointer;
35 | opacity:1;
36 | -webkit-appearance:none;
37 | margin-top:-12px
38 | }
39 | .SampleNamespace\.LinearInputControl input[type=range].linearslider::-moz-range-track {
40 | background: #666;
41 | height:2px;
42 | cursor:pointer
43 | }
44 | .SampleNamespace\.LinearInputControl input[type=range].linearslider::-moz-range-thumb {
45 | background: #666;
46 | border:0 solid #f00;
47 | height:24px;
48 | width:10px;
49 | border-radius:48px;
50 | cursor:pointer;
51 | opacity:1;
52 | -webkit-appearance:none;
53 | margin-top:-12px
54 | }
55 | .SampleNamespace\.LinearInputControl input[type=range].linearslider::-ms-track {
56 | background: #666;
57 | height:2px;
58 | cursor:pointer
59 | }
60 | .SampleNamespace\.LinearInputControl input[type=range].linearslider::-ms-thumb {
61 | background: #666;
62 | border:0 solid #f00;
63 | height:24px;
64 | width:10px;
65 | border-radius:48px;
66 | cursor:pointer;
67 | opacity:1;
68 | -webkit-appearance:none;
69 |
70 | }
--------------------------------------------------------------------------------
/LinearInputControl/LinearInputControl/index.ts:
--------------------------------------------------------------------------------
1 | /*
2 | This file is part of the Microsoft PowerApps code samples.
3 | Copyright (C) Microsoft Corporation. All rights reserved.
4 | This source code is intended only as a supplement to Microsoft Development Tools and/or
5 | on-line documentation. See these other materials for detailed information regarding
6 | Microsoft code samples.
7 |
8 | THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
9 | EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
10 | MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
11 | */
12 |
13 | import { IInputs, IOutputs } from "./generated/ManifestTypes";
14 |
15 | export class LinearInputControl implements ComponentFramework.StandardControl {
16 | // Value of the field is stored and used inside the control
17 | private _value: number;
18 |
19 | // PCF framework delegate which will be assigned to this object which would be called whenever any update happens.
20 | private _notifyOutputChanged: () => void;
21 |
22 | // label element created as part of this control
23 | private labelElement: HTMLLabelElement;
24 |
25 | // input element that is used to create the range slider
26 | private inputElement: HTMLInputElement;
27 |
28 | // Reference to the control container HTMLDivElement
29 | // This element contains all elements of our custom control example
30 | private _container: HTMLDivElement;
31 |
32 | // Reference to ComponentFramework Context object
33 | private _context: ComponentFramework.Context;
34 |
35 | // Event Handelr 'refreshData' reference
36 | private _refreshData: EventListenerOrEventListenerObject;
37 |
38 | /**
39 | * Empty constructor.
40 | */
41 | constructor() {
42 | // no-op: method not leveraged by this example custom control
43 | }
44 | /**
45 | * Used to initialize the control instance. Controls can kick off remote server calls and other initialization actions here.
46 | * Data-set values are not initialized here, use updateView.
47 | * @param context The entire property bag available to control via Context Object; It contains values as set up by the customizer mapped to property names defined in the manifest, as well as utility functions.
48 | * @param notifyOutputChanged A callback method to alert the framework that the control has new outputs ready to be retrieved asynchronously.
49 | * @param state A piece of data that persists in one session for a single user. Can be set at any point in a controls life cycle by calling 'setControlState' in the Mode interface.
50 | * @param container If a control is marked control-type='standard', it will receive an empty div element within which it can render its content.
51 | */
52 | public init(context: ComponentFramework.Context, notifyOutputChanged: () => void, state: ComponentFramework.Dictionary, container: HTMLDivElement): void {
53 | this._context = context;
54 | this._container = document.createElement("div");
55 | this._notifyOutputChanged = notifyOutputChanged;
56 | this._refreshData = this.refreshData.bind(this);
57 |
58 |
59 | // creating HTML elements for the input type range and binding it to the function which refreshes the control data
60 | this.inputElement = document.createElement("input");
61 | this.inputElement.setAttribute("type", "range");
62 | this.inputElement.addEventListener("input", this._refreshData);
63 |
64 | //setting the max and min values for the control.
65 | this.inputElement.setAttribute("min", "1");
66 | this.inputElement.setAttribute("max", "1000");
67 | this.inputElement.setAttribute("class", "linearslider");
68 | this.inputElement.setAttribute("id", "linearrangeinput");
69 |
70 | // creating a HTML label element that shows the value that is set on the linear range control
71 | this.labelElement = document.createElement("label");
72 | this.labelElement.setAttribute("class", "LinearRangeLabel");
73 | this.labelElement.setAttribute("id", "lrclabel");
74 |
75 | // retrieving the latest value from the control and setting it to the HTMl elements.
76 | this._value = context.parameters.controlValue.raw!;
77 | this.inputElement.setAttribute("value", context.parameters.controlValue.formatted ? context.parameters.controlValue.formatted : "0");
78 | this.labelElement.innerHTML = context.parameters.controlValue.formatted ? context.parameters.controlValue.formatted : "0";
79 |
80 | // appending the HTML elements to the control's HTML container element.
81 | this._container.appendChild(this.inputElement);
82 | this._container.appendChild(this.labelElement);
83 | container.appendChild(this._container);
84 | }
85 |
86 | /**
87 | * Updates the values to the internal value variable we are storing and also updates the html label that displays the value
88 | * @param evt : The "Input Properties" containing the parameters, control metadata and interface functions
89 | */
90 | public refreshData(evt: Event): void {
91 | this._value = (this.inputElement.value as any) as number;
92 | this.labelElement.innerHTML = this.inputElement.value;
93 | this._notifyOutputChanged();
94 | }
95 |
96 | /**
97 | * Called when any value in the property bag has changed. This includes field values, data-sets, global values such as container height and width, offline status, control metadata values such as label, visible, etc.
98 | * @param context The entire property bag available to control via Context Object; It contains values as set up by the customizer mapped to names defined in the manifest, as well as utility functions
99 | */
100 | public updateView(context: ComponentFramework.Context): void {
101 | // storing the latest context from the control.
102 | this._value = context.parameters.controlValue.raw!;
103 | this._context = context;
104 | this.inputElement.setAttribute("value", context.parameters.controlValue.formatted ? context.parameters.controlValue.formatted : "");
105 | this.labelElement.innerHTML = context.parameters.controlValue.formatted ? context.parameters.controlValue.formatted : "";
106 | }
107 |
108 | /**
109 | * It is called by the framework prior to a control receiving new data.
110 | * @returns an object based on nomenclature defined in manifest, expecting object[s] for property marked as "bound" or "output"
111 | */
112 | public getOutputs(): IOutputs {
113 | return {
114 | controlValue: this._value
115 | };
116 | }
117 |
118 | /**
119 | * Called when the control is to be removed from the DOM tree. Controls should use this call for cleanup.
120 | * i.e. cancelling any pending remote calls, removing listeners, etc.
121 | */
122 | public destroy(): void {
123 | this.inputElement.removeEventListener("input", this._refreshData);
124 | }
125 | }
--------------------------------------------------------------------------------
/LinearInputControl/LinearInputControl/strings/LinearInputControl.1033.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | LinearInputControl
122 | Display text for LinearInputControl
123 |
124 |
125 | LinearInputControl
126 | Display text for LinearInputControl description
127 |
128 |
129 | ControlValue
130 | Display text for ControlValue
131 |
132 |
133 | ControlValue
134 | Display text for ControlValue description
135 |
136 |
137 | LinearInputControl
138 | Label text for LinearInputControl button
139 |
140 |
--------------------------------------------------------------------------------
/LinearInputControl/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pcf-project",
3 | "version": "1.0.0",
4 | "description": "Project containing your PowerApps Component Framework (PCF) control.",
5 | "scripts": {
6 | "build": "pcf-scripts build",
7 | "clean": "pcf-scripts clean",
8 | "rebuild": "pcf-scripts rebuild",
9 | "start": "pcf-scripts start",
10 | "refreshTypes": "pcf-scripts refreshTypes"
11 | },
12 | "dependencies": {
13 | },
14 | "devDependencies": {
15 | "@types/node": "^16.4",
16 | "@types/powerapps-component-framework": "^1.3.0",
17 | "@typescript-eslint/eslint-plugin": "^4.29.0",
18 | "@typescript-eslint/parser": "^4.29.0",
19 | "eslint": "^7.32.0",
20 | "eslint-config-standard": "^16.0.2",
21 | "eslint-plugin-import": "^2.23.4",
22 | "eslint-plugin-node": "^11.1.0",
23 | "eslint-plugin-promise": "^5.1.0",
24 | "pcf-scripts": "^1",
25 | "pcf-start": "^1",
26 | "typescript": "^4.3"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/LinearInputControl/pcfconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "outDir": "./out/controls"
3 | }
--------------------------------------------------------------------------------
/LinearInputControl/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./node_modules/pcf-scripts/tsconfig_base.json",
3 | "compilerOptions": {
4 | "typeRoots": ["node_modules/@types"],
5 | }
6 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Power Platform Tools for Visual Studio Code Lab
2 |
3 | This repository contains the lab instructions and content on how to experience the Power Platform Tools for Visual Studio Code.
4 | In this lab, you will learn the following:
5 | - The various ways to install Power Platform Tools into Visual Studio Code
6 | - How to authenticate to Power Platform Environments
7 | - Work with Solutions and PCF controls with Visual Studio Code and then import them into Power Platform
8 |
9 | This lab works with:
10 | **GitHub CodeSpaces, Windows Services for Linux, macOS, and Microsoft Windows 10/11**
11 | **Nodejs LTS 16.x for the PCF control part of this lab **
12 |
13 | # Lab Prerequisites
14 | If you want to do this lab using GitHub CodeSpaces:
15 | * Have a GitHub Alias
16 | * Create your own GitHub repository
17 | * Download the samples solution and the PCF control from the lab GitHub repository or you clone the repository
18 | * Access to CodeSpaces
19 | * Access to a Power platform environment (new environment is preferred)
20 | - The type of environment does not matter (It can be Trial, Time bound Trial, Sandbox, and Production)
21 | - Import the Collaboration.zip file into your repository
22 |
23 | If you want to do this lab without GitHub CodeSpaces
24 | * Have a GitHub Alias
25 | * Create your own GitHub repository
26 | * Access to a Power platform environment (new environment is preferred)
27 | - The type of environment does not matter (It can be Trial, Time bound Trial, Sandbox, and Production)
28 | - Import the Collaboration.zip file into your repository
29 | * Have npm and node installed on your machine
30 |
31 |
32 | ## Trademarks
33 |
34 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
35 | trademarks or logos is subject to and must follow
36 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
37 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
38 | Any use of third-party trademarks or logos are subject to those third-party's policies.
39 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/media/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image1.png
--------------------------------------------------------------------------------
/media/image10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image10.png
--------------------------------------------------------------------------------
/media/image11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image11.png
--------------------------------------------------------------------------------
/media/image12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image12.png
--------------------------------------------------------------------------------
/media/image13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image13.png
--------------------------------------------------------------------------------
/media/image14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image14.png
--------------------------------------------------------------------------------
/media/image15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image15.png
--------------------------------------------------------------------------------
/media/image16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image16.png
--------------------------------------------------------------------------------
/media/image17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image17.png
--------------------------------------------------------------------------------
/media/image18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image18.png
--------------------------------------------------------------------------------
/media/image19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image19.png
--------------------------------------------------------------------------------
/media/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image2.png
--------------------------------------------------------------------------------
/media/image20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image20.png
--------------------------------------------------------------------------------
/media/image21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image21.png
--------------------------------------------------------------------------------
/media/image22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image22.png
--------------------------------------------------------------------------------
/media/image23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image23.png
--------------------------------------------------------------------------------
/media/image24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image24.png
--------------------------------------------------------------------------------
/media/image25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image25.png
--------------------------------------------------------------------------------
/media/image26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image26.png
--------------------------------------------------------------------------------
/media/image27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image27.png
--------------------------------------------------------------------------------
/media/image28.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image28.png
--------------------------------------------------------------------------------
/media/image29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image29.png
--------------------------------------------------------------------------------
/media/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image3.png
--------------------------------------------------------------------------------
/media/image30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image30.png
--------------------------------------------------------------------------------
/media/image31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image31.png
--------------------------------------------------------------------------------
/media/image32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image32.png
--------------------------------------------------------------------------------
/media/image33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image33.png
--------------------------------------------------------------------------------
/media/image34.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image34.png
--------------------------------------------------------------------------------
/media/image35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image35.png
--------------------------------------------------------------------------------
/media/image36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image36.png
--------------------------------------------------------------------------------
/media/image37.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image37.png
--------------------------------------------------------------------------------
/media/image4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image4.png
--------------------------------------------------------------------------------
/media/image5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image5.png
--------------------------------------------------------------------------------
/media/image6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image6.png
--------------------------------------------------------------------------------
/media/image7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image7.png
--------------------------------------------------------------------------------
/media/image8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image8.png
--------------------------------------------------------------------------------
/media/image9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/powerplatform-vscode-lab/6e7820f8c7e86a28d6aac08ad415b819f78e943a/media/image9.png
--------------------------------------------------------------------------------