Skip to content
Open
Show file tree
Hide file tree
Changes from 62 commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
d30ab05
PTE Apps and Nuget for getting versions
TowerMyhrer Dec 22, 2025
f2ab3cb
Update CCMS/Translations/Cloud Customer Management Solution.nb-NO.xlf
TowerMyhrer Dec 22, 2025
69bed70
fixes NO translations
TowerMyhrer Dec 22, 2025
db35dd2
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Dec 22, 2025
27412e8
Update CCMS/Translations/Cloud Customer Management Solution.nb-NO.xlf
TowerMyhrer Dec 22, 2025
4a9813b
copilot review
TowerMyhrer Dec 22, 2025
4bc7959
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Dec 22, 2025
578132a
Update CCMS/Translations/Cloud Customer Management Solution.nb-NO.xlf
TowerMyhrer Dec 22, 2025
fe16715
Update CCMS/Translations/Cloud Customer Management Solution.nb-NO.xlf
TowerMyhrer Dec 22, 2025
c70d216
Update CCMS/Translations/Cloud Customer Management Solution.nb-NO.xlf
TowerMyhrer Dec 22, 2025
205be64
Copilot codereview
TowerMyhrer Dec 22, 2025
471a02a
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Dec 22, 2025
1d688b8
Missing permissions
TowerMyhrer Dec 22, 2025
0b0dfbb
Update CCMS/src/PTEApps/D4PBCPTEApp.Table.al
TowerMyhrer Dec 22, 2025
f7d003b
Update CCMS/src/PTEApps/D4PBCDevOpsOrgList.Page.al
TowerMyhrer Dec 22, 2025
afa8529
Update CCMS/src/PTENuget/D4PBCAzureUpdate.Codeunit.al
TowerMyhrer Dec 22, 2025
9670bd4
Update CCMS/src/PTENuget/D4PBCGitHubUpdate.Codeunit.al
TowerMyhrer Dec 22, 2025
d9c854d
Update CCMS/src/PTEApps/D4PBCPTEAppVersionCard.Page.al
TowerMyhrer Dec 22, 2025
59aeaa4
Merge branch 'main' into PTE-Apps-and-Nuget
demiliani Dec 23, 2025
d860170
copilot reviews
TowerMyhrer Dec 25, 2025
ff062e6
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Dec 25, 2025
ade7e15
objuect numbers
TowerMyhrer Dec 25, 2025
440e523
renujmbered objects
TowerMyhrer Dec 25, 2025
06aad87
translations and codereview after copilot
TowerMyhrer Jan 2, 2026
f81a8fd
unused label
TowerMyhrer Jan 2, 2026
4958802
SecretText
TowerMyhrer Jan 2, 2026
a9a59df
Merge branch 'main' into PTE-Apps-and-Nuget
TowerMyhrer Jan 2, 2026
9962c4e
Update CCMS/src/PTENuget/D4PBCNugetProcessing.Codeunit.al
TowerMyhrer Jan 2, 2026
adc9bab
renumber page
TowerMyhrer Jan 2, 2026
eabaaad
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Jan 2, 2026
c177eea
codereview
TowerMyhrer Jan 6, 2026
05e19e4
Update CCMS/src/PTEApps/D4PBCPTEApp.Table.al
TowerMyhrer Jan 6, 2026
47f7b82
Update CCMS/src/PTENuget/D4PBCNugetProcessing.Codeunit.al
TowerMyhrer Jan 6, 2026
37e3bab
confloicts
TowerMyhrer Jan 6, 2026
9b9694c
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Jan 6, 2026
7fd4a56
Merge branch 'main' into PTE-Apps-and-Nuget
TowerMyhrer Jan 6, 2026
0cdcd9f
Merge branch 'main' into PTE-Apps-and-Nuget
TowerMyhrer Jan 7, 2026
d1f3d80
Update CCMS/src/PTEApps/D4PBCPTEApp.Table.al
TowerMyhrer Jan 7, 2026
96688b1
Update CCMS/src/PTEApps/D4PBCPTEAppCard.Page.al
TowerMyhrer Jan 7, 2026
7c30ce5
Update CCMS/src/PTEApps/D4PBCDevOpsOrganization.Table.al
TowerMyhrer Jan 7, 2026
f1086d2
renumbered
TowerMyhrer Jan 8, 2026
a959d4f
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Jan 8, 2026
1797d2f
codereview
TowerMyhrer Jan 10, 2026
f868723
translations
TowerMyhrer Jan 10, 2026
3356574
codereviewsuggestions
TowerMyhrer Jan 12, 2026
2a03324
Some minor fixes
fvet Jan 12, 2026
80a3478
Typo - Apps List > App list
fvet Jan 12, 2026
81acaec
If card exists, list should not be editable
fvet Jan 12, 2026
c2e01c7
Promote action
fvet Jan 12, 2026
60b0c5a
Add action to card page
fvet Jan 12, 2026
79942d2
Do not repeat the entity name (PTE / App) in the field name
fvet Jan 12, 2026
a7b08f7
Add factbox on list
fvet Jan 12, 2026
61d9c25
Set MinValue
fvet Jan 12, 2026
b400aa6
Fix captions
fvet Jan 12, 2026
6ef799f
Fix casings
fvet Jan 12, 2026
fb1c482
Promote action
fvet Jan 12, 2026
8f28401
Make factbox not editable
fvet Jan 12, 2026
fe6b92a
Merge pull request #1 from fvet/FVE/73
TowerMyhrer Jan 13, 2026
16523f2
Merge branch 'main' into PTE-Apps-and-Nuget
TowerMyhrer Jan 13, 2026
4e34d2f
documentatioon
TowerMyhrer Feb 9, 2026
aa5fb85
Merge branch 'PTE-Apps-and-Nuget' of https://github.com/TowerMyhrer/C…
TowerMyhrer Feb 9, 2026
f4740e1
Merge branch 'main' into PTE-Apps-and-Nuget
TowerMyhrer Feb 9, 2026
71abb08
Rename page ID from 62031 to 62032
TowerMyhrer Feb 10, 2026
62c2ec0
Update page ID for D4P BC PTE App List
TowerMyhrer Feb 10, 2026
3872cd3
Update CCMS/src/PTEApps/D4PBCInputToken.Page.al
TowerMyhrer Feb 10, 2026
bd80487
Update docs/dev-ops-organization.md
TowerMyhrer Feb 10, 2026
32f299c
Update page number for D4P BC PTE App List
TowerMyhrer Feb 10, 2026
d6ced9c
Rename page ID from 62033 to 62050
TowerMyhrer Feb 10, 2026
9a04be6
Rename page from 62035 to 62051
TowerMyhrer Feb 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,169 changes: 2,535 additions & 1,634 deletions CCMS/Translations/Cloud Customer Management Solution.da-DK.xlf

