From f01a6663b7f17562d8943b278ccc54be32dab8cd Mon Sep 17 00:00:00 2001 From: Lukas Domin Date: Tue, 23 Jun 2026 15:06:18 +0200 Subject: [PATCH 1/4] VM: bump solution version 1.0.3.10172 -> 1.2.4.0 --- .../VolunteerManagement/Solution/Other/Solution.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml b/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml index f3a6c39d..99858fde 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml @@ -6,7 +6,7 @@ - 1.0.3.10172 + 1.2.4.0 2 microsofttechforsocialimpact From 580761d708591c2ac7fe8f74e1905ef231cd190f Mon Sep 17 00:00:00 2001 From: Lukas Domin Date: Tue, 23 Jun 2026 15:27:26 +0200 Subject: [PATCH 2/4] VM OS separate identity: rename plugin assembly Plugins->PluginsOS, dedicated key (token 703f25cc8a15a472), remap assembly/type/step GUIDs, solution uniquename->volunteermanagementos --- .../Solution/Other/Solution.xml | 56 ++++++------- .../Plugins.dll.data.xml | 78 ------------------ .../PluginsOS.dll.data.xml | 78 ++++++++++++++++++ ...055e9f02-c8e4-4834-86e5-d5912bd34619}.xml} | 6 +- ...252d5074-6f45-4861-a269-ee1ea14ac398}.xml} | 6 +- ...2a00b8be-03e1-46db-a352-b49f1c379753}.xml} | 6 +- ...2c7c7185-3d66-41d3-89fb-c8c635046dae}.xml} | 6 +- ...39ef623b-a978-4e2a-a5cf-9df6268c4cce}.xml} | 6 +- ...442d349d-61bc-4265-a52e-cf2222d69ef0}.xml} | 6 +- ...5751b036-57ec-4d93-b297-2004a77c8ae7}.xml} | 6 +- ...659e5220-eae9-430a-b1a0-75f423107a4a}.xml} | 6 +- ...6664dd0c-4ca7-4045-bc59-7614a4af751e}.xml} | 6 +- ...671dd33c-2ae1-434c-8652-40a96ea4a6d2}.xml} | 6 +- ...719cbec5-f3dd-4b86-80ac-3080893f7bd2}.xml} | 6 +- ...78d39fed-f4da-46fe-86f3-82ef5193777a}.xml} | 6 +- ...7a061612-6940-4b13-8706-3d0fb99e2c30}.xml} | 6 +- ...7fec674a-f06a-4fef-89c0-9a7f814e5e86}.xml} | 6 +- ...81f97b73-9836-4d95-91b6-6e6736f581b1}.xml} | 6 +- ...8271517a-25f9-4cf2-a006-20e7248dc767}.xml} | 6 +- ...85b90a27-8b53-40aa-a130-f2d0d5b91c9e}.xml} | 6 +- ...867d43b7-af76-4888-bfe2-fed50d694fdf}.xml} | 6 +- ...86e747bf-c118-47b2-8dd4-cfb70d016bf7}.xml} | 6 +- ...9b5438cb-cf96-43df-ad7f-fe771e84e3d3}.xml} | 6 +- ...be4980b9-ce95-45a3-8cc7-37aa9d8eeb67}.xml} | 6 +- ...dc676866-dead-48da-9b43-52059af2ab83}.xml} | 6 +- ...e64ae12c-30cd-44eb-97e0-b57d576ab55b}.xml} | 6 +- ...f47addb7-4a4e-4a86-8056-4e4bcbb37f19}.xml} | 6 +- .../Plugins/Plugins.csproj | 9 +- .../Plugins/PluginsOS.snk | Bin 0 -> 596 bytes 29 files changed, 183 insertions(+), 182 deletions(-) delete mode 100644 VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/Plugins-5D562315-37A4-EB11-B1AC-000D3A1FC0E7/Plugins.dll.data.xml create mode 100644 VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/PluginsOS-50D34BB8-E4AA-4DF8-84EA-9D70B19DC72D/PluginsOS.dll.data.xml rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{d6837a4a-1eb4-eb11-8236-00224808e1d0}.xml => {055e9f02-c8e4-4834-86e5-d5912bd34619}.xml} (71%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{ad3b8244-1eb4-eb11-8236-00224808e1d0}.xml => {252d5074-6f45-4861-a269-ee1ea14ac398}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{cf3b8244-1eb4-eb11-8236-00224808e1d0}.xml => {2a00b8be-03e1-46db-a352-b49f1c379753}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{d9837a4a-1eb4-eb11-8236-00224808e1d0}.xml => {2c7c7185-3d66-41d3-89fb-c8c635046dae}.xml} (82%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{3408687d-3cf5-eb11-94ef-000d3a135c2d}.xml => {39ef623b-a978-4e2a-a5cf-9df6268c4cce}.xml} (75%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{9b3b8244-1eb4-eb11-8236-00224808e1d0}.xml => {442d349d-61bc-4265-a52e-cf2222d69ef0}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{53dba732-fdd1-ec11-a7b5-000d3a3af529}.xml => {5751b036-57ec-4d93-b297-2004a77c8ae7}.xml} (87%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{167ce908-c5bc-eb11-8236-000d3a31dec1}.xml => {659e5220-eae9-430a-b1a0-75f423107a4a}.xml} (77%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{b42728b8-6b16-ec11-b6e6-000d3a1b92d8}.xml => {6664dd0c-4ca7-4045-bc59-7614a4af751e}.xml} (79%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{c8837a4a-1eb4-eb11-8236-00224808e1d0}.xml => {671dd33c-2ae1-434c-8652-40a96ea4a6d2}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{98a62c4e-57df-eb11-bacb-000d3a5819ec}.xml => {719cbec5-f3dd-4b86-80ac-3080893f7bd2}.xml} (89%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{0ff87207-fdd1-ec11-a7b5-000d3a3afd3a}.xml => {78d39fed-f4da-46fe-86f3-82ef5193777a}.xml} (81%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{d2837a4a-1eb4-eb11-8236-00224808e1d0}.xml => {7a061612-6940-4b13-8706-3d0fb99e2c30}.xml} (81%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{b553b924-15f6-eb11-94ef-000d3a135c2d}.xml => {7fec674a-f06a-4fef-89c0-9a7f814e5e86}.xml} (87%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{de837a4a-1eb4-eb11-8236-00224808e1d0}.xml => {81f97b73-9836-4d95-91b6-6e6736f581b1}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{d33b8244-1eb4-eb11-8236-00224808e1d0}.xml => {8271517a-25f9-4cf2-a006-20e7248dc767}.xml} (81%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{a93b8244-1eb4-eb11-8236-00224808e1d0}.xml => {85b90a27-8b53-40aa-a130-f2d0d5b91c9e}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{24e4c865-82dd-eb11-bacb-000d3a5819ec}.xml => {867d43b7-af76-4888-bfe2-fed50d694fdf}.xml} (81%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{ce837a4a-1eb4-eb11-8236-00224808e1d0}.xml => {86e747bf-c118-47b2-8dd4-cfb70d016bf7}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{1e3d5ff7-3cf9-eb11-94ef-000d3a135c2d}.xml => {9b5438cb-cf96-43df-ad7f-fe771e84e3d3}.xml} (87%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{a23b8244-1eb4-eb11-8236-00224808e1d0}.xml => {be4980b9-ce95-45a3-8cc7-37aa9d8eeb67}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{ca3b8244-1eb4-eb11-8236-00224808e1d0}.xml => {dc676866-dead-48da-9b43-52059af2ab83}.xml} (72%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{6d990968-47c4-eb11-bacc-000d3a31d619}.xml => {e64ae12c-30cd-44eb-97e0-b57d576ab55b}.xml} (74%) rename VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{{9c040360-23be-eb11-8236-000d3a31c0f1}.xml => {f47addb7-4a4e-4a86-8056-4e4bcbb37f19}.xml} (82%) create mode 100644 VolunteerManagement/VolunteerManagementResources/Plugins/PluginsOS.snk diff --git a/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml b/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml index 99858fde..87325c0d 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml @@ -1,9 +1,9 @@ - VolunteerManagement + volunteermanagementos - + 1.2.4.0 @@ -163,31 +163,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -668,7 +668,7 @@ - + diff --git a/VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/Plugins-5D562315-37A4-EB11-B1AC-000D3A1FC0E7/Plugins.dll.data.xml b/VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/Plugins-5D562315-37A4-EB11-B1AC-000D3A1FC0E7/Plugins.dll.data.xml deleted file mode 100644 index 5273af26..00000000 --- a/VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/Plugins-5D562315-37A4-EB11-B1AC-000D3A1FC0E7/Plugins.dll.data.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - 2 - 0 - 1.0 - /PluginAssemblies/Plugins-5D562315-37A4-EB11-B1AC-000D3A1FC0E7/Plugins.dll - - - Plugins.ContactPostUpdate - - - Plugins.EngagementOpportunityOnPostCreate - - - 1ae63550-dcd4-42c5-9736-c625efc25d18 - - - Plugins.EngagementOpportunityOnPostUpdate - - - Plugins.EngagementOpportunityOnPreCreate - - - aeee5582-f2ad-4b5f-ad65-06a36666a343 - - - Plugins.EngagementOpportunityPreferenceOnPreCreate - - - Plugins.EngagementOpportunityQualificationOnPreCreate - - - Plugins.EngagementOpportunityScheduleOnPostUpdateAndCreate - - - Plugins.EngagementOpportunityScheduleOnPreCreateUpdate - - - Plugins.EngagementOpportunitySettingOnPreCreate - - - Plugins.GroupMembershipOnPreCreate - - - Plugins.GroupMembershipOnPreDelete - - - Plugins.MessageOnPostCreate - - - Plugins.ParticipationOnPostCreate - - - Plugins.ParticipationOnPostUpdate - - - Plugins.ParticipationOnPreCreate - - - Plugins.ParticipationScheduleOnPostUpdateAndCreate - - - c50de1c0-461f-4293-9702-5db9b3bcb13f - - - cd63de5a-e948-4d51-889f-206962fa349e - - - e134a66b-6d6e-430a-be54-aa63a98d37bc - - - 3c412448-9412-4ee8-b139-ba839e73ccb8 - - - 43d8bb59-1c08-4b9a-a4c9-895937967acc - - - \ No newline at end of file diff --git a/VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/PluginsOS-50D34BB8-E4AA-4DF8-84EA-9D70B19DC72D/PluginsOS.dll.data.xml b/VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/PluginsOS-50D34BB8-E4AA-4DF8-84EA-9D70B19DC72D/PluginsOS.dll.data.xml new file mode 100644 index 00000000..575021a3 --- /dev/null +++ b/VolunteerManagement/VolunteerManagement/Solution/PluginAssemblies/PluginsOS-50D34BB8-E4AA-4DF8-84EA-9D70B19DC72D/PluginsOS.dll.data.xml @@ -0,0 +1,78 @@ + + + 2 + 0 + 1.0 + /PluginAssemblies/PluginsOS-50D34BB8-E4AA-4DF8-84EA-9D70B19DC72D/PluginsOS.dll + + + Plugins.ContactPostUpdate + + + Plugins.EngagementOpportunityOnPostCreate + + + 1ae63550-dcd4-42c5-9736-c625efc25d18 + + + Plugins.EngagementOpportunityOnPostUpdate + + + Plugins.EngagementOpportunityOnPreCreate + + + aeee5582-f2ad-4b5f-ad65-06a36666a343 + + + Plugins.EngagementOpportunityPreferenceOnPreCreate + + + Plugins.EngagementOpportunityQualificationOnPreCreate + + + Plugins.EngagementOpportunityScheduleOnPostUpdateAndCreate + + + Plugins.EngagementOpportunityScheduleOnPreCreateUpdate + + + Plugins.EngagementOpportunitySettingOnPreCreate + + + Plugins.GroupMembershipOnPreCreate + + + Plugins.GroupMembershipOnPreDelete + + + Plugins.MessageOnPostCreate + + + Plugins.ParticipationOnPostCreate + + + Plugins.ParticipationOnPostUpdate + + + Plugins.ParticipationOnPreCreate + + + Plugins.ParticipationScheduleOnPostUpdateAndCreate + + + c50de1c0-461f-4293-9702-5db9b3bcb13f + + + cd63de5a-e948-4d51-889f-206962fa349e + + + e134a66b-6d6e-430a-be54-aa63a98d37bc + + + 3c412448-9412-4ee8-b139-ba839e73ccb8 + + + 43d8bb59-1c08-4b9a-a4c9-895937967acc + + + \ No newline at end of file diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d6837a4a-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{055e9f02-c8e4-4834-86e5-d5912bd34619}.xml similarity index 71% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d6837a4a-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{055e9f02-c8e4-4834-86e5-d5912bd34619}.xml index 12e87f83..20c7b74c 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d6837a4a-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{055e9f02-c8e4-4834-86e5-d5912bd34619}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityScheduleOnPostUpdateAndCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 036d099d-14ce-4199-bdbb-61b613f3a826 + Plugins.EngagementOpportunityScheduleOnPostUpdateAndCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 78fe9806-1633-4113-8c77-bf379676d7e3 msnfp_engagementopportunityschedule 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ad3b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{252d5074-6f45-4861-a269-ee1ea14ac398}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ad3b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{252d5074-6f45-4861-a269-ee1ea14ac398}.xml index 580dbc13..98727393 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ad3b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{252d5074-6f45-4861-a269-ee1ea14ac398}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityPreferenceOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - cce61d3d-fef3-482b-b536-adef5972f552 + Plugins.EngagementOpportunityPreferenceOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + c262b19b-3ec7-4550-b08e-97991f6357ea msnfp_engagementopportunitypreference 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{cf3b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{2a00b8be-03e1-46db-a352-b49f1c379753}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{cf3b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{2a00b8be-03e1-46db-a352-b49f1c379753}.xml index c6cf6eed..c8964b34 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{cf3b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{2a00b8be-03e1-46db-a352-b49f1c379753}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.ParticipationScheduleOnPostUpdateAndCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 9d64be49-51f1-4711-845f-6ebe1363aa1d + Plugins.ParticipationScheduleOnPostUpdateAndCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + ed6ba47e-ba76-4cd9-a261-143865c50e85 msnfp_participationschedule 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d9837a4a-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{2c7c7185-3d66-41d3-89fb-c8c635046dae}.xml similarity index 82% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d9837a4a-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{2c7c7185-3d66-41d3-89fb-c8c635046dae}.xml index 3d14456e..ac9ad214 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d9837a4a-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{2c7c7185-3d66-41d3-89fb-c8c635046dae}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityOnPostUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 82086afa-6b54-42de-a651-cb813259497f + Plugins.EngagementOpportunityOnPostUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 188ca6f7-e614-4adf-8598-fd123475d982 msnfp_engagementopportunity 0 msnfp_endingdate,msnfp_maximum,msnfp_minimum,msnfp_shifts,msnfp_startingdate diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{3408687d-3cf5-eb11-94ef-000d3a135c2d}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{39ef623b-a978-4e2a-a5cf-9df6268c4cce}.xml similarity index 75% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{3408687d-3cf5-eb11-94ef-000d3a135c2d}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{39ef623b-a978-4e2a-a5cf-9df6268c4cce}.xml index 3c008758..b40dafcf 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{3408687d-3cf5-eb11-94ef-000d3a135c2d}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{39ef623b-a978-4e2a-a5cf-9df6268c4cce}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.QualificationOnPostCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - d7b2c2d1-e5d5-4aee-9eaf-f656bd5248d5 + Plugins.QualificationOnPostCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 40838878-f4df-4d05-bc78-6da8f21a5f27 msnfp_qualification 0 Plugins.QualificationOnPostCreate: Create of msnfp_qualification diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9b3b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{442d349d-61bc-4265-a52e-cf2222d69ef0}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9b3b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{442d349d-61bc-4265-a52e-cf2222d69ef0}.xml index 911747b2..e9841ee9 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9b3b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{442d349d-61bc-4265-a52e-cf2222d69ef0}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunitySettingOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - ccee094b-9aa2-49dd-b6af-00348d4ba76f + Plugins.EngagementOpportunitySettingOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + b22c2840-4e15-4892-b93a-61d938edff3f msnfp_engagementopportunitysetting 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{53dba732-fdd1-ec11-a7b5-000d3a3af529}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{5751b036-57ec-4d93-b297-2004a77c8ae7}.xml similarity index 87% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{53dba732-fdd1-ec11-a7b5-000d3a3af529}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{5751b036-57ec-4d93-b297-2004a77c8ae7}.xml index 73487010..27ab972e 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{53dba732-fdd1-ec11-a7b5-000d3a3af529}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{5751b036-57ec-4d93-b297-2004a77c8ae7}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityOnPreUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 0c14a9f4-ad5f-472d-9f40-1e634fd007ef + Plugins.EngagementOpportunityOnPreUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 22ca14be-748a-4b78-abbf-232b8807a56c msnfp_engagementopportunity 0 Plugins.EngagementOpportunityOnPreUpdate: Update of msnfp_engagementopportunity diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{167ce908-c5bc-eb11-8236-000d3a31dec1}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{659e5220-eae9-430a-b1a0-75f423107a4a}.xml similarity index 77% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{167ce908-c5bc-eb11-8236-000d3a31dec1}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{659e5220-eae9-430a-b1a0-75f423107a4a}.xml index d85fa48a..0f51328e 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{167ce908-c5bc-eb11-8236-000d3a31dec1}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{659e5220-eae9-430a-b1a0-75f423107a4a}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.MessageOnPostCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 157ce908-c5bc-eb11-8236-000d3a31dec1 + Plugins.MessageOnPostCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + e7482d3c-0111-4d7f-aa6b-b31a93e88d63 msnfp_message 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{b42728b8-6b16-ec11-b6e6-000d3a1b92d8}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{6664dd0c-4ca7-4045-bc59-7614a4af751e}.xml similarity index 79% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{b42728b8-6b16-ec11-b6e6-000d3a1b92d8}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{6664dd0c-4ca7-4045-bc59-7614a4af751e}.xml index da21a8f1..469cfb88 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{b42728b8-6b16-ec11-b6e6-000d3a1b92d8}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{6664dd0c-4ca7-4045-bc59-7614a4af751e}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.QualificationOnPostUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 8edb8a98-f648-407a-86b1-590bb88ddafd + Plugins.QualificationOnPostUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + a04067ed-8ac6-4ac4-8883-063aa492bccb msnfp_qualification 0 Plugins.QualificationOnPostUpdate: Update of msnfp_qualification diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{c8837a4a-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{671dd33c-2ae1-434c-8652-40a96ea4a6d2}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{c8837a4a-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{671dd33c-2ae1-434c-8652-40a96ea4a6d2}.xml index dbc17009..7a1eaf8a 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{c8837a4a-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{671dd33c-2ae1-434c-8652-40a96ea4a6d2}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.ParticipationOnPostCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 1352f367-7d93-451e-a423-d439acb49482 + Plugins.ParticipationOnPostCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + f38e6ad5-d5d2-4436-aa24-dd80e1bc7b68 msnfp_participation 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{98a62c4e-57df-eb11-bacb-000d3a5819ec}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{719cbec5-f3dd-4b86-80ac-3080893f7bd2}.xml similarity index 89% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{98a62c4e-57df-eb11-bacb-000d3a5819ec}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{719cbec5-f3dd-4b86-80ac-3080893f7bd2}.xml index 71973a97..39827d49 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{98a62c4e-57df-eb11-bacb-000d3a5819ec}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{719cbec5-f3dd-4b86-80ac-3080893f7bd2}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityOnPostPublicPublish, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 26a8fb7c-1844-4a2a-baa3-4813f5bfd7b3 + Plugins.EngagementOpportunityOnPostPublicPublish, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + f103c524-9415-4525-92ea-6a61f334480c msnfp_engagementopportunity 1 Plugins.EngagementOpportunityOnPostPublicPublish: Update of msnfp_engagementopportunity diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{0ff87207-fdd1-ec11-a7b5-000d3a3afd3a}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{78d39fed-f4da-46fe-86f3-82ef5193777a}.xml similarity index 81% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{0ff87207-fdd1-ec11-a7b5-000d3a3afd3a}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{78d39fed-f4da-46fe-86f3-82ef5193777a}.xml index aff2e26d..336de402 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{0ff87207-fdd1-ec11-a7b5-000d3a3afd3a}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{78d39fed-f4da-46fe-86f3-82ef5193777a}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - d44d669b-ac09-4020-968c-d79e29dcfdce + Plugins.EngagementOpportunityOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 32f62435-ba3a-45ad-8811-a6ea543ff82d msnfp_engagementopportunity 0 Plugins.EngagementOpportunityOnPreCreate: Create of msnfp_engagementopportunity diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d2837a4a-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{7a061612-6940-4b13-8706-3d0fb99e2c30}.xml similarity index 81% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d2837a4a-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{7a061612-6940-4b13-8706-3d0fb99e2c30}.xml index 815861a8..3ad57245 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d2837a4a-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{7a061612-6940-4b13-8706-3d0fb99e2c30}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityScheduleOnPostUpdateAndCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 036d099d-14ce-4199-bdbb-61b613f3a826 + Plugins.EngagementOpportunityScheduleOnPostUpdateAndCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 78fe9806-1633-4113-8c77-bf379676d7e3 msnfp_engagementopportunityschedule 0 msnfp_maximum,msnfp_minimum,statecode diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{b553b924-15f6-eb11-94ef-000d3a135c2d}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{7fec674a-f06a-4fef-89c0-9a7f814e5e86}.xml similarity index 87% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{b553b924-15f6-eb11-94ef-000d3a135c2d}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{7fec674a-f06a-4fef-89c0-9a7f814e5e86}.xml index 3395b8ca..becf2f29 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{b553b924-15f6-eb11-94ef-000d3a135c2d}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{7fec674a-f06a-4fef-89c0-9a7f814e5e86}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.QualificationStageOnPostUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - d28e1986-4477-4cc3-92c7-b16e5522be71 + Plugins.QualificationStageOnPostUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + b341894e-f55e-4847-8f8e-99dff1117300 msnfp_qualificationstage 0 Plugins.QualificationStageOnPostUpdate: Update of msnfp_qualificationstage diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{de837a4a-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{81f97b73-9836-4d95-91b6-6e6736f581b1}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{de837a4a-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{81f97b73-9836-4d95-91b6-6e6736f581b1}.xml index 0ec1ac74..469869c4 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{de837a4a-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{81f97b73-9836-4d95-91b6-6e6736f581b1}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityOnPostCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - e137afe8-051b-4ade-9bd7-051b653fb01a + Plugins.EngagementOpportunityOnPostCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 126f38a3-5b6d-435f-95c1-70365caadc34 msnfp_engagementopportunity 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d33b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{8271517a-25f9-4cf2-a006-20e7248dc767}.xml similarity index 81% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d33b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{8271517a-25f9-4cf2-a006-20e7248dc767}.xml index b2492588..c4189d0e 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{d33b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{8271517a-25f9-4cf2-a006-20e7248dc767}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.ParticipationOnPostUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 49dc1e97-2b4c-4203-86ac-ba38aa39641a + Plugins.ParticipationOnPostUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 48f1bbba-39e2-4325-bf62-80d495efab45 msnfp_participation 0 msnfp_status,msnfp_hours diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{a93b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{85b90a27-8b53-40aa-a130-f2d0d5b91c9e}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{a93b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{85b90a27-8b53-40aa-a130-f2d0d5b91c9e}.xml index d6eff078..193b65f2 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{a93b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{85b90a27-8b53-40aa-a130-f2d0d5b91c9e}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.GroupMembershipOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - be18fbf2-065c-4cb3-80c1-69984671d900 + Plugins.GroupMembershipOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 8254c799-b8e9-4663-8498-a1d476586b54 msnfp_groupmembership 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{24e4c865-82dd-eb11-bacb-000d3a5819ec}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{867d43b7-af76-4888-bfe2-fed50d694fdf}.xml similarity index 81% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{24e4c865-82dd-eb11-bacb-000d3a5819ec}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{867d43b7-af76-4888-bfe2-fed50d694fdf}.xml index 41fbd8bb..e0b39fd7 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{24e4c865-82dd-eb11-bacb-000d3a5819ec}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{867d43b7-af76-4888-bfe2-fed50d694fdf}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.ParticipationScheduleOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 5bccbc89-5bae-4ad9-801c-25fc4748c92b + Plugins.ParticipationScheduleOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + f28d50d0-05b8-4020-b8b7-cba573320c7f msnfp_participationschedule 0 Plugins.ParticipationScheduleOnPreCreate: Create of msnfp_participationschedule diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ce837a4a-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{86e747bf-c118-47b2-8dd4-cfb70d016bf7}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ce837a4a-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{86e747bf-c118-47b2-8dd4-cfb70d016bf7}.xml index 5dbadf1f..60d935f3 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ce837a4a-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{86e747bf-c118-47b2-8dd4-cfb70d016bf7}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.ParticipationOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 3af5242d-43cf-4b14-8848-7bd20a44ae8c + Plugins.ParticipationOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 3434c556-ed15-4a03-9d03-062512717595 msnfp_participation 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{1e3d5ff7-3cf9-eb11-94ef-000d3a135c2d}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9b5438cb-cf96-43df-ad7f-fe771e84e3d3}.xml similarity index 87% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{1e3d5ff7-3cf9-eb11-94ef-000d3a135c2d}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9b5438cb-cf96-43df-ad7f-fe771e84e3d3}.xml index d303bc0b..147d4810 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{1e3d5ff7-3cf9-eb11-94ef-000d3a135c2d}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9b5438cb-cf96-43df-ad7f-fe771e84e3d3}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.QualificationStageOnPreUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 3e7d5d74-2c9e-4fa6-815b-94f7874b17a8 + Plugins.QualificationStageOnPreUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + c2c4a9a0-6593-4d3a-8a06-bfd212dfc569 msnfp_qualificationstage 0 Plugins.QualificationStageOnPreUpdate: Update of msnfp_qualificationstage diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{a23b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{be4980b9-ce95-45a3-8cc7-37aa9d8eeb67}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{a23b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{be4980b9-ce95-45a3-8cc7-37aa9d8eeb67}.xml index 0163637f..8f0c6c50 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{a23b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{be4980b9-ce95-45a3-8cc7-37aa9d8eeb67}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityQualificationOnPreCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - c2baaafd-97df-4467-a571-c23f1be73e64 + Plugins.EngagementOpportunityQualificationOnPreCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 149c1ff6-f0d5-4717-87ea-2130c62a1c75 msnfp_engagementopportunityparticipantqual 0 diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ca3b8244-1eb4-eb11-8236-00224808e1d0}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{dc676866-dead-48da-9b43-52059af2ab83}.xml similarity index 72% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ca3b8244-1eb4-eb11-8236-00224808e1d0}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{dc676866-dead-48da-9b43-52059af2ab83}.xml index e6ac906d..e9fbe159 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{ca3b8244-1eb4-eb11-8236-00224808e1d0}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{dc676866-dead-48da-9b43-52059af2ab83}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.ParticipationScheduleOnPostUpdateAndCreate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - 9d64be49-51f1-4711-845f-6ebe1363aa1d + Plugins.ParticipationScheduleOnPostUpdateAndCreate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + ed6ba47e-ba76-4cd9-a261-143865c50e85 msnfp_participationschedule 0 msnfp_schedulestatus diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{6d990968-47c4-eb11-bacc-000d3a31d619}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{e64ae12c-30cd-44eb-97e0-b57d576ab55b}.xml similarity index 74% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{6d990968-47c4-eb11-bacc-000d3a31d619}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{e64ae12c-30cd-44eb-97e0-b57d576ab55b}.xml index 11f97139..01048f0e 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{6d990968-47c4-eb11-bacc-000d3a31d619}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{e64ae12c-30cd-44eb-97e0-b57d576ab55b}.xml @@ -1,8 +1,8 @@  - + 9ebdbb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityScheduleOnPreCreateUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - df58085a-23be-eb11-8236-000d3a31c0f1 + Plugins.EngagementOpportunityScheduleOnPreCreateUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 8badf9cc-b6ee-4587-a3d3-620ae3c2603a msnfp_engagementopportunityschedule 0 msnfp_effectivefrom,msnfp_effectiveto,msnfp_minimum,msnfp_maximum,msnfp_engagementopportunity,msnfp_shiftname diff --git a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9c040360-23be-eb11-8236-000d3a31c0f1}.xml b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{f47addb7-4a4e-4a86-8056-4e4bcbb37f19}.xml similarity index 82% rename from VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9c040360-23be-eb11-8236-000d3a31c0f1}.xml rename to VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{f47addb7-4a4e-4a86-8056-4e4bcbb37f19}.xml index f2ff5845..d54d578d 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{9c040360-23be-eb11-8236-000d3a31c0f1}.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/SdkMessageProcessingSteps/{f47addb7-4a4e-4a86-8056-4e4bcbb37f19}.xml @@ -1,8 +1,8 @@  - + 20bebb1b-ea3e-db11-86a7-000a3a5473e8 - Plugins.EngagementOpportunityScheduleOnPreCreateUpdate, Plugins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ad1edaac4bc000c - df58085a-23be-eb11-8236-000d3a31c0f1 + Plugins.EngagementOpportunityScheduleOnPreCreateUpdate, PluginsOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=703f25cc8a15a472 + 8badf9cc-b6ee-4587-a3d3-620ae3c2603a msnfp_engagementopportunityschedule 0 msnfp_effectivefrom,msnfp_effectiveto,msnfp_minimum,msnfp_maximum,msnfp_engagementopportunity,msnfp_shiftname diff --git a/VolunteerManagement/VolunteerManagementResources/Plugins/Plugins.csproj b/VolunteerManagement/VolunteerManagementResources/Plugins/Plugins.csproj index 90ae825e..fe33498d 100644 --- a/VolunteerManagement/VolunteerManagementResources/Plugins/Plugins.csproj +++ b/VolunteerManagement/VolunteerManagementResources/Plugins/Plugins.csproj @@ -3,8 +3,9 @@ {06901182-56A7-4647-AEE6-0FC382C6FDB7} net462 false - Plugins - Plugins + PluginsOS + PluginsOS + PluginsOS Copyright © 2021 bin\$(Configuration)\ false @@ -24,7 +25,7 @@ - Plugins.snk + PluginsOS.snk @@ -56,7 +57,7 @@ - + diff --git a/VolunteerManagement/VolunteerManagementResources/Plugins/PluginsOS.snk b/VolunteerManagement/VolunteerManagementResources/Plugins/PluginsOS.snk new file mode 100644 index 0000000000000000000000000000000000000000..fb2f99ad9ee8b5ff5dbfe29156de3152a148d3d2 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098~{fqAJIFR@?%> zRp8xC63K)GFscrylNwXEwu;W#b#Y41ALRH-(bpIy2IOy8+8hh^hKGcuP@2tush-kH z4c5vzXrg8&?dKK*WDnRfQgcJ-SuhjOy7@G#tV_Q4T{0d@(}2$tYkium+K!RAVrPGJ^}{T&mcg3u-^ zGHhr2<;;bQNcvS~K42a^I){n5o#N=T*cJL=0{G}W;p|?aej(4mS(kw(!GYtssY}GS zo1n4T4Q3?q~{H87i&uGCf;@Y_An8rI}e_`HvPm+&AvB2Hjdir&CdPS z5mk?qbjm!wXD+a~^I1VZK>o+Ay1T#X+DQu}Fc5}e$o=~8eAdFh8jGnlT#E_4GCaWo zf737Dk2WP5XNfnTY{4RE zO^oOmI@vL_F#ua!F1HH$m)2z$z4F2OD9}U6^r;+p>?oFcrc35q`!^ZLE5i=A)T|2C iy`8XKPe#};mPjS+s(nCgm}DatbGX}vL>FKZ3w#<|rX}3~ literal 0 HcmV?d00001 From 0367a282ed45790efc7a06f8ee5464ba6c0a9625 Mon Sep 17 00:00:00 2001 From: Lukas Domin Date: Tue, 23 Jun 2026 16:10:36 +0200 Subject: [PATCH 3/4] Add productized side-by-side migration script for VM open-source build VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 (parameterized strip-references / delete-appsource-solution / verify stages, generic az-cli auth, SupportsShouldProcess) plus README. Both solutions are Microsoft-published; named by goal (migrate to open-source) and distinguished by origin (AppSource vs OS build) rather than ambiguous 'official'. --- ...igrate-VolunteerManagementToOpenSource.ps1 | 247 ++++++++++++++++++ VolunteerManagement/Deployment/README.md | 89 +++++++ 2 files changed, 336 insertions(+) create mode 100644 VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 create mode 100644 VolunteerManagement/Deployment/README.md diff --git a/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 b/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 new file mode 100644 index 00000000..0688d8a9 --- /dev/null +++ b/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 @@ -0,0 +1,247 @@ +<# +.SYNOPSIS + Migrates an environment from the AppSource Volunteer Management managed solution to the + open-source Volunteer Management (OS) build that ships under a separate identity. + +.DESCRIPTION + Both solutions are published by Microsoft; this script distinguishes them by origin: + the AppSource managed solution (installed from the marketplace) versus the open-source + build (compiled from the public GitHub repository). + + The open-source build installs side-by-side with its own identity + (unique name 'volunteermanagementos', plugin assembly 'PluginsOS'). It brings its + own copies of the four PCF controls. The AppSource managed solution cannot simply be + deleted, because the forms and views it contributed reference its PCF controls in the + *active* (merged) layer. That Form -> Control "Published" dependency blocks deletion. + + This script removes that blocker by rewriting the active form/view layers so they no + longer reference the AppSource PCF controls (the default control is substituted), then + publishes. After that the AppSource managed solution can be deleted. Finally the OS + solution can be (re)imported / upgraded so its own forms and controls take over. + + Stages (each is opt-in via a switch; nothing destructive runs unless requested): + -StripReferences Rewrite forms + saved queries to drop AppSource PCF refs, then PublishAllXml. + -DeleteAppSourceSolution Delete the AppSource managed solution by unique name. + -Verify Report assembly / PCF ownership / SDK step registration. + + Run order for a full migration: + 1. Import the OS managed solution (volunteermanagementos) side-by-side (pac solution import). + 2. .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl -StripReferences + 3. .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl -DeleteAppSourceSolution + 4. Re-import / upgrade the OS solution so its forms restore the PCF controls (OS-owned). + 5. .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl -Verify + +.PARAMETER EnvironmentUrl + The Dataverse environment URL, e.g. https://contoso.crm.dynamics.com + +.PARAMETER StripReferences + Rewrite the active form/view layers to remove the AppSource PCF control references and publish. + +.PARAMETER DeleteAppSourceSolution + Delete the AppSource managed solution identified by -AppSourceSolutionUniqueName. + +.PARAMETER Verify + Print a verification report (plugin assemblies, PCF control ownership, SDK step counts). + +.PARAMETER AppSourceSolutionUniqueName + Unique name of the AppSource managed solution to delete. Default: VolunteerManagement. + +.PARAMETER ControlNames + The PCF control schema names whose references should be stripped from forms/views. + Defaults to the four controls shipped by Volunteer Management. + +.PARAMETER AccessToken + A pre-acquired Dataverse bearer token. If omitted, the script acquires one with the + Azure CLI (see -AzCommand). + +.PARAMETER AzCommand + The Azure CLI executable used to acquire a token when -AccessToken is not supplied. + Default: 'az'. You may point this at an isolated CLI wrapper for non-default sign-ins. + +.PARAMETER WhatIf + Supported on the destructive stages (PATCH / publish / delete) via SupportsShouldProcess. + +.EXAMPLE + .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -StripReferences + +.EXAMPLE + .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -DeleteAppSourceSolution + +.NOTES + Take a backup of the environment before running the destructive stages. The strip stage + edits active form/view layers in place; deleting the AppSource solution is irreversible + without that backup. +#> +[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'High')] +param( + [Parameter(Mandatory = $true)] + [string]$EnvironmentUrl, + + [switch]$StripReferences, + [switch]$DeleteAppSourceSolution, + [switch]$Verify, + + [string]$AppSourceSolutionUniqueName = 'VolunteerManagement', + + [string[]]$ControlNames = @( + 'msnfp_microsoftdynamics365nonprofitaccelerator.EngagementOpportunitySummary', + 'msnfp_microsoftdynamics365nonprofitaccelerator.OnboardingStages', + 'msnfp_microsoftdynamics365nonprofitaccelerator.SendMessages', + 'msnfp_VolunteerManagement.GetStarted' + ), + + [string]$AccessToken, + [string]$AzCommand = 'az' +) + +$ErrorActionPreference = 'Stop' +$EnvironmentUrl = $EnvironmentUrl.TrimEnd('/') +$base = "$EnvironmentUrl/api/data/v9.2" + +if (-not ($StripReferences -or $DeleteAppSourceSolution -or $Verify)) { + Write-Host 'Nothing to do. Specify at least one stage: -StripReferences, -DeleteAppSourceSolution, or -Verify.' -ForegroundColor Yellow + Write-Host 'Run "Get-Help .\Migrate-VolunteerManagementToOpenSource.ps1 -Full" for details.' + return +} + +function Get-DataverseToken { + param([string]$Resource, [string]$Token, [string]$Cli) + if ($Token) { return $Token } + $t = & $Cli account get-access-token --resource $Resource --query accessToken --output tsv 2>$null + if (-not $t) { + throw "Could not acquire an access token for $Resource via '$Cli'. Sign in (az login) or pass -AccessToken." + } + return $t.Trim() +} + +$token = Get-DataverseToken -Resource $EnvironmentUrl -Token $AccessToken -Cli $AzCommand +$headers = @{ + Authorization = "Bearer $token" + Accept = 'application/json' + 'Content-Type' = 'application/json' + 'OData-MaxVersion' = '4.0' + 'OData-Version' = '4.0' +} + +# Replace any with a clone of the form/view's default +# control definition, preserving formFactor. This removes the Form/View -> PCF dependency. +function Repair-ControlXml { + param([string]$XmlText, [string[]]$TargetNames) + $doc = New-Object System.Xml.XmlDocument + $doc.PreserveWhitespace = $true + $doc.LoadXml($XmlText) + $changed = 0 + foreach ($cd in $doc.SelectNodes('//controlDescription')) { + $pcf = @($cd.SelectNodes('customControl') | Where-Object { $TargetNames -contains $_.GetAttribute('name') }) + if ($pcf.Count -eq 0) { continue } + $def = @($cd.SelectNodes('customControl') | Where-Object { $_.GetAttribute('id') -and -not $_.GetAttribute('name') })[0] + if (-not $def) { continue } + foreach ($p in $pcf) { + $formFactor = $p.GetAttribute('formFactor') + $clone = $def.CloneNode($true) + if ($formFactor) { $clone.SetAttribute('formFactor', $formFactor) } + $cd.ReplaceChild($clone, $p) | Out-Null + $changed++ + } + } + return [pscustomobject]@{ Xml = $doc.OuterXml; Changed = $changed } +} + +function Invoke-StripReferences { + Write-Host '=== Stripping AppSource PCF references from system forms ===' -ForegroundColor Cyan + $forms = (Invoke-RestMethod -Uri "$base/systemforms?`$select=formid,name,objecttypecode,formxml" -Headers $headers).value + $patchedForms = 0 + foreach ($f in $forms) { + if (-not $f.formxml) { continue } + if (-not ($ControlNames | Where-Object { $f.formxml.Contains($_) })) { continue } + $res = Repair-ControlXml -XmlText $f.formxml -TargetNames $ControlNames + if ($res.Changed -gt 0 -and $PSCmdlet.ShouldProcess("form '$($f.name)' ($($f.objecttypecode))", "replace $($res.Changed) PCF control reference(s)")) { + $body = @{ formxml = $res.Xml } | ConvertTo-Json -Compress + Invoke-RestMethod -Uri "$base/systemforms($($f.formid))" -Method Patch -Headers $headers -Body $body | Out-Null + Write-Host (" FORM {0} ({1}): replaced {2}" -f $f.name, $f.objecttypecode, $res.Changed) + $patchedForms++ + } + } + Write-Host "Patched forms: $patchedForms" + + Write-Host '=== Stripping AppSource PCF references from saved queries (views) ===' -ForegroundColor Cyan + $views = (Invoke-RestMethod -Uri "$base/savedqueries?`$select=savedqueryid,name,returnedtypecode,layoutxml" -Headers $headers).value + $patchedViews = 0 + foreach ($v in $views) { + if (-not $v.layoutxml) { continue } + if (-not ($ControlNames | Where-Object { $v.layoutxml.Contains($_) })) { continue } + $res = Repair-ControlXml -XmlText $v.layoutxml -TargetNames $ControlNames + if ($res.Changed -gt 0 -and $PSCmdlet.ShouldProcess("saved query '$($v.name)' ($($v.returnedtypecode))", "replace $($res.Changed) PCF control reference(s)")) { + $body = @{ layoutxml = $res.Xml } | ConvertTo-Json -Compress + Invoke-RestMethod -Uri "$base/savedqueries($($v.savedqueryid))" -Method Patch -Headers $headers -Body $body | Out-Null + Write-Host (" VIEW {0} ({1}): replaced {2}" -f $v.name, $v.returnedtypecode, $res.Changed) + $patchedViews++ + } + } + Write-Host "Patched saved queries: $patchedViews" + + if (($patchedForms + $patchedViews) -gt 0) { + if ($PSCmdlet.ShouldProcess($EnvironmentUrl, 'PublishAllXml')) { + Write-Host '=== PublishAllXml ===' -ForegroundColor Cyan + Invoke-RestMethod -Uri "$base/PublishAllXml" -Method Post -Headers $headers -Body '{}' | Out-Null + Write-Host 'Publish complete.' + } + } + else { + Write-Host 'No forms or views referenced the target controls; nothing to publish.' + } +} + +function Invoke-DeleteAppSourceSolution { + Write-Host "=== Deleting AppSource managed solution '$AppSourceSolutionUniqueName' ===" -ForegroundColor Cyan + $sol = (Invoke-RestMethod -Uri "$base/solutions?`$select=solutionid,friendlyname,version,ismanaged&`$filter=uniquename eq '$AppSourceSolutionUniqueName'" -Headers $headers).value + if (-not $sol) { + Write-Host " Solution '$AppSourceSolutionUniqueName' not found (already removed?)." -ForegroundColor Yellow + return + } + $s = $sol[0] + Write-Host (" Found: {0} v{1} (managed={2})" -f $s.friendlyname, $s.version, $s.ismanaged) + if ($PSCmdlet.ShouldProcess("solution '$AppSourceSolutionUniqueName' ($($s.friendlyname) v$($s.version))", 'DELETE')) { + Invoke-RestMethod -Uri "$base/solutions($($s.solutionid))" -Method Delete -Headers $headers | Out-Null + Write-Host ' Deleted.' + } +} + +function Invoke-VerifyReport { + Write-Host '=== Plugin assemblies (Plugins*) ===' -ForegroundColor Cyan + (Invoke-RestMethod -Uri "$base/pluginassemblies?`$select=name,publickeytoken&`$filter=startswith(name,'Plugins')" -Headers $headers).value | + Format-Table name, publickeytoken -AutoSize | Out-Host + + Write-Host '=== PCF controls and owning solutions ===' -ForegroundColor Cyan + foreach ($n in $ControlNames) { + $cc = (Invoke-RestMethod -Uri "$base/customcontrols?`$select=customcontrolid,name&`$filter=name eq '$n'" -Headers $headers).value + if ($cc) { + $sc = (Invoke-RestMethod -Uri "$base/solutioncomponents?`$select=solutioncomponentid&`$filter=objectid eq $($cc[0].customcontrolid) and componenttype eq 66&`$expand=solutionid(`$select=uniquename)" -Headers $headers).value + Write-Host (" {0,-34} owners=[{1}]" -f $n.Split('.')[-1], (($sc | ForEach-Object { $_.solutionid.uniquename }) -join ', ')) + } + else { + Write-Host (" {0,-34} MISSING" -f $n.Split('.')[-1]) -ForegroundColor Yellow + } + } + + Write-Host '=== SDK steps registered on PluginsOS ===' -ForegroundColor Cyan + $asm = (Invoke-RestMethod -Uri "$base/pluginassemblies?`$select=pluginassemblyid,name&`$filter=name eq 'PluginsOS'" -Headers $headers).value + if ($asm) { + $types = (Invoke-RestMethod -Uri "$base/plugintypes?`$select=plugintypeid&`$filter=_pluginassemblyid_value eq $($asm[0].pluginassemblyid)" -Headers $headers).value + $stepCount = 0 + foreach ($t in $types) { + $steps = (Invoke-RestMethod -Uri "$base/sdkmessageprocessingsteps?`$select=sdkmessageprocessingstepid&`$filter=_plugintypeid_value eq $($t.plugintypeid)" -Headers $headers).value + $stepCount += $steps.Count + } + Write-Host (" PluginsOS: {0} plugin type(s), {1} SDK step(s) registered" -f $types.Count, $stepCount) + } + else { + Write-Host ' PluginsOS assembly not found.' -ForegroundColor Yellow + } +} + +if ($StripReferences) { Invoke-StripReferences } +if ($DeleteAppSourceSolution) { Invoke-DeleteAppSourceSolution } +if ($Verify) { Invoke-VerifyReport } + +Write-Host 'Done.' -ForegroundColor Green diff --git a/VolunteerManagement/Deployment/README.md b/VolunteerManagement/Deployment/README.md new file mode 100644 index 00000000..2b3f5afe --- /dev/null +++ b/VolunteerManagement/Deployment/README.md @@ -0,0 +1,89 @@ +# Migrating Volunteer Management to the open-source build + +Both the AppSource and the open-source (OS) Volunteer Management solutions are published by +Microsoft; they are distinguished by **origin** — the AppSource managed solution (installed +from the marketplace) versus the OS build (compiled from the public GitHub repository). + +The OS build installs **side-by-side** with its own identity so it never collides with the +AppSource solution: + +| Aspect | AppSource (marketplace) | Open-source build | +| --- | --- | --- | +| Solution unique name | `VolunteerManagement` | `volunteermanagementos` | +| Plugin assembly | `Plugins` (token `8ad1edaac4bc000c`) | `PluginsOS` (token `703f25cc8a15a472`) | +| PCF controls | shipped & owned | shipped & owned (own copies) | + +Because the two solutions have **separate identities**, the OS build can be imported while +the AppSource one is still present. The OS build carries its own copies of the four PCF +controls, its own plugin assembly, and its own SDK steps. + +## Why a strip step is required + +The AppSource managed solution contributes forms and views whose **active (merged) layer** +references its PCF controls. That `Form -> Control` dependency is *Published* and lives in +the active layer regardless of solution ownership, so it blocks deletion of the AppSource +solution. Granting the OS solution ownership of those components (e.g. `AddSolutionComponent`) +does **not** clear the dependency — this was verified empirically. + +The `Migrate-VolunteerManagementToOpenSource.ps1` script removes the blocker by rewriting the +active form/view layers so they substitute the default control for the AppSource PCF control, +then publishing. After that the AppSource solution deletes cleanly. + +## Migration steps + +1. **Back up the environment.** The strip stage edits active form/view layers in place and + deleting the AppSource solution is irreversible without a backup. + +2. **Import the OS managed solution side-by-side.** + + ```powershell + pac solution import --path .\VolunteerManagement\bin\Release\VolunteerManagement_managed.zip + ``` + + (Build it first with `dotnet build VolunteerManagement\VolunteerManagement.cdsproj -c Release`.) + +3. **Strip the AppSource PCF references and publish.** + + ```powershell + .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -StripReferences + ``` + +4. **Delete the AppSource managed solution.** + + ```powershell + .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -DeleteAppSourceSolution + ``` + +5. **Re-import / upgrade the OS solution** so its own forms restore the PCF controls under OS + ownership. + + ```powershell + pac solution import --path .\VolunteerManagement\bin\Release\VolunteerManagement_managed.zip --force-overwrite + ``` + +6. **Verify.** + + ```powershell + .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -Verify + ``` + +## Authentication + +By default the script acquires a Dataverse token with the Azure CLI (`az account get-access-token`). +Sign in first with `az login`, or: + +- pass a pre-acquired bearer token with `-AccessToken `, or +- point `-AzCommand` at an alternate/isolated Azure CLI executable for a non-default sign-in. + +## Safety + +- Every stage is **opt-in**; running the script with no stage switch does nothing. +- The destructive stages support `-WhatIf` and `-Confirm` (the script declares + `ConfirmImpact = 'High'`), so you can preview each PATCH / publish / delete. +- Always take an environment backup before steps 3–5. + +## Parameters + +Run `Get-Help .\Migrate-VolunteerManagementToOpenSource.ps1 -Full` for the complete reference. +The control list and the AppSource solution unique name are parameterized +(`-ControlNames`, `-AppSourceSolutionUniqueName`) and default to the Volunteer Management values. From fe0905626dc37f2b79f379fa9ece646cccf47b13 Mon Sep 17 00:00:00 2001 From: Lukas Domin Date: Wed, 24 Jun 2026 16:26:53 +0200 Subject: [PATCH 4/4] VM OS: address PR #50 feedback - Solution version 1.2.4.0 -> 1.1.3.0 (versioning guide: stage must be 0-3 GA=3; higher than AppSource 1.0.3.10172) - Migration script: page through @odata.nextLink for systemforms and savedqueries (Get-AllPages helper) so large environments don't miss references - README: repo-root-relative paths and explicit working-directory note --- ...igrate-VolunteerManagementToOpenSource.ps1 | 19 +++++++++++++++++-- VolunteerManagement/Deployment/README.md | 16 ++++++++++------ .../Solution/Other/Solution.xml | 2 +- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 b/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 index 0688d8a9..d0b8e21d 100644 --- a/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 +++ b/VolunteerManagement/Deployment/Migrate-VolunteerManagementToOpenSource.ps1 @@ -123,6 +123,21 @@ $headers = @{ 'OData-Version' = '4.0' } +# Retrieve every page of a Dataverse Web API query. The Web API caps each response at a +# page (default 5000 rows) and returns @odata.nextLink for the rest, so a single call can +# miss forms/views that still reference the AppSource PCF controls. +function Get-AllPages { + param([string]$Url) + $all = @() + $next = $Url + while ($next) { + $page = Invoke-RestMethod -Uri $next -Headers $headers + if ($page.value) { $all += $page.value } + $next = $page.'@odata.nextLink' + } + return $all +} + # Replace any with a clone of the form/view's default # control definition, preserving formFactor. This removes the Form/View -> PCF dependency. function Repair-ControlXml { @@ -149,7 +164,7 @@ function Repair-ControlXml { function Invoke-StripReferences { Write-Host '=== Stripping AppSource PCF references from system forms ===' -ForegroundColor Cyan - $forms = (Invoke-RestMethod -Uri "$base/systemforms?`$select=formid,name,objecttypecode,formxml" -Headers $headers).value + $forms = Get-AllPages -Url "$base/systemforms?`$select=formid,name,objecttypecode,formxml" $patchedForms = 0 foreach ($f in $forms) { if (-not $f.formxml) { continue } @@ -165,7 +180,7 @@ function Invoke-StripReferences { Write-Host "Patched forms: $patchedForms" Write-Host '=== Stripping AppSource PCF references from saved queries (views) ===' -ForegroundColor Cyan - $views = (Invoke-RestMethod -Uri "$base/savedqueries?`$select=savedqueryid,name,returnedtypecode,layoutxml" -Headers $headers).value + $views = Get-AllPages -Url "$base/savedqueries?`$select=savedqueryid,name,returnedtypecode,layoutxml" $patchedViews = 0 foreach ($v in $views) { if (-not $v.layoutxml) { continue } diff --git a/VolunteerManagement/Deployment/README.md b/VolunteerManagement/Deployment/README.md index 2b3f5afe..bd6fd3f7 100644 --- a/VolunteerManagement/Deployment/README.md +++ b/VolunteerManagement/Deployment/README.md @@ -31,40 +31,44 @@ then publishing. After that the AppSource solution deletes cleanly. ## Migration steps +> Run all commands from the **repository root**. Paths below are relative to it: the solution +> project lives under `VolunteerManagement\VolunteerManagement\` and the migration script under +> `VolunteerManagement\Deployment\`. + 1. **Back up the environment.** The strip stage edits active form/view layers in place and deleting the AppSource solution is irreversible without a backup. 2. **Import the OS managed solution side-by-side.** ```powershell - pac solution import --path .\VolunteerManagement\bin\Release\VolunteerManagement_managed.zip + pac solution import --path .\VolunteerManagement\VolunteerManagement\bin\Release\VolunteerManagement_managed.zip ``` - (Build it first with `dotnet build VolunteerManagement\VolunteerManagement.cdsproj -c Release`.) + (Build it first with `dotnet build VolunteerManagement\VolunteerManagement\VolunteerManagement.cdsproj -c Release`.) 3. **Strip the AppSource PCF references and publish.** ```powershell - .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -StripReferences + .\VolunteerManagement\Deployment\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -StripReferences ``` 4. **Delete the AppSource managed solution.** ```powershell - .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -DeleteAppSourceSolution + .\VolunteerManagement\Deployment\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -DeleteAppSourceSolution ``` 5. **Re-import / upgrade the OS solution** so its own forms restore the PCF controls under OS ownership. ```powershell - pac solution import --path .\VolunteerManagement\bin\Release\VolunteerManagement_managed.zip --force-overwrite + pac solution import --path .\VolunteerManagement\VolunteerManagement\bin\Release\VolunteerManagement_managed.zip --force-overwrite ``` 6. **Verify.** ```powershell - .\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -Verify + .\VolunteerManagement\Deployment\Migrate-VolunteerManagementToOpenSource.ps1 -EnvironmentUrl https://contoso.crm.dynamics.com -Verify ``` ## Authentication diff --git a/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml b/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml index 87325c0d..297eae82 100644 --- a/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml +++ b/VolunteerManagement/VolunteerManagement/Solution/Other/Solution.xml @@ -6,7 +6,7 @@ - 1.2.4.0 + 1.1.3.0 2 microsofttechforsocialimpact