private static Version RetrieveRelativityVersion(ImportConnectionInfo connectionInfo) { try { HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(connectionInfo.WebServiceUrl.Replace("/RelativityWebApi/", "")); httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(connectionInfo.UserName + ":" + connectionInfo.Password))); httpClient.DefaultRequestHeaders.Add("X-CSRF-Header", string.Empty); var VersionEndpointUrl = "/relativity.rest/api/Relativity.Services.InstanceDetails.IInstanceDetailsModule/InstanceDetailsService/GetRelativityVersionAsync"; var response = httpClient.PostAsync(VersionEndpointUrl, new StringContent(string.Empty, Encoding.UTF8, "application/json")).Result; response.EnsureSuccessStatusCode(); string preFormatedVersion = response.Content.ReadAsStringAsync().Result; Version RelVersion = new Version(preFormatedVersion.Replace($"\"", "")); return(RelVersion); } catch (Exception e) { Console.WriteLine(e); throw; } }
private static void ExecuteDemo() { // Note: the legacy/SDK plugins are separated into completely different folders. string rootSolutionDirectory = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\"); string datasetDirectory = System.IO.Path.Combine(rootSolutionDirectory, @"Dataset"); string legacyPluginDirectory = System.IO.Path.Combine(rootSolutionDirectory, @"Plugins\Legacy"); string sdkPluginDirectory = System.IO.Path.Combine(rootSolutionDirectory, @"Plugins\Sdk"); Version MinSdkVersion = new Version(9, 7, 229, 5); // Note: the legacy API does NOT support bearer token auth! ImportConnectionInfo connectionInfo = new ImportConnectionInfo { Password = "******", UserName = "******", UseRsaBearerToken = false, WebServiceUrl = "https://HOSTNAME/RelativityWebApi/", WorkspaceId = 1234567 }; // Note: specify the full path where each plugin directory is located. PluginConfiguration pluginConfiguration = new PluginConfiguration { LegacyPluginDirectory = legacyPluginDirectory, SdkPluginDirectory = sdkPluginDirectory }; // Note: the context decouples import events away from the import job and consistent with the existing object model. ImportContext context = new ImportContext(); context.Complete += (sender, e) => { Console.WriteLine("[Completed Event] Total imported: {0}, Total doc-level errors: {1}", e.TotalImportCount, e.TotalErrorCount); }; context.Error += (sender, e) => { Dictionary <string, object> dict = e.Row.Keys.Cast <string>() .ToDictionary(key => key, key => e.Row[key]); Console.WriteLine("[Error Event] Name Value Pairs: {0}", string.Join(",", dict.Select(x => x.Key + "=" + x.Value))); }; context.FatalException += (sender, e) => { Console.WriteLine("[Fatal Exception Event] {0}", e.Exception); }; context.Message += (sender, e) => { Console.WriteLine("[Message Event] {0}", e.Message); }; context.Progress += (sender, e) => { Console.WriteLine("[Progress Event] Row number: {0}", e.Row); }; context.ProcessProgress += (sender, e) => { Console.WriteLine("[Progress Process Event] Total processed records: {0}", e.TotalRecordsProcessed); }; using (ImportClientPluginFactory pluginFactory = new ImportClientPluginFactory(pluginConfiguration)) { // Automatically pulls the RelativityVersion for the environment supplied in connectionInfo object Version relativityVersion = RetrieveRelativityVersion(connectionInfo); try { // Generally good idea to utilize try catch blocks IImportClient client = pluginFactory.CreateImportClient(relativityVersion, connectionInfo, context); ImportNativeDocs(client, datasetDirectory); ImportImages(client, datasetDirectory); if (relativityVersion >= MinSdkVersion) { Console.WriteLine("CONSOLE - SDK Import Completed."); } else { Console.WriteLine("CONSOLE - Legacy Import Completed."); } } catch (Exception e) { Console.WriteLine(e); } } }