Skip to content

Commit d74915d

Browse files
authored
Live publish
2 parents 6cdb26e + 0fcf4f2 commit d74915d

File tree

8 files changed

+78
-46
lines changed

8 files changed

+78
-46
lines changed

powerapps-docs/developer/model-driven-apps/clientapi/client-scripting-best-practices.md

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ search.app:
1717
---
1818
# Best practices: Client scripting in model-driven apps
1919

20-
These are some of the best practice tips you could consider while writing your JavaScript code for model-driven apps.
20+
The following are some of the tips you could consider while writing your JavaScript code for model-driven apps.
2121

2222
## Define unique JavaScript function names
2323

@@ -26,35 +26,33 @@ When you write functions that will be used in JavaScript libraries, your functio
2626
- **Unique function prefix**: Define each of your functions using the standard syntax with a consistent name that includes a unique naming convention, as shown in the following example.
2727
```JavaScript
2828
function MyUniqueName_performMyAction()
29-
{
30-
// Code to perform your action.
31-
}
29+
{
30+
// Code to perform your action.
31+
}
3232
```
3333
- **Namespaced library names**: Associate each of your functions with a JavaScript object to create a kind of namespace to use when you call your functions as shown in the following example.
3434
```JavaScript
35-
//If the MyUniqueName namespace object isn’t defined, create it.
36-
if (typeof (MyUniqueName) == "undefined")
37-
{ MyUniqueName = {}; }
38-
// Create Namespace container for functions in this library;
39-
MyUniqueName.MyFunctions = {
40-
performMyAction: function(){
41-
// Code to perform your action.
42-
//Call another function in your library
43-
this.anotherAction();
44-
},
45-
anotherAction: function(){
46-
// Code in another function
47-
}
48-
};
35+
var Sdk = window.Sdk || {};
36+
(function () {
37+
this.formOnLoad = function () {
38+
// Code to perform your actions.
39+
}
40+
this.attributeOnChange = function () {
41+
// Code to perform your actions.
42+
}
43+
this.formOnSave = function () {
44+
// Display an alert dialog
45+
}
46+
}). call(Sdk);
4947
```
5048

5149
Then when you use your function you can specify the full name. The following example shows this.
5250

5351
```JavaScript
54-
MyUniqueName.MyFunctions.performMyAction();
52+
Sdk.attributeOnChange();
5553
```
5654

57-
If you call a function within another function you can use the this keyword as a shortcut to the object that contains both functions. However, if your function is being used as an event handler, the this keyword will refer to the object that the event is occurring on.
55+
If you call a function within another function, you can use this keyword as a shortcut to the object that contains both functions. However, if your function is being used as an event handler, this keyword will refer to the object that the event is occurring on.
5856

5957
## Avoid using unsupported methods
6058

@@ -73,4 +71,4 @@ If you decide to use the remaining capabilities of jQuery that are useful with m
7371

7472
## Write your code for multiple browsers
7573

76-
Model-driven apps support multiple browsers. You should make sure that any scripts that you use will work with all supported browsers. Most of the significant differences between Internet Explorer and other browser have to do with HTML and XML DOM manipulation. Because HTML DOM manipulation is not supported, if script logic is only performing supported actions and using the [Xrm object model](understand-clientapi-object-model.md), the changes required to support other browsers could be small.
74+
Model-driven apps support multiple browsers. Make sure that any scripts that you use will work with all supported browsers. Most of the significant differences between Internet Explorer and other browser have to do with HTML and XML DOM manipulation. Because HTML DOM manipulation is not supported, if script logic is only performing supported actions and using the [Xrm object model](understand-clientapi-object-model.md), the changes required to support other browsers could be small.

powerapps-docs/developer/model-driven-apps/define-custom-actions-modify-ribbon.md

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: "Define custom actions to modify the ribbon (model-driven apps) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces"
33
description: "Learn about defining custom actions to modify the ribbon." # 115-145 characters including spaces. This abstract displays in the search result."
44
keywords: ""
5-
ms.date: 10/31/2018
5+
ms.date: 10/13/2020
66
ms.service: powerapps
77
ms.topic: article
88
ms.assetid: 72544b02-4eed-4d70-666e-a0d880f526af
@@ -19,8 +19,6 @@ search.app:
1919

2020
# Define custom actions to modify the ribbon
2121

