private void WriteChildren() { var em = this.EntityMeta; var children = em.ChildrenProperties; for (int i = 0, c = children.Count; i < c; i++) { var child = children[i]; var listProperty = child.ManagedProperty as IListProperty; if (listProperty.HasManyType == HasManyType.Composition) { var pRefMeta = child.ChildType.FindParentReferenceProperty(); if (pRefMeta != null) { var childType = child.ChildType.EntityType; var association = new HasManyAssociation { name = child.Name, foreignKey = (pRefMeta.ManagedProperty as IRefProperty).RefIdProperty.Name, model = ClientEntities.GetClientName(childType), }; _entityModel.associations.Add(association); } } } }
private void WriteTreeAssociations() { var supportTree = this.EntityMeta.IsTreeEntity; if (supportTree) { foreach (var property in this.EntityMeta.EntityProperties) { if (property.ManagedProperty == Entity.TreePIdProperty) { _entityModel.associations.Add(new BelongsToAssociation { associationKey = "TreeParent", foreignKey = property.Name, model = ClientEntities.GetClientName(this.EntityMeta.EntityType), }); _entityModel.associations.Add(new HasManyAssociation { name = "TreeChildren", foreignKey = property.Name, model = ClientEntities.GetClientName(this.EntityMeta.EntityType), }); break; } } } }
private static ModuleJson ToJson(WebModuleMeta module) { var mJson = new ModuleJson { keyLabel = module.KeyLabel }; if (module.HasUI) { if (module.IsCustomUI) { mJson.url = module.Url; } else { mJson.model = ClientEntities.GetClientName(module.EntityType); mJson.clientRuntime = module.ClientRuntime; mJson.viewName = module.AggtBlocksName; } } foreach (WebModuleMeta child in module.Children) { var childJson = ToJson(child); mJson.children.Add(childJson); } return(mJson); }
private static void ConvertParametersType(ParameterInfo[] methodParameters, object[] parameters) { for (int i = 0; i < parameters.Length; i++) { var mp = methodParameters[i]; var p = parameters[i]; var mpType = mp.ParameterType; //任意参数都不能为 null if (p == null) { if (mpType == typeof(string)) { p = string.Empty; } else { p = TypeHelper.GetDefaultValue(mpType); } parameters[i] = p; } //如果需要的参数是一个类型,而提供的参数是一个字符串,则通过字符串查找并转换为对应的实体类型。 if (mpType == typeof(Type) && p is string) { var em = ClientEntities.Find(p as string); if (em != null) { parameters[i] = em.EntityType; } } } }
protected override string ResponseScript(HttpContext context) { var request = context.Request; var strType = request.QueryString["type"]; if (string.IsNullOrEmpty(strType)) { return(string.Empty); } var meta = ClientEntities.Find(strType); JsonModel res = null; if (context.Request.HttpMethod == "GET") { var evm = UIModel.Views.CreateBaseView(meta.EntityType); res = this.QueryEntityList(request, evm); } else { res = this.SaveEntityList(request, meta); } var js = res.ToJsonString(); return(Compress(js)); }
private static Criteria ParseCriteria(JArray filters, PagingInfo pagingInfo) { JObject jUseCriteriaType = filters[0] as JObject; var clientTypeName = jUseCriteriaType.Property("value").Value.ToString(); var criteriaMeta = ClientEntities.Find(clientTypeName); if (criteriaMeta == null) { throw new NotSupportedException("criteriaType"); } var jCriteria = filters[1] as JObject; if (!jCriteria.Property("property").Value.ToString().Contains("_criteria")) { throw new NotSupportedException(); } var jCriteriaValues = jCriteria.Property("value").Value as JObject; //创建一个 Criteria 并设置它的相关属性值 var criteria = Entity.New(criteriaMeta.EntityType) as Criteria; if (criteria == null) { throw new InvalidProgramException("在 Web 开发模式下,查询条件类,必须继承自 Criteria 类型。"); } var setter = new EntityPropertySetter(criteriaMeta); setter.SetEntity(criteria, jCriteriaValues); criteria.PagingInfo = pagingInfo; return(criteria); }
private static void GenerateClientEntities(StringBuilder buffer) { var emg = new EntityModelGenerator(); foreach (var kv in ClientEntities.GetEntities()) { emg.EntityMeta = kv.Value; var model = emg.Generate(); var jsonConfig = model.ToJsonString(); var js = string.Format(@"Rafy._dm('{0}', {1});", kv.Key, jsonConfig); buffer.AppendLine(js); } }
private void WriteReference() { var properties = this.EntityMeta.EntityProperties; for (int i = 0, c = properties.Count; i < c; i++) { var property = properties[i]; var refProperty = property.ManagedProperty as IRefEntityProperty; if (refProperty != null) { var association = new BelongsToAssociation { associationKey = refProperty.RefEntityProperty.Name, foreignKey = refProperty.RefIdProperty.Name, model = ClientEntities.GetClientName(refProperty.RefEntityType), }; _entityModel.associations.Add(association); } } }
private static object ConvertOutputComponent(object value) { //服务的输出属性如果类型是一个实体或者实体列表,则需要进行格式转换。 if (value is IDomainComponent) { var model = (value as IDomainComponent).GetRepository().EntityType; //TODO:这里可能存在问题:当一个非默认的视图请求这个服务得到一个默认视图的实体数据时,可能会因为列不一致而出现问题。 var defaultVM = UIModel.Views.CreateBaseView(model); if (value is EntityList) { var listRes = new EntityJsonList { model = model }; EntityJsonConverter.EntityToJson(defaultVM, value as EntityList, listRes.entities); listRes.total = listRes.entities.Count; value = listRes; } else if (value is Entity) { var entityJson = new EntityJson(); EntityJsonConverter.EntityToJson(defaultVM, value as Entity, entityJson); //在纯数据的基础上添加以下两个约定的属性:标记这是一个实体以及它在客户端的类型名称。 entityJson.SetProperty(Consts.isEntityProperty, BooleanBoxes.True); entityJson.SetProperty(Consts.modelProperty, ClientEntities.GetClientName(model)); value = entityJson; } else { throw new NotSupportedException("只支持对实体、实体列表进行格式转换。"); } } return(value); }
protected override string ResponseScript(HttpContext context) { var request = context.Request; var converter = new ClientMetaFactory(); var op = converter.Option; op.ignoreCommands = request.GetQueryStringOrDefault("ignoreCommands", 0) == 1; op.isDetail = request.GetQueryStringOrDefault("isDetail", 0) == 1; op.isLookup = request.GetQueryStringOrDefault("isLookup", 0) == 1; op.isReadonly = request.GetQueryStringOrDefault("isReadonly", 0) == 1; op.viewName = request.GetQueryStringOrDefault("viewName", string.Empty); var moduleName = request.GetQueryStringOrDefault("module", string.Empty); var typeName = request.GetQueryStringOrDefault("type", string.Empty); var templateType = request.GetQueryStringOrDefault("templateType", string.Empty); var isAggt = request.GetQueryStringOrDefault("isAggt", 0) == 1; JsonModel jsonResult = null; //如果指定了 module,则直接返回模块的格式。 if (!string.IsNullOrEmpty(moduleName)) { var module = CommonModel.Modules[moduleName]; var aggt = UIModel.AggtBlocks.GetModuleBlocks(module); jsonResult = converter.ConvertToAggtMeta(aggt); } else { var type = ClientEntities.Find(typeName); //需要聚合块 if (isAggt) { AggtBlocks aggt = null; //通过定义的模板类来返回模块格式 if (!string.IsNullOrEmpty(templateType)) { var uiTemplateType = Type.GetType(templateType); var template = Activator.CreateInstance(uiTemplateType) as BlocksTemplate; template.EntityType = type.EntityType; aggt = template.GetBlocks(); } else { //通过定义的聚合块名称来获取聚合块 if (!string.IsNullOrEmpty(op.viewName)) { aggt = UIModel.AggtBlocks.GetDefinedBlocks(op.viewName); } else { //通过默认的聚合块名称来获取聚合块 aggt = UIModel.AggtBlocks.GetDefaultBlocks(type.EntityType); } } jsonResult = converter.ConvertToAggtMeta(aggt); } else { //获取单块 UI 的元数据 var evm = UIModel.Views.Create(type.EntityType, op.viewName) as WebEntityViewMeta; jsonResult = converter.ConvertToClientMeta(evm); } } var json = jsonResult.ToJsonString(); return(json); }