Ejemplo n.º 1
0
 public FilterParamList(MEDMDefClass dc, XmlNode xrequest)
 {
     foreach (XmlNode xparam in xrequest.SelectNodes("descendant::param"))
     {
         string[] nn = XFunc.GetAttr(xparam, "name", "").Split('.');
         string   n  = nn[0];
         string   m  = "";
         if (nn.Length > 1)
         {
             if (nn[0].ToLower() == "filter")
             {
                 n = nn[nn.Length - 1];
                 if (nn.Length == 3)
                 {
                     m = nn[1].ToLower();
                 }
             }
             if (nn[0].ToLower() == "paginator")
             {
                 n = nn[nn.Length - 1];
                 if (n.ToLower() == "top")
                 {
                     Top = MFunc.StringToInt(XFunc.GetText(xparam, ""), 0);
                     continue;
                 }
             }
         }
         MEDMDefProperty dp = dc.Properties[n];
         if (dp != null)
         {
             object v = dp.ConvertToPropertyType(XFunc.GetText(xparam, ""));
             Add(new FilterParam(n, m, v));
         }
     }
 }
Ejemplo n.º 2
0
        private int GetLen(MEDMDefProperty dp)
        {
            return(dp.Length);

            /*
             * if (dp.Length > 0) return dp.Length;
             * switch (dp.GetDataTypeFor740())
             * {
             *  case "num":
             *      return 10;
             *  case "date":
             *      return 10;
             * }
             * return dp.Header.Length + 1;
             */
        }
Ejemplo n.º 3
0
        protected override void RunRefreshSelect(List <MObj> list, MEDMDefClass dc, string name, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            FilterParamList l = new FilterParamList(dc, xrequest);

            object[] parms = new object[l.Count * 2 + 2];
            string   t     = l.Top > 0 ? "top " + l.Top.ToString():"";
            string   sql   = $"select {t} * from [{dc.Name}] (nolock) where id!=@p0";

            parms[0] = "p0";
            parms[1] = dc.GetIdPropery().GetDefaultValue();
            for (int i = 0; i < l.Count; i++)
            {
                switch (l[i].Mode)
                {
                case "":
                case "eq":
                    sql += $" and ( [{l[i].Name}]=@p{i + 1})";
                    break;

                case "ne":
                    sql += $" and ( [{l[i].Name}]!=@p{i + 1})";
                    break;

                case "eqornone":
                    sql += $" and ( [{l[i].Name}]=@p{i + 1} or  [{l[i].Name}]=@p0)";
                    break;
                }
                parms[(i + 1) * 2]     = $"p{i + 1}";
                parms[(i + 1) * 2 + 1] = l[i].Value;
            }
            {
                MEDMDefProperty dp = dc.Properties.Find(p => p.Name.ToLower() == "name");
                if (dp == null)
                {
                    dp = dc.Properties.Find(p => p.Name.ToLower().EndsWith("name"));
                }
                if (dp == null)
                {
                    dp = dc.Properties.Find(p => p.Name.ToLower().Contains("name"));
                }
                if (dp != null)
                {
                    sql += $" order by [{dp.Name}]";
                }
            }
            model.Select(list, dc.GetClassType(), sql, parms);
        }
Ejemplo n.º 4
0
        protected override void RunJoin(string name, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            MEDMDefClass dc = MEDMDefModel.MainDef.Find(name);

            if (dc == null)
            {
                throw new Exception($"Нет описателя класса соответстующго имени {name}");
            }
            MEDMDefProperty dp = dc.GetIdPropery();
            List <Guid>     l  = MarkId <Guid>(Session.GetString(MarkKey(xrequest)), name.ToLower());

            if (l.Count > 0)
            {
                object id = M740.GetParam(dp.GetPropertyType(), xrequest, "id", "");
                if (id != dp.GetDefaultValue())
                {
                    string sql = "";
                    foreach (MEDMDefClass dc1 in MEDMDefModel.MainDef.AllClasses)
                    {
                        foreach (MEDMDefProperty dp1 in dc1.Properties)
                        {
                            if (dp1.RefClass == dc)
                            {
                                sql += $"update [{dc1.Name}] set [{dp1.Name}]=@p0 where CountryPresentingDemandId=@p1\r\n";
                            }
                        }
                    }
                    sql += $"delete [{name}] where Id=@p1\r\n";

                    foreach (object joinid in l)
                    {
                        if (joinid != dp.GetDefaultValue() && joinid != id)
                        {
                            model.Exec(sql, "p0", id, "p1", joinid);
                        }
                    }
                    RunMarkClear(name, model, xrequest, xresponse);
                    XFunc.SetAttr(xresponse, "exec", "refresh");
                }
            }
            else
            {
                throw new Exception($"Нет омеченных элементов");
            }
        }