コード例 #1
0
 public static GroupPermission GetByName(string name, PermissionType type)
 {
     using (var query = new QQuery(DBTable))
     {
         query.BuildParam(ObjectNameKey, name);
         query.BuildParam(TypeKey, type);
         return(DBTable.Select(query).FirstOrDefault());
     }
 }
コード例 #2
0
        public void RefreshLogs()
        {
            QQuery query = new QQuery(string.Empty, (DBTable)Row.Table.LogTable);

            query.BuildParam(Row.Table.LogTable.BaseKey, CompareType.Equal, row.PrimaryId);
            query.BuildParam(Row.Table.LogTable.StatusKey, CompareType.Equal, (int)DBStatus.New);
            Logs.AddRange(Row.Table.LogTable.LoadItems(query, DBLoadParam.Load | DBLoadParam.Synchronize).Cast <DBLogItem>());

            RefreshChanges();
        }
コード例 #3
0
        public ActionResult <IEnumerable <L> > GetItemLogs([FromRoute] K id)
        {
            try
            {
                var logTable = table.LogTable;
                var user     = CurrentUser;
                if (!table.Access.GetFlag(AccessType.Read, user))
                {
                    return(Forbid());
                }
                using (var query = new QQuery((DBTable)logTable))
                {
                    query.BuildParam(logTable.BaseKey, id);

                    return(new ActionResult <IEnumerable <L> >(logTable.LoadItems(query, DBLoadParam.None)
                                                               .Where(p => p.Access.GetFlag(AccessType.Read, user) &&
                                                                      p.PrimaryId != null &&
                                                                      (p.UpdateState & DBUpdateState.Insert) == 0)
                                                               .TypeOf <L>()));
                };
            }
            catch (Exception ex)
            {
                return(BadRequest(ex, null));
            }
        }
コード例 #4
0
        public override async Task <bool> SaveItem(DBItem item, DBTransaction transaction)
        {
            if ((item.UpdateState & DBUpdateState.Delete) == DBUpdateState.Delete &&
                item is DBLogItem logItem && FileLOBKey is DBLogColumn logColumn)
            {
                var lob     = item.GetValue <uint?>(logColumn);
                var current = logItem.BaseItem?.GetValue <uint?>(logColumn.BaseColumn);
                if (lob != null && lob != current)
                {
                    var qquery = new QQuery(this);
                    qquery.BuildParam(FileLOBKey, lob);
                    if (!Load(qquery).Any(p => p != item))
                    {
                        try
                        {
                            using (var transactionDeleteLOB = new DBTransaction(transaction.DbConnection, transaction.Caller))
                            {
                                await System.DeleteLOB(lob.Value, transactionDeleteLOB);

                                transactionDeleteLOB.Commit();
                            }
                        }
                        catch (Exception ex)
                        {
                            Helper.OnException(ex);
                        }
                    }
                }
            }
            return(await base.SaveItem(item, transaction));
        }
コード例 #5
0
        private void LoadTable(DBTable table)
        {
            rows.Clear();
            wait.Reset();
            string filter = table.GetStatusParam(DBStatus.New | DBStatus.Edit | DBStatus.Delete).Format();

            if (!wait.WaitOne(0))
            {
                foreach (DBItem row in table.LoadItems("where " + filter))
                {
                    if (wait.WaitOne(0))
                    {
                        break;
                    }

                    if (rows.Find("Row", CompareType.Equal, row) == null)
                    {
                        try
                        {
                            rows.Add(new LogMap(row));
                        }
                        catch
                        {
                        }
                    }
                }
            }
            using (QQuery qdelete = new QQuery("", (DBTable)table.LogTable))
            {
                qdelete.BuildParam(table.LogTable.ElementTypeKey, CompareType.Equal, DBLogType.Delete);
                qdelete.BuildParam(table.LogTable.StatusKey, CompareType.Equal, DBStatus.New);
                foreach (DBLogItem log in table.LogTable.LoadItems(qdelete, DBLoadParam.Synchronize))
                {
                    LogMap change = new LogMap {
                        Table = table
                    };
                    //change.Logs.Add(log);
                    change.RefreshChanges();
                    rows.Add(change);
                }
            }
            //wait.Set();
            rows.OnCollectionChanged(NotifyCollectionChangedAction.Reset);
        }
