/// <summary> /// Add table to search index /// </summary> /// <param name="dbType">Type of database</param> /// <param name="item">TableLink object representing the table</param> /// <param name="path">Path to table within database</param> /// <param name="writer">IndexWriter object</param> private void IndexTable(PCAxis.Web.Core.Enums.DatabaseType dbType, TableLink item, string path, IndexWriter writer) { item.ID.Selection = CleanTableId(item.ID); PXModel model = PxModelManager.Current.GetModel(dbType, _database, _language, item.ID); if (model != null) { string id; string tablePath; string table = ""; string title = ""; DateTime published = DateTime.MinValue; if (dbType == DatabaseType.PX) { char[] sep = { '\\' }; string[] parts = item.ID.Selection.Split(sep, StringSplitOptions.RemoveEmptyEntries); StringBuilder pxPath = new StringBuilder(); // PX database id = item.ID.Selection; for (int i = 0; i < parts.Length - 1; i++) { if (i > 0) { pxPath.Append("/"); } pxPath.Append(parts[i]); } tablePath = pxPath.ToString(); table = parts.Last(); title = item.Text; if (((TableLink)item).Published != null) { published = (DateTime)((TableLink)item).Published; } } else { // CNMM database id = item.ID.Selection; tablePath = path; table = item.ID.Selection; title = item.Text; if (((TableLink)item).Published != null) { published = (DateTime)((TableLink)item).Published; } } AddPaxiomDocument(writer, _database, id, tablePath, table, title, published, model.Meta); } }
/// <summary> /// Recursively traverse the database to add all tables as Document objects into the index /// </summary> /// <param name="itm">Current node in database to add Document objects for</param> /// <param name="writer">IndexWriter object</param> /// <param name="path">Path within the database for this node</param> private void TraverseDatabase(PCAxis.Web.Core.Enums.DatabaseType dbType, PxMenuItem itm, IndexWriter writer, string path) { PCAxis.Menu.Item newItem; PCAxis.Menu.PxMenuBase db = _menuMethod(_database, itm.ID, _language, out newItem); PxMenuItem m = (PxMenuItem)newItem; if (m == null) { return; } foreach (var item in m.SubItems) { if (item is PxMenuItem) { TraverseDatabase(dbType, item as PxMenuItem, writer, path + "/" + item.ID.Selection); } else if (item is TableLink) { IndexTable(dbType, (TableLink)item, path, writer); } } }