Large diffs are not rendered by default.

4,167 changes: 2,534 additions & 1,633 deletions CCMS/Translations/Cloud Customer Management Solution.de-DE.xlf

Large diffs are not rendered by default.

4,278 changes: 2,586 additions & 1,692 deletions CCMS/Translations/Cloud Customer Management Solution.es-ES.xlf

Large diffs are not rendered by default.

3,964 changes: 2,211 additions & 1,753 deletions CCMS/Translations/Cloud Customer Management Solution.fi-FI.xlf

Large diffs are not rendered by default.

4,175 changes: 2,542 additions & 1,633 deletions CCMS/Translations/Cloud Customer Management Solution.fr-FR.xlf

Large diffs are not rendered by default.

4,189 changes: 2,548 additions & 1,641 deletions CCMS/Translations/Cloud Customer Management Solution.it-IT.xlf

Large diffs are not rendered by default.

3,825 changes: 2,173 additions & 1,652 deletions CCMS/Translations/Cloud Customer Management Solution.nb-NO.xlf

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion CCMS/src/Environment/D4PBCEnvironmentMgt.codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ codeunit 62000 "D4P BC Environment Mgt"
case LowerCase(JsonValue.AsText()) of
'global':
InstalledApp."App Type" := Enum::"D4P App Type"::Global;
'pte', 'tenant':
'tenant':
InstalledApp."App Type" := Enum::"D4P App Type"::PTE;
'dev':
InstalledApp."App Type" := Enum::"D4P App Type"::DEV;
Expand Down
16 changes: 16 additions & 0 deletions CCMS/src/Extension/D4PPTEObjectRange.table.al
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace D4P.CCMS.Extension;