22-
<!-- https://docs.microsoft.com/dynamics365/customer-engagement/developer/customize-dev/define-custom-actions-modify-ribbon -->
23-
2422
The default, an application command bar or ribbon is defined by Common Data Service metadata. This default data can’t be changed, but you can include definitions of specific actions that will override the default ribbon.
2523

2624
## Types of custom actions
@@ -49,18 +47,36 @@ The default, an application command bar or ribbon is defined by Common Data Serv
4947
### Hide custom actions
5048

5149
A `<HideCustomAction>` is a statement that you use when you want to remove an existing ribbon element so that it is not rendered. This does not hide the ribbon element, it actually removes the ribbon element at runtime so that it doesn’t exist in the ribbon.
50+
51+
The **HideActionId** element provides a unique ID for the action. For consistency and readability, you should follow the same naming convention described for `<CustomAction>` elements. The **Location** attribute must match the Id of the ribbon element you want to remove.
5252

5353
> [!NOTE]
5454
> Because the `HideCustomAction` element removes a specified node from the ribbon, removing ribbon elements in this manner may not be the best option for every situation.
5555
>
5656
> - If you want to remove a button that is associated with a specific privilege, you should adjust the privileges for the entity in the security roles in your implementation. This will allow the default ribbon display and enables rules to hide or disable ribbon elements from users who do not have the necessary privileges to perform those actions.
5757
> - If you want to replace an existing ribbon element with a custom ribbon element, you can overwrite that element by specifying a `CustomAction.Location` value identical to the existing element.
58+
> - To remove the `HideCustomAction` element you need to create a new updated version of the same solution that installed the `HideCustomAction` element. A new patch of the solution cannot remove the `HideCustomAction` element.
59+
60+
The `HideCustomAction` element cannot be removed, once added, except by creating a new updated solution. Instead, ribbon buttons should be hidden using a `DisplayRule` element that always evaluate to false. Having both `Mscrm.HideOnModern` and `Mscrm.ShowOnlyOnModern` would always evaluate to false. For example, to hide a deactivate button:
61+
62+
```xml
63+
<CommandDefinition Id="Mscrm.HomepageGrid.Deactivate">
64+
<EnableRules>
65+
</EnableRules>
66+
<DisplayRules>
67+
<DisplayRule Id="Mscrm.HideOnModern" />
68+
<DisplayRule Id="Mscrm.ShowOnlyOnModern" />
69+
</DisplayRules>
70+
<Actions>
71+
</Actions>
72+
</CommandDefinition>
73+
```
5874

59-
The **HideActionId** element provides a unique ID for the action. For consistency and readability, you should follow the same naming convention described for `<CustomAction>` elements. The **Location** attribute must match the Id of the ribbon element you want to remove.
75+
6076

6177
### See also
6278

