End-of-Life for Anthology Student Activities (V1)

On announcing the General Availability (GA) of a major or minor release version of a software product, Anthology Inc. also announces the End-of-Life (EOL) date and End-of-Support (EOS) date for other versions, if applicable. Anthology’s policy is to support the newly released GA version as well as the two major or minor release versions immediately preceding the new GA version.

With the release of Anthology Student 21.0 in October 2019, the EOL date for Anthology Student Activities (V1) is scheduled for October 2020 and the EOS date is scheduled for April 2021.

During the EOL period, Anthology will only evaluate Severity 1 issues. All other lesser Severity issues will not be addressed. Once a product version reaches its EOS date, assistance or resolution of any issues reported will no longer be provided. Anthology will only provide the recommendation to upgrade to a version of the product that is not currently EOL or EOS.

The EOL and EOS process allows Anthology to focus development and support efforts on a smaller set of releases, thereby increasing the effectiveness and quality of those releases, while enabling customers to take advantage of the latest available enhancements and resolutions. We encourage our customers, especially those who are on an EOS version or a version in an EOL period, to upgrade to the most current version of our software.

For previous releases of Anthology Student, the Package Manager in Workflow Composer provided Activities for the legacy CampusVue object model (V1) and the new object model (V2).

  • Activities that were developed in the legacy object model and are required to support events raised out of Anthology Student were migrated to new namespaces. The migrated activities retain the original activity names and properties but reside in a new namespace.

  • Activities that were developed in the legacy object model and are no longer required to support events raised out of Anthology Student were not migrated to new namespaces. Activities that were not migrated are replaced by different activities in the new object model.

Actions Required

Customers using V1 activities in their workflows will need to replace the V1 activities with V2 activities during the EOL period for V1 Activities. The revised workflows will need to be tested to verify the desired functionality.

The table below identifies V1 activities and their corresponding V2 replacements.

  • For activities that have been migrated, simply replace the V1 activity with the V2 activity with the same activity name but residing in a different namespace.

  • For activities that have not been migrated, remove the V1 activity, insert the suggested V2 activities, and adjust the workflow logic as needed.

V1 Namespaces and Activities Migrated V2 Namespaces and Activities
Cmc.Nexus.Converters    
CVueIdToPersonIdActivity No GetEntity / SaveEntity in Cmc.Core.Workflow.Activities.EntityModel
PersonIdToCVueIdActivity No
Cmc.Nexus.Workflow    
CompleteAction No N/A
CreateDocument Yes CreateDocument in Cmc.Nexus.Crm.Workflow
LookupExtendedProperty No LookupReferenceItem in Cmc.Nexus.Common.Workflow
LookupGroup No LookupStudentGroup in Cmc.Nexus.Common.Workflow
LookupListItem No LookupReferenceItem in Cmc.Nexus.Common.Workflow
LookupPerson No GetEntity in Cmc.Core.Workflow.Activities.EntityModel
LookupPersonDocuments No LookupStudentDocuments in Cmc.Nexus.Crm.Workflow
ManageGroupMembership Yes ManageGroupMembership in Cmc.Nexus.Common.Workflow
SaveDocument Yes SaveDocument in Cmc.Nexus.Crm.Workflow
SaveExtendedProperty No SaveEntity in Cmc.Core.Workflow.Activities.EntityModel
SavePerson No SaveEntity in Cmc.Core.Workflow.Activities.EntityModel
Cmc.Nexus.Workflow.Crm   Cmc.Nexus.Crm.Workflow
CreateTask Yes CreateTask
LookupStudentTasks Yes LookupStudentTasks
SaveTask Yes SaveTask
Cmc.Nexus.Workflow.Sis   Cmc.Nexus.Common.Workflow
AssignStudentAdvisor Yes AssignStudentAdvisor
LookupAdvisor Yes LookupAdvisor
LookupStudent No GetEntity in Cmc.Core.Workflow.Activities.EntityModel
LookupStudentAdvisors Yes LookupStudentAdvisors
Cmc.Nexus.Workflow.Sis.Academics   Cmc.Nexus.Academics.Workflow
ConvertApplicantToEnrollment Yes ConvertApplicantToEnrollment
CreateStudentCourse Yes CreateStudentCourse
CreateStudentEnrollmentPeriod No N/A
LookupAreaOfStudy No LookupReferenceItem in Cmc.Nexus.Common.Workflow
LookupClassSections Yes LookupClassSections
LookupCurrentEnrollmentPeriod Yes LookupCurrentEnrollmentPeriod
LookupEnrollmentPeriods Yes LookupEnrollmentPeriods
LookupTerms Yes LookupTerms
SaveStudentCourse Yes SaveStudentCourse
SaveStudentEnrollmentPeriod No N/A
UpdateNsldsWithdrawalDate No N/A
Cmc.Nexus.Workflow.Sis.Academics   Cmc.Nexus.Common.Workflow
UpdateStudentStatusToActive Yes UpdateStudentStatusToActive
UpdateStudentStatusToDrop Yes UpdateStudentStatusToDrop
UpdateStudentStatusToEnrolled Yes UpdateStudentStatusToEnrolled
UpdateStudentStatusToGraduate Yes UpdateStudentStatusToGraduate
UpdateStudentStatusToLead Yes UpdateStudentStatusToLead
UpdateStudentStatusToTempOut Yes UpdateStudentStatusToTempOut
Cmc.Nexus.Workflow.Sis.Admissions   Cmc.Nexus.Common.Workflow
UpdateStudentStatusToApplicant Yes UpdateStudentStatusToApplicant
Cmc.Nexus.Workflow.Sis.StudentAccounts   Cmc.Nexus.StudentAccounts.Workflow
CreateCharge Yes CreateCharge
SaveCharge Yes SaveCharge
Cmc.Nexus.Workflow.Sis.StudentServices   Cmc.Nexus.StudentServices.Workflow
CreateStudentDisabilityDetail Yes CreateStudentDisabilityDetail
CreateStudentSportsService Yes CreateStudentSportsService
CreateStudentVeteranDetail Yes CreateStudentVeteranDetail
LookupServiceListItem No LookupReferenceItem in Cmc.Nexus.Common.Workflow
SaveStudentDisabilityDetail Yes SaveStudentDisabilityDetail
SaveStudentSportsService Yes SaveStudentSportsService
SaveStudentVeteranDetail Yes SaveStudentVeteranDetail

