private void Detection(WorkflowProcessModule ProcessInfo, CheckResult result) { if (string.IsNullOrEmpty(ProcessInfo.DomainXml)) { return; } else if (string.IsNullOrEmpty(ProcessInfo.MainTable)) { return; } else if (!string.IsNullOrEmpty(ProcessInfo.MainTable) && string.IsNullOrEmpty(ProcessInfo.MainTableXml)) { result.ErrorList.Add("对应业务对象不存在!"); return; } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(ProcessInfo.DomainXml); XmlDocument xmlMain = new XmlDocument(); xmlMain.LoadXml(ProcessInfo.MainTableXml); Verification(xmlDoc, xmlMain, result, "/BusinessType/Item/Domain"); Verification(xmlDoc, xmlMain, result, "/BusinessType/Item/Group/Item/Domain"); }
/// <summary> /// 循环验证input中所有属性与规则是否正确 /// </summary> /// <param name="ProcessInfo"></param> /// <param name="xmlDoc"></param> /// <param name="inputAttrList"></param> /// <param name="obj"></param> public void InputAttrList(WorkflowProcessModule info, System.Xml.XmlDocument xmlDoc, List <Dictionary <string, object> > inputAttrList, CheckResult result) { foreach (Dictionary <string, object> inputAttr in inputAttrList) { int ItemI = xmlDoc.SelectNodes("/BusinessType/Item/Domain[@name='" + inputAttr["dm_name_show_temp"].ToString() + "']").Count; int GroupItemI = xmlDoc.SelectNodes("/BusinessType/Item/Group/Item/Domain[@name='" + inputAttr["dm_name_show_temp"].ToString() + "']").Count; if (ItemI > 1 || GroupItemI > 1) { result.ErrorList.Add("DomainXml存在重复节点!"); } //判定input中所有的值是否都在业务域中 if (ItemI == 0 && GroupItemI == 0) { result.ErrorList.Add("dm_name_show_temp不在业务域中!"); } else { //判定Input中是否存在规则中必须要存在的值 Dictionary <string, string> dic = InputAttrRules(inputAttr, inputAttrList); if (dic == null || dic.Count == 0) { return; } foreach (var item in dic) { result.ErrorList.Add(item.Value); } } } }
/// <summary> /// html中内容进行检测 /// </summary> /// <param name="ProcessInfo"></param> /// <param name="obj"></param> public void RegularExpressionRulesList(WorkflowProcessModule ProcessInfo, CheckResult result) { string htmlContent = ProcessInfo.htmlContent; if (string.IsNullOrEmpty(htmlContent)) { return; } foreach (rulesitem rulesitem in GetHtmlContentConfig().rulesitems) { if (System.Text.RegularExpressions.Regex.Matches(htmlContent, rulesitem.rule, System.Text.RegularExpressions.RegexOptions.IgnoreCase).Count > 0) { result.ErrorList.Add("html内容异常"); } } }
public string CheckForm(string processModuleGuid) { try { ProcessInfo = ModuleList.Where(model => model.ProcessGUID == processModuleGuid).FirstOrDefault(); var result = new CheckResult { CheckRuleName = "CheckForm", ErrorList = new List <string>(), RepairParamList = new List <Dictionary <string, string> >() }; ProcessInfo.htmlContent = new FormCheck.FormCheck().GetHtmlContent(ProcessInfo.DocumentPath); if (string.IsNullOrEmpty(ProcessInfo.htmlContent)) { result.ErrorList.Add("未设置对应HTML展示内容!"); return(JsonConvert.SerializeObject(result)); } if (string.IsNullOrEmpty(ProcessInfo.DomainXml)) { result.ErrorList.Add("DomainXml为空!"); return(JsonConvert.SerializeObject(result)); } Detection(ProcessInfo, result); RegularExpressionRulesList(ProcessInfo, result); HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(ProcessInfo.htmlContent); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(ProcessInfo.DomainXml); //找到所有的input HtmlNodeCollection inputs = htmlDoc.DocumentNode.SelectNodes("//input[@dm_type]"); if (inputs != null) { List <Dictionary <string, object> > domainList = new List <Dictionary <string, object> >(); foreach (HtmlNode input in inputs) { domainList.Add(GetInputInfo(input, result)); } InputAttrList(ProcessInfo, xmlDoc, domainList, result); } return(JsonConvert.SerializeObject(result)); } catch (Exception ex) { var data = new CheckResult { CheckRuleName = "CheckForm", ErrorList = new List <string> { ex.Message }, RepairParamList = new List <Dictionary <string, string> >() }; return(JsonConvert.SerializeObject(data)); } }