Version 7.1 by Robin Huisman on 2024/04/04 11:29

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