public DataSet GetDelta(DataSet source, DataSet changes) { try { LookupTableDataSet lookUpSource = (LookupTableDataSet)source; LookupTableDataSet lookUpSourceCopy = (LookupTableDataSet)source.Copy(); LookupTableDataSet delta = new LookupTableDataSet(); // Build tow lists of Look up DTO's with one list repsenting the root node(all node with rowlevel =1) //and the second list containing all the child nodes( all node at row levels other thna 1) List<List<LookupDTO>> lookups = BuildLookUpObject(changes); //For each root element foreach (LookupDTO lookup in lookups[0]) { // check to ensure it is a root element so as to check does not have any parent node if (lookUpSourceCopy.LookupTableTrees.Any(t => t.Field<Guid?>("LT_PARENT_STRUCT_UID") == (Guid?)lookup.ID) == false) { //If the root node not already existing add a new root node if (lookUpSourceCopy.LookupTableTrees.Any(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ID) == false) { AddTreeNode(lookup, lookUpSourceCopy); } //else Modify the root node else { Modify(lookUpSourceCopy.LookupTableTrees.First(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ID), lookup); } } } //For each child node foreach (LookupDTO lookup in lookups[1]) { //If child node not already existing add a new node if (lookUpSourceCopy.LookupTableTrees.Any(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ID) == false) { AddChildNode(lookup, lookUpSourceCopy); } //else modify the existing node else { LookupTableDataSet.LookupTableTreesRow rowNode = lookUpSourceCopy.LookupTableTrees.First(t => t.RowState != DataRowState.Deleted && t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ID); Modify(rowNode, lookup); } } // Traverse through all child node of each root node and if it is unchanged delete it foreach (LookupDTO lookup in lookups[0]) { //Delete all child rows that are unchanged DeleteAllChilds(lookup.ID, lookUpSourceCopy); } if (lookUpSourceCopy.HasChanges(DataRowState.Added)) delta.Merge( (SvcLookupTable.LookupTableDataSet)lookUpSourceCopy.GetChanges(DataRowState.Added), true); if (lookUpSourceCopy.HasChanges(DataRowState.Modified)) delta.Merge( (SvcLookupTable.LookupTableDataSet)lookUpSourceCopy.GetChanges(DataRowState.Modified), true); if (lookUpSourceCopy.HasChanges(DataRowState.Deleted)) delta.Merge( (SvcLookupTable.LookupTableDataSet)lookUpSourceCopy.GetChanges(DataRowState.Deleted), true); Utility.WriteLog("Get Delta from the Source and Destination Database succeeded", EventLogEntryType.Information); return delta; } catch (Exception ex) { Utility.WriteLog("Error in Get Delta from the Source and Destination Database =" + ex.Message, EventLogEntryType.Error); } return new DataSet(); }
internal static void UpdateLookupTables(LookupTableDataSet lookupTableDataSet) { using (OperationContextScope scope = new OperationContextScope(lookupTableClient.InnerChannel)) { try { WcfHelpers.UseCorrectHeaders(true); lookupTableClient.CheckOutLookupTables(new Guid[] { new Guid(Constants.LOOKUP_ENTITY_ID) }); lookupTableClient.UpdateLookupTables(lookupTableDataSet, false, true, 1033); //lookupTableClient.CheckInLookupTables(new Guid[] { new Guid(Constants.LOOKUP_ENTITY_ID) },true); } catch (SoapException ex) { string errMess = ""; // Pass the exception to the PSClientError constructor to get // all error information. PSLib.PSClientError psiError = new PSLib.PSClientError(ex); PSLib.PSErrorInfo[] psiErrors = psiError.GetAllErrors(); for (int j = 0; j < psiErrors.Length; j++) { errMess += psiErrors[j].ErrId.ToString() + "\n"; } errMess += "\n" + ex.Message.ToString(); // Send error string to console or message box. } } }
private void Modify(LookupTableDataSet.LookupTableTreesRow row, LookupDTO lookup) { try { if (row.RowState == DataRowState.Deleted) { row.RejectChanges(); } row.LT_PARENT_STRUCT_UID = lookup.ParentID; row.LT_VALUE_SORT_INDEX = lookup.SortIndex; row.LT_VALUE_TEXT = lookup.Text; //row.LT_VALUE_FULL = lookup.DotNotation; row.LT_VALUE_DESC = string.Empty; row.LT_UID = new Guid(Constants.LOOKUP_ENTITY_ID); } catch (Exception ex) { Utility.WriteLog("Error in Modifying a Lookup table tree row =" + ex.Message, EventLogEntryType.Error); } }
/// <summary> /// Delete all child nodes for a given root element /// </summary> /// <param name="guid"></param> /// <param name="lookUpSourceCopy"></param> private void DeleteAllChilds(Guid guid, LookupTableDataSet lookUpSourceCopy) { try { if (lookUpSourceCopy.LookupTableTrees.Any(t => t.RowState != DataRowState.Deleted && t.Field<Guid?>("LT_PARENT_STRUCT_UID") == (Guid?)guid) == false) return; EnumerableRowCollection<LookupTableDataSet.LookupTableTreesRow> rows = lookUpSourceCopy.LookupTableTrees.Where(t => t.RowState != DataRowState.Deleted && t.Field<Guid?>("LT_PARENT_STRUCT_UID") == (Guid?)guid); foreach (LookupTableDataSet.LookupTableTreesRow row in rows) { DeleteAllChilds(row.LT_STRUCT_UID, lookUpSourceCopy); if (row.RowState == DataRowState.Unchanged || row.RowState == DataRowState.Detached) { row.Delete(); } } } catch (Exception ex) { Utility.WriteLog("Error in Deleting a Lookup table tree row =" + ex.Message, EventLogEntryType.Error); } }
/// <summary> /// Add Tree Node to the look up Tree /// </summary> /// <param name="lookup"></param> /// <param name="lookUpSourceCopy"></param> private void AddTreeNode(LookupDTO lookup, LookupTableDataSet lookUpSourceCopy) { try { LookupTableDataSet.LookupTableTreesRow row = lookUpSourceCopy.LookupTableTrees.NewLookupTableTreesRow(); row.LT_STRUCT_UID = lookup.ID; if (lookup.ParentID != Guid.Empty) { row.LT_PARENT_STRUCT_UID = lookup.ParentID; } row.LT_VALUE_SORT_INDEX = lookup.SortIndex; row.LT_VALUE_TEXT = lookup.Text; row.LT_VALUE_FULL = lookup.DotNotation; row.LT_VALUE_DESC = string.Empty; row.LT_UID = new Guid(Constants.LOOKUP_ENTITY_ID); lookUpSourceCopy.LookupTableTrees.AddLookupTableTreesRow(row); } catch (Exception ex) { Utility.WriteLog("Error in Adding a Lookup table tree row =" + ex.Message, EventLogEntryType.Error); } }
/// <summary> /// Add Child node to the lookup Tree /// </summary> /// <param name="lookup"></param> /// <param name="lookUpSourceCopy"></param> private void AddChildNode(LookupDTO lookup, LookupTableDataSet lookUpSourceCopy) { try { //If its parent node is present for the node if (lookUpSourceCopy.LookupTableTrees.Any(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ParentID) == true) { // Add or modify depending on whether the node itself already exists if (lookUpSourceCopy.LookupTableTrees.Any(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ID) == false) { AddTreeNode(lookup, lookUpSourceCopy); } else { LookupTableDataSet.LookupTableTreesRow row = lookUpSourceCopy.LookupTableTrees.First(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ID); Modify(row, lookup); } } //Else add up the parent node else { // If aprent node does not already exist in the lookup Tree if (lookUpSourceCopy.LookupTableTrees.Any(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ParentID) == false) { // Add Parent Node if (lookup.ParentNode != null) { AddTreeNode(lookup.ParentNode, lookUpSourceCopy); } } else { //Else modify the Parent Node if (lookup.ParentNode != null) { LookupTableDataSet.LookupTableTreesRow row = lookUpSourceCopy.LookupTableTrees.First(t => t.Field<Guid?>("LT_STRUCT_UID") == (Guid?)lookup.ParentID); Modify(row, lookup.ParentNode); } } } } catch (Exception ex) { Utility.WriteLog("Error in Adding a Lookup table tree row =" + ex.Message, EventLogEntryType.Error); } }
/// <summary> /// Metodo para criar as Lookuptable e suas dependencias /// </summary> /// <param name="pwaDestino">Destino</param> /// <param name="itemRow">Item CustomField</param> /// <param name="ds">Data Set LookupTable</param> public void CreateLooukupTable(string pwaOrigem, string pwaDestino, string pLT_NAME) { try { //verificando se já existe a lookuptable no destino dsLookupTableDestino = GetLookupTable(pwaDestino); DataRow[] dataRowDestino = dsLookupTableDestino.Tables[0].Select("LT_NAME = '" + pLT_NAME + "'"); if (dataRowDestino.Count() > 0) { return; } if (dsLookupTableOrigem == null) { dsLookupTableOrigem = GetLookupTable(pwaOrigem); } DataRow[] dataRow = dsLookupTableOrigem.Tables[0].Select("LT_NAME = '" + pLT_NAME + "'"); SvcLookupTable.LookupTableDataSet ltDS = new LookupTableDataSet(); SvcLookupTable.LookupTableClient clientLookupTable = new LookupTableClient(Binding, endPointAdress(pwaDestino, "/_vti_bin/psi/LookupTable.asmx")); clientLookupTable.ClientCredentials.Windows.ClientCredential = new NetworkCredential(this.User, this.PassWord, this.Domain); foreach (SvcLookupTable.LookupTableDataSet.LookupTablesRow item in dataRow) { SvcLookupTable.LookupTableDataSet.LookupTablesRow ltRow = ltDS.LookupTables.NewLookupTablesRow(); Guid LT_UID = Guid.NewGuid(); ltRow.LT_UID = LT_UID; ltRow.LT_FILL_ALL_LEVELS = item.LT_FILL_ALL_LEVELS; ltRow.LT_NAME = item.LT_NAME; if (!item.IsAPP_ENTITY_UIDNull()) { ltRow.APP_ENTITY_UID = item.APP_ENTITY_UID; } if (!item.IsLT_PRIMARY_LCIDNull()) { ltRow.LT_PRIMARY_LCID = item.LT_PRIMARY_LCID; } if (!item.IsLT_SORT_ORDER_ENUMNull()) { ltRow.LT_SORT_ORDER_ENUM = item.LT_SORT_ORDER_ENUM; } ltDS.LookupTables.Rows.Add(ltRow); foreach (SvcLookupTable.LookupTableDataSet.LookupTableMasksRow itemMaskRow in dsLookupTableOrigem.LookupTableMasks.Select("LT_UID = '" + item.LT_UID + "'")) { SvcLookupTable.LookupTableDataSet.LookupTableMasksRow ltMasksRow = ltDS.LookupTableMasks.NewLookupTableMasksRow(); foreach (DataColumn itemColumn in dsLookupTableOrigem.LookupTableMasks.Columns) { if (!ltDS.LookupTableMasks.Columns.Contains(itemColumn.ToString())) { continue; } if (itemColumn.ToString() == "LT_UID") { ltMasksRow[itemColumn.ToString()] = LT_UID; continue; } if (itemMaskRow[itemColumn.ToString()] != null && !itemColumn.ReadOnly) { ltMasksRow[itemColumn.ToString()] = itemMaskRow[itemColumn.ToString()]; } } //ltMasksRow.LT_MASK_STRUCT_LEVEL = itemMaskRow.LT_MASK_STRUCT_LEVEL; //ltMasksRow.LT_MASK_STRUCT_TYPE_ENUM = itemMaskRow.LT_MASK_STRUCT_TYPE_ENUM; //ltMasksRow.LT_MASK_STRUCT_LENGTH = itemMaskRow.LT_MASK_STRUCT_LENGTH; //ltMasksRow.LT_MASK_VALUE_SEPARATOR = itemMaskRow.LT_MASK_VALUE_SEPARATOR; ltDS.LookupTableMasks.Rows.Add(ltMasksRow); } foreach (SvcLookupTable.LookupTableDataSet.LookupTableTreesRow itemTreesRow in dsLookupTableOrigem.LookupTableTrees.Select("LT_UID = '" + item.LT_UID + "'")) { //ltTreesRow.LT_UID = ltDS.LookupTables[0].LT_UID; SvcLookupTable.LookupTableDataSet.LookupTableTreesRow ltTreesRow = ltDS.LookupTableTrees.NewLookupTableTreesRow(); foreach (DataColumn itemColumn in dsLookupTableOrigem.LookupTableTrees.Columns) { if (!ltDS.LookupTableTrees.Columns.Contains(itemColumn.ToString())) { continue; } //if (itemColumn.ToString() == "LT_STRUCT_UID") //{ // ltTreesRow[itemColumn.ToString()] = Guid.NewGuid(); // continue; //} if (itemColumn.ToString() == "LT_UID") { ltTreesRow[itemColumn.ToString()] = LT_UID; continue; } if (itemTreesRow[itemColumn.ToString()] != null && !itemColumn.ReadOnly) { ltTreesRow[itemColumn.ToString()] = itemTreesRow[itemColumn.ToString()]; } } ltDS.LookupTableTrees.Rows.Add(ltTreesRow); } try { bool validateOnly = false; bool autoCheckIn = true; clientLookupTable.CreateLookupTables(ltDS, validateOnly, autoCheckIn); } catch (SoapException ex) { string errMess = ""; // Pass the exception to the PSClientError constructor to // get all error information. PSLibrary.PSClientError psiError = new PSLibrary.PSClientError(ex); PSLibrary.PSErrorInfo[] psiErrors = psiError.GetAllErrors(); for (int j = 0; j < psiErrors.Length; j++) { errMess += psiErrors[j].ErrId.ToString() + "\n"; } errMess += "\n" + ex.Message.ToString(); MessageBox.Show(errMess); // Send error string to console or message box. } } } catch (Exception ex) { throw ex; } }