Version 17.1 by Robin Huisman on 2024/04/05 16:20

Hide last authors
Roelof Zwaan 1.1 1 {{toc/}}
2
3
Robin Huisman 8.1 4 = Digital Lab Exchange process =
5
6 The flow diagram gives a small overview of what the data flow of a lab assignment is. Every green block shows a step of the lab assignment process. From top to bottom these steps are:
7
8 1. Showing the laboratory and all the analyses that can be requested as an option to the user.
9 1. The user creating a lab assignment and sending it to the lab trough TerraIndex.
10 1. The lab sending the analysis results back to the TerraIndex.
11
Robin Huisman 17.1 12 [[attach:Lab exchange.svg||rel="noopener noreferrer" target="_blank"]] [[attach:Lab exchange.txt||rel=" noopener noreferrer" target="_blank"]]
Robin Huisman 8.1 13
Robin Huisman 15.1 14 [[image:1712326465681-980.png||height="315" width="630"]]
Robin Huisman 8.1 15
Robin Huisman 15.1 16 [[image:1712326492306-381.png||height="781" width="635"]]
17
18 [[image:1712326520488-924.png||height="312" width="632"]]
19
Robin Huisman 4.1 20 (% element-id="1884" %)
21 = (% element-id="1883" %)Firewall IP-Addresses of TerraIndex(%%) =
Roelof Zwaan 1.1 22
Robin Huisman 4.1 23 (% element-id="1882" %)
Robin Huisman 5.1 24 Our IP-addresses:
Roelof Zwaan 1.1 25
Robin Huisman 4.1 26 (% element-id="1881" %)
27 inbound [[Web.terraindex.com>>url:http://Web.terraindex.com||element-id="1880"]]
Roelof Zwaan 1.1 28 137.116.199.164
29
Robin Huisman 4.1 30 (% element-id="1878" %)
31 outbound [[Test.terraindex.com>>url:http://Test.terraindex.com||element-id="1877"]]
Roelof Zwaan 1.1 32 104.45.9.128
33
Robin Huisman 4.1 34 (% element-id="1875" %)
35 Production outbound
Roelof Zwaan 1.1 36 40.115.34.64
37
Robin Huisman 4.1 38 (% element-id="1873" %)
39 Test outbound
Roelof Zwaan 1.1 40 13.73.138.173
41
Robin Huisman 4.1 42 (% element-id="1871" %)
43 CD/CI outbound
Roelof Zwaan 1.1 44 40.114.238.16
45
Robin Huisman 4.1 46 (% element-id="1869" %)
47 Office outbound
Roelof Zwaan 1.1 48 213.124.115.132
49
50
Robin Huisman 4.1 51 (% element-id="1864" %)
52 = (% element-id="1863" %)Labdelivery (menu-card) files Exchange(%%) =
Roelof Zwaan 1.1 53
Robin Huisman 4.1 54 (% element-id="1862" %)
55 == (% element-id="1861" %)Solution/Design(%%) ==
Roelof Zwaan 1.1 56
57
Robin Huisman 4.1 58 (% class="table-hover" element-id="1858" %)
59 (% element-id="1856" %)|(% element-id="1855" %)(% element-id="1854" %)**Action**|(% element-id="1853" %)(% element-id="1852" %)**TerraIndex**|(% element-id="1851" %) |(% element-id="1849" %)(% element-id="1848" %)**Laboratorium**|(% element-id="1847" %)(% element-id="1846" %)**Parameters/Message**|(% element-id="1845" %)(% element-id="1844" %)**Remarks**|(% element-id="1843" %)(% element-id="1842" %)**ResultCodes**
60 (% element-id="1841" %)|(% element-id="1840" %)1|(% element-id="1839" %)Sends a request to the function: GetCustomers().|=(% element-id="1838" %)>|(% element-id="1837" %) |(% element-id="1835" %)(% element-id="1834" %)**WebserviceUsername (string), **(%%)
61 (% element-id="1832" %)**WebservicePassword (string),**(%%)
62 (% element-id="1830" %)**CustomerUsername (string)**|(% element-id="1829" %) |(% element-id="1827" %)
63 (% element-id="1825" %)|(% element-id="1824" %)2|(% element-id="1823" %) |(% element-id="1821" %) |(% element-id="1819" %)Receives the request and check the customers this username and searches the dateLastChanged for this Customer.|(% element-id="1818" %) |(% element-id="1816" %) |(% element-id="1814" %)
64 (% element-id="1812" %)|(% element-id="1811" %)3|(% element-id="1810" %) |(% element-id="1808" %)<=|(% element-id="1807" %)Sends back the list of customers with the lastChangedTimestamp|(% element-id="1806" %)ResultCode (),
Roelof Zwaan 1.1 65 ErrorMessage (string),
66 List<customer> , Customer:
67 CustomerCode (string),
68 CustomerName (string),
69 LabID (int),
70 LabName (string),
Robin Huisman 4.1 71 ChangedTimeStamp (DateTime)|(% element-id="1798" %)We receive the dateTimestamp instead of sending it, so we always get the full list and we are also able to delete customercodes.|(% element-id="1797" %)1 = Success,
Roelof Zwaan 1.1 72 2 = GeneralError,
73 3 = WrongSIKBVersion,
74 4 = InvalidCredentials,
75 5 = CustomerUsernameInvalid,
76 6 = CustomerUsernameNotValidForCustomerCode
77 7 = FileContentProblem,
78 8 = InvalidOrderId,
79 9 = OrderIdAlreadyApproved
80 10 = PDFNotAvailable
Robin Huisman 4.1 81 (% element-id="1787" %)|(% element-id="1786" %)4|(% element-id="1785" %)Receives the list of Customers, and will check for each customer it needs to request a new/changed labdelivery file based on the ChangedTimestamp.|(% element-id="1784" %) |(% element-id="1782" %) |(% element-id="1780" %) |(% element-id="1778" %)If a customer is not longer in this list, TerraIndex can remove this customercode from the customer database.|(% element-id="1777" %)
82 (% element-id="1775" %)|(% element-id="1774" %)5|(% element-id="1773" %)Sends a request to the function: GetProductList() if it has changed.|=(% element-id="1772" %)>|(% element-id="1771" %) |(% element-id="1769" %)(% element-id="1768" %)**WebserviceUsername (string), **(%%)
83 (% element-id="1766" %)**WebservicePassword (string),**(%%)
84 (% element-id="1764" %)**CustomerUsername (string),**(%%)
Roelof Zwaan 1.1 85 LabID (int),
86 CustomerCode (string),
87 LanguageCode (string, default 'nld' volgens ISO 639-3-codes),
88 SIKBVersion (string, default: '13.4.0'),
Robin Huisman 4.1 89 UseZipStream/UseZip (bool, default: 'false')|(% element-id="1758" %)(% element-id="1757" %)
90 (((
91 (% element-id="1756" %)
Roelof Zwaan 1.1 92 We start with dutch, then extend with multiple languages, TerraIndex is in the lead to request multiple languages.
93 TerraIndex uses: 'fra', 'nld', 'eng', 'spa', 'deu', 'ita', 'por', 'dan'
94
95
Robin Huisman 4.1 96 (% element-id="1752" %)
Roelof Zwaan 1.1 97 Besides SIKB 13.4.0, TerraIndex also supports 9.0.0/8.0.0 etc.
Robin Huisman 4.1 98 )))|(% element-id="1751" %)
99 (% element-id="1749" %)|(% element-id="1748" %)6|(% element-id="1747" %) |(% element-id="1745" %) |(% element-id="1743" %)Reveives a request to create a labdelivery file in a certain version of SIKB. It will generate the file.|(% element-id="1742" %) |(% element-id="1740" %) |(% element-id="1738" %)
100 (% element-id="1736" %)|(% element-id="1735" %)7|(% element-id="1734" %) |(% element-id="1732" %)<=|(% element-id="1731" %)Sends back the SIKB file, as a Base64 encoded string, with or without using a zipstream.|(% element-id="1730" %)ResultCode (),
Roelof Zwaan 1.1 101 ErrorMessage (string),
102 FileContent_Base64 (string),
Robin Huisman 4.1 103 UseZipStream/UseZip (bool, default: 'false')|(% element-id="1726" %) |(% element-id="1724" %)1 = Success,
Roelof Zwaan 1.1 104 2 = GeneralError,
105 3 = WrongSIKBVersion,
106 4 = InvalidCredentials,
107 5 = CustomerUsernameInvalid,
108 6 = CustomerUsernameNotValidForCustomerCode
109 7 = FileContentProblem,
110 8 = InvalidOrderId,
111 9 = OrderIdAlreadyApproved
112 10 = PDFNotAvailable
Robin Huisman 4.1 113 (% element-id="1714" %)|(% element-id="1713" %)8|(% element-id="1712" %)Receives the DeliveryFile and saves the file for import into customer database.|(% element-id="1711" %) |(% element-id="1709" %) |(% element-id="1707" %) |(% element-id="1705" %) |(% element-id="1703" %)
114 (% element-id="1701" %)|(% element-id="1700" %)9|(% element-id="1699" %)Go back to step 5, for every Customer code, every language.|(% element-id="1698" %) |(% element-id="1696" %) |(% element-id="1694" %) |(% element-id="1692" %) |(% element-id="1690" %)
115 (% element-id="1688" %)|(% element-id="1687" %)10|(% element-id="1686" %)Process the LabDeliveryFiles|(% element-id="1685" %) |(% element-id="1683" %) |(% element-id="1681" %) |(% element-id="1679" %) |(% element-id="1677" %)
Roelof Zwaan 1.1 116
Robin Huisman 4.1 117 (% element-id="1675" %)
118 == (% element-id="1674" %)Get Customers (POST)(%%) ==
Roelof Zwaan 1.1 119
Robin Huisman 4.1 120 (% element-id="1673" %)
121 === (% element-id="1672" %)Request example(%%) ===
Roelof Zwaan 1.1 122
Robin Huisman 4.1 123 (% element-id="1671" %)
124 (% element-id="1669" %)|(% element-id="1668" %)(% element-id="1667" %)
125 (((
Robin Huisman 1.4 126 {{code language="C#"}}
Roelof Zwaan 1.1 127 public GetCustomersCall.Response GetCustomers(string WebserviceUsername, string WebservicePassword, string CustomerUsername)
Robin Huisman 1.4 128         {
129             GetCustomersCall.Response set = new GetCustomersCall.Response();
Roelof Zwaan 1.1 130
Robin Huisman 1.4 131             try
132             {
133                 var content = new FormUrlEncodedContent(new[]
134                 {
135                     new KeyValuePair<string, string>("userName", WebserviceUsername),
136                     new KeyValuePair<string, string>("password", WebservicePassword),
137                     new KeyValuePair<string, string>("customerUsername", CustomerUsername),
138                 });
Roelof Zwaan 1.1 139
Robin Huisman 1.4 140                 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetCustomers", content).Result;
141                 response.EnsureSuccessStatusCode();
142                 string responseMessage = response.Content.ReadAsStringAsync().Result;
Roelof Zwaan 1.1 143
Robin Huisman 1.4 144                 if (string.IsNullOrEmpty(responseMessage))
145                 {
146                     throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " / GetCustomers" + "]");
147                 }
148                 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage)))
149                 {
150                     XmlSerializer serializer = new XmlSerializer(typeof(GetCustomersCall.Response));
151                     set = (GetCustomersCall.Response)serializer.Deserialize(ms);                 
152                 }
153             }
154             catch (Exception ex)
155             {
156                 #region handle exception
157                 set.Status = new BusinessEntities.LabRestService.GetCustomersCall.ResponseStatus();
158                 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString();               
159                 set.Status.ErrorMessage = "Exception occurred in GetCustomers (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.Message;
160                 ex.Data.Add("WebserviceUsername", WebserviceUsername);
161                 ex.Data.Add("WebservicePassword", WebservicePassword);
162                 ex.Data.Add("CustomerUsername", CustomerUsername);
163                 ExceptionHandler.HandleException(ex);
164                 #endregion
165             }
166             return set;
167         }
168 {{/code}}
Roelof Zwaan 1.1 169
Robin Huisman 4.1 170 (% element-id="1566" %)
Robin Huisman 1.4 171
Roelof Zwaan 1.1 172 )))
173
Robin Huisman 4.1 174 (% element-id="1564" %)
175 (% element-id="1562" %)|(% element-id="1561" %)(% element-id="1560" %)
176 (((
177 (% element-id="1559" %)
Roelof Zwaan 1.1 178 POST https:~/~/<URL>/GetCustomers HTTP/1.1
179
Robin Huisman 4.1 180 (% element-id="1558" %)
Roelof Zwaan 1.1 181 Content-Type: application/x-www-form-urlencoded
182
Robin Huisman 4.1 183 (% element-id="1557" %)
Roelof Zwaan 1.1 184 Host: 81.175.89.24
185
Robin Huisman 4.1 186 (% element-id="1556" %)
Roelof Zwaan 1.1 187 Content-Length: 115
188
Robin Huisman 4.1 189 (% element-id="1555" %)
Roelof Zwaan 1.1 190 Expect: 100-continue
191
192
Robin Huisman 4.1 193 (% element-id="1552" %)
Roelof Zwaan 1.1 194 userName=<webservice_username>&password=<Webservice_password>&customerUsername=<customer_username or token>
195 )))
196
Robin Huisman 4.1 197 (% element-id="1551" %)
198 === (% element-id="1550" %)Response example(%%) ===
Roelof Zwaan 1.1 199
Robin Huisman 4.1 200 (% element-id="1549" %)
201 (% element-id="1547" %)|(% element-id="1546" %)(% element-id="1545" %)
202 (((
Robin Huisman 3.1 203 {{code language="XML"}}
Roelof Zwaan 1.1 204 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
205 <Response><Customers>
Robin Huisman 4.1 206   <Customer LabId="1" LabName="Example Laboratorium" CustomerId="300" CustomerName="Adviesbureau De bodemkoning - Rotterdam" LastModifiedOnClient="2019-05-08T11:05:14.17+02:00" ></Customer>
207   <Customer LabId="1" LabName="Example Laboratorium" CustomerId="656" CustomerName="Adviesbureau De bodemkoning - Delft" LastModifiedOnClient="2019-04-19T13:20:10.123+02:00" ></Customer>
Roelof Zwaan 1.1 208 </Customers>
209 <Status>
Robin Huisman 3.1 210     <StatusCode>1</StatusCode>
211     <StatusCodeDescription>OK</StatusCodeDescription>
212     <ErrorMessage></ErrorMessage>
Roelof Zwaan 1.1 213 </Status>
Robin Huisman 3.1 214 </Response>
215 {{/code}}
Roelof Zwaan 1.1 216
Robin Huisman 4.1 217 (% element-id="1492" %)
Robin Huisman 3.1 218
Roelof Zwaan 1.1 219 )))
220
Robin Huisman 4.1 221 (% element-id="1490" %)
222 == (% element-id="1489" %)Get Products (POST)(%%) ==
Roelof Zwaan 1.1 223
Robin Huisman 4.1 224 (% element-id="1488" %)
225 === (% element-id="1487" %)Request example(%%) ===
Roelof Zwaan 1.1 226
Robin Huisman 4.1 227 (% element-id="1486" %)
228 (% element-id="1484" %)|(% element-id="1483" %)(% element-id="1482" %)
229 (((
230 (% element-id="1481" %)
Roelof Zwaan 1.1 231 public GetProductsCall.Response GetProductList(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, int labid, string sikbVersion, string languageCode)
232
Robin Huisman 4.1 233 (% element-id="1480" %)
Roelof Zwaan 1.1 234 {
235
236
Robin Huisman 4.1 237 (% element-id="1477" %)
Roelof Zwaan 1.1 238 GetProductsCall.Response set = new GetProductsCall.Response();
239
240
Robin Huisman 4.1 241 (% element-id="1474" %)
Roelof Zwaan 1.1 242 try
243
Robin Huisman 4.1 244 (% element-id="1473" %)
Roelof Zwaan 1.1 245 {
246
Robin Huisman 4.1 247 (% element-id="1472" %)
Roelof Zwaan 1.1 248 bool useZipstream = true;
249
Robin Huisman 4.1 250 (% element-id="1471" %)
Roelof Zwaan 1.1 251 var content = new FormUrlEncodedContent(new[]
252
Robin Huisman 4.1 253 (% element-id="1470" %)
Roelof Zwaan 1.1 254 {
255
Robin Huisman 4.1 256 (% element-id="1469" %)
Roelof Zwaan 1.1 257 new KeyValuePair<string, string>("userName", WebserviceUsername),
258
Robin Huisman 4.1 259 (% element-id="1468" %)
Roelof Zwaan 1.1 260 new KeyValuePair<string, string>("password", WebservicePassword),
261
Robin Huisman 4.1 262 (% element-id="1467" %)
Roelof Zwaan 1.1 263 new KeyValuePair<string, string>("customerUsername", CustomerUsername),
264
Robin Huisman 4.1 265 (% element-id="1466" %)
Roelof Zwaan 1.1 266 new KeyValuePair<string, string>("languageCode", languageCode),
267
Robin Huisman 4.1 268 (% element-id="1465" %)
Roelof Zwaan 1.1 269 new KeyValuePair<string, string>("clientId", customerid),
270
Robin Huisman 4.1 271 (% element-id="1464" %)
Roelof Zwaan 1.1 272 new KeyValuePair<string, string>("sikbVersion", sikbVersion),
273
Robin Huisman 4.1 274 (% element-id="1463" %)
Roelof Zwaan 1.1 275 new KeyValuePair<string, string>("useZip", useZipstream.ToString() ),
276
Robin Huisman 4.1 277 (% element-id="1462" %)
Roelof Zwaan 1.1 278 });
279
280
Robin Huisman 4.1 281 (% element-id="1459" %)
Roelof Zwaan 1.1 282 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetProducts", content).Result;
283
Robin Huisman 4.1 284 (% element-id="1458" %)
Roelof Zwaan 1.1 285 response.EnsureSuccessStatusCode();
286
Robin Huisman 4.1 287 (% element-id="1457" %)
Roelof Zwaan 1.1 288 string responseMessage = response.Content.ReadAsStringAsync().Result;
289
290
Robin Huisman 4.1 291 (% element-id="1454" %)
Roelof Zwaan 1.1 292 if (string.IsNullOrEmpty(responseMessage))
293
Robin Huisman 4.1 294 (% element-id="1453" %)
Roelof Zwaan 1.1 295 {
296
Robin Huisman 4.1 297 (% element-id="1452" %)
Roelof Zwaan 1.1 298 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /GetProducts" + "]");
299
Robin Huisman 4.1 300 (% element-id="1451" %)
Roelof Zwaan 1.1 301 }
302
Robin Huisman 4.1 303 (% element-id="1450" %)
Roelof Zwaan 1.1 304 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~)
305
Robin Huisman 4.1 306 (% element-id="1449" %)
Roelof Zwaan 1.1 307 {
308
Robin Huisman 4.1 309 (% element-id="1448" %)
Roelof Zwaan 1.1 310 XmlSerializer serializer = new XmlSerializer(typeof(GetProductsCall.Response));
311
Robin Huisman 4.1 312 (% element-id="1447" %)
Roelof Zwaan 1.1 313 set = (GetProductsCall.Response)serializer.Deserialize(ms);
314
Robin Huisman 4.1 315 (% element-id="1446" %)
Roelof Zwaan 1.1 316 }
317
318
Robin Huisman 4.1 319 (% element-id="1443" %)
Roelof Zwaan 1.1 320 if (useZipstream && !string.IsNullOrEmpty(set.FileContent))
321
Robin Huisman 4.1 322 (% element-id="1442" %)
Roelof Zwaan 1.1 323 {
324
Robin Huisman 4.1 325 (% element-id="1441" %)
Roelof Zwaan 1.1 326 ~/~/convert from base64 string back to normal
327
Robin Huisman 4.1 328 (% element-id="1440" %)
Roelof Zwaan 1.1 329 ~/~/first check for real Base64, by checking there is no 'xml'  in it
330
Robin Huisman 4.1 331 (% element-id="1439" %)
Roelof Zwaan 1.1 332 if (!set.FileContent.Contains("<labaanlevering"))
333
Robin Huisman 4.1 334 (% element-id="1438" %)
Roelof Zwaan 1.1 335 {
336
Robin Huisman 4.1 337 (% element-id="1437" %)
Roelof Zwaan 1.1 338 set.FileContent = ZipStreamHelper.DecompressBase64StringToString(set.FileContent);
339
Robin Huisman 4.1 340 (% element-id="1436" %)
Roelof Zwaan 1.1 341 }
342
Robin Huisman 4.1 343 (% element-id="1435" %)
Roelof Zwaan 1.1 344 }
345
346
Robin Huisman 4.1 347 (% element-id="1432" %)
Roelof Zwaan 1.1 348 }
349
Robin Huisman 4.1 350 (% element-id="1431" %)
Roelof Zwaan 1.1 351 catch (Exception ex)
352
Robin Huisman 4.1 353 (% element-id="1430" %)
Roelof Zwaan 1.1 354 {
355
Robin Huisman 4.1 356 (% element-id="1429" %)
Roelof Zwaan 1.1 357 #region handle exception
358
359
Robin Huisman 4.1 360 (% element-id="1426" %)
Roelof Zwaan 1.1 361 set.Status = new BusinessEntities.LabRestService.GetProductsCall.ResponseStatus();
362
Robin Huisman 4.1 363 (% element-id="1425" %)
Roelof Zwaan 1.1 364 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString();
365
Robin Huisman 4.1 366 (% element-id="1424" %)
Roelof Zwaan 1.1 367 set.Status.ErrorMessage = "Exception occurred in GetProducts (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.Message;
368
369
Robin Huisman 4.1 370 (% element-id="1421" %)
Roelof Zwaan 1.1 371 ex.Data.Add("WebserviceUsername", WebserviceUsername);
372
Robin Huisman 4.1 373 (% element-id="1420" %)
Roelof Zwaan 1.1 374 ex.Data.Add("WebservicePassword", WebservicePassword);
375
Robin Huisman 4.1 376 (% element-id="1419" %)
Roelof Zwaan 1.1 377 ex.Data.Add("CustomerUsername", CustomerUsername);
378
Robin Huisman 4.1 379 (% element-id="1418" %)
Roelof Zwaan 1.1 380 ex.Data.Add("sikbVersion", sikbVersion);
381
Robin Huisman 4.1 382 (% element-id="1417" %)
Roelof Zwaan 1.1 383 ex.Data.Add("customerid", customerid);
384
Robin Huisman 4.1 385 (% element-id="1416" %)
Roelof Zwaan 1.1 386 ex.Data.Add("languageCode", languageCode);
387
388
Robin Huisman 4.1 389 (% element-id="1413" %)
Roelof Zwaan 1.1 390 ExceptionHandler.HandleException(ex);
391
Robin Huisman 4.1 392 (% element-id="1412" %)
Roelof Zwaan 1.1 393 #endregion
394
Robin Huisman 4.1 395 (% element-id="1411" %)
Roelof Zwaan 1.1 396 }
397
398
Robin Huisman 4.1 399 (% element-id="1408" %)
Roelof Zwaan 1.1 400 return set;
401
Robin Huisman 4.1 402 (% element-id="1407" %)
Roelof Zwaan 1.1 403 }
404 )))
405
Robin Huisman 4.1 406 (% element-id="1406" %)
407 (% element-id="1404" %)|(% element-id="1403" %)(% element-id="1402" %)
408 (((
409 (% element-id="1401" %)
Roelof Zwaan 1.1 410 POST https:~/~/<URL>/GetProducts HTTP/1.1
411
Robin Huisman 4.1 412 (% element-id="1400" %)
Roelof Zwaan 1.1 413 Content-Type: application/x-www-form-urlencoded
414
Robin Huisman 4.1 415 (% element-id="1399" %)
Roelof Zwaan 1.1 416 Host: 81.175.89.24
417
Robin Huisman 4.1 418 (% element-id="1398" %)
Roelof Zwaan 1.1 419 Content-Length: 179
420
Robin Huisman 4.1 421 (% element-id="1397" %)
Roelof Zwaan 1.1 422 Expect: 100-continue
423
424
Robin Huisman 4.1 425 (% element-id="1394" %)
Roelof Zwaan 1.1 426 userName=<webservice_username>&password=<Webservice_password>&customerUsername=<customer_username or token>&languageCode=nld&clientId=300&sikbVersion=13.5.0&useZip=True
427 )))
428
Robin Huisman 4.1 429 (% element-id="1393" %)
430 === (% element-id="1392" %)Response example(%%) ===
Roelof Zwaan 1.1 431
Robin Huisman 4.1 432 (% element-id="1391" %)
433 (% element-id="1389" %)|(% element-id="1388" %)(% element-id="1387" %)
434 (((
435 (% element-id="1386" %)
Roelof Zwaan 1.1 436 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
437
Robin Huisman 4.1 438 (% element-id="1385" %)
Roelof Zwaan 1.1 439 <Response>
440
Robin Huisman 4.1 441 (% element-id="1384" %)
Roelof Zwaan 1.1 442 <FileContent> {SIKB FILE in ZIPSTREAM BASE64 format}</FileContent>
443
Robin Huisman 4.1 444 (% element-id="1383" %)
Roelof Zwaan 1.1 445 <Status>
446
Robin Huisman 4.1 447 (% element-id="1382" %)
Roelof Zwaan 1.1 448 <StatusCode>1</StatusCode>
449
Robin Huisman 4.1 450 (% element-id="1381" %)
Roelof Zwaan 1.1 451 <StatusCodeDescription>OK</StatusCodeDescription>
452
Robin Huisman 4.1 453 (% element-id="1380" %)
Roelof Zwaan 1.1 454 <ErrorMessage></ErrorMessage>
455
Robin Huisman 4.1 456 (% element-id="1379" %)
Roelof Zwaan 1.1 457 </Status></Response>
458 )))
459
Robin Huisman 4.1 460 (% element-id="1378" %)
Robin Huisman 6.1 461 = (% element-id="1377" %)Useraccount Checkup.(%%) =
Roelof Zwaan 1.1 462
Robin Huisman 4.1 463 (% element-id="1374" %)
464 == (% element-id="1373" %)Solution/Design(%%) ==
Roelof Zwaan 1.1 465
Robin Huisman 4.1 466 (% element-id="1372" %)
467 With every call we will no longer send customer usernames and customer passwords. We want to use a fixed Machine 2 Machine username and password for TerraIndex. So we need to be able to quickly check whether the Customer username we want to use exists, and is bound to our TerraIndex fixed Machine 2 machine account.
Roelof Zwaan 1.1 468
Robin Huisman 4.1 469 (% element-id="1371" %)
Roelof Zwaan 1.1 470 WebserviceUsername (string),
471 WebservicePassword (string),
472 CustomerUsername (string)
473
474
Robin Huisman 4.1 475 (% element-id="1366" %)
476 Therefor we call a Webserice for ValidCredentials Check:
Roelof Zwaan 1.1 477
478
Robin Huisman 4.1 479 (% class="table-hover" element-id="1363" %)
480 (% element-id="1361" %)|(% element-id="1360" %)(% element-id="1359" %)**Action**|(% element-id="1358" %)(% element-id="1357" %)**TerraIndex**|(% element-id="1356" %) |(% element-id="1354" %)(% element-id="1353" %)**Laboratorium**|(% element-id="1352" %)(% element-id="1351" %)**Parameters/Message**|(% element-id="1350" %)(% element-id="1349" %)**Remarks**|(% element-id="1348" %)(% element-id="1347" %)**ResultCodes**
481 (% element-id="1346" %)|(% element-id="1345" %)1|(% element-id="1344" %)Sends a request to the function: ValidCredentials().|=(% element-id="1343" %)>|(% element-id="1342" %) |(% element-id="1340" %)WebserviceUsername (string),
Roelof Zwaan 1.1 482 WebservicePassword (string),
Robin Huisman 4.1 483 CustomerUsername (string)|(% element-id="1337" %)We want to skip the Password of the customer, and we use the WebserviceUsername + WebservicePassword for real authentication.|(% element-id="1336" %)
484 (% element-id="1334" %)|(% element-id="1333" %)2|(% element-id="1332" %) |(% element-id="1330" %) |(% element-id="1328" %)Receives the request and checks the combination of WebserviceUsername and WebservicePassword is Ok. Then checks the CustomerUsername is valid.|(% element-id="1327" %) |(% element-id="1325" %) |(% element-id="1323" %)
485 (% element-id="1321" %)|(% element-id="1320" %)3|(% element-id="1319" %) |(% element-id="1317" %)<=|(% element-id="1316" %)Sends back a Success of InvalidCredentials|(% element-id="1315" %)ResultCode (),
486 ErrorMessage (string),|(% element-id="1313" %) |(% element-id="1311" %)1 = Success,
Roelof Zwaan 1.1 487 2 = GeneralError,
488 3 = WrongSIKBVersion,
489 4 = InvalidCredentials,
490 5 = CustomerUsernameInvalid,
491 6 = CustomerUsernameNotValidForCustomerCode
492 7 = FileContentProblem,
493 8 = InvalidOrderId,
494 9 = OrderIdAlreadyApproved
495 10 = PDFNotAvailable
496
Robin Huisman 4.1 497 (% element-id="1301" %)
498 == (% element-id="1300" %)Check ValidCredentials (POST)(%%) ==
Roelof Zwaan 1.1 499
Robin Huisman 4.1 500 (% element-id="1299" %)
501 === (% element-id="1298" %)Request example(%%) ===
Roelof Zwaan 1.1 502
Robin Huisman 4.1 503 (% element-id="1297" %)
504 (% element-id="1295" %)|(% element-id="1294" %)(% element-id="1293" %)
505 (((
506 (% element-id="1292" %)
Roelof Zwaan 1.1 507 public ValidCredentialsCall.Response ValidCredentials(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid)
508
Robin Huisman 4.1 509 (% element-id="1291" %)
Roelof Zwaan 1.1 510 {
511
Robin Huisman 4.1 512 (% element-id="1290" %)
Roelof Zwaan 1.1 513 ValidCredentialsCall.Response set = new ValidCredentialsCall.Response();
514
515
Robin Huisman 4.1 516 (% element-id="1287" %)
Roelof Zwaan 1.1 517 try
518
Robin Huisman 4.1 519 (% element-id="1286" %)
Roelof Zwaan 1.1 520 {
521
522
Robin Huisman 4.1 523 (% element-id="1283" %)
Roelof Zwaan 1.1 524 var content = new FormUrlEncodedContent(new[]
525
Robin Huisman 4.1 526 (% element-id="1282" %)
Roelof Zwaan 1.1 527 {
528
Robin Huisman 4.1 529 (% element-id="1281" %)
Roelof Zwaan 1.1 530 new KeyValuePair<string, string>("userName", WebserviceUsername),
531
Robin Huisman 4.1 532 (% element-id="1280" %)
Roelof Zwaan 1.1 533 new KeyValuePair<string, string>("password", WebservicePassword),
534
Robin Huisman 4.1 535 (% element-id="1279" %)
Roelof Zwaan 1.1 536 ~/~/new KeyValuePair<string, string>("clientId", customerid),   ~/~/ Optional
537
Robin Huisman 4.1 538 (% element-id="1278" %)
Roelof Zwaan 1.1 539 new KeyValuePair<string, string>("customerUsername", CustomerUsername),
540
Robin Huisman 4.1 541 (% element-id="1277" %)
Roelof Zwaan 1.1 542 });
543
544
Robin Huisman 4.1 545 (% element-id="1274" %)
Roelof Zwaan 1.1 546 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/ValidCredentials", content).Result;
547
Robin Huisman 4.1 548 (% element-id="1273" %)
Roelof Zwaan 1.1 549 response.EnsureSuccessStatusCode();
550
Robin Huisman 4.1 551 (% element-id="1272" %)
Roelof Zwaan 1.1 552 string responseMessage = response.Content.ReadAsStringAsync().Result;
553
554
Robin Huisman 4.1 555 (% element-id="1269" %)
Roelof Zwaan 1.1 556 if (string.IsNullOrEmpty(responseMessage))
557
Robin Huisman 4.1 558 (% element-id="1268" %)
Roelof Zwaan 1.1 559 {
560
Robin Huisman 4.1 561 (% element-id="1267" %)
Roelof Zwaan 1.1 562 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " / ValidCredentials" + "]");
563
Robin Huisman 4.1 564 (% element-id="1266" %)
Roelof Zwaan 1.1 565 }
566
Robin Huisman 4.1 567 (% element-id="1265" %)
Roelof Zwaan 1.1 568 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~)
569
Robin Huisman 4.1 570 (% element-id="1264" %)
Roelof Zwaan 1.1 571 {
572
Robin Huisman 4.1 573 (% element-id="1263" %)
Roelof Zwaan 1.1 574 XmlSerializer serializer = new XmlSerializer(typeof(ValidCredentialsCall.Response));
575
Robin Huisman 4.1 576 (% element-id="1262" %)
Roelof Zwaan 1.1 577 set = (ValidCredentialsCall.Response)serializer.Deserialize(ms);
578
579
Robin Huisman 4.1 580 (% element-id="1259" %)
Roelof Zwaan 1.1 581 return set;
582
Robin Huisman 4.1 583 (% element-id="1258" %)
Roelof Zwaan 1.1 584 }
585
586
Robin Huisman 4.1 587 (% element-id="1255" %)
Roelof Zwaan 1.1 588 }
589
Robin Huisman 4.1 590 (% element-id="1254" %)
Roelof Zwaan 1.1 591 catch (Exception ex)
592
Robin Huisman 4.1 593 (% element-id="1253" %)
Roelof Zwaan 1.1 594 {
595
Robin Huisman 4.1 596 (% element-id="1252" %)
Roelof Zwaan 1.1 597 #region handle exception
598
599
Robin Huisman 4.1 600 (% element-id="1249" %)
Roelof Zwaan 1.1 601 set.Status = new BusinessEntities.LabRestService.ValidCredentialsCall.ResponseStatus();
602
Robin Huisman 4.1 603 (% element-id="1248" %)
Roelof Zwaan 1.1 604 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString();
605
Robin Huisman 4.1 606 (% element-id="1247" %)
Roelof Zwaan 1.1 607 set.Status.ErrorMessage = "Exception occurred in GetValidCredentials (username: " + WebserviceUsername + ", with message: " + ex.Message;
608
609
Robin Huisman 4.1 610 (% element-id="1244" %)
Roelof Zwaan 1.1 611 ex.Data.Add("WebserviceUsername", WebserviceUsername);
612
Robin Huisman 4.1 613 (% element-id="1243" %)
Roelof Zwaan 1.1 614 ex.Data.Add("WebservicePassword", WebservicePassword);
615
Robin Huisman 4.1 616 (% element-id="1242" %)
Roelof Zwaan 1.1 617 ex.Data.Add("CustomerUsername", CustomerUsername);
618
619
Robin Huisman 4.1 620 (% element-id="1239" %)
Roelof Zwaan 1.1 621 ExceptionHandler.HandleException(ex);
622
Robin Huisman 4.1 623 (% element-id="1238" %)
Roelof Zwaan 1.1 624 #endregion
625
Robin Huisman 4.1 626 (% element-id="1237" %)
Roelof Zwaan 1.1 627 }
628
629
Robin Huisman 4.1 630 (% element-id="1234" %)
Roelof Zwaan 1.1 631 return set;
632
Robin Huisman 4.1 633 (% element-id="1233" %)
Roelof Zwaan 1.1 634 }
635 )))
636
Robin Huisman 4.1 637 (% element-id="1232" %)
638 (% element-id="1230" %)|(% element-id="1229" %)(% element-id="1228" %)
639 (((
640 (% element-id="1227" %)
Roelof Zwaan 1.1 641 POST https:~/~/<URL>/ValidCredentials HTTP/1.1
642
Robin Huisman 4.1 643 (% element-id="1226" %)
Roelof Zwaan 1.1 644 Content-Type: application/x-www-form-urlencoded
645
Robin Huisman 4.1 646 (% element-id="1225" %)
Roelof Zwaan 1.1 647 Host: 81.175.89.24
648
Robin Huisman 4.1 649 (% element-id="1224" %)
Roelof Zwaan 1.1 650 Content-Length: 125
651
Robin Huisman 4.1 652 (% element-id="1223" %)
Roelof Zwaan 1.1 653 Expect: 100-continue
654
655
Robin Huisman 4.1 656 (% element-id="1220" %)
Roelof Zwaan 1.1 657 userName=<webservice_username>&password=<Webservice_password>&clientId=<optional otherwise empty>&customerUsername=<customer_username or token>
658 )))
659
Robin Huisman 4.1 660 (% element-id="1219" %)
661 === (% element-id="1218" %)Response example(%%) ===
Roelof Zwaan 1.1 662
Robin Huisman 4.1 663 (% element-id="1217" %)
664 (% element-id="1215" %)|(% element-id="1214" %)(% element-id="1213" %)
665 (((
666 (% element-id="1212" %)
Roelof Zwaan 1.1 667 <?xml version="1.0" encoding="UTF-8" standalone="no"?><Response>
668
Robin Huisman 4.1 669 (% element-id="1211" %)
Roelof Zwaan 1.1 670 <Status>
671
Robin Huisman 4.1 672 (% element-id="1210" %)
Roelof Zwaan 1.1 673 <StatusCode>1</StatusCode>
674
Robin Huisman 4.1 675 (% element-id="1209" %)
Roelof Zwaan 1.1 676 <StatusCodeDescription>OK</StatusCodeDescription>
677
Robin Huisman 4.1 678 (% element-id="1208" %)
Roelof Zwaan 1.1 679 <ErrorMessage></ErrorMessage>
680
Robin Huisman 4.1 681 (% element-id="1207" %)
Roelof Zwaan 1.1 682 </Status>
683
Robin Huisman 4.1 684 (% element-id="1206" %)
Roelof Zwaan 1.1 685 </Response>
686 )))
687
Robin Huisman 4.1 688 (% element-id="1205" %)
689 = (% element-id="1204" %)Labassignment request delivery(POST)(%%) =
Roelof Zwaan 1.1 690
Robin Huisman 4.1 691 (% element-id="1203" %)
692 == (% element-id="1202" %)Solution/Design(%%) ==
Roelof Zwaan 1.1 693
Robin Huisman 4.1 694 (% element-id="1201" %)
695 For this we create a Webserice for CreateOrder to create the order in the lab system.
696 After the creation, we would like to show an order overview of the laboratory in the future in PDF. The user can see the prices and can confirm or cancel.
697 Depending on the user's choice at the laboratory, to support this or not, TerraIndex calls the ApproveOrder or the CancelOrder.
Roelof Zwaan 1.1 698
Robin Huisman 4.1 699 (% element-id="0" %)
700 For default we assume that we cannot do this yet, and TerraIndex sends needsApprovalIsSupported = false. If this becomes true in the future, the Lab can indicate whether or not it is necessary in the NeedsApprove field.
Roelof Zwaan 1.1 701
702
Robin Huisman 4.1 703 (% class="table-hover" element-id="1195" %)
704 (% element-id="1193" %)|(% element-id="1192" %)(% element-id="1191" %)**Action**|(% element-id="1190" %)(% element-id="1189" %)**TerraIndex**|(% element-id="1188" %) |(% element-id="1186" %)(% element-id="1185" %)**Laboratorium**|(% element-id="1184" %)(% element-id="1183" %)**Parameters/Message**|(% element-id="1182" %)(% element-id="1181" %)**Remarks**|(% element-id="1180" %)(% element-id="1179" %)**ResultCodes**
705 (% element-id="1178" %)|(% element-id="1177" %)1|(% element-id="1176" %)Sends a request to the function: CreateOrder().|=(% element-id="1175" %)>|(% element-id="1174" %) |(% element-id="1172" %)WebserviceUsername (string),
Roelof Zwaan 1.1 706 WebservicePassword (string),
707 CustomerUsername (string),
708 FileContent_Base64 (string),
709 UseZipStream/UseZip (bool, default: 'false'),
710 CustomerCode (string),
711 SIKBVersion (string, default: '13.4.0'),
Robin Huisman 4.1 712 needsApprovalIsSupported (bool)|(% element-id="1164" %)SIKB Version included, so labs can quickly check the version.
Roelof Zwaan 1.1 713 Besides SIKB 13.4.0, TerraIndex also supports 9.0.0.
714 \\Before sending the SIKB, validate to the XSD!
715 And to the XSLT?
716 \\needsApprovalIsSupported = false; means we dont get PDF with offerte. This will make is faster.
Robin Huisman 4.1 717 needsApprovalIsSupported = true; means lab will check the user setting to send a PDF Offerte back or not. (If the lab can support this.)|(% element-id="1156" %)
718 (% element-id="1154" %)|(% element-id="1153" %)2|(% element-id="1152" %) |(% element-id="1150" %) |(% element-id="1148" %)Receives the request and checks the credentials.|(% element-id="1147" %) |(% element-id="1145" %) |(% element-id="1143" %)
719 (% element-id="1141" %)|(% colspan="1" element-id="1140" %)3|(% colspan="1" element-id="1139" %) |(% colspan="1" element-id="1137" %) |(% colspan="1" element-id="1135" %)Credentials are valid, the Filecontent is checked on a valid Labassignment. When valid it will be processed and a OrderId is given.|(% colspan="1" element-id="1134" %) |(% colspan="1" element-id="1132" %)Laboratorium saves the Sample GUIDs if it's SIKB 13 or higher.
720 Otherwise we use the idanlmons unique ID.|(% colspan="1" element-id="1130" %)
721 (% element-id="1128" %)|(% colspan="1" element-id="1127" %) |(% colspan="1" element-id="1125" %) |(% colspan="1" element-id="1123" %) |(% colspan="1" element-id="1121" %)Based on what customer, the order will be approved or the approve needs to be done in laboratorium system.|(% colspan="1" element-id="1120" %) |(% colspan="1" element-id="1118" %) |(% colspan="1" element-id="1116" %)
722 (% element-id="1114" %)|(% element-id="1113" %)4|(% element-id="1112" %) |(% element-id="1110" %)<=|(% element-id="1109" %)Sends back a Success with the new OrderId|(% element-id="1108" %)ResultCode (),
Roelof Zwaan 1.1 723 ErrorMessage (string),
724 OrderId (string),
725 NeedsApprove (bool),
726 FileContent_Base64 (string),
Robin Huisman 4.1 727 UseZipStream/UseZip (bool, default: 'false'),|(% element-id="1102" %)In the future labs will send back the PDF with the prices and some checks. To approve or cancel. For the first version this is not required yet and the fileContent remains empty.|(% element-id="1101" %)1 = Success,
Roelof Zwaan 1.1 728 2 = GeneralError,
729 3 = WrongSIKBVersion,
730 4 = InvalidCredentials,
731 5 = CustomerUsernameInvalid,
732 6 = CustomerUsernameNotValidForCustomerCode
733 7 = FileContentProblem,
734 8 = InvalidOrderId,
735 9 = OrderIdAlreadyApproved
736 10 = PDFNotAvailable
Robin Huisman 4.1 737 (% element-id="1091" %)|(% colspan="1" element-id="1090" %)6|(% colspan="1" element-id="1089" %)Receives the OrderId, and saves it.
738 |(% colspan="1" element-id="1086" %) |(% colspan="1" element-id="1084" %) |(% colspan="1" element-id="1082" %) |(% colspan="1" element-id="1080" %)(% element-id="1079" %)
739 (((
740 (% element-id="1078" %)
Roelof Zwaan 1.1 741 Default for now laboratorium will send:
742 NeedsApprove = False,
743 PDF = Empty,
744 Zipstream = False,
745
746
Robin Huisman 4.1 747 (% element-id="1072" %)
Roelof Zwaan 1.1 748 In the future, do something with the PDF and show the PDF to users to Approve or Cancel.
749 This will be done by; NeedsApprove = true.
750 \\If NeedsApprove is False, the order is Processed and can't be changed in TI. Like it is now.
751
Robin Huisman 4.1 752 (% element-id="1068" %)
Roelof Zwaan 1.1 753
Robin Huisman 4.1 754 )))|(% colspan="1" element-id="1066" %)
755 (% element-id="1064" %)|(% colspan="1" element-id="1063" %) |(% colspan="1" element-id="1061" %) |(% colspan="1" element-id="1059" %) |(% colspan="1" element-id="1057" %) |(% colspan="1" element-id="1055" %) |(% colspan="1" element-id="1053" %) |(% colspan="1" element-id="1051" %)
756 (% element-id="1049" %)|(% colspan="1" element-id="1048" %) |(% colspan="1" element-id="1046" %) |(% colspan="1" element-id="1044" %) |(% colspan="1" element-id="1042" %) |(% colspan="1" element-id="1040" %) |(% colspan="1" element-id="1038" %) |(% colspan="1" element-id="1036" %)
757 (% element-id="1034" %)|(% colspan="1" element-id="1033" %) |(% colspan="1" element-id="1031" %)(% element-id="1030" %)**IN THE FUTURE: APPROVEORDER**|(% colspan="1" element-id="1029" %) |(% colspan="1" element-id="1027" %) |(% colspan="1" element-id="1025" %) |(% colspan="1" element-id="1023" %) |(% colspan="1" element-id="1021" %)
758 (% element-id="1019" %)|(% colspan="1" element-id="1018" %)7|(% colspan="1" element-id="1017" %)Sends a request to the function: ApproveOrder().|(% colspan="1" element-id="1016" %)=>|(% colspan="1" element-id="1015" %) |(% colspan="1" element-id="1013" %)WebserviceUsername (string),
Roelof Zwaan 1.1 759 WebservicePassword (string),
760 CustomerUsername (string),
Robin Huisman 4.1 761 OrderId (string)|(% colspan="1" element-id="1009" %) |(% colspan="1" element-id="1007" %)
762 (% element-id="1005" %)|(% colspan="1" element-id="1004" %)8|(% colspan="1" element-id="1003" %) |(% colspan="1" element-id="1001" %) |(% colspan="1" element-id="999" %)Receives the approve and checks the credentials and the OrderId.|(% colspan="1" element-id="998" %) |(% colspan="1" element-id="996" %) |(% colspan="1" element-id="994" %)
763 (% element-id="992" %)|(% colspan="1" element-id="991" %)9|(% colspan="1" element-id="990" %) |(% colspan="1" element-id="988" %)<=|(% colspan="1" element-id="987" %)Sends back a Success with the new CertificateNr|(% colspan="1" element-id="986" %)ResultCode (),
Roelof Zwaan 1.1 764 ErrorMessage (string),
Robin Huisman 4.1 765 CertificateNr (string)|(% colspan="1" element-id="983" %)This process takes too long at some labs. Maybe this won't be workable...so maybe the CertificateNr return won't be possible. In this case, leave the CertificateNr empty. TerraIndex will read it from GetOrderStatus calls.|(% colspan="1" element-id="982" %)1 = Success,
Roelof Zwaan 1.1 766 2 = GeneralError,
767 3 = WrongSIKBVersion,
768 4 = InvalidCredentials,
769 5 = CustomerUsernameInvalid,
770 6 = CustomerUsernameNotValidForCustomerCode
771 7 = FileContentProblem,
772 8 = InvalidOrderId,
773 9 = OrderIdAlreadyApproved
774 10 = PDFNotAvailable
Robin Huisman 4.1 775 (% element-id="972" %)|(% colspan="1" element-id="971" %)10|(% colspan="1" element-id="970" %)Receives the CerificateNr and saves it.|(% colspan="1" element-id="969" %) |(% colspan="1" element-id="967" %) |(% colspan="1" element-id="965" %) |(% colspan="1" element-id="963" %) |(% colspan="1" element-id="961" %)
776 (% element-id="959" %)|(% colspan="1" element-id="958" %) |(% colspan="1" element-id="956" %) |(% colspan="1" element-id="954" %) |(% colspan="1" element-id="952" %) |(% colspan="1" element-id="950" %) |(% colspan="1" element-id="948" %) |(% colspan="1" element-id="946" %)
777 (% element-id="944" %)|(% colspan="1" element-id="943" %) |(% colspan="1" element-id="941" %)(% element-id="940" %)**IN THE FUTURE: CANCELORDER**|(% colspan="1" element-id="939" %) |(% colspan="1" element-id="937" %) |(% colspan="1" element-id="935" %) |(% colspan="1" element-id="933" %) |(% colspan="1" element-id="931" %)
778 (% element-id="929" %)|(% element-id="928" %)7|(% element-id="927" %)Sends a request to the function: CancelOrder().|=(% element-id="926" %)>|(% element-id="925" %) |(% element-id="923" %)WebserviceUsername (string),
Roelof Zwaan 1.1 779 WebservicePassword (string),
780 CustomerUsername (string),
Robin Huisman 4.1 781 OrderId (string)|(% element-id="919" %) |(% element-id="917" %)
782 (% element-id="915" %)|(% element-id="914" %)8|(% element-id="913" %) |(% element-id="911" %) |(% element-id="909" %)Receives the cancel and checks the credentials and the OrderId.|(% element-id="908" %) |(% element-id="906" %) |(% element-id="904" %)
783 (% element-id="902" %)|(% element-id="901" %)9|(% element-id="900" %) |(% element-id="898" %)<=|(% element-id="897" %)Sends back a Success |(% element-id="896" %)ResultCode (),
784 ErrorMessage (string)|(% element-id="894" %) |(% element-id="892" %)1 = Success,
Roelof Zwaan 1.1 785 2 = GeneralError,
786 3 = WrongSIKBVersion,
787 4 = InvalidCredentials,
788 5 = CustomerUsernameInvalid,
789 6 = CustomerUsernameNotValidForCustomerCode
790 7 = FileContentProblem,
791 8 = InvalidOrderId,
792 9 = OrderIdAlreadyApproved
793 10 = PDFNotAvailable
Robin Huisman 4.1 794 (% element-id="882" %)|(% element-id="881" %)10|(% element-id="880" %)Removes the OrderId and the IsSend to False|(% element-id="879" %) |(% element-id="877" %) |(% element-id="875" %) |(% element-id="873" %)If OrderIsAleadyApproved, set the values to Approved and keep the OrderId and IsSend.|(% element-id="872" %)
795 (% element-id="870" %)|(% colspan="1" element-id="869" %) |(% colspan="1" element-id="867" %) |(% colspan="1" element-id="865" %) |(% colspan="1" element-id="863" %) |(% colspan="1" element-id="861" %) |(% colspan="1" element-id="859" %) |(% colspan="1" element-id="857" %)
Roelof Zwaan 1.1 796
Robin Huisman 4.1 797 (% element-id="855" %)
798 == (% element-id="854" %)Create Order(%%) ==
Roelof Zwaan 1.1 799
Robin Huisman 4.1 800 (% element-id="853" %)
801 === (% element-id="852" %)Request example(%%) ===
Roelof Zwaan 1.1 802
Robin Huisman 4.1 803 (% element-id="851" %)
804 (% element-id="849" %)|(% element-id="848" %)(% element-id="847" %)
805 (((
806 (% element-id="846" %)
Roelof Zwaan 1.1 807 public CreateOrderResponse.Response SendLabAssignment(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, string sikbVersion, string assignmentXML, string languageCode, bool needsApprovalIsSupported = false)
808
Robin Huisman 4.1 809 (% element-id="845" %)
Roelof Zwaan 1.1 810 {
811
Robin Huisman 4.1 812 (% element-id="844" %)
Roelof Zwaan 1.1 813 CreateOrderResponse.Response set = new CreateOrderResponse.Response();
814
815
Robin Huisman 4.1 816 (% element-id="841" %)
Roelof Zwaan 1.1 817 try
818
Robin Huisman 4.1 819 (% element-id="840" %)
Roelof Zwaan 1.1 820 {
821
Robin Huisman 4.1 822 (% element-id="839" %)
Roelof Zwaan 1.1 823 bool useZipstream = true;
824
825
Robin Huisman 4.1 826 (% element-id="836" %)
Roelof Zwaan 1.1 827 MultipartFormDataContent content = new MultipartFormDataContent();
828
829
Robin Huisman 4.1 830 (% element-id="833" %)
Roelof Zwaan 1.1 831 ~/~/Add Formdata
832
Robin Huisman 4.1 833 (% element-id="832" %)
Roelof Zwaan 1.1 834 var formDataDictionary = new[]
835
Robin Huisman 4.1 836 (% element-id="831" %)
Roelof Zwaan 1.1 837 {
838
Robin Huisman 4.1 839 (% element-id="830" %)
Roelof Zwaan 1.1 840 new KeyValuePair<string, string>("userName", WebserviceUsername),
841
Robin Huisman 4.1 842 (% element-id="829" %)
Roelof Zwaan 1.1 843 new KeyValuePair<string, string>("password", WebservicePassword),
844
Robin Huisman 4.1 845 (% element-id="828" %)
Roelof Zwaan 1.1 846 new KeyValuePair<string, string>("customerUserName", CustomerUsername),
847
Robin Huisman 4.1 848 (% element-id="827" %)
Roelof Zwaan 1.1 849 new KeyValuePair<string, string>("clientId", customerid),
850
Robin Huisman 4.1 851 (% element-id="826" %)
Roelof Zwaan 1.1 852 new KeyValuePair<string, string>("sikbVersion", sikbVersion),
853
Robin Huisman 4.1 854 (% element-id="825" %)
Roelof Zwaan 1.1 855 new KeyValuePair<string, string>("languageCode", languageCode),
856
Robin Huisman 4.1 857 (% element-id="824" %)
Roelof Zwaan 1.1 858 new KeyValuePair<string, string>("useZip", useZipstream.ToString() ),
859
Robin Huisman 4.1 860 (% element-id="823" %)
Roelof Zwaan 1.1 861 new KeyValuePair<string, string>("needsApprovalIsSupported", needsApprovalIsSupported.ToString() ),
862
Robin Huisman 4.1 863 (% element-id="822" %)
Roelof Zwaan 1.1 864 ~/~/new KeyValuePair<string, string>("orderXml", ZipStreamHelper.CompressToBase64String(assignmentXML)),
865
Robin Huisman 4.1 866 (% element-id="821" %)
Roelof Zwaan 1.1 867 ~/~/new KeyValuePair<string, string>("orderXml", assignmentXML),
868
Robin Huisman 4.1 869 (% element-id="820" %)
Roelof Zwaan 1.1 870 };              
871
Robin Huisman 4.1 872 (% element-id="819" %)
Roelof Zwaan 1.1 873 foreach (var item in formDataDictionary)
874
Robin Huisman 4.1 875 (% element-id="818" %)
Roelof Zwaan 1.1 876 {
877
Robin Huisman 4.1 878 (% element-id="817" %)
Roelof Zwaan 1.1 879 content.Add(new StringContent(item.Value), $"\"{item.Key}\"");
880
Robin Huisman 4.1 881 (% element-id="816" %)
Roelof Zwaan 1.1 882 }
883
884
Robin Huisman 4.1 885 (% element-id="813" %)
Roelof Zwaan 1.1 886 string filexml = string.Empty;
887
Robin Huisman 4.1 888 (% element-id="812" %)
Roelof Zwaan 1.1 889 if (useZipstream)
890
Robin Huisman 4.1 891 (% element-id="811" %)
Roelof Zwaan 1.1 892 {
893
Robin Huisman 4.1 894 (% element-id="810" %)
Roelof Zwaan 1.1 895 filexml = ZipStreamHelper.CompressToBase64String(assignmentXML);
896
Robin Huisman 4.1 897 (% element-id="809" %)
Roelof Zwaan 1.1 898 }
899
Robin Huisman 4.1 900 (% element-id="808" %)
Roelof Zwaan 1.1 901 else
902
Robin Huisman 4.1 903 (% element-id="807" %)
Roelof Zwaan 1.1 904 {
905
Robin Huisman 4.1 906 (% element-id="806" %)
Roelof Zwaan 1.1 907 filexml = assignmentXML;
908
Robin Huisman 4.1 909 (% element-id="805" %)
Roelof Zwaan 1.1 910 }
911
912
Robin Huisman 4.1 913 (% element-id="802" %)
Roelof Zwaan 1.1 914 ~/~/Add filecontent
915
Robin Huisman 4.1 916 (% element-id="801" %)
Roelof Zwaan 1.1 917 var fileContent = new ByteArrayContent(ZipStreamHelper.stringToByteArray(filexml));
918
Robin Huisman 4.1 919 (% element-id="800" %)
Roelof Zwaan 1.1 920 fileContent.Headers.ContentDisposition =
921
Robin Huisman 4.1 922 (% element-id="799" %)
Roelof Zwaan 1.1 923 new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") ~/~/<- 'form-data' instead of 'attachment'
924
Robin Huisman 4.1 925 (% element-id="798" %)
Roelof Zwaan 1.1 926 {
927
Robin Huisman 4.1 928 (% element-id="797" %)
Roelof Zwaan 1.1 929 Name = "\"orderXml\"", ~/~/ \" is needed so the message contains the quotes, wihtout it will fail
930
Robin Huisman 4.1 931 (% element-id="796" %)
Roelof Zwaan 1.1 932 FileName = "\"VivaTerraIndexAssignment.xml\""
933
Robin Huisman 4.1 934 (% element-id="795" %)
Roelof Zwaan 1.1 935 };
936
Robin Huisman 4.1 937 (% element-id="794" %)
Roelof Zwaan 1.1 938 fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/xml");              
939
Robin Huisman 4.1 940 (% element-id="793" %)
Roelof Zwaan 1.1 941 content.Add(fileContent);
942
943
Robin Huisman 4.1 944 (% element-id="790" %)
Roelof Zwaan 1.1 945 ~/~/Start sending
946
947
Robin Huisman 4.1 948 (% element-id="787" %)
Roelof Zwaan 1.1 949 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/CreateOrder", content).Result;
950
Robin Huisman 4.1 951 (% element-id="786" %)
Roelof Zwaan 1.1 952 response.EnsureSuccessStatusCode();
953
Robin Huisman 4.1 954 (% element-id="785" %)
Roelof Zwaan 1.1 955 string responseMessage = response.Content.ReadAsStringAsync().Result;
956
957
Robin Huisman 4.1 958 (% element-id="782" %)
Roelof Zwaan 1.1 959 if (string.IsNullOrEmpty(responseMessage))
960
Robin Huisman 4.1 961 (% element-id="781" %)
Roelof Zwaan 1.1 962 {
963
Robin Huisman 4.1 964 (% element-id="780" %)
Roelof Zwaan 1.1 965 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /CreateOrder" + "]");
966
Robin Huisman 4.1 967 (% element-id="779" %)
Roelof Zwaan 1.1 968 }
969
Robin Huisman 4.1 970 (% element-id="778" %)
Roelof Zwaan 1.1 971 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~)
972
Robin Huisman 4.1 973 (% element-id="777" %)
Roelof Zwaan 1.1 974 {
975
Robin Huisman 4.1 976 (% element-id="776" %)
Roelof Zwaan 1.1 977 XmlSerializer serializer = new XmlSerializer(typeof(CreateOrderResponse.Response));
978
Robin Huisman 4.1 979 (% element-id="775" %)
Roelof Zwaan 1.1 980 set = (CreateOrderResponse.Response)serializer.Deserialize(ms);
981
Robin Huisman 4.1 982 (% element-id="774" %)
Roelof Zwaan 1.1 983 }
984
985
Robin Huisman 4.1 986 (% element-id="771" %)
Roelof Zwaan 1.1 987 ~/~/Can contain a PDf with price information
988
Robin Huisman 4.1 989 (% element-id="770" %)
Roelof Zwaan 1.1 990 if (set.UseZip && !string.IsNullOrEmpty(set.FileContent))
991
Robin Huisman 4.1 992 (% element-id="769" %)
Roelof Zwaan 1.1 993 {
994
Robin Huisman 4.1 995 (% element-id="768" %)
Roelof Zwaan 1.1 996 ~/~/convert from base64 string back to normal
997
Robin Huisman 4.1 998 (% element-id="767" %)
Roelof Zwaan 1.1 999 set.FileContent = ZipStreamHelper.DecompressBase64StringToString(set.FileContent);                  
1000
Robin Huisman 4.1 1001 (% element-id="766" %)
Roelof Zwaan 1.1 1002 }
1003
1004
Robin Huisman 4.1 1005 (% element-id="763" %)
Roelof Zwaan 1.1 1006 }
1007
Robin Huisman 4.1 1008 (% element-id="762" %)
Roelof Zwaan 1.1 1009 catch (Exception ex)
1010
Robin Huisman 4.1 1011 (% element-id="761" %)
Roelof Zwaan 1.1 1012 {
1013
Robin Huisman 4.1 1014 (% element-id="760" %)
Roelof Zwaan 1.1 1015 #region handle exception
1016
1017
Robin Huisman 4.1 1018 (% element-id="757" %)
Roelof Zwaan 1.1 1019 set.Status = new BusinessEntities.LabRestService.CreateOrderResponse.ResponseStatus();
1020
Robin Huisman 4.1 1021 (% element-id="756" %)
Roelof Zwaan 1.1 1022 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString();
1023
Robin Huisman 4.1 1024 (% element-id="755" %)
Roelof Zwaan 1.1 1025 set.Status.ErrorMessage = "Exception occurred in CreateOrder (username: " + WebserviceUsername + ") with message: " + ex.Message;
1026
1027
Robin Huisman 4.1 1028 (% element-id="752" %)
Roelof Zwaan 1.1 1029 ex.Data.Add("WebserviceUsername", WebserviceUsername);
1030
Robin Huisman 4.1 1031 (% element-id="751" %)
Roelof Zwaan 1.1 1032 ex.Data.Add("WebservicePassword", WebservicePassword);
1033
Robin Huisman 4.1 1034 (% element-id="750" %)
Roelof Zwaan 1.1 1035 ex.Data.Add("CustomerUsername", CustomerUsername);
1036
Robin Huisman 4.1 1037 (% element-id="749" %)
Roelof Zwaan 1.1 1038 ex.Data.Add("sikbVersion", sikbVersion);
1039
Robin Huisman 4.1 1040 (% element-id="748" %)
Roelof Zwaan 1.1 1041 ex.Data.Add("customerid", customerid);
1042
1043
Robin Huisman 4.1 1044 (% element-id="745" %)
Roelof Zwaan 1.1 1045 ExceptionHandler.HandleException(ex);
1046
Robin Huisman 4.1 1047 (% element-id="744" %)
Roelof Zwaan 1.1 1048 #endregion
1049
Robin Huisman 4.1 1050 (% element-id="743" %)
Roelof Zwaan 1.1 1051 }
1052
1053
Robin Huisman 4.1 1054 (% element-id="740" %)
Roelof Zwaan 1.1 1055 return set;
1056
Robin Huisman 4.1 1057 (% element-id="739" %)
Roelof Zwaan 1.1 1058 }
1059 )))
1060
Robin Huisman 4.1 1061 (% element-id="738" %)
1062 (% element-id="736" %)|(% element-id="735" %)(% element-id="734" %)
1063 (((
1064 (% element-id="733" %)
Roelof Zwaan 1.1 1065 POST https:~/~/<URL>/CreateOrder HTTP/1.1
1066
Robin Huisman 4.1 1067 (% element-id="732" %)
Roelof Zwaan 1.1 1068 Content-Type: multipart/form-data; boundary="28a3e130-70c9-4a1a-b544-a802a1ade6ca"
1069
Robin Huisman 4.1 1070 (% element-id="731" %)
Roelof Zwaan 1.1 1071 Host: 81.175.89.24
1072
Robin Huisman 4.1 1073 (% element-id="730" %)
Roelof Zwaan 1.1 1074 Content-Length: 5010
1075
Robin Huisman 4.1 1076 (% element-id="729" %)
Roelof Zwaan 1.1 1077 Expect: 100-continue
1078
1079
Robin Huisman 4.1 1080 (% element-id="726" %)
Roelof Zwaan 1.1 1081 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1082
Robin Huisman 4.1 1083 (% element-id="725" %)
Roelof Zwaan 1.1 1084 Content-Type: text/plain; charset=utf-8
1085
Robin Huisman 4.1 1086 (% element-id="724" %)
Roelof Zwaan 1.1 1087 Content-Disposition: form-data; name="userName"
1088
1089
Robin Huisman 4.1 1090 (% element-id="721" %)
Roelof Zwaan 1.1 1091 <Webservice_Username>
1092
Robin Huisman 4.1 1093 (% element-id="720" %)
Roelof Zwaan 1.1 1094 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1095
Robin Huisman 4.1 1096 (% element-id="719" %)
Roelof Zwaan 1.1 1097 Content-Type: text/plain; charset=utf-8
1098
Robin Huisman 4.1 1099 (% element-id="718" %)
Roelof Zwaan 1.1 1100 Content-Disposition: form-data; name="password"
1101
1102
Robin Huisman 4.1 1103 (% element-id="715" %)
Roelof Zwaan 1.1 1104 <Webservice_Password>
1105
Robin Huisman 4.1 1106 (% element-id="714" %)
Roelof Zwaan 1.1 1107 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1108
Robin Huisman 4.1 1109 (% element-id="713" %)
Roelof Zwaan 1.1 1110 Content-Type: text/plain; charset=utf-8
1111
Robin Huisman 4.1 1112 (% element-id="712" %)
Roelof Zwaan 1.1 1113 Content-Disposition: form-data; name="customerUserName"
1114
1115
Robin Huisman 4.1 1116 (% element-id="709" %)
Roelof Zwaan 1.1 1117 <Customer_Username or token>
1118
Robin Huisman 4.1 1119 (% element-id="708" %)
Roelof Zwaan 1.1 1120 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1121
Robin Huisman 4.1 1122 (% element-id="707" %)
Roelof Zwaan 1.1 1123 Content-Type: text/plain; charset=utf-8
1124
Robin Huisman 4.1 1125 (% element-id="706" %)
Roelof Zwaan 1.1 1126 Content-Disposition: form-data; name="clientId"
1127
1128
Robin Huisman 4.1 1129 (% element-id="703" %)
Roelof Zwaan 1.1 1130 300
1131
Robin Huisman 4.1 1132 (% element-id="702" %)
Roelof Zwaan 1.1 1133 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1134
Robin Huisman 4.1 1135 (% element-id="701" %)
Roelof Zwaan 1.1 1136 Content-Type: text/plain; charset=utf-8
1137
Robin Huisman 4.1 1138 (% element-id="700" %)
Roelof Zwaan 1.1 1139 Content-Disposition: form-data; name="sikbVersion"
1140
1141
Robin Huisman 4.1 1142 (% element-id="697" %)
Roelof Zwaan 1.1 1143 13.4.0
1144
Robin Huisman 4.1 1145 (% element-id="696" %)
Roelof Zwaan 1.1 1146 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1147
Robin Huisman 4.1 1148 (% element-id="695" %)
Roelof Zwaan 1.1 1149 Content-Type: text/plain; charset=utf-8
1150
Robin Huisman 4.1 1151 (% element-id="694" %)
Roelof Zwaan 1.1 1152 Content-Disposition: form-data; name="languageCode"
1153
1154
Robin Huisman 4.1 1155 (% element-id="691" %)
Roelof Zwaan 1.1 1156 nld
1157
Robin Huisman 4.1 1158 (% element-id="690" %)
Roelof Zwaan 1.1 1159 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1160
Robin Huisman 4.1 1161 (% element-id="689" %)
Roelof Zwaan 1.1 1162 Content-Type: text/plain; charset=utf-8
1163
Robin Huisman 4.1 1164 (% element-id="688" %)
Roelof Zwaan 1.1 1165 Content-Disposition: form-data; name="useZip"
1166
1167
Robin Huisman 4.1 1168 (% element-id="685" %)
Roelof Zwaan 1.1 1169 True
1170
Robin Huisman 4.1 1171 (% element-id="684" %)
Roelof Zwaan 1.1 1172 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1173
Robin Huisman 4.1 1174 (% element-id="683" %)
Roelof Zwaan 1.1 1175 Content-Type: text/plain; charset=utf-8
1176
Robin Huisman 4.1 1177 (% element-id="682" %)
Roelof Zwaan 1.1 1178 Content-Disposition: form-data; name="needsApprovalIsSupported"
1179
1180
Robin Huisman 4.1 1181 (% element-id="679" %)
Roelof Zwaan 1.1 1182 False
1183
Robin Huisman 4.1 1184 (% element-id="678" %)
Roelof Zwaan 1.1 1185 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1186
Robin Huisman 4.1 1187 (% element-id="677" %)
Roelof Zwaan 1.1 1188 Content-Disposition: form-data; name="orderXml"; filename="VivaTerraIndexAssignment.xml"
1189
Robin Huisman 4.1 1190 (% element-id="676" %)
Roelof Zwaan 1.1 1191 Content-Type: application/xml
1192
1193
Robin Huisman 4.1 1194 (% element-id="673" %)
Roelof Zwaan 1.1 1195 <SIKB File in Zip stream Base64  encoding>
1196
Robin Huisman 4.1 1197 (% element-id="672" %)
Roelof Zwaan 1.1 1198 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca~-~-
1199 )))
1200
Robin Huisman 4.1 1201 (% element-id="671" %)
1202 === (% element-id="670" %)Response example(%%) ===
Roelof Zwaan 1.1 1203
Robin Huisman 4.1 1204 (% element-id="669" %)
1205 (% element-id="667" %)|(% element-id="666" %)(% element-id="665" %)
1206 (((
1207 (% element-id="664" %)
Roelof Zwaan 1.1 1208 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1209
Robin Huisman 4.1 1210 (% element-id="663" %)
Roelof Zwaan 1.1 1211 <Response>
1212
Robin Huisman 4.1 1213 (% element-id="662" %)
Roelof Zwaan 1.1 1214 <OrderId>7113828</OrderId>
1215
Robin Huisman 4.1 1216 (% element-id="661" %)
Roelof Zwaan 1.1 1217 <NeedsApproval>True</NeedsApproval>
1218
Robin Huisman 4.1 1219 (% element-id="660" %)
Roelof Zwaan 1.1 1220 <FileContent></FileContent>
1221
Robin Huisman 4.1 1222 (% element-id="659" %)
Roelof Zwaan 1.1 1223 <Status>
1224
Robin Huisman 4.1 1225 (% element-id="658" %)
Roelof Zwaan 1.1 1226 <StatusCode>1</StatusCode>
1227
Robin Huisman 4.1 1228 (% element-id="657" %)
Roelof Zwaan 1.1 1229 <StatusCodeDescription>OK</StatusCodeDescription>
1230
Robin Huisman 4.1 1231 (% element-id="656" %)
Roelof Zwaan 1.1 1232 <ErrorMessage></ErrorMessage>
1233
Robin Huisman 4.1 1234 (% element-id="655" %)
Roelof Zwaan 1.1 1235 </Status></Response>
1236 )))
1237
Robin Huisman 4.1 1238 (% element-id="654" %)
1239 = (% element-id="653" %)Get Order status and Results(%%) =
Roelof Zwaan 1.1 1240
Robin Huisman 4.1 1241 (% element-id="652" %)
1242 == (% element-id="651" %)Soluion/Design(%%) ==
Roelof Zwaan 1.1 1243
Robin Huisman 4.1 1244 (% element-id="650" %)
1245 TerraIndex will request per license/customer which results are ready. These are queried if the latest changes are newer than the last check. This way we never download too much unnecessarily and it can always be requested again.
Roelof Zwaan 1.1 1246
Robin Huisman 4.1 1247 (% class="table-hover" element-id="647" %)
1248 (% element-id="645" %)|(% element-id="644" %)Action|(% element-id="643" %)TerraIndex|(% element-id="642" %) |(% element-id="640" %)Laboratorium|(% element-id="639" %)Parameters/Message|(% element-id="638" %)Remarks|(% element-id="637" %)ResultCodes
1249 (% element-id="636" %)|(% element-id="635" %)1|(% element-id="634" %)Sends a request to the function: GetCustomers().|=(% element-id="633" %)>|(% element-id="632" %) |(% element-id="630" %)WebserviceUsername (string), 
Roelof Zwaan 1.1 1250 WebservicePassword (string),
Robin Huisman 4.1 1251 CustomerUsername (string)|(% element-id="627" %)We want to skip the Password of the customer, and we introduce the WebserviceUsername + WebservicePassword.|(% element-id="626" %)
1252 (% element-id="624" %)|(% element-id="623" %)2|(% element-id="622" %) |(% element-id="620" %) |(% element-id="618" %)Receives the request and check the customers this username and searches the dateLastChanged for this Customer.|(% element-id="617" %) |(% element-id="615" %) |(% element-id="613" %)
1253 (% element-id="611" %)|(% element-id="610" %)3|(% element-id="609" %) |(% element-id="607" %)<=|(% element-id="606" %)Sends back the list of customers with the lastChangedTimestamp|(% element-id="605" %)ResultCode (),
Roelof Zwaan 1.1 1254 ErrorMessage (string),
1255 List<customer> , Customer:
1256 CustomerCode (string),
1257 CustomerName (string),
1258 LabID (int),
1259 LabName (string),
Robin Huisman 4.1 1260 ChangedTimeStamp (DateTime)|(% element-id="597" %)We receive the dateTimestamp instead of sending it, so we always get the full list and we are also able to delete customercodes.|(% element-id="596" %)1 = Success,
Roelof Zwaan 1.1 1261 2 = GeneralError,
1262 3 = WrongSIKBVersion,
1263 4 = InvalidCredentials,
1264 5 = CustomerUsernameInvalid,
1265 6 = CustomerUsernameNotValidForCustomerCode
1266 7 = FileContentProblem,
1267 8 = InvalidOrderId,
1268 9 = OrderIdAlreadyApproved
1269 10 = PDFNotAvailable
Robin Huisman 4.1 1270 (% element-id="586" %)|(% element-id="585" %)4|(% element-id="584" %)Receives the list of Customers. Read the Timestamp this Customer is last checked for Results/Statuses.|(% element-id="583" %) |(% element-id="581" %) |(% element-id="579" %) |(% element-id="577" %) |(% element-id="575" %)
1271 (% element-id="573" %)|(% element-id="572" %)5|(% element-id="571" %)Send for each Customer a  call to retreive all orders statuses changes since a certain timestamp.
1272 Function: GetOrderStatuses()|=(% element-id="569" %)>|(% element-id="568" %) |(% element-id="566" %)WebserviceUsername (string), 
Roelof Zwaan 1.1 1273 WebservicePassword (string),
1274 CustomerUsername (string),
1275 CustomerCode (string),
Robin Huisman 4.1 1276 LastCheckedTimestamp (DateTime)|(% element-id="561" %)TerraIndex keeps track of the last check timestamp for each license.|(% element-id="560" %)
1277 (% element-id="558" %)|(% element-id="557" %)6|(% element-id="556" %) |(% element-id="554" %) |(% element-id="552" %)Receives the request and check the orders that are changed since the timestamp for this Customer.|(% element-id="551" %) |(% element-id="549" %) |(% element-id="547" %)
1278 (% element-id="545" %)|(% element-id="544" %)7|(% element-id="543" %) |(% element-id="541" %)<=|(% element-id="540" %)Sends back the list of orders with the status and lastChangedTimestamp|(% element-id="539" %)ResultCode (),
Roelof Zwaan 1.1 1279 ErrorMessage (string),
1280 OrderID (string),
1281 LabassignmentGUID (GUID),
1282 CertificateNumber (string)
1283 OrderStatusSIKB (int),
1284 Delayed (boolean),
Robin Huisman 4.1 1285 ExpectedTimeStamp (DateTime),|(% element-id="531" %)OrderStatusSIKB is the SIKB Labassignment status.
Roelof Zwaan 1.1 1286 \\Delayed is a boolean to tell the customer a order will be later ready then expected. The ExpectedTimestamp.
1287 If Delayed for the firsttime, TerraIndex can send a notification to the users and show a different layout.
Robin Huisman 4.1 1288 \\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|(% element-id="525" %)1 = Success,
Roelof Zwaan 1.1 1289 2 = GeneralError,
1290 3 = WrongSIKBVersion,
1291 4 = InvalidCredentials,
1292 5 = CustomerUsernameInvalid,
1293 6 = CustomerUsernameNotValidForCustomerCode
1294 7 = FileContentProblem,
1295 8 = InvalidOrderId,
1296 9 = OrderIdAlreadyApproved
1297 10 = PDFNotAvailable
Robin Huisman 4.1 1298 (% element-id="515" %)|(% element-id="514" %)8|(% element-id="513" %)Receives the list of Orders with status.
1299 Update the CertificateNr if this is not already present in the labassignment. |(% element-id="511" %) |(% element-id="509" %) |(% element-id="507" %) |(% element-id="505" %)CertifcateNumber could be new here, if the lab wasn't able to fill it directly at the ApproveOrder.|(% element-id="504" %)
1300 (% element-id="502" %)|(% element-id="501" %)9|(% element-id="500" %)Send for each Order a call to retreive all results.
1301 Function: GetOrderResults()|=(% element-id="498" %)>|(% element-id="497" %) |(% element-id="495" %)WebserviceUsername (string), 
Roelof Zwaan 1.1 1302 WebservicePassword (string),
1303 CustomerUsername (string),
1304 CustomerCode (string),
1305 OrderID (string),
Robin Huisman 4.1 1306 SIKBVersion (string, default: '13.4.0')|(% element-id="489" %)Besides SIKB 13.4.0, TerraIndex also supports 9.0.0/8.0.0 etc.|(% element-id="488" %)
1307 (% element-id="486" %)|(% element-id="485" %)10|(% element-id="484" %) |(% element-id="482" %) |(% element-id="480" %)Receives the request and creates a SIKB results file based on the version that is requested.|(% element-id="479" %) |(% element-id="477" %) |(% element-id="475" %)
1308 (% element-id="473" %)|(% element-id="472" %)11|(% element-id="471" %) |(% element-id="469" %)<=|(% element-id="468" %)Sends back the results of the orders.|(% element-id="467" %)ResultCode (),
Roelof Zwaan 1.1 1309 ErrorMessage (string),
1310 OrderId (string),
1311 LabassignmentGUID (GUID),
1312 FileContent_Base64 (string),
Robin Huisman 4.1 1313 UseZipStream/UseZip (bool, default: 'false'),|(% element-id="461" %) |(% element-id="459" %)1 = Success,
Roelof Zwaan 1.1 1314 2 = GeneralError,
1315 3 = WrongSIKBVersion,
1316 4 = InvalidCredentials,
1317 5 = CustomerUsernameInvalid,
1318 6 = CustomerUsernameNotValidForCustomerCode
1319 7 = FileContentProblem,
1320 8 = InvalidOrderId,
1321 9 = OrderIdAlreadyApproved
1322 10 = PDFNotAvailable
Robin Huisman 4.1 1323 (% element-id="449" %)|(% element-id="448" %)12|(% element-id="447" %)Receives the results and imports all results.|(% element-id="446" %) |(% element-id="444" %) |(% element-id="442" %) |(% element-id="440" %)(% element-id="439" %)
1324 (((
1325 (% element-id="438" %)
Roelof Zwaan 1.1 1326 Import will be done to corresponding samples based on:
1327
Robin Huisman 4.1 1328 (% element-id="437" %)
Roelof Zwaan 1.1 1329 * Find Project by ProjectGUID (as provided in the labassignment)
1330 * Find Project by ProjectCode (as provided in the Labassignment)
1331 * Find Project and Labassignment by LabassignmentGUID (as provided in the Labassignment)
1332 * Find Project (only if Project is not found yet) and Samples based on SampleGUID (as provided in the Labassignment) .
1333 Sample GUIDs that are send to the lab in the labassignment version SIKB 13 or higher are required in the results for labassignment.
1334 For lower version Labassignments the lab should return the 'old' idanlmons as SampleGUID in the XML.
1335 * Find Samples (only if Project is already found ) by SampleName
1336
Robin Huisman 4.1 1337 (% element-id="429" %)
Roelof Zwaan 1.1 1338 What is imported?
1339
Robin Huisman 4.1 1340 (% element-id="428" %)
Roelof Zwaan 1.1 1341 * If Sample is found, the results in the XML are always all updated and/or inserted.
1342 * If Project is found, but the sample is not; The Sample and the results are inserted as new Sample. (If watersample; fake filtertube and fake measurementpoints are created)
Robin Huisman 4.1 1343 )))|(% element-id="425" %)
1344 (% element-id="423" %)|(% element-id="422" %)13|(% element-id="421" %)If OrderStatus is 'Completed/Reported' (SIKBID: 5)
Roelof Zwaan 1.1 1345 Request the PDF certificate.
Robin Huisman 4.1 1346 Function: GetOrderPDF()|=(% element-id="418" %)>|(% element-id="417" %) |(% element-id="415" %)WebserviceUsername (string), 
Roelof Zwaan 1.1 1347 WebservicePassword (string),
1348 CustomerUsername (string),
1349 CustomerCode (string),
Robin Huisman 4.1 1350 OrderID (string),|(% element-id="410" %) |(% element-id="408" %)
1351 (% element-id="406" %)|(% element-id="405" %)14|(% element-id="404" %) |(% element-id="402" %) |(% element-id="400" %)Receives the request and creates the PDF for the Order.|(% element-id="399" %) |(% element-id="397" %) |(% element-id="395" %)
1352 (% element-id="393" %)|(% element-id="392" %)15|(% element-id="391" %) |(% element-id="389" %)<=|(% element-id="388" %)Sends back the PDF of the order.|(% element-id="387" %)ResultCode (),
Roelof Zwaan 1.1 1353 ErrorMessage (string),
1354 OrderId (string),
1355 LabassignmentGUID (GUID),
1356 FileContent_Base64 (string),
Robin Huisman 4.1 1357 UseZipStream/UseZip (bool, default: 'false'),|(% element-id="381" %)If the PDF is not available yet, please give the resultcode: PDFNotAvailable.|(% element-id="380" %)1 = Success,
Roelof Zwaan 1.1 1358 2 = GeneralError,
1359 3 = WrongSIKBVersion,
1360 4 = InvalidCredentials,
1361 5 = CustomerUsernameInvalid,
1362 6 = CustomerUsernameNotValidForCustomerCode
1363 7 = FileContentProblem,
1364 8 = InvalidOrderId,
1365 9 = OrderIdAlreadyApproved
1366 10 = PDFNotAvailable
Robin Huisman 4.1 1367 (% element-id="370" %)|(% element-id="369" %)12|(% element-id="368" %)Receives the PDF and stores it for reporting and downloading.|(% element-id="367" %) |(% element-id="365" %) |(% element-id="363" %) |(% element-id="361" %) |(% element-id="359" %)
Roelof Zwaan 1.1 1368
Robin Huisman 4.1 1369 (% element-id="357" %)
Robin Huisman 7.1 1370 = (% element-id="356" %)Customer wants to see real time information about the status in the interface(%%) =
Roelof Zwaan 1.1 1371
Robin Huisman 4.1 1372 (% element-id="354" %)
1373 == (% element-id="353" %)Solution/Design(%%) ==
Roelof Zwaan 1.1 1374
Robin Huisman 4.1 1375 (% element-id="352" %)
1376 To always show up-to-date information in the TerraIndex interface when a user opens a lab assignment to see the status, we reuse part of the GetOrderStatus, but with a specific OrderID.
Roelof Zwaan 1.1 1377
Robin Huisman 4.1 1378 (% element-id="351" %)
Roelof Zwaan 1.1 1379 ..NOT SUPPORTED YET...
1380
Robin Huisman 4.1 1381 (% class="table-hover" element-id="350" %)
1382 (% element-id="348" %)|(% colspan="1" element-id="347" %)Action|(% colspan="1" element-id="346" %)TerraIndex|(% colspan="1" element-id="345" %) |(% colspan="1" element-id="343" %)Laboratorium|(% colspan="1" element-id="342" %)Parameters/Message|(% colspan="1" element-id="341" %)Remarks|(% colspan="1" element-id="340" %)ResultCodes
1383 (% element-id="339" %)|(% element-id="338" %)1|(% element-id="337" %)Request the Order status for a single Order/Labassignment.
1384 Function: GetOrderStatus()|=(% element-id="335" %)>|(% element-id="334" %) |(% element-id="332" %)WebserviceUsername (string), 
Roelof Zwaan 1.1 1385 WebservicePassword (string),
1386 CustomerUsername (string),
1387 CustomerCode (string),
Robin Huisman 4.1 1388 OrderID (string),|(% element-id="327" %) |(% element-id="325" %)
1389 (% element-id="323" %)|(% element-id="322" %)2|(% element-id="321" %) |(% element-id="319" %) |(% element-id="317" %)Receives the request and gets the status for the Order.|(% element-id="316" %) |(% element-id="314" %) |(% element-id="312" %)
1390 (% element-id="310" %)|(% element-id="309" %)3|(% element-id="308" %) |(% element-id="306" %)<=|(% element-id="305" %)Sends back the status of the order.|(% element-id="304" %)ResultCode (),
Roelof Zwaan 1.1 1391 ErrorMessage (string),
1392 OrderID (string),
1393 LabassignmentGUID (GUID),
1394 CertificateNumber (string)
1395 OrderStatusSIKB (int),
1396 Delayed (boolean),
Robin Huisman 4.1 1397 ExpectedTimeStamp (DateTime),|(% element-id="296" %)OrderStatusSIKB is the SIKB Labassignment status.
Roelof Zwaan 1.1 1398 \\Delayed is a boolean to tell the customer a order will be later ready then expected. The ExpectedTimestamp.
1399 If Delayed for the firsttime, TerraIndex can send a notification to the users and show a different layout.
Robin Huisman 4.1 1400 \\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|(% element-id="290" %)1 = Success,
Roelof Zwaan 1.1 1401 2 = GeneralError,
1402 3 = WrongSIKBVersion,
1403 4 = InvalidCredentials,
1404 5 = CustomerUsernameInvalid,
1405 6 = CustomerUsernameNotValidForCustomerCode
1406 7 = FileContentProblem,
1407 8 = InvalidOrderId,
1408 9 = OrderIdAlreadyApproved
1409 10 = PDFNotAvailable
Robin Huisman 4.1 1410 (% element-id="280" %)|(% element-id="279" %)4|(% element-id="278" %)Receives the status and shows in the interface the updated info.
1411 Update the CertificateNr if this is not already present in the labassignment. |(% element-id="276" %) |(% element-id="274" %) |(% element-id="272" %) |(% element-id="270" %)CertifcateNumber could be new here, if the lab wasn't able to fill it directly at the ApproveOrder.|(% element-id="269" %)
Roelof Zwaan 1.1 1412
Robin Huisman 4.1 1413 (% element-id="265" %)
1414