using D4P.CCMS.Customer;
using D4P.CCMS.Tenant;
using D4P.CCMS.PTEApps;
table 62004 "D4P PTE Object Range"
{
Caption = 'PTE Object Range';
Expand All @@ -27,12 +28,14 @@ table 62004 "D4P PTE Object Range"
{
DataClassification = SystemMetadata;
Caption = 'Entry No.';
ToolTip = 'Specifies the entry number.';
AutoIncrement = true;
}
field(4; "PTE ID"; Guid)
{
Caption = 'PTE ID';
ToolTip = 'Specifies the Per Tenant Extension''s ID.';
TableRelation = "D4P BC PTE App"."ID";
}
field(5; "PTE Name"; Text[100])
{
Expand All @@ -41,11 +44,15 @@ table 62004 "D4P PTE Object Range"
}
field(6; "Range From"; Integer)
{
ObsoleteReason = 'Added new table to make it possible to have several object ranges on same app';
ObsoleteState = Pending;
Caption = 'Range From';
ToolTip = 'Specifies the starting range.';
}
field(7; "Range To"; Integer)
{
ObsoleteReason = 'Added new table to make it possible to have several object ranges on same app';
ObsoleteState = Pending;
Caption = 'Range To';
ToolTip = 'Specifies the ending range.';
}
Expand All @@ -58,4 +65,13 @@ table 62004 "D4P PTE Object Range"
Clustered = true;
}
}

procedure CopyValuesFromApp(PTEID: Guid)
var
PTEApp: Record "D4P BC PTE App";
begin
if not PTEApp.Get(PTEID) then
exit;
Rec."PTE Name" := PTEApp."Name";
end;
}
52 changes: 46 additions & 6 deletions CCMS/src/Extension/D4PPTEObjectRanges.page.al
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace D4P.CCMS.Extension;

using D4P.CCMS.PTEApps;
page 62009 "D4P PTE Object Ranges"
{
PageType = List;
Expand All @@ -22,16 +24,54 @@ page 62009 "D4P PTE Object Ranges"
}
field("PTE ID"; Rec."PTE ID")
{
TableRelation = "D4P BC PTE App"."ID";

trigger OnValidate()
begin
if IsNullGuid(Rec."PTE ID") then
exit;

Rec.CopyValuesFromApp(Rec."PTE ID");
end;
}
field("PTE Name"; Rec."PTE Name")
{
}
field("Range From"; Rec."Range From")
{
}
field("Range To"; Rec."Range To")
{
}
}
}

area(FactBoxes)
{
part(PTEAppPObjectRangeFactBox; "D4P BC PTE Obj. Ranges FactBox")
{
Caption = 'Object Range';
SubPageLink = "PTE ID" = field("PTE ID");
}
part(PTEAppVersionsFactBox; "D4P PTE App Versions FactBox")
{
Caption = 'Versions';
SubPageLink = "PTE ID" = field("PTE ID");
}
}
}

actions
{
area(Navigation)
{
action(OpenPteApp)
{
Caption = 'Pte App';
ApplicationArea = All;
Image = Open;
trigger OnAction()
var
PTEApp: Record "D4P BC PTE App";
begin
if PTEApp.Get(Rec."PTE ID") then
Page.Run(Page::"D4P BC PTE App Card", PTEApp);
end;

}
}
}
Expand Down
49 changes: 49 additions & 0 deletions CCMS/src/PTEApps/D4PBCDevOpsOrgList.Page.al
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
namespace D4P.CCMS.PTEApps;

page 62036 "D4P BC DevOps Org. List"
{
ApplicationArea = All;
Caption = 'D365BC DevOps Organization List';
PageType = List;
SourceTable = "D4P BC DevOps Organization";
UsageCategory = Administration;

layout
{
area(Content)
{
repeater(General)
{
field(DevOps; Rec."DevOps Environment")
{
}
field(ID; Rec.ID)
{
}
field(Name; Rec.Name)
{
}
}
}
}

actions
{
area(Processing)
{
action(ImportToken)
{
Caption = 'Import Token';
ApplicationArea = All;
Image = CodesList;
trigger OnAction()
var
InputToken: Page "D4P BC Input Token";
begin
if InputToken.RunModal() = Action::OK then
IsolatedStorage.Set(StrSubstNo('%1-%2', Rec."DevOps Environment", Rec.ID), InputToken.GetToken());
end;
}
}
}
}
46 changes: 46 additions & 0 deletions CCMS/src/PTEApps/D4PBCDevOpsOrganization.Table.al
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
namespace D4P.CCMS.PTEApps;

