private static void ImportImages(IImportClient client, string datasetDirectory) { using (DataTable table = new DataTable()) { IImageBulkArtifactImportJob job = client.CreateImageImportJob(); table.Columns.Add("Bates Number", typeof(string)); table.Columns.Add("Control Number", typeof(string)); table.Columns.Add("File Location", typeof(string)); var fileNames = new List <string> { "EDRM-Sample1.tif", "EDRM-Sample2.tif", "EDRM-Sample3.tif", "EDRM-Sample-000001.tif" }; Random random = new Random(); int index = random.Next(1, fileNames.Count); string fileName = fileNames[index - 1]; string batesNumber = GenerateBatesNumber(fileName); string controlNumber = GenerateControlNumber(fileName); table.Rows.Add(batesNumber, controlNumber, System.IO.Path.Combine(datasetDirectory, $"Images\\{fileName}")); job.Settings.ArtifactTypeId = 10; job.Settings.AutoNumberImages = false; job.Settings.BatesNumberField = "Bates Number"; job.Settings.CopyFilesToDocumentRepository = true; job.Settings.DisableImageLocationValidation = false; job.Settings.DisableImageTypeValidation = false; job.Settings.DisableUserSecurityCheck = true; job.Settings.DocumentIdentifierField = "Control Number"; job.Settings.ExtractedTextEncoding = Encoding.Unicode; job.Settings.ExtractedTextFieldContainsFilePath = false; job.Settings.FileLocationField = "File Location"; job.Settings.IdentityFieldId = 1003667; job.Settings.ImageFilePathSourceFieldName = "File Location"; job.Settings.LoadImportedFullTextFromServer = false; job.Settings.MaximumErrorCount = int.MaxValue - 1; job.Settings.MoveDocumentsInAppendOverlayMode = false; job.Settings.NativeFileCopyMode = "CopyFiles"; job.Settings.OverlayBehavior = "MergeAll"; job.Settings.OverwriteMode = "Append"; job.Settings.SelectedIdentifierFieldName = "Control Number"; job.DataSource = table; job.Execute(); } }
private static void ImportNativeDocs(IImportClient client, string datasetDirectory) { using (DataTable table = new DataTable()) { IBulkArtifactImportJob job = client.CreateNativeDocumentImportJob(); table.Columns.Add("Control Number", typeof(string)); table.Columns.Add("File Path", typeof(string)); var fileNames = new List <string> { "EDRM-Sample1.pdf", "EDRM-Sample2.doc", "EDRM-Sample3.xlsx", "EDRM-Sample4.msg", "EDRM-Sample5.htm", "EDRM-Sample6.emf", "EDRM-Sample7.ppt", "EDRM-Sample9.txt" }; Random random = new Random(); int index = random.Next(1, fileNames.Count); string fileName = fileNames[index - 1]; string controlNumber = GenerateControlNumber(fileName); table.Rows.Add(controlNumber, System.IO.Path.Combine(datasetDirectory, $"Docs\\{fileName}")); // Now setup the job. job.Settings.ArtifactTypeId = 10; job.Settings.CopyFilesToDocumentRepository = true; job.Settings.DisableControlNumberCompatibilityMode = false; job.Settings.DisableExtractedTextFileLocationValidation = false; job.Settings.DisableNativeValidation = false; job.Settings.DisableNativeLocationValidation = false; job.Settings.DisableUserSecurityCheck = true; job.Settings.ExtractedTextEncoding = Encoding.Unicode; job.Settings.ExtractedTextFieldContainsFilePath = false; job.Settings.IdentityFieldId = 1003667; job.Settings.MaximumErrorCount = int.MaxValue - 1; job.Settings.NativeFilePathSourceFieldName = "File Path"; job.Settings.NativeFileCopyMode = "CopyFiles"; job.Settings.OverlayBehavior = "MergeAll"; job.Settings.OverwriteMode = "Append"; job.Settings.StartRecordNumber = 0; job.DataSource = table.CreateDataReader(); job.Execute(); } }
private IImportClient FindClient( string pluginDirectory, ImportConnectionInfo connectionInfo, ImportContext context) { container?.Dispose(); catalog?.Dispose(); // We can add logic here to check for multiple constructions of the import client from the same app domain, // but with different version requests. Compare the plugin directory that was passed in, against a static plugin // directory variable -----------------NOTE - is this not already happening in the calling method? // Note: You MUST use a specific enough filename filter for your plugins and prevent MEF from trying // to do things like load native binaries. this.catalog = new DirectoryCatalog(pluginDirectory, "Relativity.DataExchange.Wrapper.*.dll"); this.container = new CompositionContainer(catalog); this.ImportClients.Clear(); container.ComposeExportedValue("ImportConnectionInfo", connectionInfo); container.ComposeExportedValue("ImportContext", context); container.ComposeParts(this); if (this.ImportClients.Count == 0) { throw new InvalidOperationException( "The import cannot be completed because no plugins were discovered."); } List <Lazy <IImportClient> > candidates = this.ImportClients.ToList(); if (candidates.Count > 1) { throw new InvalidOperationException( "The import cannot be completed because more than 1 plugin was discovered."); } IImportClient client = candidates[0].Value; return(client); }
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); } } }
/// <summary> /// Initializes a new instance of the <see cref="VisitorClientRepository" /> class. /// </summary> /// <param name="applicationSettings">The application settings.</param> public VisitorClientRepository(IApplicationSettings applicationSettings) { if (applicationSettings != null) { this.visitorClient = DIContainer.Instance.Resolve<IVisitorClient>(new ResolverOverride[] { new ParameterOverride(BaseAddressParameterName, applicationSettings.VisitorServiceBaseAddress) }); this.visitPurposeClient = DIContainer.Instance.Resolve<IVisitPurposeClient>(new ResolverOverride[] { new ParameterOverride(BaseAddressParameterName, applicationSettings.VisitorServiceBaseAddress) }); this.visitTypesClient = DIContainer.Instance.Resolve<IVisitTypesClient>(new ResolverOverride[] { new ParameterOverride(BaseAddressParameterName, applicationSettings.VisitorServiceBaseAddress) }); this.visitorImportClient = DIContainer.Instance.Resolve<IImportClient>(new ResolverOverride[] { new ParameterOverride(BaseAddressParameterName, applicationSettings.VisitorServiceBaseAddress) }); this.visitorDepartmentClient = DIContainer.Instance.Resolve<IDepartmentClient>(new ResolverOverride[] { new ParameterOverride(BaseAddressParameterName, applicationSettings.VisitorServiceBaseAddress) }); this.visitorUploadUrlClient = DIContainer.Instance.Resolve<IUploadUrlClient>(new ResolverOverride[] { new ParameterOverride(BaseAddressParameterName, applicationSettings.VisitorServiceBaseAddress) }); } }