示例#1
0
        protected override void RunDelete(string name, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            MEDMDefClass dc = MEDMDefModel.MainDef.Find(name);

            if (dc != null)
            {
                if (dc.BaseClass == "MEDMObj")
                {
                    Type t = dc.GetClassType();
                    if (t != null)
                    {
                        string id = XFunc.GetAttr(xrequest, "id", "");
                        if (id == "")
                        {
                            throw new Exception("В параметрах запроса отсутствует id");
                        }
                        MEDMObj obj = model.MainDic.GetObj(t, id);
                        if (obj == null)
                        {
                            throw new Exception($"Не удалось создать объект типа {t}. Удаление невозможно.");
                        }
                        model.DeleteObject(obj);
                        model.Save(Session);
                    }
                }
                else
                {
                    throw new Exception($"Для автоматической генерации Delete класс источника данных {name} должен быть порожден от MEDMObj");
                }
            }
        }
示例#2
0
        protected void Refresh(string name, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            if (name == "empty")
            {
                XmlNode xrow = XFunc.Append(xresponse, "row", "id", "0");
                return;
            }
            MEDMDefClass dc = MEDMDefModel.MainDef.Find(name);

            if (dc != null)
            {
                if (dc.BaseClass == "MEDMObj")
                {
                    Type t = dc.GetClassType();
                    if (t != null)
                    {
                        List <MObj> list = new List <MObj>();
                        if (dc.ClassType == "edm")
                        {
                            RunRefreshSelect(list, dc, name, model, xrequest, xresponse);
                        }
                        else if (dc.ClassType == "session")
                        {
                            MObj o = model.CreateObject(t, Session.Id.ToString());
                            list.Add(o);

                            /* Если объекты хранятся в кеше то в сессии их запоминать не к чему
                             * string id = XFunc.GetText(xrequest.SelectSingleNode("param[@name='id']"), Session.Id);
                             * model.SelectFromXML(list, t, Session.GetString(name), id);
                             * if (list.Count == 0)
                             * {
                             *  MObj o = model.CreateObject(t, Session.Id.ToString());
                             *  list.Add(o);
                             *  model.Save(Session);
                             * }
                             */
                        }
                        else
                        {
                            throw new Exception($"Для автоматической генерации Refresh тип источника данных {dc.ClassType} не определен или задан неправильно.");
                        }
                        PutRefreshResult(list, dc, name, model, xrequest, xresponse);
                    }
                }
                else
                {
                    throw new Exception($"Для автоматической генерации Refresh класс источника данных {name} должен быть порожден от MEDMObj");
                }
            }
            else
            {
                List <MObj> list = new List <MObj>();
                RunRefreshSelect(list, dc, name, model, xrequest, xresponse);
                PutRefreshResult(list, dc, name, model, xrequest, xresponse);
            }
        }
示例#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);
        }
示例#4
0
        protected XmlNode RefreshRow(string name, object id, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            XmlNode      xrow = null;
            MEDMDefClass dc   = MEDMDefModel.MainDef.Find(name);

            if (dc != null)
            {
                if (dc.BaseClass == "MEDMObj")
                {
                    Type t = dc.GetClassType();
                    if (t != null)
                    {
                        List <MObj> list = new List <MObj>();
                        if (dc.ClassType == "edm")
                        {
                            model.Select(list, t, $"select * from [{dc.Name}] (nolock) where id!=@p1 and id=@p2", "p1", dc.GetIdPropery().GetDefaultValue(), "p2", id);
                        }
                        else if (dc.ClassType == "session")
                        {
                            MObj o = model.CreateObject(t, Session.Id.ToString());
                            list.Add(o);

                            /* Если объекты хранятся в кеше то в сессии их запоминать не к чему
                             * model.SelectFromXML(list, t, Session.GetString(name), id);
                             */
                        }
                        else
                        {
                            throw new Exception($"Для автоматической генерации RefreshRow тип источника данных {dc.ClassType} не определен или задан неправильно.");
                        }
                        PutRefreshResult(list, dc, name, model, xrequest, xresponse);
                    }
                }
                else
                {
                    throw new Exception($"Для автоматической генерации RefreshRow класс источника данных {name} должен быть порожден от MEDMObj");
                }
            }
            return(xrow);
        }
示例#5
0
        protected override void RunSave(string name, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            MEDMDefClass dc = MEDMDefModel.MainDef.Find(name);

            if (dc != null)
            {
                if (dc.BaseClass == "MEDMObj")
                {
                    Type t = dc.GetClassType();
                    if (t != null)
                    {
                        string id = XFunc.GetAttr(xrequest, "id", "");
                        if (id == "")
                        {
                            throw new Exception("В параметрах запроса отсутствует id");
                        }
                        MEDMObj obj = model.MainDic.GetObj(t, id);
                        if (obj == null)
                        {
                            throw new Exception($"Не удалось создать объект типа {t}. Сохранить изменения невозможно.");
                        }
                        foreach (XmlNode xparam in xrequest.ChildNodes)
                        {
                            if (xparam.Name == "param")
                            {
                                obj.SetStringValue(XFunc.GetAttr(xparam, "name", ""), xparam.InnerText);
                            }
                        }
                        model.Save(Session);
                        RefreshRow(name, id, model, xrequest, xresponse);
                    }
                }
                else
                {
                    throw new Exception($"Для автоматической генерации Save класс источника данных {name} должен быть порожден от MEDMObj");
                }
            }
        }
示例#6
0
        protected override void RunAppend(string name, MEDMSql model, XmlNode xrequest, XmlNode xresponse)
        {
            MEDMDefClass dc = MEDMDefModel.MainDef.Find(name);

            if (dc != null)
            {
                if (dc.BaseClass == "MEDMObj")
                {
                    Type t = dc.GetClassType();
                    if (t != null)
                    {
                        FilterParamList l   = new FilterParamList(dc, xrequest);
                        MEDMObj         obj = model.CreateObject(t, null);
                        model.Save(Session);
                        foreach (FilterParam fp in l)
                        {
                            obj.SetValue(fp.Name, fp.Value);
                        }
                        model.Save(Session);
                        if (obj != null)
                        {
                            XmlNode xrow = RefreshRow(name, obj.GetId(), model, xrequest, xresponse);
                            if (xrow != null)
                            {
                                XFunc.SetAttr(xrow, "row.destmode", "after");
                                XFunc.SetAttr(xrow, "row.destid", XFunc.GetAttr(xrequest, "id", ""));
                            }
                        }
                    }
                }
                else
                {
                    throw new Exception($"Для автоматической генерации Append класс источника данных {name} должен быть порожден от MEDMObj");
                }
            }
        }