using D4P.CCMS.Nuget;
table 62006 "D4P BC DevOps Organization"
{
DataClassification = CustomerContent;
Caption = 'D365BC DevOps Organization';
LookupPageId = "D4P BC DevOps Org. List";
DrillDownPageId = "D4P BC DevOps Org. List";

fields
{
field(1; "DevOps Environment"; Enum "D4P BC DevOps Environment")
{
Caption = 'DevOps Environment';
ToolTip = 'Specifies the environment for the DevOps organization.';
}
field(2; ID; Code[20])
{
Caption = 'ID';
ToolTip = 'Specifies the unique identifier for the DevOps organization.';
}
field(3; Name; Text[128])
{
Caption = 'Name';
ToolTip = 'Specifies the name of the DevOps organization.';
}
}

keys
{
key(PK; "DevOps Environment", ID)
{
Clustered = true;
}
}

trigger OnDelete()
var
TokenKey: Text;
begin
TokenKey := StrSubstNo('%1-%2', Format(Rec."DevOps Environment"), Rec.ID);
if IsolatedStorage.Contains(TokenKey) then
IsolatedStorage.Delete(TokenKey);
end;
}
32 changes: 32 additions & 0 deletions CCMS/src/PTEApps/D4PBCInputToken.Page.al
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
namespace D4P.CCMS.PTEApps;

page 62031 "D4P BC Input Token"

Check failure on line 3 in CCMS/src/PTEApps/D4PBCInputToken.Page.al

View workflow job for this annotation

GitHub Actions / Build . (Default) / . (Default)

AL0264 An application object of type 'Page' with ID '62031' is already declared by the extension 'Cloud Customer Management Solution by Directions for partners (0.0.2147483647.229)'
{
ApplicationArea = All;
Caption = 'D365BC Input Token';
PageType = StandardDialog;

layout
{
area(Content)
{
group(General)
{
field(Token; Token)
{
Caption = 'Personal Access Token';
ToolTip = 'Specifies the Personal Access Token for DevOps organization access.';
MultiLine = true;
}
}
}
}

var
Token: Text[250];

procedure GetToken(): SecretText
begin
exit(Token);
end;
}
99 changes: 99 additions & 0 deletions CCMS/src/PTEApps/D4PBCPTEApp.Table.al
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
namespace D4P.CCMS.PTEApps;

using D4P.CCMS.Nuget;
table 62007 "D4P BC PTE App"
{
DataClassification = CustomerContent;
Caption = 'D365BC PTE App';
DrillDownPageId = "D4P BC PTE App List";
LookupPageId = "D4P BC PTE App List";

fields
{
field(1; "ID"; Guid)
{
Caption = 'ID';
ToolTip = 'Specifies the ID of the Per Tenant Extension.';
}
field(2; "Name"; Text[100])
{
Caption = 'Name';
ToolTip = 'Specifies the name of the Per Tenant Extension.';
}
field(3; "Latest App Version"; Text[50])
{
Caption = 'App Version';
ToolTip = 'Specifies the latest version of the PTE app.';
}
field(4; "DevOps Environment"; Enum "D4P BC DevOps Environment")
{
Caption = 'DevOps Environment';
ToolTip = 'Specifies the DevOps environment associated with the PTE app.';
trigger OnValidate()
begin
if Rec."DevOps Environment" <> xRec."DevOps Environment" then
ClearFieldsOnDevOpsChange();
end;
}
field(5; "DevOps Organization"; Text[100])
{
Caption = 'Organization';
ToolTip = 'Specifies the organization associated with the PTE app.';
trigger OnLookup()
var
DevOpsOrganization: Record "D4P BC DevOps Organization";
begin
DevOpsOrganization.SetRange("DevOps Environment", Rec."DevOps Environment");
if Page.RunModal(Page::"D4P BC DevOps Org. List", DevOpsOrganization) = Action::LookupOK then
Rec."DevOps Organization" := DevOpsOrganization.ID;
end;
}
field(6; "DevOps Package"; Text[100])
{
Caption = 'Package';
ToolTip = 'Specifies the package associated with the PTE app.';
}
field(7; "DevOps Feed"; Text[100])
{
Caption = 'Feed';
ToolTip = 'Specifies the feed associated with the PTE app.';
}
field(8; "NuGet Package Name"; Text[250])
{
Caption = 'NuGet Package Name';
ToolTip = 'Specifies the NuGet package name of the PTE app.';
}
}

keys
{
key(PK; "ID")
{
Clustered = true;
}
}

fieldgroups
{
fieldgroup(DropDown; "ID", "Name")
{ }
fieldgroup(Brick; "ID", "Name")
{ }
}
trigger OnDelete()
var
PTEAppVersion: Record "D4P BC PTE App Version";
begin
PTEAppVersion.SetRange("PTE ID", Rec."ID");
if not PTEAppVersion.IsEmpty() then
PTEAppVersion.DeleteAll(true);
end;

local procedure ClearFieldsOnDevOpsChange()
begin
Rec."DevOps Organization" := '';
Rec."DevOps Feed" := '';
Rec."DevOps Package" := '';
Rec."NuGet Package Name" := '';
end;
}
Loading
Loading