예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
                }
            }
        }