Recently an issue was reported about count mismatches in SharePoint 2013 Communities. The number of replies in category tiles sometimes is different compared to the community stats in the web part called “What’s happening”. The actual number of replies is 1 in the figure below. The user who has reported has tried to add, update and delete discussions and replies.
I have invested some time debugging this issue. It would be pity to not share my findings. Well the first thing to do was to determine the type name for the “What’s happening” web part. To do so just edit the page and export the web part. In the exported .webpart file I saw that the type was Microsoft.SharePoint.Portal.WebControls.DashboardWebPart.
With that knowledge it is time to open ILSpy, an awesome and free(!) assembly browser and decompiler. Load the “Microsoft.SharePoint.Portal” assembly from GAC into ILSpy. Then use F3 to search for DashboardWebPart:
The number of replies is retrieved from SPWeb.AllProperties:
If the Property Bag does not contain it, it gets the number of replies from the list. The formula is as follows:
list.ItemCount - list.RootFolder.ItemCount
It means that it gets the number of both discussions and replies: ItemCount of Discusssions List. The number of Discussions is determined by the ItemCount in the RootFolder of the Discussions List. Discussions are List Items in the RootFolder (num2 in the figure below). Replies are saved in the subfolders, every discussion gets an own folder. The number of all replies are num3 in the figure below.
After checking the web properties I could see that the number of replies there were wrong: 2.
The next step was to determine where and when the Web Properties are updated. The first guess every SharePoint Developer has in such cases is an EventReceiver. Here are all EventReceivers connected to the Discussions List:
$list.EventReceivers | select class, Type, Synchronization | Out-GridView
Allright, CommunityEventReceiver then:
Found where the actual update happens: CommunityUtils.UpdateWebIndexedPropertyBag
The method is used in DiscussionListCommunityEventHandler.HandleEvent
There is a flag, flag5 that is used to determine if the Web Properties should be updated:
But the flag5 is not true on Delete operations in some code flows:
That’s it. So deleting a reply will not have any effect on “What’s happening”. But adding a new discussion will also update the stats:
To summarize the debug session, there is an issue in the OOB code that misses to update community stats when deleting a discussion or a reply. Adding a new discussion, or a reply will synchronize the stats.