Important Bug Fix Information: ActivityPointer Tables Cannot Add Custom Columns

We have fixed a recently discovered bug that allowed users to create custom columns on the ActivityPointer table.  Creating custom columns on the ActivityPointer table is not a supported feature.

Only organizations that have added a custom column to the Activity Pointer table manually or via solution will be impacted. The bug fix will prevent new custom columns from being added to the ActivityPointer table, either manually or through solutions. If a custom column was previously added to the ActivityPointer table, and is part of an existing solution, it will need to be removed prior to importing the solution.

This bug was present in organizations created starting May 20, 2020. The fix for this bug is currently being deployed to all regions. The deployment began on July 16th 2021 and is scheduled to complete worldwide distribution to standard organizations on Aug 6th 2021.

Bug Fix Details:

In Dynamics 365, ActivityPointer is the root table for all activity tables. All columns of ActivityPointer are system columns and are inherited by all activity tables. Custom columns are not allowed because of the impact to other existing activities. If an activity requires a custom column for data, it can be created on individual custom activities directly.

Once the fix is applied to an organization, users will no longer be able to create custom columns on the ActivityPointer table.

If users have created custom columns on the ActivityPointer table while the bug was active, they will notice the following behaviors:

  • Attempting to create a new custom column on the ActivityPointer table will fail.
  • Importing a solution that includes a custom column on the ActivityPointer table will fail.

Call to Action:

If you have an environment that includes these columns, you will need to take some action to resolve them.

Importing Solution Containing Custom Column in ActivityPointer is blocked

If a solution contains custom columns on the ActivityPointer table it will be blocked from import. The following error will be provided:

The evaluation of the current component (name=Attribute, id={guid}) in the current operation (Create) failed during managed property evaluation of condition: Managed Property Name: iscomponentcreationenabled; Component Name: Attribute;

To resolve this issue, go to the source environment of the solution and delete all the custom columns from ActivityPointer table, and then export solution again. If you do not own the solution, the solution publisher will need to fix and provide a new solution.

Clean Up Custom Columns on ActivityPointer

As part of the bug fix, Microsoft will run a job to remove all custom columns from unmanaged ActivityPointer tables. The ActivityPointer table does not store any data, so removing custom columns is nondestructive. Removing the column from the ActivityPointer table will not remove the cloned columns on the activities that store data.

If the custom columns were introduced by a managed solution import, those columns will not be deleted automatically. Customers need to follow below steps to delete them

  1. Remove custom attribute from the solution in the source organization.
  2. Export the updated solution as an incremented version.
  3. Import the solution into target organization with ‘Upgrade’ option.

If the user does not own the solution, the solution publisher will need to fix and provide a new solution.

Clean Up Inherited Custom Columns From Individual Activity Tables

If custom columns were added to the Activity Pointer table, any activities added after the change will include the inherited custom columns. Users can choose to keep the columns on the Activity including their data, so long as the columns are removed from the ActivityPointer table.

If the custom activity was created using a Power Apps client UI or the import of an unmanaged solution, the custom columns cloned from ActivityPointer will be unmanaged. These columns can continue to be used on the Activity, or the user can choose to remove them if they no longer need them.

If the custom activity was created by importing a managed solution, the custom columns inherited from ActivityPointer are created on a managed solution layer even though they were not included in the custom activity initially.

Since these columns were not intended to be introduced by solutions, they need to be cleaned up by upgrading the managed solutions. If these columns are required by the target organization, customers should go to source organization and include all the required custom columns of individual activities in the solution and upgrade the solution in the target organization.

Example:

  • Solution 1.0.0.0 Includes the ActivityPointer table with a new column named: ‘Likes’.
  • The user imports solution 1.0.0.1 which does not have the ActivityPointer table but it includes a new activity: ‘BlogPost’.
  • Upon import of Solution 1.0.0.1, ‘BlogPost’ will inherit ‘Likes’.

Users will need to fix Solution 1.0.0.0 to remove ‘Likes’ from the ActivityPointer table.

If users want to keep the ‘Likes’ column on ‘BlogPost’, they should update Solution 1.0.0.1 to include the ‘Likes’ column as part of ‘BlogPost’.