/// <summary> /// Execute re-counting of categories. /// </summary> private void RecountCategories() { this.oLogger.Output(CAT("<br/>", EOL, "Recount categories ... ")); var doCategory = new DOCategory(this.context.Connection); var doItem = new DOItem(this.context.Connection); var dsCategories = doCategory.EnumCategories(); for (int n = 0; n < dsCategories.GetSize(); n++) { var oCategory = dsCategories.GetRow(n); var categoryId = STR(oCategory["s_CatId"]); var oldCounter = INT(oCategory["i_Counter"]); //String filter = STR(oCategory["s_Filter"]); //String sqlFilter = DOItem.BuildSqlByFilter(filter); var categoryName = STR(oCategory["s_Name"]); var sqlFilter = DOItem.BuildSqlByCategory(categoryName); var dsCounters = doItem.EnumIds(CAT("_this.b_Counted = 0 AND ", sqlFilter)); if (dsCounters.GetSize() == 0) { continue; } var newCounter = INT(dsCounters.GetSize()); //Update category var categoryFields = new THashtable(); categoryFields["i_Counter"] = oldCounter + newCounter; doCategory.UpdateById(categoryId, categoryFields); } doItem.Update("_this.b_Counted = 1", "_this.b_Counted = 0"); this.oLogger.Output(CAT(" ... Done<br/>", EOL)); }