/// <summary> /// Парсинг элемента (input/select) в FieldPackage /// </summary> /// <param name="label">Классификатор поля</param> /// <param name="element">Элемент для парсинга</param> /// <returns></returns> public override FieldPackage Parse(string label, HtmlElement element) { FieldPackage result = null; DCT.Execute(data => { if (element.TagName.ToLower() == "select" || element.TagName.ToLower() == "input") { var optionList = new List <OptionTag>(); if (element.TagName.ToLower() == "select" && !dynamicSelects.Contains(label)) { var options = element.Children; foreach (HtmlElement o in options) { var oValue = o.GetAttribute("value"); var oText = o.InnerText; optionList.Add(OptionTag.Create(oValue, oText)); } } var id = element.GetAttribute("id"); if (!string.IsNullOrEmpty(id)) { result = FieldPackage.Create(id, element.TagName.ToLower(), true, optionList.ToArray()); } else { var name = element.GetAttribute("name"); result = FieldPackage.Create(name, element.TagName.ToLower(), false, optionList.ToArray()); } } }); return(result); }
public static Dictionary <string, FieldPackage> GetAccessFields(Guid instanceId) { Dictionary <string, FieldPackage> result = new Dictionary <string, FieldPackage>(); BCT.Execute(d => { var dbInstance = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.Id == instanceId); var groupId = dbInstance.GroupId; var groupedFields = d.BulletinDb.GroupedFields.Where(q => q.GroupId == groupId).ToArray(); foreach (var gf in groupedFields) { var accessId = gf.HtmlId; var fieldId = gf.FieldId; var dbField = d.BulletinDb.FieldTemplates.FirstOrDefault(q => q.Id == fieldId); var name = dbField.Name; var tag = dbField.Tag; var hasId = dbField.Attribute == "id"; var options = d.BulletinDb.SelectOptions.Where(q => q.GroupedFieldId == gf.Id).ToArray(); var optionTags = new List <OptionTag>(); foreach (var o in options) { var optionTag = OptionTag.Create(o.Code, o.Name); optionTags.Add(optionTag); } if (!result.ContainsKey(name)) { result.Add(name, FieldPackage.Create(accessId, tag, hasId, optionTags.ToArray())); } } }); return(result); }
///------------------------------------------------------------------------------------------------- /// <summary> Получаем пакет группы с полям </summary> /// /// <remarks> SV Milovanov, 02.02.2018. </remarks> /// /// <param name="hash"> Хэш группы </param> /// /// <returns> Пакет группы (сигнатура + словарь полей) </returns> ///------------------------------------------------------------------------------------------------- public override GroupPackage GetGroupPackage(string hash) { GroupPackage result = null; DCT.Execute(data => { var dbGroup = data.Db1.Groups.FirstOrDefault(q => q.Hash == hash); if (dbGroup != null) { var groupSignature = GetGroupSignature(hash); var groupedFields = data.Db1.GroupedFields.Where(q => q.GroupId == dbGroup.Id).AsEnumerable(); var fieldTemplates = data.Db1.FieldTemplates.Where(q => groupedFields.Select(qq => qq.FieldId).Contains(q.Id)).AsEnumerable() .Select(q => new { htmlId = groupedFields.FirstOrDefault(qq => qq.FieldId == q.Id).HtmlId, package = q, groupedId = groupedFields.FirstOrDefault(qq => qq.FieldId == q.Id).Id }).ToArray(); var optionTags = data.Db1.SelectOptions.Where(q => groupedFields.Select(qq => qq.Id).Contains(q.GroupedFieldId)).AsEnumerable(); result = new GroupPackage { Fields = fieldTemplates.ToDictionary(q1 => q1.package.Name, q2 => FieldPackage.Create(q2.htmlId, q2.package.Tag, q2.package.Attribute == "id", optionTags.Where(q => q.GroupedFieldId == q2.groupedId).Select(q => OptionTag.Create(q)).ToArray())), Categories = groupSignature.GetCategories(), }; } }); return(result); }