private WidgetModel ConvertToWidget(AppFunction func, WidgetModel userWidget) { userWidget.Id = func.Id; userWidget.Title = ResHelper.GetStr(func.Name); //将参数赋值给其他可能的属性 foreach (var p in func.Arguments) { RefHelper.SetValue(userWidget, p.Key, p.Value); } return(userWidget); }
void AssignNameValue(object t) { var type = t.GetType(); RefHelper.SetValue(t, "Name", t.GetType().Name); foreach (PropertyInfo prop in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { if (prop.PropertyType == typeof(string) && prop.Name != "Name") { prop.SetValue(t, prop.Name, null); } } }
/// <summary> /// 从Profile中获取并设置本窗体的指定控件的属性值,如果为空则设置默认值 /// </summary> /// <param name="propertyName">用'.'号分隔的控件及属性名称 </param> /// <param name="defaultValue">默认值</param> public void Load(string propertyName, string defaultValue) { TypeAndValue value = GetContextValue(propertyName); if (String.IsNullOrEmpty(value.Value)) { value.Value = defaultValue; } // if (String.IsNullOrEmpty(value.Value)) return; string[] propertyNames = propertyName.Split('.'); object obj = FindObject(propertyNames); if (obj == null) { return; } RefHelper.SetValue(obj, propertyNames[propertyNames.Length - 1], value.Value, RefHelper.LoadType(value.TypeName)); }
/// <summary> /// 将Form表单中的数据导入实体对象中的同名属性 /// </summary> /// <param name="form">表单数据</param> /// <param name="model">实体对象</param> public static void AssignFormValues(this NameValueCollection form, object model) { //添加其他程序子类中的特殊属性 foreach (string key in form.Keys) { var prop = model.GetType().GetProperty(key); if (prop != null) { if (prop.PropertyType == typeof(bool)) { //在复选框时,勾选会传回两个值: true,false; 所以要分辨 RefHelper.SetValue(model, key, CommOp.ToStr(form[key]).Split(',').First()); } else { RefHelper.SetValue(model, key, CommOp.ToStr(form[key])); } } } }
/// <summary> /// 处理一个查询定义节点。依次递归子节点循环。 /// </summary> /// <param name="node">当前节点</param> /// <param name="item">查询项集合</param> /// <param name="odtObj"></param> /// <param name="exp">查询表达式</param> /// <param name="parameters">查询表达式参数</param> private void ProcessQueryNode(AdvQueryNode node, AdvQueryItem item, object odtObj, ref string exp, ref IList <object> parameters) { if (node == null) { return; } //查询当前节点的子节点 List <AdvQueryNode> children = item.Nodes.Where(t => t.ParentId == node.Id).ToList(); if (children.Count == 0) { //没有子节点,这是一个表达式节点 if (node.Operator.IsEmpty()) { return; } string p = "@" + parameters.Count; if (node.Operator.Trim().ToUpper().Equals("LIKE")) { exp = exp + node.Expression.Trim() + ".Contains(" + p + ") "; } else if (node.Operator.Trim().ToUpper().Equals("NOT LIKE")) { exp = exp + " !" + node.Expression.Trim() + ".Contains(" + p + ") "; } else { exp = exp + " (" + node.Expression.Trim() + node.Operator + p + ") "; } RefHelper.SetValue(odtObj, node.Expression, node.Value); parameters.Add(RefHelper.GetValue(odtObj, node.Expression)); return; } else { //有子节点,这是一个逻辑运算符节点 exp = exp + "("; int i = 0; foreach (AdvQueryNode child in children) { //子节点是逻辑运算符 if (child.Type.ToLower() == "operator") { if (!item.Nodes.Exists(t => t.ParentId == child.Id)) { continue; } } if (i > 0) { exp = exp + " " + node.Expression + " "; } //递归子节点循环。 ProcessQueryNode(child, item, odtObj, ref exp, ref parameters); i++; } exp = exp + ")"; } }
/// <summary> /// 保存多语言的文本信息 /// </summary> /// <param name="dataService">当前的数据服务</param> /// <param name="e">数据实体对象</param> /// <param name="t">业务实体对象</param> public void SaveLanguages(EFAuditDataService <TEntity> dataService, TEntity e, TModel t) { var me = e as IMultiLanguage; if (me == null) { return; } ModelRule modelRule = ModelRule.Get <TModel>(); string entityType = typeof(TEntity).Name; var langs = ResHelper.GetUsedCultureNames().Select(l => l.ToLower()).ToArray(); if (me.LangTexts == null) { me.LangTexts = dataService.GetContext().Set <Sys_DataLanguage>().Where(d => d.BillId == e.Id && d.BillType == entityType).ToList(); } var sysLangs = me.LangTexts; foreach (var rule in modelRule.SingleRules.Where(r => r.DataType == ExtDataType.MultiLanguage)) { //先处理主文本框name不带语言后缀的表单值,表示是当前语言 string langVal = HttpContext.Current.Request.Form[rule.Name]; string currentLang = ResHelper.CurrentCultureName.ToLower(); var langEntity = sysLangs.FirstOrDefault(l => l.Language == currentLang); if (langEntity == null) { langEntity = new Sys_DataLanguage { BillId = e.Id, BillType = entityType, Language = currentLang, Name = rule.Name, Text = langVal }; dataService.MarkState(langEntity, EntityState.Added); } else if (langVal != langEntity.Text) { langEntity.Text = langVal; dataService.MarkState(langEntity, EntityState.Modified); } RefHelper.SetValue(e, rule.Name, langVal); //再处理下拉列表中的文本框name带语言后缀的表单值 foreach (var lang in langs.Where(l => l != currentLang)) { langVal = HttpContext.Current.Request.Form[rule.Name + "-" + lang]; langEntity = sysLangs.FirstOrDefault(l => l.Language == lang); if (langEntity == null) { langEntity = new Sys_DataLanguage { BillId = e.Id, BillType = entityType, Language = lang, Name = rule.Name, Text = langVal }; dataService.MarkState(langEntity, EntityState.Added); } else if (langVal != langEntity.Text) { langEntity.Text = langVal; dataService.MarkState(langEntity, EntityState.Modified); } } } }