mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-06 15:16:56 +01:00
fix(community/agents): align setup and permission samples
- mark agent setup pages as non-extensible where required - narrow the agent profile by hiding an unrelated sales-order field - define a dedicated read-only permission set for the sales review agent - assign AL-defined permission sets with system scope and the owning app ID - clarify the permission scope guidance for default access controls
This commit is contained in:
parent
25f6a3e008
commit
38d341eabb
7 changed files with 23 additions and 2 deletions
|
|
@ -8,6 +8,14 @@ profile "SALES REVIEW AGENT"
|
||||||
|
|
||||||
pagecustomization "Sales Review Agent Sales Ord." customizes "Sales Order"
|
pagecustomization "Sales Review Agent Sales Ord." customizes "Sales Order"
|
||||||
{
|
{
|
||||||
|
layout
|
||||||
|
{
|
||||||
|
modify("Payment Terms Code")
|
||||||
|
{
|
||||||
|
Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
actions
|
actions
|
||||||
{
|
{
|
||||||
modify(Post)
|
modify(Post)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ page 50100 "Sales Review Agent Setup"
|
||||||
Caption = 'Set up Sales Review Agent';
|
Caption = 'Set up Sales Review Agent';
|
||||||
SourceTable = "Sales Review Agent Setup";
|
SourceTable = "Sales Review Agent Setup";
|
||||||
SourceTableTemporary = true;
|
SourceTableTemporary = true;
|
||||||
|
Extensible = false;
|
||||||
|
|
||||||
layout
|
layout
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ Instance setup is not a Card or StandardDialog. The toolkit expects `PageType =
|
||||||
## Best Practice
|
## Best Practice
|
||||||
|
|
||||||
Declare `PageType = ConfigurationDialog`, host `part(...; "Agent Setup Part")`, and put agent-specific fields in another group. Keep system OK/Cancel. Use a temporary source record and defer persistence until Update, as described in `agent-setup-source-table-is-temporary.md`.
|
Declare `PageType = ConfigurationDialog`, host `part(...; "Agent Setup Part")`, and put agent-specific fields in another group. Keep system OK/Cancel. Use a temporary source record and defer persistence until Update, as described in `agent-setup-source-table-is-temporary.md`.
|
||||||
|
The Extensible property of the page must be set to false.
|
||||||
|
|
||||||
See sample: `agent-setup-page-is-configuration-dialog.good.al`.
|
See sample: `agent-setup-page-is-configuration-dialog.good.al`.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ page 50100 "Sales Review Agent Setup"
|
||||||
PageType = ConfigurationDialog;
|
PageType = ConfigurationDialog;
|
||||||
SourceTable = "Sales Review Agent Setup";
|
SourceTable = "Sales Review Agent Setup";
|
||||||
SourceTableTemporary = true;
|
SourceTableTemporary = true;
|
||||||
|
Extensible = false;
|
||||||
|
|
||||||
layout
|
layout
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ page 50100 "Sales Review Agent Setup"
|
||||||
ApplicationArea = All;
|
ApplicationArea = All;
|
||||||
SourceTable = "Sales Review Agent Setup";
|
SourceTable = "Sales Review Agent Setup";
|
||||||
SourceTableTemporary = true;
|
SourceTableTemporary = true;
|
||||||
|
Extensible = false;
|
||||||
|
|
||||||
layout
|
layout
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,12 @@
|
||||||
|
permissionset 50100 "SALES REVIEW AGENT"
|
||||||
|
{
|
||||||
|
Assignable = true;
|
||||||
|
Caption = 'Sales Review Agent';
|
||||||
|
Permissions =
|
||||||
|
tabledata "Sales Header" = R,
|
||||||
|
tabledata "Sales Line" = R;
|
||||||
|
}
|
||||||
|
|
||||||
codeunit 50100 "Sales Review Agent Factory"
|
codeunit 50100 "Sales Review Agent Factory"
|
||||||
{
|
{
|
||||||
procedure GetDefaultAccessControls(var TempAccessControlBuffer: Record "Access Control Buffer" temporary)
|
procedure GetDefaultAccessControls(var TempAccessControlBuffer: Record "Access Control Buffer" temporary)
|
||||||
|
|
@ -8,7 +17,7 @@ codeunit 50100 "Sales Review Agent Factory"
|
||||||
NavApp.GetCurrentModuleInfo(CurrentModuleInfo);
|
NavApp.GetCurrentModuleInfo(CurrentModuleInfo);
|
||||||
Clear(TempAccessControlBuffer);
|
Clear(TempAccessControlBuffer);
|
||||||
TempAccessControlBuffer."Company Name" := CopyStr(CompanyName(), 1, MaxStrLen(TempAccessControlBuffer."Company Name"));
|
TempAccessControlBuffer."Company Name" := CopyStr(CompanyName(), 1, MaxStrLen(TempAccessControlBuffer."Company Name"));
|
||||||
TempAccessControlBuffer.Scope := TempAccessControlBuffer.Scope::Tenant;
|
TempAccessControlBuffer.Scope := TempAccessControlBuffer.Scope::System;
|
||||||
TempAccessControlBuffer."App ID" := CurrentModuleInfo.Id;
|
TempAccessControlBuffer."App ID" := CurrentModuleInfo.Id;
|
||||||
TempAccessControlBuffer."Role ID" := RoleIdTok;
|
TempAccessControlBuffer."Role ID" := RoleIdTok;
|
||||||
TempAccessControlBuffer.Insert();
|
TempAccessControlBuffer.Insert();
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ application-area: [all]
|
||||||
|
|
||||||
## Best Practice
|
## Best Practice
|
||||||
|
|
||||||
Insert only the permission sets the agent needs, with the correct Scope and App ID. Recreate any BC-only sets as AL permissionset objects first. Prefer a dedicated permission set over a full-user role.
|
Insert only the permission sets the agent needs. For an AL `permissionset` object, use `Scope::System` and the ID of the app that defines it. Recreate permission sets that exist only as user-defined configuration in Business Central as AL objects first. Prefer a dedicated permission set over a full-user role.
|
||||||
|
|
||||||
See sample: `get-default-access-controls-least-privilege.good.al`.
|
See sample: `get-default-access-controls-least-privilege.good.al`.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue