diff --git a/Solution/Entities/lcs_ActivityLog/Entity.xml b/Solution/Entities/lcs_ActivityLog/Entity.xml
new file mode 100644
index 00000000..56390c8f
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/Entity.xml
@@ -0,0 +1,1072 @@
+
+
+ lcs_ActivityLog
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lookup
+ createdby
+ createdby
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ datetime
+ createdon
+ createdon
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ inactive
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 1
+ 1
+ 0
+ datetime
+ 0
+ 1
+
+
+
+
+
+
+
+
+ lookup
+ createdonbehalfby
+ createdonbehalfby
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ int
+ importsequencenumber
+ importsequencenumber
+ none
+ ValidForAdvancedFind
+ disabled
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+
+ -2147483648
+ 2147483647
+
+
+
+
+
+
+
+
+ nvarchar
+ lcs_action
+ lcs_action
+ required
+ PrimaryName|ValidForAdvancedFind|ValidForForm|ValidForGrid|RequiredForForm
+ auto
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 1
+ 0
+ 1
+ 0
+ text
+ 100
+ 200
+
+
+
+
+
+
+
+
+ primarykey
+ lcs_activitylogid
+ lcs_activitylogid
+ systemrequired
+ ValidForAdvancedFind|RequiredForGrid
+ auto
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ datetime
+ lcs_created
+ lcs_created
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 0
+ 1
+ 0
+ 1
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 1
+ 0
+ 0
+ 0
+ datetime
+ 1
+ 1
+
+
+
+
+
+
+
+
+ nvarchar
+ lcs_description
+ lcs_description
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1.0.0.202346
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ text
+ 100
+ 200
+
+
+
+
+
+
+
+
+ nvarchar
+ lcs_someguid
+ lcs_someguid
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1.0.0.2023412
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ text
+ 100
+ 200
+
+
+
+
+
+
+
+
+ datetime
+ lcs_system_datetime
+ lcs_system_datetime
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1.0.0.202491
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ datetime
+ 1
+ 1
+
+
+
+
+
+
+
+
+ datetime
+ lcs_updated
+ lcs_updated
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 0
+ 1
+ 0
+ 1
+ 0
+ 0
+ 1.0.0.202346
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 1
+ 0
+ 0
+ 0
+ datetime
+ 1
+ 1
+
+
+
+
+
+
+
+
+ nvarchar
+ lcs_workaround
+ lcs_workaround
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1.0.0.2023410
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ text
+ 100
+ 200
+
+
+
+
+
+
+
+
+ lookup
+ modifiedby
+ modifiedby
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ datetime
+ modifiedon
+ modifiedon
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ inactive
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 1
+ 1
+ 0
+ datetime
+ 0
+ 1
+
+
+
+
+
+
+
+
+ lookup
+ modifiedonbehalfby
+ modifiedonbehalfby
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ datetime
+ overriddencreatedon
+ overriddencreatedon
+ none
+ ValidForAdvancedFind|ValidForGrid
+ inactive
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ date
+ 0
+ 1
+
+
+
+
+
+
+
+
+ owner
+ ownerid
+ ownerid
+ systemrequired
+ ValidForAdvancedFind|ValidForForm|ValidForGrid|RequiredForForm
+ auto
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 1
+ 0
+ 0
+ single
+
+ 8
+ 9
+
+
+
+
+
+
+
+
+
+ lookup
+ owningbusinessunit
+ owningbusinessunit
+ none
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 1
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ lookup
+ owningteam
+ owningteam
+ none
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ lookup
+ owninguser
+ owninguser
+ none
+ auto
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ single
+
+
+
+
+
+
+
+
+
+ state
+ statecode
+ statecode
+ systemrequired
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 1
+ 0
+ 0
+
+ state
+ 1.0.0.0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ status
+ statuscode
+ statuscode
+ none
+ ValidForAdvancedFind|ValidForForm|ValidForGrid
+ auto
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+
+ status
+ 1.0.0.0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ int
+ timezoneruleversionnumber
+ timezoneruleversionnumber
+ none
+ auto
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+
+ -1
+ 2147483647
+
+
+
+
+
+
+
+
+ int
+ utcconversiontimezonecode
+ utcconversiontimezonecode
+ none
+ auto
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+ 0
+
+ -1
+ 2147483647
+
+
+
+
+
+
+
+
+ lcs_activitylogs
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ UserOwned
+ 0
+ 0
+ 0
+ 0
+ CommunicationActivity
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+
+ 1
+ 1
+ 0
+ 0
+ 1.0.0.0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/FormXml/card/{1456353b-7610-4f7e-ae86-cefcefee2a2d}.xml b/Solution/Entities/lcs_ActivityLog/FormXml/card/{1456353b-7610-4f7e-ae86-cefcefee2a2d}.xml
new file mode 100644
index 00000000..d0933333
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/FormXml/card/{1456353b-7610-4f7e-ae86-cefcefee2a2d}.xml
@@ -0,0 +1,112 @@
+
+
+
+ {1456353b-7610-4f7e-ae86-cefcefee2a2d}
+ 1.0.0.0
+ 1
+ 1
+
+ 1
+ 1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/FormXml/main/{bc91a247-5131-499a-977c-030d59856ee7}.xml b/Solution/Entities/lcs_ActivityLog/FormXml/main/{bc91a247-5131-499a-977c-030d59856ee7}.xml
new file mode 100644
index 00000000..b62c5cb0
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/FormXml/main/{bc91a247-5131-499a-977c-030d59856ee7}.xml
@@ -0,0 +1,55 @@
+
+
+
+ {bc91a247-5131-499a-977c-030d59856ee7}
+ 1.0.0.0
+ 1
+ 1
+
+ 1
+ 1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/FormXml/quick/{3460e4ad-e29b-4e5e-86f0-12709299fcc8}.xml b/Solution/Entities/lcs_ActivityLog/FormXml/quick/{3460e4ad-e29b-4e5e-86f0-12709299fcc8}.xml
new file mode 100644
index 00000000..a62f2313
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/FormXml/quick/{3460e4ad-e29b-4e5e-86f0-12709299fcc8}.xml
@@ -0,0 +1,52 @@
+
+
+
+ {3460e4ad-e29b-4e5e-86f0-12709299fcc8}
+ 1.0.0.0
+ 1
+ 1
+
+ 1
+ 1
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/RibbonDiff.xml b/Solution/Entities/lcs_ActivityLog/RibbonDiff.xml
new file mode 100644
index 00000000..6b56f485
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/RibbonDiff.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{1478620c-3fe6-4029-98d5-c6f2ac792f38}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{1478620c-3fe6-4029-98d5-c6f2ac792f38}.xml
new file mode 100644
index 00000000..268cf73c
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{1478620c-3fe6-4029-98d5-c6f2ac792f38}.xml
@@ -0,0 +1,37 @@
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ {1478620c-3fe6-4029-98d5-c6f2ac792f38}
+
+
+
+ |
+ |
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{5cc14493-eece-4475-964b-05b02b6c5430}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{5cc14493-eece-4475-964b-05b02b6c5430}.xml
new file mode 100644
index 00000000..6207b9b3
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{5cc14493-eece-4475-964b-05b02b6c5430}.xml
@@ -0,0 +1,37 @@
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ {5cc14493-eece-4475-964b-05b02b6c5430}
+
+
+
+ |
+ |
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{8e4cd2cc-75ac-45bd-879c-12591b8f19b4}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{8e4cd2cc-75ac-45bd-879c-12591b8f19b4}.xml
new file mode 100644
index 00000000..82b7d994
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{8e4cd2cc-75ac-45bd-879c-12591b8f19b4}.xml
@@ -0,0 +1,36 @@
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ {8e4cd2cc-75ac-45bd-879c-12591b8f19b4}
+
+
+
+ |
+ |
+
+
+
+ 64
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{9c9e4262-2b4a-4eba-8243-b28ab63a42f9}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{9c9e4262-2b4a-4eba-8243-b28ab63a42f9}.xml
new file mode 100644
index 00000000..490cd2bb
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{9c9e4262-2b4a-4eba-8243-b28ab63a42f9}.xml
@@ -0,0 +1,34 @@
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ {9c9e4262-2b4a-4eba-8243-b28ab63a42f9}
+
+
+
+ |
+ |
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{ca85ec21-a1c8-4d0a-84a9-dab8da10cd57}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{ca85ec21-a1c8-4d0a-84a9-dab8da10cd57}.xml
new file mode 100644
index 00000000..3b5efe98
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{ca85ec21-a1c8-4d0a-84a9-dab8da10cd57}.xml
@@ -0,0 +1,37 @@
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ {ca85ec21-a1c8-4d0a-84a9-dab8da10cd57}
+
+
+
+ |
+ |
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{f171521a-3ae2-ea11-a813-000d3af3ac0d}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{f171521a-3ae2-ea11-a813-000d3af3ac0d}.xml
new file mode 100644
index 00000000..78fb46fb
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{f171521a-3ae2-ea11-a813-000d3af3ac0d}.xml
@@ -0,0 +1,30 @@
+
+
+
+ 1
+ 1
+ 0
+ 0
+ 1
+ {f171521a-3ae2-ea11-a813-000d3af3ac0d}
+ 8192
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Entities/lcs_ActivityLog/SavedQueries/{f1f915a9-28c3-4e2a-8b12-de68ce6e6f5c}.xml b/Solution/Entities/lcs_ActivityLog/SavedQueries/{f1f915a9-28c3-4e2a-8b12-de68ce6e6f5c}.xml
new file mode 100644
index 00000000..bfa7c567
--- /dev/null
+++ b/Solution/Entities/lcs_ActivityLog/SavedQueries/{f1f915a9-28c3-4e2a-8b12-de68ce6e6f5c}.xml
@@ -0,0 +1,40 @@
+
+
+
+ 1
+ 0
+ 1
+ 0
+ 1
+ {f1f915a9-28c3-4e2a-8b12-de68ce6e6f5c}
+
+
+
+ |
+ |
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Other/Customizations.xml b/Solution/Other/Customizations.xml
new file mode 100644
index 00000000..78b36cae
--- /dev/null
+++ b/Solution/Other/Customizations.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1033
+
+
\ No newline at end of file
diff --git a/Solution/Other/Relationships.xml b/Solution/Other/Relationships.xml
new file mode 100644
index 00000000..7e26d8cc
--- /dev/null
+++ b/Solution/Other/Relationships.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Other/Relationships/BusinessUnit.xml b/Solution/Other/Relationships/BusinessUnit.xml
new file mode 100644
index 00000000..2c6e2382
--- /dev/null
+++ b/Solution/Other/Relationships/BusinessUnit.xml
@@ -0,0 +1,22 @@
+
+
+
+ OneToMany
+ 1
+ 1.0.0.0
+ 0
+ lcs_ActivityLog
+ BusinessUnit
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ OwningBusinessUnit
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Other/Relationships/Owner.xml b/Solution/Other/Relationships/Owner.xml
new file mode 100644
index 00000000..896fe43f
--- /dev/null
+++ b/Solution/Other/Relationships/Owner.xml
@@ -0,0 +1,22 @@
+
+
+
+ OneToMany
+ 1
+ 1.0.0.0
+ 0
+ lcs_ActivityLog
+ Owner
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ OwnerId
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Other/Relationships/SystemUser.xml b/Solution/Other/Relationships/SystemUser.xml
new file mode 100644
index 00000000..b3332dbe
--- /dev/null
+++ b/Solution/Other/Relationships/SystemUser.xml
@@ -0,0 +1,60 @@
+
+
+
+ OneToMany
+ 1
+ 1.0.0.0
+ 0
+ lcs_ActivityLog
+ SystemUser
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ CreatedBy
+
+
+
+
+
+
+
+ OneToMany
+ 1
+ 1.0.0.0
+ 0
+ lcs_ActivityLog
+ SystemUser
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ ModifiedBy
+
+
+
+
+
+
+
+ OneToMany
+ 1
+ 1.0.0.0
+ 0
+ lcs_ActivityLog
+ SystemUser
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ OwningUser
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Other/Relationships/Team.xml b/Solution/Other/Relationships/Team.xml
new file mode 100644
index 00000000..49a21352
--- /dev/null
+++ b/Solution/Other/Relationships/Team.xml
@@ -0,0 +1,22 @@
+
+
+
+ OneToMany
+ 1
+ 1.0.0.0
+ 0
+ lcs_ActivityLog
+ Team
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ NoCascade
+ OwningTeam
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/Other/Solution.xml b/Solution/Other/Solution.xml
new file mode 100644
index 00000000..e35f5ad0
--- /dev/null
+++ b/Solution/Other/Solution.xml
@@ -0,0 +1,85 @@
+
+
+
+ SampleApp
+
+
+
+
+ 1.0.0.202491
+ 0
+
+ like10inc
+
+
+
+
+ admin@like10.com
+ https://www.like10.com
+ lcs
+ 80216
+
+
+ 1
+ 1
+ Toronto
+
+ Canada
+
+
+
+
+ 100 King Street West
+ Suite 5700
+
+
+
+ M5X 1C7
+
+
+ 1
+ Ontario
+ 613-755-4055
+
+
+
+
+
+
+
+
+ 2
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/azure-pipeline-samples/azure-pipelines-build-deploy.yml b/azure-pipeline-samples/azure-pipelines-build-deploy.yml
new file mode 100644
index 00000000..16ff9dfe
--- /dev/null
+++ b/azure-pipeline-samples/azure-pipelines-build-deploy.yml
@@ -0,0 +1,181 @@
+# multi-stage yaml pipelines
+# build-test-staging-prod pipeline
+
+variables:
+ Version.Revision: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 0)]
+ Version.Major: 1
+ Version.Minor: 0
+ # Solution Details
+ Solution.Name: 'SampleApp'
+ Solution.Path: '$(Pipeline.Workspace)/s/Solution'
+ Solution.Version: '0.0.0.0'
+
+name: '$(Build.DefinitionName) $(Version.Major).$(Version.Minor).$(Date:yy)$(DayOfYear).$(Version.Revision)'
+
+# Only run against main
+trigger:
+- main
+
+# Don't run against pull requests (PRs)
+pr: none
+
+stages:
+- stage: build
+ jobs:
+ - job: package_managed_solution
+ pool:
+ vmImage: 'windows-latest'
+ steps:
+ - pwsh: |
+ $VersionString = [regex]::matches($Env:BUILD_BUILDNUMBER,"\d+\.\d+\.\d+\.\d+")
+ Write-Host "##vso[task.setvariable variable=Solution.Version;]$VersionString"
+ displayName: 'Get Version String'
+
+ - task: PowerPlatformToolInstaller@0
+ displayName: 'Power Platform Tool Installer'
+ inputs:
+ DefaultVersion: true
+
+ - task: PowerPlatformPackSolution@0
+ displayName: 'Pack Solution from Repository'
+ inputs:
+ SolutionSourceFolder: '$(Solution.Path)'
+ SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+
+ - task: PowerPlatformImportSolution@0
+ displayName: 'Import Solution to JIT Build Environment'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-jit'
+ SolutionInputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+ AsyncOperation: true
+ MaxAsyncWaitTime: '240'
+
+ - task: PowerPlatformSetSolutionVersion@0
+ displayName: 'Set Solution Version'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-jit'
+ SolutionName: '$(Solution.Name)'
+ SolutionVersionNumber: '$(Solution.Version)'
+
+ - task: PowerPlatformExportSolution@0
+ displayName: 'Export Managed Solution'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-jit'
+ SolutionName: '$(Solution.Name)'
+ SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name)_managed.zip'
+ Managed: true
+
+ - publish: '$(Build.ArtifactStagingDirectory)'
+ artifact: 'PowerAppSolutions'
+
+- stage: checker
+ dependsOn: build
+ jobs:
+ - job: run_checker
+ pool:
+ vmImage: 'windows-latest'
+ steps:
+ - checkout: none
+ - download: current
+ artifact: 'PowerAppSolutions'
+ displayName: 'Download Solutions'
+
+ - task: PowerPlatformToolInstaller@0
+ displayName: 'Power Platform Tool Installer'
+ inputs:
+ DefaultVersion: true
+
+ - task: PowerPlatformChecker@0
+ displayName: 'Execute Power Platform Checker'
+ inputs:
+ PowerPlatformSPN: 'like10-jit'
+ FilesToAnalyze: '$(Pipeline.Workspace)\PowerAppSolutions\*.zip'
+ RuleSet: '0ad12346-e108-40b8-a956-9a8f95ea18c9'
+ ArtifactDestinationName: 'PowerPlatformChecker'
+
+
+
+- stage: test
+ dependsOn: checker
+ jobs:
+ - deployment: test
+ displayName: 'Deploy Test'
+ pool:
+ vmImage: 'windows-latest'
+ environment: 'd365-test'
+ strategy:
+ runOnce:
+ deploy:
+ steps:
+ - checkout: none
+ - download: none
+ - script: echo 'Deploy managed solution to Test'
+
+
+- stage: uat
+ dependsOn: test
+ jobs:
+ - deployment: uat
+ displayName: 'Deploy to UAT'
+ pool:
+ vmImage: 'windows-latest'
+ environment: 'd365-uat'
+ strategy:
+ runOnce:
+ deploy:
+ steps:
+ - checkout: none
+ - download: none
+ - script: echo 'Deploy managed solution to UAT'
+
+- stage: preprod
+ dependsOn: uat
+ jobs:
+ - deployment: preprod
+ displayName: 'Deploy to Pre-Prod'
+ pool:
+ vmImage: 'windows-latest'
+ environment: 'd365-ppe'
+ strategy:
+ runOnce:
+ deploy:
+ steps:
+ - checkout: none
+ - download: current
+ artifact: 'PowerAppSolutions'
+ displayName: 'Download solutions'
+
+ - script: echo 'Deploy managed solution to pre-prod'
+
+ - task: PowerPlatformToolInstaller@0
+ inputs:
+ DefaultVersion: true
+ - task: PowerPlatformWhoAmi@0
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-ppe'
+
+ - task: PowerPlatformImportSolution@0
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-ppe'
+ SolutionInputFile: '$(Pipeline.Workspace)\PowerAppSolutions\$(Solution.Name)_managed.zip'
+ AsyncOperation: true
+ MaxAsyncWaitTime: '60'
+
+- stage: production
+ dependsOn: preprod
+ jobs:
+ - deployment: production
+ displayName: 'Deploy to Production'
+ pool:
+ vmImage: 'windows-latest'
+ environment: 'd365-prod'
+ strategy:
+ runOnce:
+ deploy:
+ steps:
+ - script: echo 'Deploy container to prodution slot/webapp'
diff --git a/azure-pipeline-samples/build-managed-solution.yml b/azure-pipeline-samples/build-managed-solution.yml
new file mode 100644
index 00000000..ae913827
--- /dev/null
+++ b/azure-pipeline-samples/build-managed-solution.yml
@@ -0,0 +1,57 @@
+# Build managed solution from git repository
+# requires a Just-In-Time (JIT) environment in Power Apps
+# umanaged solution is imported and a managed solution
+# is exported
+# The managed solution is saved as a pipeline artifact
+#
+
+trigger:
+ - main
+ - develop
+
+pool:
+ vmImage: 'windows-latest'
+
+variables:
+ # Solution Details
+ Solution.Name: 'SampleApp'
+ Solution.Path: '$(Pipeline.Workspace)/s/Solution'
+
+steps:
+
+- task: PowerPlatformToolInstaller@0
+ displayName: 'Power Platform Tool Installer'
+ inputs:
+ DefaultVersion: true
+
+- task: PowerPlatformPackSolution@0
+ displayName: 'Pack Solution from Repository'
+ inputs:
+ SolutionSourceFolder: '$(Solution.Path)'
+ SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+
+- task: PowerPlatformImportSolution@0
+ displayName: 'Import Solution to JIT Build Environment'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-jit'
+ SolutionInputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+ AsyncOperation: true
+ MaxAsyncWaitTime: '240'
+
+- task: PowerPlatformExportSolution@0
+ displayName: 'Export Managed Solution'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-jit'
+ SolutionName: '$(Solution.Name)'
+ SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name)_managed.zip'
+ Managed: true
+
+- task: PublishPipelineArtifact@1
+ displayName: 'Publish Artifacts managed and unmanaged solutions'
+ inputs:
+ targetPath: '$(Build.ArtifactStagingDirectory)\'
+ artifact: 'PowerAppSolutions'
+ publishLocation: 'pipeline'
+
diff --git a/azure-pipeline-samples/create-export-from-dev.yml b/azure-pipeline-samples/create-export-from-dev.yml
new file mode 100644
index 00000000..042a7b76
--- /dev/null
+++ b/azure-pipeline-samples/create-export-from-dev.yml
@@ -0,0 +1,67 @@
+# Get solution and commit
+# to the same Git repository and branch used when pipeline
+# is triggered
+#
+# PowerPlatformSPN values are Service connections which are defined in
+# Service Connections under Project Settings using the Power Platform connection type and a Service Principal
+# https://docs.microsoft.com/en-us/power-platform/alm/devops-build-tools#configure-service-connections-using-a-service-principal
+
+trigger:
+ - main
+ - develop
+pool:
+ vmImage: 'windows-latest'
+
+variables:
+ # Git command output is done on stderr, not stdout
+ GIT_REDIRECT_STDERR: 2>&1
+ # Solution Details
+ Solution.Name: 'SampleApp'
+ Solution.Path: '$(Pipeline.Workspace)/s/Solution'
+
+
+steps:
+- checkout: self
+ clean: true
+ persistCredentials: true
+
+- pwsh: write-host "##vso[task.setvariable variable=Build.SourceBranchFullName]$($env:build_sourceBranch.substring($env:build_sourceBranch.indexOf('/', 5) + 1))"
+ displayName: 'Create Build.SourceBranchFullName environment variable'
+
+- task: PowerPlatformToolInstaller@0
+ displayName: 'Power Platform Tool Installer'
+ inputs:
+ DefaultVersion: true
+
+- task: PowerPlatformExportSolution@0
+ displayName: 'Export Solution (unmanaged)'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-dev'
+ SolutionName: '$(Solution.Name)'
+ SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+ Managed: false
+
+- task: PowerPlatformUnpackSolution@0
+ displayName: 'Unpack solution'
+ inputs:
+ SolutionInputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+ SolutionTargetFolder: '$(Solution.Path)'
+
+- pwsh: |
+ git config user.email "agent@dev.azure.com"
+ git config user.name "Azure Pipeline"
+ git checkout -b $env:Build_SourceBranchFullName
+ if (git status -s)
+ {
+ write-host "commit all changes"
+ git add --all
+ git commit -m "solution source updated by $env:BUILD_BUILDNUMBER [skip ci]"
+ write-host "push changes to repo"
+ git push origin $env:Build_SourceBranchFullName
+ }
+ else
+ {
+ write-host "Nothing to push, no changes detected"
+ }
+ displayName: "Commit/Push changes to Git repo"
\ No newline at end of file
diff --git a/azure-pipeline-samples/get-commit-solution.yml b/azure-pipeline-samples/get-commit-solution.yml
new file mode 100644
index 00000000..f7ad4d51
--- /dev/null
+++ b/azure-pipeline-samples/get-commit-solution.yml
@@ -0,0 +1,98 @@
+# Get solution from Power Apps and
+# Commit it to the same Git repository and branch in the pipeline
+#
+# Using the following variables to build a version string: Version.Major, Version.Minor, Version.Patch
+# PowerPlatformSPN values are Service connections which are defined in
+# Service Connections under Project Settings using the Power Platform connection type and a Service Principal
+# https://docs.microsoft.com/en-us/power-platform/alm/devops-build-tools#configure-service-connections-using-a-service-principal
+
+trigger:
+ branches:
+ include:
+ - main
+ - develop
+ paths:
+ include:
+ - azure-pipeline-samples/*
+
+pool:
+ vmImage: 'windows-latest'
+
+variables:
+ # Git command output is done on stderr, not stdout
+ GIT_REDIRECT_STDERR: 2>&1
+ # Solution Version Variables
+ Version.Revision: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 0)]
+ Version.Major: 1
+ Version.Minor: 0
+ Version.Patch: 0
+ # Solution Details
+ Solution.Name: 'SampleApp'
+ Solution.Version: '0.0.0.0'
+
+name: '$(Build.DefinitionName) $(Version.Major).$(Version.Minor).$(Version.Patch).$(Date:yy)$(DayOfYear)$(Version.Revision)'
+
+steps:
+- checkout: self
+ clean: true
+ persistCredentials: true
+
+- pwsh: |
+ $VersionRegex = "\d+\.\d+\.\d+\.\d+"
+ $VersionData = [regex]::matches($Env:BUILD_BUILDNUMBER,$VersionRegex)
+ Write-Host "##vso[task.setvariable variable=Solution.Version;]$VersionData"
+ displayName: 'Get Version String'
+
+- task: PowerPlatformToolInstaller@0
+ displayName: 'Power Platform Tool Installer'
+ inputs:
+ DefaultVersion: true
+
+- task: PowerPlatformSetSolutionVersion@0
+ displayName: 'Set Solution Version'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-dev'
+ SolutionName: '$(Solution.Name)'
+ SolutionVersionNumber: '$(Solution.Version)'
+
+- task: PowerPlatformPublishCustomizations@0
+ displayName: 'Publish Customizations'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-dev'
+
+- task: PowerPlatformExportSolution@0
+ displayName: 'Export Solution (unmanaged)'
+ inputs:
+ authenticationType: 'PowerPlatformSPN'
+ PowerPlatformSPN: 'like10-dev'
+ SolutionName: '$(Solution.Name)'
+ SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+ Managed: false
+
+- task: PowerPlatformChecker@0
+ displayName: 'Execute Power Platform Checker'
+ inputs:
+ PowerPlatformSPN: 'like10-dev'
+ FilesToAnalyze: '$(Build.ArtifactStagingDirectory)\*.zip'
+ RuleSet: '0ad12346-e108-40b8-a956-9a8f95ea18c9'
+
+- task: PowerPlatformUnpackSolution@0
+ displayName: 'Unpack solution'
+ inputs:
+ SolutionInputFile: '$(Build.ArtifactStagingDirectory)\$(Solution.Name).zip'
+ SolutionTargetFolder: '$(Pipeline.Workspace)/s/Solution'
+
+- pwsh: |
+ write-host "commit all changes to $env:Build_SourceBranchName"
+ git config user.email "hosted.agent@dev.azure.com"
+ git config user.name "Azure Pipeline"
+ git checkout $env:Build_SourceBranchName --
+ git add --all
+ git commit -m "solution source updated by $env:BUILD_BUILDNUMBER [skip ci]"
+ write-host "push code to repo"
+ git push origin $env:Build_SourceBranchName
+ displayName: "Commit changes to Git repo/branch"
+
+
diff --git a/azure-pipeline-samples/starter-pipeline.yml b/azure-pipeline-samples/starter-pipeline.yml
new file mode 100644
index 00000000..aa912913
--- /dev/null
+++ b/azure-pipeline-samples/starter-pipeline.yml
@@ -0,0 +1,19 @@
+# Starter pipeline
+# Start with a minimal pipeline that you can customize to build and deploy your code.
+# Add steps that build, run tests, deploy, and more:
+# https://aka.ms/yaml
+
+trigger:
+- master
+
+pool:
+ vmImage: 'ubuntu-latest'
+
+steps:
+- script: echo Hello, world!
+ displayName: 'Run a one-line script'
+
+- script: |
+ echo Add other tasks to build, test, and deploy your project.
+ echo See https://aka.ms/yaml
+ displayName: 'Run a multi-line script'