Skip to content

Commit 0553a64

Browse files
committed
Adicionar suporte a configurações de listas no XML
Implementa novas funcionalidades para gerenciar configurações de listas no processo de replicação de dados do SharePoint para o SQL Server. - Adiciona a variável privada `_columnMappings` em `SQLInteraction.cs` para armazenar mapeamentos de colunas. - Modifica o método `GetSelectedColumns` em `ConfigHelper.cs` para aceitar um parâmetro opcional `listName`. - Introduz o método `GetListConfigurations` para carregar configurações de listas a partir de um arquivo XML. - Adiciona o método auxiliar `GetListColumns` para extrair colunas específicas de cada lista. - Atualiza `UserConfig.xml` para incluir uma nova estrutura de configuração de listas, permitindo definições específicas e mantendo configurações globais.
1 parent ee12472 commit 0553a64

2 files changed

Lines changed: 101 additions & 1 deletion

File tree

‎SPOtoSQL-Snapshots/ConsoleApp1/Sqlserver/SQLInteraction.cs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ internal class SQLInteraction
3131
// private HashSet<string> SelectedColumns { get; set; }
3232
private HashSet<string> IgnoredColumns { get; set; }
3333
private Dictionary<string, ColumnMapping> ColumnMappings { get; set; }
34+
private Dictionary<string, ColumnMapping> _columnMappings;
3435

3536
/// <summary>
3637
/// Initializes the SQL table for the specified SharePoint list,

‎SPOtoSQL-Snapshots/ConsoleApp1/XmlConfig/ConfigHelper.cs‎

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,32 @@ private static void LoadConfig()
4646
/// <returns>
4747
/// A Dictionary of column mappings, or null if all columns should be included.
4848
/// </returns>
49-
public static Dictionary<string, ColumnMapping> GetSelectedColumns()
49+
public static Dictionary<string, ColumnMapping> GetSelectedColumns(string listName = null)
5050
{
5151
LoadConfig();
5252

5353
try
5454
{
55+
// Primeiro verifica configurações específicas da lista
56+
if (!string.IsNullOrEmpty(listName))
57+
{
58+
var listConfigs = GetListConfigurations();
59+
if (listConfigs != null && listConfigs.TryGetValue(listName, out var listConfig))
60+
{
61+
if (listConfig.Ignore)
62+
{
63+
Console.WriteLine($"List {listName} is configured to be ignored.");
64+
return null;
65+
}
66+
if (listConfig.Columns != null)
67+
{
68+
Console.WriteLine($"Using specific configuration for list: {listName}");
69+
return listConfig.Columns;
70+
}
71+
}
72+
}
73+
74+
// Se não encontrar configuração específica, usa as configurações globais
5575
var columnNodes = _xmlDoc.SelectNodes("//Configuration/ReplicationConfiguration/SelectColumns/column");
5676

5777
if (columnNodes == null || columnNodes.Count == 0)
@@ -298,6 +318,77 @@ private static bool IsValidListConfig(SharePointListConfig config)
298318

299319
return true;
300320
}
321+
322+
public static Dictionary<string, ListConfiguration> GetListConfigurations()
323+
{
324+
LoadConfig();
325+
326+
try
327+
{
328+
var listNodes = _xmlDoc.SelectNodes("//Configuration/ReplicationConfiguration/Lists/List");
329+
if (listNodes == null || listNodes.Count == 0)
330+
return null;
331+
332+
var listConfigs = new Dictionary<string, ListConfiguration>(StringComparer.OrdinalIgnoreCase);
333+
334+
foreach (XmlNode listNode in listNodes)
335+
{
336+
var nameAttr = listNode.Attributes["name"];
337+
var contextAttr = listNode.Attributes["context"];
338+
var ignoreAttr = listNode.Attributes["ignore"];
339+
340+
if (nameAttr != null)
341+
{
342+
var listConfig = new ListConfiguration
343+
{
344+
Name = nameAttr.Value,
345+
Context = contextAttr?.Value,
346+
Ignore = ignoreAttr != null && bool.Parse(ignoreAttr.Value),
347+
Columns = GetListColumns(listNode)
348+
};
349+
350+
listConfigs[listConfig.Name] = listConfig;
351+
}
352+
}
353+
354+
return listConfigs.Count > 0 ? listConfigs : null;
355+
}
356+
catch (Exception ex)
357+
{
358+
Console.WriteLine($"Error reading list configurations: {ex.Message}");
359+
throw;
360+
}
361+
}
362+
363+
private static Dictionary<string, ColumnMapping> GetListColumns(XmlNode listNode)
364+
{
365+
var columnNodes = listNode.SelectNodes(".//Columns/column");
366+
if (columnNodes == null || columnNodes.Count == 0)
367+
return null;
368+
369+
var columnMappings = new Dictionary<string, ColumnMapping>(StringComparer.OrdinalIgnoreCase);
370+
371+
foreach (XmlNode node in columnNodes)
372+
{
373+
var sourceAttr = node.Attributes["source"];
374+
var destAttr = node.Attributes["destination"];
375+
var ignoreAttr = node.Attributes["ignore"];
376+
377+
if (sourceAttr != null)
378+
{
379+
var mapping = new ColumnMapping
380+
{
381+
Source = sourceAttr.Value,
382+
Destination = destAttr?.Value ?? sourceAttr.Value,
383+
Ignore = ignoreAttr != null && bool.Parse(ignoreAttr.Value)
384+
};
385+
386+
columnMappings[mapping.Source] = mapping;
387+
}
388+
}
389+
390+
return columnMappings.Count > 0 ? columnMappings : null;
391+
}
301392
}
302393

303394
/// <summary>
@@ -318,4 +409,12 @@ public class ColumnMapping
318409
public string Destination { get; set; }
319410
public bool Ignore { get; set; }
320411
}
412+
413+
public class ListConfiguration
414+
{
415+
public string Name { get; set; }
416+
public string Context { get; set; }
417+
public bool Ignore { get; set; }
418+
public Dictionary<string, ColumnMapping> Columns { get; set; }
419+
}
321420
}

0 commit comments

Comments
 (0)