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"); } } }
public virtual object Save(MEDM model, string path, string parms) { IFormCollection f = Context.Request.Form; string n = f["_name"]; string t = f["_type"]; Type type = model.GetClassTypeByClassName(t); if (type == null) { type = model.GetClassTypeByClassName(n); } if (type == null) { throw (new Exception($"Запись изменений. Тип данных не найден ({t}/{n}) ...")); } string id = f["_id"]; if (string.IsNullOrEmpty(id)) { id = f["id"]; } switch (f["webix_operation"]) { case "insert": { MEDMObj o = model.CreateObject(type); // MainDic.NewObj(type, null); if (o == null) { throw (new Exception($"Запись изменений. Операция insert. Объект не создан (id={id})...")); } foreach (KeyValuePair <string, StringValues> kv in f) { if (!kv.Key.StartsWith("_") && !kv.Key.StartsWith("webix_")) { o.SetStringValue(kv.Key, kv.Value, true); } } model.Save(Context.Session); return(o); } case "update": { if (string.IsNullOrEmpty(id)) { throw (new Exception($"Запись изменений. Id не задан ...")); } model.LockUpdates++; MEDMObj o = null; try { o = model.MainDic.GetObj(type, id); } finally { model.LockUpdates--; } //Старый вариант с общим кешем //MEDMObj o = model.MainDic.FindObj(type, id); //if (o==null) throw (new Exception($"Запись изменений. Операция update. Объект не найден (id={id})...")); foreach (KeyValuePair <string, StringValues> kv in f) { if (kv.Key != "id" && !kv.Key.StartsWith("_") && !kv.Key.StartsWith("webix_")) { o.SetStringValue(kv.Key, kv.Value[0], true); } } model.Save(Context.Session); return(o); } case "delete": { if (string.IsNullOrEmpty(id)) { throw (new Exception($"Запись изменений. Id не задан ...")); } MEDMObj o = model.MainDic.GetObj(type, id); if (o == null) { throw (new Exception($"Запись изменений. Операция delete. Объект не найден (id={id})...")); } model.DeleteObject(o); model.Save(Context.Session); return(o); } case "move": break; default: { throw (new Exception($"Запись изменений. Операция \"{f["webix_operation"]}\" не определена...")); } break; } return(null); }