/// <summary> /// 生成查询SQL /// </summary> /// <param name="obj"></param> /// <param name="mapping"></param> /// <returns></returns> public virtual string PrepareLoadSql(DEEntityInstanceBase obj) { InsertSqlClauseBuilder builder = PrepareInsertSqlBuilder(obj); WhereSqlClauseBuilder primaryKeyBuilder = PrepareWhereSqlBuilder(obj); return(string.Format("SELECT * FROM {0} WHERE {1}", GetTableName(obj), primaryKeyBuilder.ToSqlString(TSqlBuilder.Instance))); }
/// <summary> /// 检查数据的状态 /// </summary> /// <param name="objsToCheck"></param> protected void CheckObjectStatus(params DEEntityInstanceBase[] objsToCheck) { List <DEEntityInstanceBase> normalizedObjsToCheck = new List <DEEntityInstanceBase>(); InSqlClauseBuilder idBuilder = new InSqlClauseBuilder("ID"); normalizedObjsToCheck.ForEach(o => idBuilder.AppendItem(o.ID)); if (idBuilder.IsEmpty == false) { DEEntityInstanceBaseCollection originalDataList = DEInstanceAdapter.Instance.Load(idBuilder); string opName = EnumItemDescriptionAttribute.GetDescription(this.OperationType); foreach (DEEntityInstanceBase objToCheck in normalizedObjsToCheck) { if (originalDataList.ContainsKey(objToCheck.ID) == false) { throw new DEStatusCheckException(string.Format("ID为\"{0}\"的对象不存在,不能执行{1}操作", objToCheck.ID, opName)); } DEEntityInstanceBase originalData = originalDataList[objToCheck.ID]; if (originalData.Status != SchemaObjectStatus.Normal) { throw new DEStatusCheckException(string.Format("ID为\"{0}\"动态实体对象状态不正常,不能执行{1}操作", objToCheck.ID, opName)); } } } }
public void InstanceDeserialize() { DynamicEntity entity = MockData.CreateEntityAndChildEntity(); DEEntityInstanceBase sourceInstance = entity.CreateInstance(); //序列化之后的数据 string json = JSONSerializerExecute.Serialize(sourceInstance); //反序列化 DEEntityInstanceBase deserializedInstance = JSONSerializerExecute.Deserialize <DEEntityInstanceBase>(json); foreach (var sourceField in sourceInstance.Fields) { EntityFieldValue deserializedFieldValue = deserializedInstance.Fields.Where(p => p.Definition.Name == sourceField.Definition.Name).FirstOrDefault(); Assert.IsNotNull(deserializedFieldValue); if (sourceField.Definition.FieldType == FieldTypeEnum.Collection) { Assert.AreEqual(sourceField.Definition.ReferenceEntityCodeName, deserializedFieldValue.Definition.ReferenceEntityCodeName); } else { Assert.AreEqual(sourceField.StringValue, deserializedFieldValue.StringValue); } } }
/// <summary> /// 创建现在SQL语句生成器 /// </summary> /// <param name="obj"></param> /// <param name="mapping"></param> /// <returns></returns> protected virtual InsertSqlClauseBuilder PrepareInsertSqlBuilder(DEEntityInstanceBase obj) { InsertSqlClauseBuilder builder = new InsertSqlClauseBuilder(); foreach (var filed in obj.Fields) { if (filed.Definition.IsInSnapshot) { builder.AppendItem(filed.Definition.Name, filed.GetRealValue()); } } if (!builder.ContainsDataField("ID")) { builder.AppendItem("ID", obj.ID); } if (!builder.ContainsDataField("CreateTime")) { builder.AppendItem("CreateTime", obj.CreateDate); } if (!builder.ContainsDataField("CreatorID")) { builder.AppendItem("CreatorID", obj.Creator.ID); } if (!builder.ContainsDataField("CreatorName")) { builder.AppendItem("CreatorName", obj.Creator.Name); } return(builder); }
public void InstanceDeserializeWithData() { DEEntityInstanceBase sourceInstance = MockData.CreateEntityInstance(); string json = JSONSerializerExecute.Serialize(sourceInstance); DEEntityInstanceBase deserializedInstance = JSONSerializerExecute.Deserialize <DEEntityInstanceBase>(json); foreach (var sourceField in sourceInstance.Fields) { EntityFieldValue deserializedField = deserializedInstance.Fields.Where(p => p.Definition.Name == sourceField.Definition.Name).FirstOrDefault(); Assert.IsNotNull(deserializedField); if (sourceField.Definition.FieldType == FieldTypeEnum.Collection) { DEEntityInstanceBaseCollection sourceChildren = sourceField.GetRealValue() as DEEntityInstanceBaseCollection; DEEntityInstanceBaseCollection deserializedChildren = deserializedField.GetRealValue() as DEEntityInstanceBaseCollection; foreach (var sourceChild in sourceChildren) { var deserializedChild = deserializedChildren[sourceChild.ID]; Assert.IsNotNull(deserializedChild); } } else { Assert.AreEqual(sourceField.StringValue, deserializedField.StringValue); } } }
public SaleOrderEntityMain_RFC(DEEntityInstanceBase instance) { this._ID = instance.ID; this._I_ZJYBH = instance.Fields.GetValue <string>("I_ZJYBH", ""); this._E_MESSAGE = instance.Fields.GetValue <string>("E_MESSAGE", ""); this._E_STATE = instance.Fields.GetValue <string>("E_STATE", ""); }
public void InstanceSerializeWithDataTest() { bool flag = true; DEEntityInstanceBase instance = MockData.CreateEntityInstance(); string json = JSONSerializerExecute.Serialize(instance); Console.WriteLine(json); instance.Fields.ForEach(f => { if (f.Definition.FieldType == FieldTypeEnum.Collection) { foreach (var item in f.Definition.ReferenceEntity.Fields) { Assert.IsTrue(json.Contains(item.Name)); Assert.IsTrue(json.Contains(item.Name + "Value")); } } else { Assert.IsTrue(json.Contains(f.Definition.Name)); Assert.IsTrue(json.Contains(f.Definition.Name + "Value")); } }); Assert.IsTrue(flag, "序列化实体实例出错"); }
public void ValidateInstanceTest() { DEEntityInstanceBase instance = MockData.CreateInstaceWithAllTypeData() as DEEntityInstance; //DEEntityInstanceBase仅对字段值类型和长多进行验证 ValidationResults result = instance.Validate(); Assert.IsTrue(result.ResultCount == 0); }
public void InstanceValidatorTest() { DEEntityInstanceBase instance = MockData.CreateInstaceWithAllTypeData() as DEEntityInstance; ValidationResults result = instance.Validate(); Assert.IsTrue(result.ResultCount == 0); }
/// <summary> /// 创建一个简单对象 /// </summary> /// <returns>一个<see cref="DEEntityInstance"/>对象。</returns> protected virtual DEEntityInstanceBase CreateSimpleObject(string entityID) { DynamicEntity entity = DESchemaObjectAdapter.Instance.Load(entityID) as DynamicEntity; DEEntityInstanceBase result = entity.CreateInstance(); result.ID = Guid.NewGuid().ToString(); return(result); }
public void EntityInstanceMapping() { DEEntityInstanceBase instance = MockData.CreateInstanceWithData(); List <SapValue> result = instance.ToParams("Tcode_test"); //这儿的断言太扯,回头改 Assert.IsNotNull(result, "实体实例转KeyValue报错"); }
/// <summary> /// 获取实体对应的快照表名称 /// </summary> /// <param name="obj"></param> /// <returns></returns> protected virtual string GetTableName(DEEntityInstanceBase obj) { string table = this._TableName; if (table.IsNullOrEmpty()) { table = GetTableName(obj.EntityDefine); } return(table); }
/// <summary> /// 生成更新SQL /// </summary> /// <param name="obj"></param> /// <returns></returns> public virtual string PrepareUpdateSql(DEEntityInstanceBase obj) { WhereSqlClauseBuilder primaryKeyBuilder = PrepareWhereSqlBuilder(obj); UpdateSqlClauseBuilder updateBuilder = PrepareUpdateSqlBuilder(obj); return(string.Format("UPDATE {0} SET {1} WHERE {2}", GetTableName(obj), updateBuilder.ToSqlString(TSqlBuilder.Instance), primaryKeyBuilder.ToSqlString(TSqlBuilder.Instance))); }
public void EntityInstanceGetRealValueTest() { DEEntityInstanceBase instance = MockData.CreateInstaceWithAllTypeData(); bool flag = Convert.ToBoolean(instance.Fields["Bool"].GetRealValue()) == true && Convert.ToDateTime(instance.Fields["DateTime"].GetRealValue()).ToString("yyyyMMdd") == "20140303" && Convert.ToDecimal(instance.Fields["Decimal"].GetRealValue()) == 99 && Convert.ToInt32(instance.Fields["Int"].GetRealValue()) == 99 && Convert.ToString(instance.Fields["String"].GetRealValue()) == "haoyk"; Assert.IsTrue(flag, "实体实例获取强类型值失败"); }
public void AddEntityInstance() { DEEntityInstanceBase instance = MockData.CreateInstanceWithData(); DEEntityInstanceBase result = DEInstanceAdapter.Instance.Load(instance.ID); var coll = result.Fields.FirstOrDefault(p => p.Definition.FieldType == FieldTypeEnum.Collection).GetRealValue() as DEEntityInstanceBaseCollection; decimal totalAmount = coll.Select(p => Convert.ToDecimal(p.Fields["单价"].StringValue)).Sum(); Assert.AreEqual(200, totalAmount); }
public static DEEntityInstanceBase CreateInstanceBaseObject(string entityID) { entityID.CheckStringIsNullOrEmpty <ArgumentNullException>("entityID"); DynamicEntity entity = DESchemaObjectAdapter.Instance.Load(entityID) as DynamicEntity; entity.NullCheck <ArgumentNullException>("找不到编码为{0}的实体"); DEEntityInstanceBase result = entity.CreateInstance(); return(result); }
/// <summary> /// 创建更新SQL语句生成器 /// </summary> /// <param name="obj"></param> /// <returns></returns> public virtual UpdateSqlClauseBuilder PrepareUpdateSqlBuilder(DEEntityInstanceBase obj) { UpdateSqlClauseBuilder builder = new UpdateSqlClauseBuilder(); foreach (var filed in obj.Fields) { if (filed.Definition.IsInSnapshot) { builder.AppendItem(filed.Definition.Name, filed.GetRealValue()); } } return(builder); }
public SaleOrderEntityChild_I_ZR5_SS02_RFC(DEEntityInstanceBase instance) { this._ID = instance.ID; this._BUKRS = instance.Fields.GetValue <string>("BUKRS", ""); this._CZDAT = instance.Fields.GetValue <string>("CZDAT", ""); this._EDAT = instance.Fields.GetValue <string>("EDAT", ""); this._KUNNR = instance.Fields.GetValue <string>("KUNNR", ""); this._OIC_MOT = instance.Fields.GetValue <string>("OIC_MOT", ""); this._RMAN = instance.Fields.GetValue <string>("RMAN", ""); this._SALESNUM = instance.Fields.GetValue <string>("SALESNUM", ""); this._VKBUR = instance.Fields.GetValue <string>("VKBUR", ""); this._VKORG = instance.Fields.GetValue <string>("VKORG", ""); this._VTWEG = instance.Fields.GetValue <string>("VTWEG", ""); this._YSHHS = instance.Fields.GetValue <string>("YSHHS", ""); }
/// <summary> /// 反序列化 /// </summary> /// <param name="dictionary"></param> /// <param name="type"></param> /// <param name="serializer"></param> /// <returns></returns> public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { object EntityCodeName = null; object instanceID = null; DateTime createDate = DateTime.MinValue; dictionary.TryGetValue("EntityInstanceCode", out instanceID); dictionary.TryGetValue("EntityCodeName", out EntityCodeName); EntityCodeName.NullCheck("实体定义反序化失败,缺少EntityCodeName."); createDate = DateTime.MinValue; //海军写的方法,为减轻前台生成JSON压力,此方法为各子实体添加EntityCodeName属性。 SetCodeName(dictionary.GetValue("EntityFieldValue", new ArrayList()), EntityCodeName.ToString()); //根据创建日期获取实体 DynamicEntity entity = DEDynamicEntityAdapter.Instance.LoadByCodeName(EntityCodeName.ToString(), createDate) as DynamicEntity; DEEntityInstanceBase data = entity.CreateInstance(); if (instanceID != null && instanceID.ToString().IsNotEmpty()) { data.ID = instanceID.ToString(); } EntityFieldValueCollection values = JSONSerializerExecute.Deserialize <EntityFieldValueCollection>(dictionary.GetValue("EntityFieldValue", new ArrayList())) ?? new EntityFieldValueCollection(); values.ForEach(p => { var field = data.Fields.Where(f => f.Definition.Name == p.Definition.Name).FirstOrDefault(); if (field != null) { if (field.Definition.FieldType == Enums.FieldTypeEnum.Collection) { data.Fields.TrySetValue(field.Definition.Name, p.StringValue); } else { field.StringValue = p.StringValue; } } }); return(data); }
/// <summary> /// 序列化 /// </summary> /// <param name="obj"></param> /// <param name="serializer"></param> /// <returns></returns> public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer) { var dictionary = new Dictionary <string, object>(); DEEntityInstanceBase data = (DEEntityInstanceBase)obj; dictionary.AddNonDefaultValue("EntityCode", data.EntityCode); dictionary.AddNonDefaultValue("EntityCodeName", data.EntityDefine.CodeName); dictionary.AddNonDefaultValue("EntityInstanceCode", data.ID); if (!data._notSerialize) { dictionary.AddNonDefaultValue("EntityDefine", data.EntityDefine); } dictionary.AddNonDefaultValue("EntityFieldValue", data.Fields); return(dictionary); }
/// <summary> /// 创建一个主表加子表的实体定义的实例化数据 /// </summary> /// <returns></returns> public static DEEntityInstanceBase CreateEntityInstance() { //创建Mock实体定义 DynamicEntity entity = CreateEntityWithReferenceEntity(); //Mock实体实例 DEEntityInstanceBase instance = entity.CreateInstance(); //集合字段类型赋值 #region var children = entity.Fields.Where(p => p.FieldType == FieldTypeEnum.Collection); foreach (var child in children) { DEEntityInstanceBaseCollection entityItems = new DEEntityInstanceBaseCollection(); //创建两条字表数据 for (int i = 0; i < 2; i++) { DEEntityInstanceBase childInstance = child.ReferenceEntity.CreateInstance(); childInstance.ID = Guid.NewGuid().ToString(); foreach (var field in childInstance.Fields) { childInstance.Fields.TrySetValue(field.Definition.Name, field.Definition.Name + "Value" + i); } entityItems.Add(childInstance); } instance.Fields.SetValue(child.Name, entityItems); } #endregion //普通字段赋值 #region instance.Fields.ForEach(p => { if (p.Definition.FieldType != FieldTypeEnum.Collection) { p.StringValue = p.Definition.Name + "Value"; } }); #endregion return(instance); }
/// <summary> /// 将模式对象的修改提交到数据库 /// </summary> /// <param name="obj">对其进行更新的<typeparamref name="T"/>对象。</param> public void Update(T obj) { obj.NullCheck("obj"); this.MergeExistsObjectInfo(obj); EntityInstanceUpdateActionCollection actions = GetActions("Update"); actions.Prepare(obj); using (TransactionScope scope = TransactionScopeFactory.Create()) { DEEntityInstanceBase existData = GetExistedObject(obj); string sql = string.Empty; if (existData != null) { sql = EntityInstanceUpdateSqlBuilder.Instance.ToUpdateSql(obj, this.GetMappingInfo()); DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); } else { sql = EntityInstanceUpdateSqlBuilder.Instance.ToInsertSql(obj, this.GetMappingInfo()); DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); } //执行update 如果update失败执行insert //string sql = EntityInstanceUpdateSqlBuilder.Instance.ToUpdateSql(obj, this.GetMappingInfo()); //try //{ // DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); // DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); //} //catch (Exception) //{ // sql = EntityInstanceUpdateSqlBuilder.Instance.ToInsertSql(obj, this.GetMappingInfo()); // DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); //} //SCInstanceActionContext.Current.TimePoint.IsMinValue(() => SCInstanceActionContext.Current.TimePoint = dt); //string sql = EntityInstanceUpdateSqlBuilder.Instance.ToInsertSql(obj, this.GetMappingInfo()); actions.Persist(obj); scope.Complete(); } }
public ServerResult UpdateInstance(string jsonData) { ServerResult result = new ServerResult(); try { //反序列化 DEEntityInstanceBase resultInstance = JSONSerializerExecute.Deserialize <DEEntityInstanceBase>(jsonData); DEInstanceAdapter.Instance.Update(resultInstance); result.Result = string.Format("{{'ID':'{0}'}}", resultInstance.ID); } catch (Exception e) { result.IsSuccess = false; result.Result = string.Format("{{'ErrorMsg':'{0}'}}", e.Message); } return(result); }
private DEEntityInstanceBase GetExistedObject(T obj) { WhereSqlClauseBuilder keyBuilder = ORMapping.GetWhereSqlClauseBuilderByPrimaryKey(obj, this.GetMappingInfo()); string sql = string.Format("SELECT TOP 1 {0} FROM {1} WHERE {2} ORDER BY CreateDate DESC", string.Join(",", ORMapping.GetSelectFieldsName(this.GetMappingInfo(), "Data")), this.GetMappingInfo().TableName, keyBuilder.ToSqlString(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0]; DEEntityInstanceBase result = null; if (table.Rows.Count > 0) { result = this.CreateSimpleObject(table.Rows[0]["EntityCode"].ToString()); ORMapping.DataRowToObject(table.Rows[0], result); } return(result); }
/// <summary> /// 得到强类型的值 /// </summary> /// <returns></returns> public object GetRealValue() { object result = this.StringValue; if (this.Definition.FieldType == FieldTypeEnum.Collection) { if (this.StringValue.IsNotEmpty()) { DEEntityInstanceBaseCollection collection = new DEEntityInstanceBaseCollection(); IEnumerable <XElement> objs = XElement.Parse(this.StringValue).XPathSelectElements("Object"); objs.ForEach(p => { //这里需要优化,得到一个实体的定义,应该通过缓存逻辑实现。或者在Instance中,直接保存定义信息 DynamicEntity entity = DESchemaObjectAdapter.Instance.Load(p.AttributeValue("EntityID")) as DynamicEntity; DEEntityInstanceBase item = entity.CreateInstance(); item.FromXElement(p); collection.Add(item); }); result = collection; } } else { Type realType = typeof(string); //author haoyk 2014-3-3 if (this.Definition.FieldType.TryToRealType(out realType)) { result = DataConverter.ChangeType(result, realType); } } return(result); }
/// <summary> /// 合并现有对象信息 /// </summary> /// <param name="obj">对其进行更新的<typeparamref name="T"/>对象。</param> public void MergeExistsObjectInfo(T obj) { if (SCInstanceActionContext.Current.OriginalObject != null && SCInstanceActionContext.Current.OriginalObject.EntityCode == obj.EntityCode && SCInstanceActionContext.Current.OriginalObject.ID == obj.ID) { obj.Creator = SCInstanceActionContext.Current.OriginalObject.Creator; obj.CreateDate = SCInstanceActionContext.Current.OriginalObject.CreateDate; //obj.VersionStartTime = SCInstanceActionContext.Current.OriginalObject.VersionStartTime; } else { DEEntityInstanceBase existedInfo = this.GetExistedObject(obj); if (existedInfo != null) { obj.CreateDate = existedInfo.CreateDate; obj.Creator = existedInfo.Creator; //obj.VersionStartTime = existedInfo.VersionStartTime; } } }
protected void btnSave_Click(object sender, EventArgs e) { PropertyValueCollection propterties = new PropertyValueCollection(); this.propertyForm.Properties.CopyTo(propterties); if (propterties.Count > 0) { if (!string.IsNullOrEmpty(EntityInstenceID)) { DEEntityInstanceBase entityInstence = DEInstanceAdapter.Instance.Load(EntityInstenceID); entityInstence.Fields.FromPropertyValues(propterties); DEInstanceAdapter.Instance.Update(entityInstence); } else { DynamicEntity entity = (DynamicEntity)DESchemaObjectAdapter.Instance.Load(EntityID); DEEntityInstanceBase instence = entity.CreateInstance(); instence.Fields.FromPropertyValues(propterties); DEInstanceAdapter.Instance.Update(instence); } } }
/// <summary> /// 创建带数据的实体实例 /// </summary> /// <returns></returns> public static DEEntityInstanceBase CreateInstanceWithData() { //准备实体定义 DynamicEntity header = MockData.CreateEntityWithReferenceEntity(); //创建空实例 DEEntityInstanceBase instance = header.CreateInstance(); instance.Fields.SetValue("总金额", 200); DynamicEntityField field = instance.EntityDefine.Fields.FirstOrDefault(p => p.FieldType == FieldTypeEnum.Collection) as DynamicEntityField; DEEntityInstanceBaseCollection items = new DEEntityInstanceBaseCollection(); #region //实例1 DEEntityInstanceBase itemInstance = field.ReferenceEntity.CreateInstance(); itemInstance.ID = Guid.NewGuid().ToString(); itemInstance.Name = "第一条数据"; itemInstance.Fields.TrySetValue("物料名称", "鼠标"); itemInstance.Fields.TrySetValue("物料数量", 1); itemInstance.Fields.TrySetValue("单价", 50); items.Add(itemInstance); //实例2 DEEntityInstanceBase itemInstance1 = field.ReferenceEntity.CreateInstance(); itemInstance1.ID = Guid.NewGuid().ToString(); itemInstance1.Name = "第二条数据"; itemInstance1.Fields.TrySetValue("物料名称", "键盘"); itemInstance1.Fields.TrySetValue("物料数量", 1); itemInstance1.Fields.TrySetValue("单价", 150); items.Add(itemInstance1); #endregion instance.Fields.SetValue("销售明细", items); DEInstanceAdapter.Instance.Update(instance); return(instance); }
public ServerResult GetExistInstance(string instanceID) { ServerResult result = new ServerResult(); try { instanceID.CheckStringIsNullOrEmpty <ArgumentNullException>("实例ID不能为空"); //根据实例ID获取实例对象 DEEntityInstanceBase instance = DEInstanceAdapter.Instance.Load(instanceID); string json = JSONSerializerExecute.Serialize(instance); result.Result = json; } catch (Exception e) { result.IsSuccess = false; result.Result = e.Message; } return(result); }
public void InstanceSerializeTest() { DynamicEntity entity = MockData.CreateEntityAndChildEntity(); DEEntityInstanceBase instance = entity.CreateInstance(); string json = JSONSerializerExecute.Serialize(instance); instance.Fields.ForEach(f => { if (f.Definition.FieldType == FieldTypeEnum.Collection) { foreach (var item in f.Definition.ReferenceEntity.Fields) { Assert.IsTrue(json.Contains(item.Name)); } } else { Assert.IsTrue(json.Contains(f.Definition.Name)); } }); }