internal static void ExportCursor(string categoryName, IEnumerable <ICursorFilter> filters, string[] fieldNames, IEnumerable <ConnectedField> connectedFields, string path, IExportSettings options)
        {
            // we got fieldnames, so we have to create a custom cursor
            using (var db = new CommenceDatabase())
                using (var cur = db.GetCursor(categoryName))
                {
                    if (fieldNames != null && fieldNames.Any())
                    {
                        cur.Columns.AddDirectColumns(fieldNames);
                    }
                    // in this case the cursor will hold all columns, because non was exlicitly specified
                    // we need to explicitly clear it
                    // in this case we will do so by adding the Name field
                    else
                    {
                        cur.Columns.AddDirectColumn(db.GetNameField(categoryName));
                    }

                    if (connectedFields != null)
                    {
                        foreach (var cf in connectedFields)
                        {
                            cur.Columns.AddRelatedColumn(cf.ConnectionName, cf.ToCategory, cf.FieldName);
                        }
                    }
                    cur.Columns.Apply();

                    if (filters != null)
                    {
                        foreach (var f in filters)
                        {
                            cur.Filters.Add(f);
                        }
                        cur.Filters.Apply();
                    }
                    cur.ExportToFile(path, options);
                }
        }
Example #2
0
        private IList <ConnectedItem> PopulateConnectedItemNamesList(string searchString)
        {
            IList <ConnectedItem> retval = new List <ConnectedItem>();

            if (string.IsNullOrEmpty(this.SelectedConnectedCategory))
            {
                return(retval);
            }

            using (ICommenceDatabase db = new CommenceDatabase())
            {
                using (ICommenceCursor cur = db.GetCursor(this.SelectedConnectedCategory))
                {
                    string nameField = db.GetNameField(this.SelectedConnectedCategory);
                    var    columns   = this.CategoryDefinition.Clarified
                        ? new[] { nameField, this.CategoryDefinition.ClarifyField }
                        : new[] { nameField };
                    if (!cur.SetColumns(columns))
                    {
                        return(retval);
                    }                                                // something went wrong bad
                    var number = cur.RowCount;
                    if (string.IsNullOrEmpty(searchString))
                    {
                        if (number == 0)
                        {
                            retval.Add(new ConnectedItem("(No items to display)", null, null, null));
                            return(retval);
                        }
                        else if (number < 1000)
                        {
                            return(GetConnectedItems(cur).ToList());
                        }
                        else
                        {
                            retval.Add(new ConnectedItem("(Too many items to display.)", null, null, null));
                            return(retval);
                        }
                    }
                    else
                    {
                        CursorFilterTypeF f = cur.Filters.Create(1, FilterType.Field);
                        f.FieldValue = this.ConnectedItemSearchString;
                        f.FieldName  = nameField;
                        f.Qualifier  = FilterQualifier.Contains;
                        int count = cur.Filters.Apply();
                        if (count > 1000)
                        {
                            retval.Add(new ConnectedItem("(Too many items to display)", null, null, null));
                            return(retval);
                        }
                        else if (count == 0)
                        {
                            retval.Add(new ConnectedItem($"(No items contain '{ this.ConnectedItemSearchString }')", null, null, null));
                            return(retval);
                        }
                        else
                        {
                            return(GetConnectedItems(cur).ToList());
                        }
                    }
                }
            }
        }
Example #3
0
        private void SetPropertiesByView(string viewName)
        {
            // if we have just a view, everything changes
            // we need to create the fieldnames and the connected fields from the columns in the view.
            // This is non-trivial, because of the mess Commence makes with representing rlated columns.
            // for some viewtypes it is '%%', for others it is a space.
            IEnumerable <ICommenceConnection> connNames;
            IEnumerable <string>  viewColumns;
            List <string>         directColumns    = new List <string>();
            List <ConnectedField> connectedColumns = new List <ConnectedField>();

            using (var db = new CommenceDatabase())
                using (var cur = db.GetCursor(viewName, CmcCursorType.View, CmcOptionFlags.Default))
                {
                    connNames   = db.GetConnectionNames(cur.Category);
                    viewColumns = db.GetViewColumnNames(viewName);
                    // loop through all columns to determine if they are a direct field or a connection
                    foreach (var vc in viewColumns)
                    {
                        if (vc.Contains(connDelim))
                        {
                            string[] cc = vc.Split(new string[] { connDelim }, StringSplitOptions.None);
                            if (cc.Length == 3)
                            {
                                connectedColumns.Add(new ConnectedField(cc[0], cc[1], cc[2]));
                            }
                        }
                        else if (vc.Contains(' '))
                        {
                            foreach (ICommenceConnection c in connNames)
                            {
                                if (vc.StartsWith(c.Name) && vc.EndsWith(c.ToCategory) &&
                                    vc.Length == c.Name.Length + c.ToCategory.Length + 1)
                                {
                                    connectedColumns.Add(new ConnectedField(c.Name, c.ToCategory, db.GetNameField(c.ToCategory)));
                                    break;
                                }
                            }
                        }
                        else // a direct column
                        {
                            directColumns.Add(vc);
                        }
                    }
                    FieldNames      = directColumns?.ToArray();
                    ConnectedFields = connectedColumns?.ToArray();
                }
        }