Skip to content

Commit

Permalink
[main] Copilot FWS: address customer feedback/FUD with Copilot & AI C…
Browse files Browse the repository at this point in the history
…apabilities page (#2424)

<!-- Thank you for submitting a Pull Request. If you're new to
contributing to BCApps please read our pull request guideline below
* https://github.com/microsoft/BCApps/Contributing.md
-->

needs to be open and approved. Submitting PRs with no linked issues or
unapproved issues is highly discouraged. -->
Fixes
[AB#545996](https://dynamicssmb2.visualstudio.com/Dynamics%20SMB/_workitems/edit/545996/)

---------

Co-authored-by: wenjiefan <[email protected]>
  • Loading branch information
gggdttt and wenjiefan committed Dec 5, 2024
1 parent 20f119a commit 1dc72f3
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 55 deletions.
198 changes: 145 additions & 53 deletions src/System Application/App/AI/src/Copilot/CopilotAICapabilities.Page.al
Original file line number Diff line number Diff line change
Expand Up @@ -30,95 +30,172 @@ page 7775 "Copilot AI Capabilities"
{
area(Content)
{
group(AllowedDataMovementOffInfo)
group(AOAIServicesInRegionArea)
{
ShowCaption = false;
Visible = ((not WithinGeo) or WithinEuropeGeo) and (not AllowDataMovement);
InstructionalText = 'Copilot uses the Azure OpenAI Service, which isn’t available in your region. To activate Copilot capabilities, you must allow data movement.';
}

group(AllowedDataMovementOnInfo)
{
ShowCaption = false;
Visible = ((not WithinGeo) or WithinEuropeGeo) and AllowDataMovement;
InstructionalText = 'Copilot uses the Azure OpenAI Service, which isn’t available in your region. To keep using Copilot capabilities, you must allow data movement.';
}

group(AlwaysConnected)
{
ShowCaption = false;
InstructionalText = 'Copilot and other generative AI capabilities use Azure OpenAI Service. Your environment connects to Azure OpenAI Service in your region.';
Visible = WithinGeo and (not WithinEuropeGeo);
Visible = WithinAOAIServicesInRegionArea;
InstructionalText = 'Copilot and agents use the Azure OpenAI Service. Your environment connects to this service in your own region.';

field(GovernData; CopilotGovernDataLbl)
field(DataSecurityAndPrivacy; FAQForDataSecurityAndPrivacyLbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink('https://go.microsoft.com/fwlink/?linkid=2249575');
Hyperlink(FAQForDataSecurityAndPrivacyDocLinkLbl);
end;
}
}

group(NotAlwaysConnected)
{
ShowCaption = false;
InstructionalText = 'By allowing data movement, you agree to data being stored and processed by the Azure OpenAI Service outside of your environment''s geographic region or compliance boundary.';
Visible = ((not WithinGeo) or WithinEuropeGeo) and AllowDataMovement;

field(DataMovement; AllowDataMovement)
field(GovernData; CopilotGovernDataLbl)
{
ApplicationArea = All;
Caption = 'Allow data movement';
ToolTip = 'Specifies whether data movement across regions is allowed. This is required to enable Copilot in your environment.';
Editable = AllowDataMovementEditable;
ShowCaption = false;

trigger OnValidate()
trigger OnDrillDown()
begin
UpdateAllowDataMovement();
Hyperlink(CopilotGovernDataDocLinkLbl);
end;
}

field(AOAIServiceLocated; AOAIServiceLocatedLbl)
field(DataProcessByAOAI; DataProcessByAOAILbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink('https://go.microsoft.com/fwlink/?linkid=2250267');
Hyperlink(DataProcessByAOAIDocLinkLbl);
end;
}
}

group(NotAlwaysConnected2)
group(EUDBArea)
{
ShowCaption = false;
InstructionalText = 'Generative AI capabilities are deactivated because Azure OpenAI Service is not available in your region. By allowing data movement, you agree to data being stored and processed by the Azure OpenAI Service outside of your environment''s geographic region or compliance boundary.';
Visible = ((not WithinGeo) or WithinEuropeGeo) and (not AllowDataMovement);
Visible = WithinEUDBArea;

field(DataMovement2; AllowDataMovement)
group(AllowedDataMovementOffInfo)
{
ShowCaption = false;
Visible = WithinEUDBArea and (not AllowDataMovement);
InstructionalText = 'Copilot and agents use the Azure OpenAI Service available within the EU Data Boundary. To activate these capabilities, you must allow data movement within this boundary.';
}
group(AllowedDataMovementOnInfo)
{
ShowCaption = false;
Visible = WithinEUDBArea and AllowDataMovement;
InstructionalText = 'Copilot and agents use the Azure OpenAI Service available within the EU Data Boundary. To keep using these capabilities, you must allow data movement within this boundary.';
}
field(EUDBAreaDataSecurityAndPrivacy; FAQForDataSecurityAndPrivacyLbl)
{
ApplicationArea = All;
Caption = 'Allow data movement';
ToolTip = 'Specifies whether data movement across regions is allowed. This is required to enable Copilot in your environment.';
Editable = AllowDataMovementEditable;
ShowCaption = false;

trigger OnValidate()
trigger OnDrillDown()
begin
UpdateAllowDataMovement();
Hyperlink(FAQForDataSecurityAndPrivacyDocLinkLbl);
end;
}
group(EUDBAreaDataMovementGroup)
{
ShowCaption = false;
label(EUDBAreaCaption)
{
ApplicationArea = All;
Caption = 'By allowing data movement, you agree to data being processed by the Azure OpenAI Service within the EU Data Boundary.';
}
field(EUDBAreaDataMovement; AllowDataMovement)
{
ApplicationArea = All;
Caption = 'Allow data movement';
ToolTip = 'Specifies whether data movement across regions is allowed. This is required to enable Copilot in your environment.';
Editable = WithinEUDBArea and AllowDataMovementEditable;

trigger OnValidate()
begin
UpdateAllowDataMovement();
end;
}
field(EUDBAreaAOAIServiceLocated; AOAIServiceLocatedLbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink(AOAIServiceLocatedDocLinkLbl);
end;
}
field(EUDBAreaDataProcess; DataProcessByAOAILbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink(DataProcessByAOAIDocLinkLbl);
end;
}
}
}

field(AOAIServiceLocated2; AOAIServiceLocatedLbl)
group(AOAIOutOfRegionArea)
{
ShowCaption = false;
Visible = WithinAOAIOutOfRegionArea;
group(AllowedDataMovementOffInfo2)
{
ShowCaption = false;
Visible = WithinAOAIOutOfRegionArea and (not AllowDataMovement);
InstructionalText = 'Copilot and agents use the Azure OpenAI Service, which isn''t available in your region. To activate these capabilities, you must allow data movement.';
}
group(AllowedDataMovementOnInfo2)
{
ShowCaption = false;
Visible = WithinAOAIOutOfRegionArea and AllowDataMovement;
InstructionalText = 'Copilot and agents use the Azure OpenAI Service, which isn''t available in your region. To keep using these capabilities, you must allow data movement.';
}
field(AOAIOutOfRegionAreaDataSecurityAndPrivacy; FAQForDataSecurityAndPrivacyLbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink('https://go.microsoft.com/fwlink/?linkid=2250267');
Hyperlink(FAQForDataSecurityAndPrivacyDocLinkLbl);
end;
}
group(AOAIOutOfRegionAreaDataMovementGroup)
{
ShowCaption = false;
label(AOAIOutOfRegionAreaCaption)
{
ApplicationArea = All;
Caption = 'By allowing data movement, you agree to data being processed by the Azure OpenAI Service outside of your environment''s geographic region or compliance boundary.';
}
field(AOAIOutOfRegionAreaDataMovement; AllowDataMovement)
{
ApplicationArea = All;
Caption = 'Allow data movement';
ToolTip = 'Specifies whether data movement across regions is allowed. This is required to enable Copilot in your environment.';
Editable = WithinAOAIOutOfRegionArea and AllowDataMovementEditable;

trigger OnValidate()
begin
UpdateAllowDataMovement();
end;
}
field(AOAIOutOfRegionAreaAOAIServiceLocated; AOAIServiceLocatedLbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink(AOAIServiceLocatedDocLinkLbl);
end;
}
field(AOAIOutOfRegionAreaDataProcess; DataProcessByAOAILbl)
{
ShowCaption = false;

trigger OnDrillDown()
begin
Hyperlink(DataProcessByAOAIDocLinkLbl);
end;
}
}
}

part(PreviewCapabilities; "Copilot Capabilities Preview")
Expand Down Expand Up @@ -149,7 +226,7 @@ page 7775 "Copilot AI Capabilities"

trigger OnAction()
begin
Hyperlink('https://aka.ms/azurestatus');
Hyperlink(CheckServiceHealthDocLinkLbl);
end;
}
}
Expand All @@ -165,6 +242,8 @@ page 7775 "Copilot AI Capabilities"
trigger OnOpenPage()
var
EnvironmentInformation: Codeunit "Environment Information";
WithinGeo: Boolean;
WithinEuropeGeo: Boolean;
begin
OnRegisterCopilotCapability();

Expand All @@ -191,6 +270,11 @@ page 7775 "Copilot AI Capabilities"
CopilotCapabilityImpl.ShowPrivacyNoticeDisagreedNotification();

CopilotCapabilityImpl.UpdateGuidedExperience(AllowDataMovement);

//Todo: replace WithinEuropeGeo with WithinEUBD
WithinEUDBArea := WithinEuropeGeo;
WithinAOAIServicesInRegionArea := WithinGeo and (not WithinEuropeGeo);
WithinAOAIOutOfRegionArea := (not WithinGeo) and (not WithinEuropeGeo);
end;

local procedure UpdateAllowDataMovement()
Expand All @@ -214,10 +298,18 @@ page 7775 "Copilot AI Capabilities"
var
CopilotCapabilityImpl: Codeunit "Copilot Capability Impl";
PrivacyNotice: Codeunit "Privacy Notice";
WithinGeo: Boolean;
WithinEuropeGeo: Boolean;
WithinEUDBArea: Boolean;
WithinAOAIServicesInRegionArea: Boolean;
WithinAOAIOutOfRegionArea: Boolean;
AllowDataMovement: Boolean;
AllowDataMovementEditable: Boolean;
CopilotGovernDataLbl: Label 'How do I govern my Copilot data?';
AOAIServiceLocatedLbl: Label 'In which region will my data be stored and processed?';
FAQForDataSecurityAndPrivacyLbl: Label 'FAQ for data security and privacy';
DataProcessByAOAILbl: Label 'What data is processed by Azure OpenAI Service?';
AOAIServiceLocatedLbl: Label 'In which region will my data be processed?';
CopilotGovernDataDocLinkLbl: Label 'https://go.microsoft.com/fwlink/?linkid=2249575', Locked = true;
FAQForDataSecurityAndPrivacyDocLinkLbl: Label 'https://go.microsoft.com/fwlink/?linkid=2298505', Locked = true;
DataProcessByAOAIDocLinkLbl: Label 'https://go.microsoft.com/fwlink/?linkid=2298232', Locked = true;
AOAIServiceLocatedDocLinkLbl: Label 'https://go.microsoft.com/fwlink/?linkid=2250267', Locked = true;
CheckServiceHealthDocLinkLbl: Label 'https://aka.ms/azurestatus', Locked = true;
}
Original file line number Diff line number Diff line change
Expand Up @@ -119,18 +119,19 @@ page 7774 "Copilot Capabilities GA"
end;
end;
}

#if not CLEAN26
action(SupplementalTerms)
{
Caption = 'Supplemental Terms of Use';
ToolTip = 'Opens the supplemental terms of use for generally available capabilities.';
Image = Info;

Visible = false;
trigger OnAction()
begin
Hyperlink(SupplementalTermsLinkTxt);
end;
}
#endif
}
}

Expand Down Expand Up @@ -163,7 +164,9 @@ page 7774 "Copilot Capabilities GA"
ActionsEnabled: Boolean;
CapabilityEnabled: Boolean;
DataMovementEnabled: Boolean;
#if not CLEAN26
SupplementalTermsLinkTxt: Label 'https://go.microsoft.com/fwlink/?linkid=2236010', Locked = true;
#endif
CopilotFeatureDeactivatedLbl: Label 'The copilot/AI capability %1, App Id %2 has been deactivated by UserSecurityId %3.', Locked = true;
CopilotFeatureActivatedLbl: Label 'The copilot/AI capability %1, App Id %2 has been activated by UserSecurityId %3.', Locked = true;

Expand Down

0 comments on commit 1dc72f3

Please sign in to comment.