-
Notifications
You must be signed in to change notification settings - Fork 6
/
Sample03_ImportFromTwoDataSources.cs
152 lines (130 loc) · 6.7 KB
/
Sample03_ImportFromTwoDataSources.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// <copyright file="Sample03_ImportFromTwoDataSources.cs" company="Relativity ODA LLC">
// © Relativity All Rights Reserved.
// </copyright>
namespace Relativity.Import.Samples.DotNetFrameworkClient.SamplesCollection
{
using System;
using System.Threading.Tasks;
using Relativity.Import.Samples.DotNetFrameworkClient.ImportSampleHelpers;
using Relativity.Import.V1;
using Relativity.Import.V1.Builders.DataSource;
using Relativity.Import.V1.Builders.Documents;
using Relativity.Import.V1.Models.Settings;
using Relativity.Import.V1.Models.Sources;
using Relativity.Import.V1.Services;
/// <summary>
/// Class containing examples of using import service SDK.
/// </summary>
public partial class ImportServiceSample
{
/// <summary>
/// Example of using two data sources to import documents from them.
/// In this example both data sources are added before import job is started.
/// </summary>
/// <returns>A <see cref="Task"/> representing the result of the asynchronous operation.</returns>
public async Task Sample03_ImportFromTwoDataSources()
{
Console.WriteLine($"Running {nameof(this.Sample03_ImportFromTwoDataSources)}");
// GUID identifiers for import job and data sources.
Guid importId = Guid.NewGuid();
Guid source01Id = Guid.NewGuid();
Guid source02Id = Guid.NewGuid();
// destination workspace artifact Id.
const int workspaceId = 1000000;
// set of columns indexes in load file used in import settings.
const int controlNumberColumnIndex = 0;
const int fileNameColumnIndex = 13;
const int filePathColumnIndex = 22;
// Path to the load files used in data source settings.
const string loadFile01Path = "\\files\\T001\\Files\\SampleDataSources\\load_file_01.dat";
const string loadFile02Path = "\\files\\T001\\Files\\SampleDataSources\\load_file_02.dat";
// Configuration settings for document import. Builder is used to create settings.
ImportDocumentSettings importSettings = ImportDocumentSettingsBuilder.Create()
.WithAppendMode()
.WithNatives(x => x
.WithFilePathDefinedInColumn(filePathColumnIndex)
.WithFileNameDefinedInColumn(fileNameColumnIndex))
.WithoutImages()
.WithFieldsMapped(x => x
.WithField(controlNumberColumnIndex, "Control Number"))
.WithoutFolders();
// Configuration settings for data source. Builder is used to create settings.
DataSourceSettings dataSourceSettings01 = DataSourceSettingsBuilder.Create()
.ForLoadFile(loadFile01Path)
.WithDelimiters(d => d
.WithColumnDelimiters('|')
.WithQuoteDelimiter('^')
.WithNewLineDelimiter('#')
.WithNestedValueDelimiter('&')
.WithMultiValueDelimiter('$'))
.WithFirstLineContainingHeaders()
.WithEndOfLineForWindows()
.WithStartFromBeginning()
.WithDefaultEncoding()
.WithDefaultCultureInfo();
// Configuration settings for second data source. Builder is used to create settings.
DataSourceSettings dataSourceSettings02 = DataSourceSettingsBuilder.Create()
.ForLoadFile(loadFile02Path)
.WithDelimiters(d => d
.WithColumnDelimiters('|')
.WithQuoteDelimiter('^')
.WithNewLineDelimiter('#')
.WithNestedValueDelimiter('&')
.WithMultiValueDelimiter('$'))
.WithoutFirstLineContainingHeaders()
.WithEndOfLineForWindows()
.WithStartFromBeginning()
.WithDefaultEncoding()
.WithDefaultCultureInfo();
using (IDocumentConfigurationController documentConfiguration = this.serviceFactory.CreateProxy<IDocumentConfigurationController>())
using (IImportJobController importJobController = this.serviceFactory.CreateProxy<IImportJobController>())
using (IImportSourceController importSourceController = this.serviceFactory.CreateProxy<IImportSourceController>())
{
// Create import job.
Response response = await importJobController.CreateAsync(
importJobID: importId,
workspaceID: workspaceId,
applicationName: "Import-service-sample-app",
correlationID: "Sample-job-0003");
ResponseHelper.EnsureSuccessResponse(response, "IImportJobController.CreateAsync");
// Add import document settings to existing import job.
response = await documentConfiguration.CreateAsync(workspaceId, importId, importSettings);
ResponseHelper.EnsureSuccessResponse(response, "IDocumentConfigurationController.CreateAsync");
// Add data source settings to existing import job.
response = await importSourceController.AddSourceAsync(workspaceId, importId, source01Id, dataSourceSettings01);
ResponseHelper.EnsureSuccessResponse(response, "IImportSourceController.AddSourceAsync");
// Add second data source settings to existing import job.
// Both data sources are added before job starts.
// Data source can be also added when job is running.
response = await importSourceController.AddSourceAsync(workspaceId, importId, source02Id, dataSourceSettings02);
ResponseHelper.EnsureSuccessResponse(response, "IImportSourceController.AddSourceAsync");
// Start import job.
response = await importJobController.BeginAsync(workspaceId, importId);
ResponseHelper.EnsureSuccessResponse(response, "IImportJobController.BeginAsync");
// End import job.
await importJobController.EndAsync(workspaceId, importId);
ResponseHelper.EnsureSuccessResponse(response, "IImportJobController.EndAsync");
// It may take some time for import job to be completed. Request import job details to monitor the current state.
// You can also get data sources details to verify if import sources are finished.
var importJobState = await this.WaitImportJobToBeCompleted(
funcAsync: () => importJobController.GetDetailsAsync(workspaceId, importId),
timeout: 10000);
Console.WriteLine($"Import job state: {importJobState}");
foreach (var sourceId in new[] { source01Id, source02Id })
{
// Get current import progress for specific data source.
var valueResponse = await importSourceController.GetProgressAsync(workspaceId, importId, sourceId);
if (valueResponse.IsSuccess)
{
Console.WriteLine($"Import data source progress (sourceID: {sourceId}) - Total records: {valueResponse.Value.TotalRecords}, Imported records: {valueResponse.Value.ImportedRecords}, Records with errors: {valueResponse.Value.ErroredRecords}");
}
}
}
}
}
}
/* Expected console result:
Import job state: Completed
Import data source progress (sourceID: 765f398f-66f2-4cb0-b89d-7f597ecf7ecb) - Total records: 4, Imported records: 4, Records with errors: 0
Import data source progress (sourceID: ee95d176-f648-4365-a51e-f24810ef1b0f) - Total records: 2, Imported records: 2, Records with errors: 0
*/