} // checkStandardColumns /// <summary> /// Create Column in AD and DB /// </summary> /// <param name="col">Column Object</param> /// <param name="table">Table Object</param> /// <param name="alsoInDB">Also in DB</param> /// <returns></returns> private static bool CreateColumn(MColumn col, MTable table, bool alsoInDB) { // Element M_Element element = M_Element.Get(col.GetCtx(), col.GetColumnName(), col.Get_TrxName()); if (element == null) { element = new M_Element(col.GetCtx(), col.GetColumnName(), col.GetEntityType(), null); if (!element.Save()) { return(false); } log.Info("Created Element: " + element.GetColumnName()); } // Column Sync col.SetColumnName(element.GetColumnName()); col.SetName(element.GetName()); col.SetDescription(element.GetDescription()); col.SetHelp(element.GetHelp()); col.SetAD_Element_ID(element.GetAD_Element_ID()); // if (!col.Save()) { return(false); } // DB if (!alsoInDB) { return(true); } // String sql = col.GetSQLAdd(table); bool success = DataBase.DB.ExecuteUpdateMultiple(sql, false, table.Get_TrxName()) >= 0; if (success) { log.Info("Created: " + table.GetTableName() + "." + col.GetColumnName()); } else { log.Warning("NOT Created: " + table.GetTableName() + "." + col.GetColumnName()); } return(success); } // createColumn
} // generate /// <summary> /// Generate Delta and History Table /// </summary> /// <returns></returns> private bool GenerateTable() { // Table m_derivedTable = MTable.Get(m_ctx, m_dTableName); if (m_derivedTable == null) { m_derivedTable = new MTable(m_ctx, 0, null); } PO.CopyValues(m_baseTable, m_derivedTable); m_derivedTable.SetTableName(m_dTableName); m_derivedTable.SetName(m_derivedTable.GetName() + " SubTable"); m_derivedTable.SetSubTableType(m_derivedTableType); m_derivedTable.SetBase_Table_ID(m_baseTable.GetAD_Table_ID()); if (!m_derivedTable.Save()) { throw new Exception("Cannot save " + m_dTableName); } MColumn[] dCols = SyncMColumns(true); // Sync Columns in Database List <MColumn> list = new List <MColumn>(dCols.Length); foreach (MColumn element in dCols) { list.Add(element); } Trx trx = Trx.Get("getDatabaseMetaData"); // String catalog = ""; String schema = DataBase.DB.GetSchema(); String tableName = m_dTableName; tableName = tableName.ToUpper(); int noColumns = 0; // DataSet rs = null; using (DatabaseMetaData md = new DatabaseMetaData()) { rs = md.GetColumns(catalog, schema, tableName); } for (int rscount = 0; rscount <= rs.Tables[0].Rows.Count - 1; rscount++) { noColumns++; String columnName = rs.Tables[0].Rows[rscount]["COLUMN_NAME"].ToString(); bool found = false; for (int i = 0; i < list.Count; i++) { MColumn dCol = list[i]; if (columnName.Equals(dCol.GetColumnName(), StringComparison.OrdinalIgnoreCase)) { String sql = dCol.GetSQLModify(m_derivedTable, false); DataBase.DB.ExecuteUpdateMultiple(sql, false, null); found = true; list.Remove(list[i]); break; } } if (!found) { String sql = "ALTER TABLE " + m_dTableName + " DROP COLUMN " + columnName; DataBase.DB.ExecuteQuery(sql, null); } } //rs.close(); trx.Close(); // No Columns if (noColumns == 0) { String sql = m_derivedTable.GetSQLCreate(); return(DataBase.DB.ExecuteUpdateMultiple(sql, false, null) >= 0); } // New Columns for (int i = 0; i < list.Count(); i++) { MColumn dCol = list[i]; if (dCol.IsVirtualColumn()) { continue; } String sql = dCol.GetSQLAdd(m_derivedTable); DataBase.DB.ExecuteUpdateMultiple(sql, false, null); } return(true); } // generateTable