Script to Locate V1 Activities

To locate all occurrences of V1 activities in your workflows, you can run the script below. The script identifies the workflows using V1 activities and, on a per-workflow basis, lists the V1 activities that are being used. It also gives a count of how many times each activity occurs in the workflow so that you know how many occurrences to look for in the workflow while updating it.

If you wish to validate the script in an environment, you can do so by opening the XAML for the workflow in a text editor and searching for all occurrences of V1 activity elements in the document. These elements will have the following namespace prefixes:

  • cnc
  • cnw
  • cnwc
  • cnws
  • cnwsa
  • cnwsa1
  • cnwss
  • cnwss1

Example:

<cnw:LookupGroup DisplayName="Lookup Pending App Group" Group="[groupadd]" GroupId="314411" sap2010:WorkflowViewState.IdRef="LookupGroup_1" />

LookupGroup is a V1 activity in the XAML because it starts with “cnw:” which is the Cmc.Nexus.Workflow namespace.

The results of the manual search should match the results shown by the script in terms of what activities are identified, and how many of each there are.

/******************************************************************
**
** Find Workflows Using V1 Activities
**
** Author: Mike Carter, Technical Account Manager, Anthology Inc
** Date: 7/16/2021
** 
** Locate enabled workflows which are using V1 activities and,
** on a per-workflow basis, list each Activity name and how
** many occurrences of each activity there are in the workflow  
**
** Identify the V1 activites by the following namespaces:
**    Cmc.Nexus.Converters
**    Cmc.Nexus.Workflow (and also namespaces prefixed by this)
**
*******************************************************************/

declare
	 @WorkflowName nvarchar(max)
	,@EnabledVersion int
	,@xaml xml

if object_id('tempdb..#AffectedWorkflows') is not null drop table #AffectedWorkflows
select 
	 WorkflowDefinition.Name as WorkflowName
	,WorkflowDefinitionVersion.Revision as EnabledVersion
	,cast(WorkflowDefinitionVersion.Xaml as XML) as xaml

into #AffectedWorkflows

from
	WorkflowDefinition
	inner join WorkflowDefinitionVersion on WorkflowDefinitionVersion.WorkflowDefinitionId = WorkflowDefinition.Id

where
	WorkflowDefinitionVersion.IsEnabled = 1 
	and (		
		WorkflowDefinitionVersion.Xaml like '%clr-namespace:Cmc.Nexus.Converters%'
		or WorkflowDefinitionVersion.Xaml like '%clr-namespace:Cmc.Nexus.Workflow%'
	)

--select * from #AffectedWorkflows order by WorkflowName

if object_id('tempdb..#Output') is not null drop table #Output
create table #Output (WorkflowName nvarchar(max), EnabledVersion int, ActivityName varchar(50), Occurrences int)

declare Records_Cursor cursor local fast_forward for 
	select WorkflowName, EnabledVersion, xaml from #AffectedWorkflows
open Records_Cursor

while 1=1
begin
	fetch next from Records_Cursor INTO @WorkflowName, @EnabledVersion, @xaml
	if @@FETCH_STATUS <> 0 
		break

	;with walkXML
	as
	(	select 
			 startNodes.query('./*') curLevelXml
			,startNodes.value('local-name(.)', 'varchar(50)') NodeName
			,startNodes.value('namespace-uri(.)', 'varchar(500)') NodeNamespaceUri
		from 
			@xaml.nodes('/*') t(startNodes) --starting with nodes under the root

		union all

		select
			 childNodes.query('./*') curLevelXml
			,childNodes.value('local-name(.)', 'varchar(50)') NodeName
			,childNodes.value('namespace-uri(.)', 'varchar(500)') NodeNamespaceUri
		from 
			walkXML 
			cross apply curLevelXml.nodes('./*') t2(childNodes) --child nodes descending down into the xml document
	)

	insert into #Output(WorkflowName, EnabledVersion, ActivityName, Occurrences)
	select @WorkflowName, @EnabledVersion, NodeName, count(1)
	from walkXML
	where 
		NodeNamespaceUri like 'clr-namespace:Cmc.Nexus.Converters%'
		or NodeNamespaceUri like 'clr-namespace:Cmc.Nexus.Workflow%'
	group by NodeName

end
close Records_Cursor;
deallocate Records_Cursor;


select * from #Output
order by WorkflowName, ActivityName