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"); } } }
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); } }
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); }
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); }
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"); } } }
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"); } } }