コード例 #6
0
        public virtual void UpdateFilter()
        {
            if (mode == DataLogMode.None || Table == null || Table.LogTable == null)
            {
                return;
            }
            if ((Mode == DataLogMode.Default || mode == DataLogMode.Document) && filter == null)
            {
                return;
            }
            var interval = Date == null ? new DateInterval(DateTime.Today) : Date;

            interval.Max = interval.Max.AddDays(1);
            list.ListSource.Clear();
            toolProgress.Visible = true;
            Task.Run(() =>
            {
                var logTable = filter?.Table.LogTable ?? Table?.LogTable;
                using (var query = new QQuery("", (DBTable)logTable))
                {
                    if (Mode == DataLogMode.Default || mode == DataLogMode.Document)
                    {
                        query.BuildParam(logTable.BaseKey, CompareType.Equal, filter.PrimaryId).IsDefault = true;
                    }
                    if (Date != null)
                    {
                        query.BuildParam(logTable.DateKey, CompareType.Between, interval);
                    }
                    foreach (DBLogItem item in logTable.LoadItems(query))
                    {
                        list.ListSource.Add(item);
                    }
                }
                if (mode == DataLogMode.Document)
                {
                    foreach (var refed in filter.Table.GetChildRelations())
                    {
                        if (refed.Table.LogTable == null ||
                            refed.Table is IDBVirtualTable ||
                            (Table != filter.Table && refed.Table != Table))
                        {
                            continue;
                        }

                        using (var query = new QQuery("", (DBTable)refed.Table.LogTable))
                        {
                            query.BuildParam(refed.Table.LogTable.GetLogColumn(refed.Column), CompareType.Equal, filter.PrimaryId);
                            if (Date != null)
                            {
                                query.BuildParam(refed.Table.LogTable.DateKey, CompareType.Between, interval);
                            }
                            foreach (DBLogItem item in refed.Table.LogTable.LoadItems(query))
                            {
                                list.ListSource.Add(item);
                            }
                        }
                    }
                }
                Application.Invoke(() => toolProgress.Visible = false);
            }).ConfigureAwait(false);
        }
コード例 #7
0
ファイル: DBTableView.cs プロジェクト: radtek/datawf
        private void CheckFilterQuery()
        {
            ClearFilter();

            foreach (var filter in FilterQuery.Parameters)
            {
                if (filter.Invoker == null ||
                    filter.Value == null ||
                    filter.Value == DBNull.Value ||
                    filter.Value.ToString().Length == 0)
                {
                    if (filter.Comparer.Type != CompareTypes.Is)
                    {
                        continue;
                    }
                }
                var pcolumn = filter.Invoker as DBColumn;

                if (filter.Invoker.Name == nameof(Object.ToString))
                {
                    Query.SimpleFilter(filter.Value as string);
                }
                else if (pcolumn != null)
                {
                    string code  = pcolumn.Name;
                    QParam param = new QParam()
                    {
                        Column   = pcolumn,
                        Logic    = filter.Logic,
                        Comparer = filter.Comparer,
                        Value    = filter.Comparer.Type != CompareTypes.Is ? filter.Value : null
                    };
                    if (param.Value is string && param.Comparer.Type == CompareTypes.Like)
                    {
                        string s = (string)param.Value;
                        if (s.IndexOf('%') < 0)
                        {
                            param.Value = string.Format("%{0}%", s);
                        }
                    }
                    int i = code.IndexOf('.');
                    if (i >= 0)
                    {
                        int    s           = 0;
                        QQuery sexpression = Query;
                        QQuery newQuery    = null;
                        while (i > 0)
                        {
                            string iname = code.Substring(s, i - s);
                            if (s == 0)
                            {
                                var pc = table.Columns[iname];
                                if (pc != null)
                                {
                                    iname = pc.Name;
                                }
                            }
                            var c = sexpression.Table.Columns[iname];
                            if (c.IsReference)
                            {
                                newQuery = new QQuery(string.Empty, c.ReferenceTable);
                                sexpression.BuildParam(c, CompareType.In, newQuery);
                                sexpression = newQuery;
                            }
                            s = i + 1;
                            i = code.IndexOf('.', s);
                        }
                        newQuery.Parameters.Add(param);
                    }
                    else
                    {
                        Query.Parameters.Add(param);//.BuildParam(col, column.Value, true);
                    }
                }
                else
                {
                    var param = new QParam()
                    {
                        ValueLeft = new QReflection(filter.Invoker),
                        Logic     = filter.Logic,
                        Comparer  = filter.Comparer,
                        Value     = filter.Comparer.Type != CompareTypes.Is ? filter.Value : null
                    };
                    Query.Parameters.Add(param);
                }
            }
        }