/// <summary> /// Salva o model no BD de acordo com o tipo da operação /// </summary> /// <param name="enumCrudOperation">Operação - Create ou Update</param> /// <param name="tableName">Nome da tabela</param> /// <param name="model">Modelo</param> private void SaveNonObjectModel(EnumCrudOperation enumCrudOperation) { UserTable utbUser = SBOApp.Company.UserTables.Item(TableName.Replace("@", "")); string code = Model.GetType().GetProperty("Code").GetValue(Model, null).ToString(); bool alreadyExists = utbUser.GetByKey(code); if (!String.IsNullOrEmpty(code)) { utbUser.Code = code; } else { utbUser.Code = CrudController.GetNextCode(TableName); } utbUser.Name = utbUser.Code; ModelControllerAttribute modelController; // Percorre as propriedades do Model foreach (PropertyInfo property in Model.GetType().GetProperties()) { if (property.Name == "Code" || property.Name == "Name") { continue; } // Busca os Custom Attributes foreach (Attribute attribute in property.GetCustomAttributes(true)) { modelController = attribute as ModelControllerAttribute; if (modelController != null) { // Se não for DataBaseField não seta nas properties if (!modelController.DataBaseFieldYN) { break; } if (String.IsNullOrEmpty(modelController.ColumnName)) { modelController.ColumnName = property.Name; } utbUser.UserFields.Fields.Item(modelController.ColumnName).Value = property.GetValue(Model, null); } break; } } switch (enumCrudOperation) { case EnumCrudOperation.Create: utbUser.Add(); break; case EnumCrudOperation.Update: utbUser.Update(); break; default: break; } Marshal.ReleaseComObject(utbUser); utbUser = null; GC.Collect(); }
/// <summary> /// Salva o model no BD de acordo com o tipo da operação /// </summary> /// <param name="enumCrudOperation">Operação - Create ou Update</param> /// <param name="tableName">Nome da tabela</param> /// <param name="model">Modelo</param> private void SaveModel(EnumCrudOperation enumCrudOperation) { CompanyService sCompany = null; GeneralService oGeneralService = null; GeneralData oGeneralData = null; try { sCompany = SBOApp.Company.GetCompanyService(); oGeneralService = sCompany.GetGeneralService(TableName.Replace("@", "")); oGeneralData = (GeneralData)oGeneralService.GetDataInterface(GeneralServiceDataInterfaces.gsGeneralData); if (enumCrudOperation == EnumCrudOperation.Update) { GeneralDataParams oGeneralParams = (GeneralDataParams)oGeneralService.GetDataInterface(GeneralServiceDataInterfaces.gsGeneralDataParams); object code = null; try { code = Model.GetType().GetProperty("Code").GetValue(Model, null); } catch { Recordset rstDocEntry = (Recordset)SBOApp.Company.GetBusinessObject(BoObjectTypes.BoRecordset); string sql = @"SELECT DocEntry FROM {0} WHERE Code = '{1}'"; sql = String.Format(sql, TableName, Model.GetType().GetProperty("Code").GetValue(Model, null)); sql = SBOApp.TranslateToHana(sql); rstDocEntry.DoQuery(sql); if (rstDocEntry.RecordCount > 0) { code = rstDocEntry.Fields.Item(0).Value; } Marshal.ReleaseComObject(oGeneralParams); oGeneralParams = null; Marshal.ReleaseComObject(rstDocEntry); rstDocEntry = null; GC.Collect(); } oGeneralParams.SetProperty("Code", code); oGeneralData = oGeneralService.GetByParams(oGeneralParams); } ModelControllerAttribute modelController; object value; // Percorre as propriedades do Model foreach (PropertyInfo property in Model.GetType().GetProperties()) { try { // Busca os Custom Attributes foreach (Attribute attribute in property.GetCustomAttributes(true)) { modelController = attribute as ModelControllerAttribute; if (property.GetType() != typeof(DateTime)) { value = property.GetValue(Model, null); } else { value = ((DateTime)property.GetValue(Model, null)).ToString("yyyy-MM-dd HH:mm:ss"); } if (modelController != null) { // Se não for DataBaseField não seta nas properties if (!modelController.DataBaseFieldYN) { break; } if (String.IsNullOrEmpty(modelController.ColumnName)) { modelController.ColumnName = property.Name; } if (value == null) { if (property.PropertyType == typeof(string)) { value = String.Empty; } else if (property.PropertyType != typeof(DateTime) && property.PropertyType != typeof(Nullable <DateTime>)) { value = 0; } else { value = new DateTime(); } } if (property.PropertyType != typeof(decimal) && property.PropertyType != typeof(Nullable <decimal>)) { oGeneralData.SetProperty(modelController.ColumnName, value); } else { oGeneralData.SetProperty(modelController.ColumnName, Convert.ToDouble(value)); } break; } } } catch (Exception e) { throw new Exception(String.Format("Erro ao setar propriedade {0}: {1}", property.Name, e)); } } switch (enumCrudOperation) { case EnumCrudOperation.Create: oGeneralService.Add(oGeneralData); break; case EnumCrudOperation.Update: oGeneralService.Update(oGeneralData); break; default: break; } } catch (Exception e) { throw e; } finally { if (sCompany != null) { Marshal.ReleaseComObject(sCompany); sCompany = null; } if (oGeneralService != null) { Marshal.ReleaseComObject(oGeneralService); oGeneralService = null; } if (oGeneralData != null) { Marshal.ReleaseComObject(oGeneralData); oGeneralData = null; } GC.Collect(); } }