fix: Risolto errore "Invalid object name" nel trasferimento dati e pulizia codice
- Modificato GetAllRecordsAsync per utilizzare la stessa connection string del discovery schema - Aggiunto metodo CreateConnection per creare connessioni DB appropriate per tipo - Migliorata gestione nomi tabelle con schema (es. "dbo.OCRD") - Rimossi metodi obsoleti di creazione entità (UpdateEntityData, CreateNewEntity) - Eliminati riferimenti a variabili non dichiarate (newEntityData, isCreatingEntity) - Aggiunto logging debug per connection string e query SQL - Completata implementazione trasferimento dati da database a REST API Il trasferimento dati ora utilizza la stessa connessione per discovery e estrazione, risolvendo problemi di accesso alle tabelle durante l'operazione di upsert.
This commit is contained in:
@@ -109,6 +109,35 @@ namespace DataConnection.REST.Implementations
|
||||
Console.WriteLine($"Error during Salesforce Authentication: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
} /// <summary>
|
||||
/// Authenticates with Salesforce using the credentials from options.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Cancellation token</param>
|
||||
/// <returns>True if authentication is successful</returns>
|
||||
public override async Task<bool> AuthenticateAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
// For Salesforce, we need ClientId, ClientSecret, Username, and Password
|
||||
// These should be provided in the options
|
||||
|
||||
if (string.IsNullOrEmpty(_options.Username) || string.IsNullOrEmpty(_options.Password))
|
||||
{
|
||||
Console.WriteLine("Salesforce authentication requires username and password in options");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(_options.ApiKey) || string.IsNullOrEmpty(_options.AuthToken))
|
||||
{
|
||||
Console.WriteLine("Salesforce authentication requires ApiKey (ClientId) and AuthToken (ClientSecret) in options");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Use the actual credentials from options
|
||||
var clientId = _options.ApiKey; // ClientId should be in ApiKey field
|
||||
var clientSecret = _options.AuthToken; // ClientSecret should be in AuthToken field
|
||||
|
||||
Console.WriteLine($"Using Salesforce credentials - ClientId: {clientId}, Username: {_options.Username}");
|
||||
|
||||
return await AuthenticateAsync(clientId, clientSecret, _options.Username, _options.Password, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -421,6 +450,36 @@ namespace DataConnection.REST.Implementations
|
||||
Console.WriteLine($"Error during Salesforce entity creation: {ex.Message}");
|
||||
Console.WriteLine($"--- End Salesforce Entity Creation Attempt (Exception) ---");
|
||||
return null;
|
||||
} }
|
||||
|
||||
public override async Task<Dictionary<string, object>?> UpsertEntityAsync(string entityName, Dictionary<string, object> entityData, CancellationToken cancellationToken = default)
|
||||
{
|
||||
// Per Salesforce, implementiamo upsert provando prima la creazione
|
||||
// Se fallisce con un errore di duplicato, potremmo implementare logic di aggiornamento
|
||||
// Per ora, semplicemente tentiamo la creazione
|
||||
try
|
||||
{
|
||||
Console.WriteLine($"--- Starting Salesforce Entity Upsert: {entityName} ---");
|
||||
Console.WriteLine($"Entity Data: {string.Join(", ", entityData.Select(kvp => $"{kvp.Key}={kvp.Value}"))}");
|
||||
|
||||
// Prima tenta la creazione
|
||||
var result = await CreateEntityAsync(entityName, entityData, cancellationToken);
|
||||
|
||||
if (result != null)
|
||||
{
|
||||
Console.WriteLine($"Upsert completed successfully via CREATE for {entityName}");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Se la creazione fallisce, potresti implementare qui la logica di aggiornamento
|
||||
// Per ora, restituiamo null
|
||||
Console.WriteLine($"Upsert failed for {entityName}");
|
||||
return null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error during Salesforce entity upsert: {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user