63-
[Customize commands and the ribbon](customize-commands-ribbon.md)
64-
[Pass data from a page as a parameter to Ribbon actions](/dynamics365/customerengagement/on-premises/developer/customize-dev/pass-dynamics-365-data-page-parameter-ribbon-actions
79+
[Customize commands and the ribbon](customize-commands-ribbon.md)
80+
[Pass data from a page as a parameter to Ribbon actions](/dynamics365/customerengagement/on-premises/developer/customize-dev/pass-dynamics-365-data-page-parameter-ribbon-actions
6581
)<br/>
66-
[Define scaling for Ribbon elements](define-scaling-ribbon-elements.md)
82+
[Define scaling for Ribbon elements](define-scaling-ribbon-elements.md)

powerapps-docs/maker/canvas-apps/functions/function-ismatch.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ Predefined patterns provide a simple way to match either one of a set of charact
9797
| **Period** |Matches a period or dot ("."). |`\.` |
9898
| **RightParen** |Matches a right parenthesis ")". |`\)` |
9999
| **Space** |Matches a character that adds whitespace. |`\s` |
100+
|**Tab**|Matches a tab character.|`\t`|
100101

101102
For example, the pattern **"A" & MultipleDigits** will match the letter "A" followed by one or more digits.
102103

powerapps-docs/maker/canvas-apps/functions/function-param.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,15 @@ Use the *LaunchTarget* argument to specify the target browser window in which to
9393
9494
| LaunchTarget&nbsp;enum | Description |
9595
| --- | --- |
96-
| **Blank** | The webpage or app is opened in a new window or tab. |
97-
| **Self** | The webpage or app replaces the current window or tab. |
96+
| **New** | The webpage or app is opened in a new window or tab. |
97+
| **Replace** | The webpage or app replaces the current window or tab. |
9898
| *name* | Instead of an enum value, use your own text string to *name* the window or tab. *Self* is an internal only name that is only used by the **Launch** function. It has no impact on nor will it match the title of the window that your users see. If a window or tab with the given *name* already exists, its contents will be replaced. Otherwise, a new window or tab will be created. *name* can't begin with the underscore character "_". |
9999
100-
**Blank** is the default enum when running in a web browser with **Self** and *name* as available options. In a mobile player, **Blank** is the default for webpages with *name* as an available option; while the current canvas app will always be replaced by another canvas app.
100+
**New** is the default enum when running in a web browser with **Replace** and *name* as available options. In a mobile player, **New** is the default for webpages with *name* as an available option; while the current canvas app will always be replaced by another canvas app.
101101
102102
> [!NOTE]
103-
> - Using a *LaunchTarget* with any value other than **Blank** in embedded scenarios (for example, Power BI or SharePoint) is not supported and may result in unexpected behavior. In the future, this behavior may change, or may cause an error.
104-
> - *LaunchTarget* enum names are in transition. You may use **Blank** and **Self** currently, though these names will change in the future. **Self** will go through an intermediate change to **'Self'** as a new **Self** keyword is introduced. To avoid this conflict, the expected names may be **New** and **Replace**. Your app will automatically update when these changes occur. Your formulas won't need an update manually.
103+
> - Using a *LaunchTarget* with any value other than **New** in embedded scenarios (for example, Power BI or SharePoint) is not supported and may result in unexpected behavior. In the future, this behavior may change, or may cause an error.
104+
<!-- *LaunchTarget* enum names are in transition. You may use **Blank** and **Self** currently, though these names will change in the future. **Self** will go through an intermediate change to **'Self'** as a new **Self** keyword is introduced. To avoid this conflict, the expected names may be **New** and **Replace**. Your app will automatically update when these changes occur. Your formulas won't need an update manually.-->
105105
106106
### Security zones
107107

powerapps-docs/maker/canvas-apps/geospatial-overview.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
---
2-
title:
3-
description:
2+
title: Add Geospatial components to apps made with Microsoft Power Apps
3+
description: Geospatial components let you view and manipulate 3D objects and images in the real world, in augmented reality.
44
author: iaanw
55
manager: shellha
66
ms.service: powerapps
77
ms.topic: conceptual
8-
ms.custom: canvas
8+
ms.custom: canvas, ce06122020
99
ms.reviewer: tapanm
1010
ms.date: 6/12/2020
1111
ms.author: iawilt
1212
search.audienceType:
1313
- maker
1414
search.app:
1515
- PowerApps
16-
ms.custom: ce06122020
1716

1817
---
1918

@@ -62,7 +61,9 @@ The geospatial features require additional terms of use that must be reviewed an
6261
![Screenshot of the terms of service](./media/geospatial/ppac-tos.png "Screenshot of the terms of service")
6362

6463
>[!IMPORTANT]
65-
>You must read and agree to the terms of service before you can use geospatial features. The following are the terms of service:
64+
>You must read and agree to the terms of service before you can use geospatial features.
65+
>
66+
>The following are the terms of service:
6667
>
6768
>These features use mapping capabilities that are powered by a third party, TomTom(tm), and operate outside your tenant's geographic region, compliance boundary, or national cloud instance.
6869
>
@@ -73,6 +74,12 @@ The geospatial features require additional terms of use that must be reviewed an
7374
>Additional licensing requirements might be required to enable this feature.
7475
7576
![Screenshot of the geospatial services toggle switch to On](./media/geospatial/ppac-geo-on.png "Screenshot of the geospatial services toggle switch to On")
77+
78+
>[!NOTE]
79+
>Requests sent between TomTom(tm) and the Azure Maps service are not exposed over the public Internet.
80+
>
81+
>Requests between apps you create with the component and the Azure Maps service are sent over HTTPS.
82+
7683

7784
1. Select **Save** at the bottom of the settings page.
7885

powerapps-docs/maker/common-data-service/create-connection-reference.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ You can add a connection reference to a solution in a few different ways:
4747

4848
## Limits
4949

50-
During the preview, the same connection reference can be used a maximum of 16 times in flows.
50+
While connection references are in preview, one connection reference can only be used within a maximum of 16 flows. If the same connection needs to be used in more than 16 flows, then create another connection reference with a connection to the same connector. There is no limit to the number of actions in each flow that can be associated with the connection reference.
5151

5252
### See also
5353

Loading

powerapps-docs/maker/model-driven-apps/visibility-options-legacy.md

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,26 @@ search.app:
2525
---
2626
# Show or hide model-driven app form elements
2727

28-
Several types of form elements have the option to be shown or hidden by default. Tabs, sections, fields, iFrames, and web resources all provide this option. Using form scripts or business rules the visibility of these elements can be controlled to create a dynamic form to provide a user interface that adapts to conditions in the form.
28+
Several types of form elements have the option to be shown or hidden at app runtime. Tabs, sections, fields, iFrames, and web resources all provide this option. You can change the default setting to view a form element in the form designer by selecting the **Hide** property.
29+
30+
<img src = "media/hide-property.png" alt = "Hide property for a tab on a form" width = "300" height = "481">
31+
32+
Using form scripts or business rules, the visibility of these elements can be controlled to create a dynamic form to provide a user interface that adapts to conditions in the form.
2933

3034
> [!IMPORTANT]
31-
> Hiding form elements is not a recommended way to enforce security. There are several ways people can view all the elements and data in the form when elements are hidden.
32-
> Disabling, hiding, or locking a field, control, or form component using the form designer, manually in the form XML, or using a Client API only works to control data access in a Unified Interface or legacy web client app. It doesn’t strictly enforce data access by itself in the apps. Moreover, it doesn’t control data access using other ways to connect to Common Data Service such as using the Web service or a canvas app. It is also important to know that the app will not display an error message or block a save if a required field is null and has been disabled. This ensures that users are never blocked from completing a task. To control access, see [Set security roles for a form](control-access-forms.md#set-security-roles-for-a-form) or use [Field-level security](/power-platform/admin/field-level-security).
35+
> Hiding form elements is not a recommended way to enforce security. There are several ways people can view all the elements and data in the form when elements are hidden.
36+
> Disabling, hiding, or locking a field, control, or form component using the form designer, manually in the form XML, or using a Client API only works to control data access in a Unified Interface or legacy web client app. It doesn’t strictly enforce data access by itself in the apps. Moreover, it doesn’t control data access using other ways to connect to Common Data Service such as using the Web service or a canvas app. It is also important to know that the app will not display an error message or block a save if a required field is null and has been disabled. This ensures that users are never blocked from completing a task. To control access, see [Set security roles for a form](control-access-forms.md#set-security-roles-for-a-form) or use [Field-level security](/power-platform/admin/field-level-security).
3337
34-
Rather than designing forms that depend on scripts to control visibility of options, consider whether a business process flow, a dialog, or switching to a different form may be better suited to meet your requirements. If you do use scripts, make sure that any element that might be hidden is hidden by default. Only show it with scripts when your logic calls for it. This way it will not be displayed in presentations that do not support scripts.
35-
36-
> [!NOTE]
37-
> In the Unified Interface, for sections where fields don’t span more than one column, hiding a field in the section moves the field below up on the form. If a field spans more than two columns in a section, hiding a field in the section that has a control across from it will not move the field below it up on the form. You will see additional white space where the hidden field is in the section.
38+
Rather than designing forms that depend on scripts to control visibility of options, consider whether a business process flow, a dialog, or switching to a different form may be better suited to meet your requirements. If you do use scripts, make sure that any element that might be hidden is hidden by default. Only show it with scripts when your logic calls for it. This way it will not be displayed in presentations that do not support scripts.
39+
40+
In the Unified Interface, for sections where fields don’t span more than one column, hiding a field in the section moves the field below up on the form. If a field spans more than two columns in a section, hiding a field in the section that has a control across from it will not move the field below it up on the form. You will see additional white space where the hidden field is in the section.
41+
42+
## Client API methods for controlling the visibility of form elements
43+
44+
For information about how to change the form element show or hide status for the header, command bar, footer, and tabs at app runtime, see these client API reference articles:
45+
- [formContext.ui.headerSection item (Client API reference)](../../developer/model-driven-apps/clientapi/reference/formContext-ui-headerSection.md)
46+
- [formContext.ui.footerSection item (Client API reference)](../../developer/model-driven-apps/clientapi/reference/formContext-ui-footerSection.md)
47+
- [formContext.ui.tabs (Client API reference)](../../developer/model-driven-apps/clientapi/reference/formContext-ui-tabs.md)
3848

3949
## Next steps
4050

0 commit comments

Comments
 (0)