Version 5.1 by Robin Huisman on 2024/03/28 15:34

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" %)
446 Useraccount Checkup.(%%) =
447
448 (% element-id="1374" %)
449 == (% element-id="1373" %)Solution/Design(%%) ==
450
451 (% element-id="1372" %)
452 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.
453
454 (% element-id="1371" %)
455 WebserviceUsername (string),
456 WebservicePassword (string),
457 CustomerUsername (string)
458
459
460 (% element-id="1366" %)
461 Therefor we call a Webserice for ValidCredentials Check:
462
463
464 (% class="table-hover" element-id="1363" %)
465 (% 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**
466 (% 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),
467 WebservicePassword (string),
468 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" %)
469 (% 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" %)
470 (% 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 (),
471 ErrorMessage (string),|(% element-id="1313" %) |(% element-id="1311" %)1 = Success,
472 2 = GeneralError,
473 3 = WrongSIKBVersion,
474 4 = InvalidCredentials,
475 5 = CustomerUsernameInvalid,
476 6 = CustomerUsernameNotValidForCustomerCode
477 7 = FileContentProblem,
478 8 = InvalidOrderId,
479 9 = OrderIdAlreadyApproved
480 10 = PDFNotAvailable
481
482 (% element-id="1301" %)
483 == (% element-id="1300" %)Check ValidCredentials (POST)(%%) ==
484
485 (% element-id="1299" %)
486 === (% element-id="1298" %)Request example(%%) ===
487
488 (% element-id="1297" %)
489 (% element-id="1295" %)|(% element-id="1294" %)(% element-id="1293" %)
490 (((
491 (% element-id="1292" %)
492 public ValidCredentialsCall.Response ValidCredentials(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid)
493
494 (% element-id="1291" %)
495 {
496
497 (% element-id="1290" %)
498 ValidCredentialsCall.Response set = new ValidCredentialsCall.Response();
499
500
501 (% element-id="1287" %)
502 try
503
504 (% element-id="1286" %)
505 {
506
507
508 (% element-id="1283" %)
509 var content = new FormUrlEncodedContent(new[]
510
511 (% element-id="1282" %)
512 {
513
514 (% element-id="1281" %)
515 new KeyValuePair<string, string>("userName", WebserviceUsername),
516
517 (% element-id="1280" %)
518 new KeyValuePair<string, string>("password", WebservicePassword),
519
520 (% element-id="1279" %)
521 ~/~/new KeyValuePair<string, string>("clientId", customerid),   ~/~/ Optional
522
523 (% element-id="1278" %)
524 new KeyValuePair<string, string>("customerUsername", CustomerUsername),
525
526 (% element-id="1277" %)
527 });
528
529
530 (% element-id="1274" %)
531 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/ValidCredentials", content).Result;
532
533 (% element-id="1273" %)
534 response.EnsureSuccessStatusCode();
535
536 (% element-id="1272" %)
537 string responseMessage = response.Content.ReadAsStringAsync().Result;
538
539
540 (% element-id="1269" %)
541 if (string.IsNullOrEmpty(responseMessage))
542
543 (% element-id="1268" %)
544 {
545
546 (% element-id="1267" %)
547 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " / ValidCredentials" + "]");
548
549 (% element-id="1266" %)
550 }
551
552 (% element-id="1265" %)
553 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~)
554
555 (% element-id="1264" %)
556 {
557
558 (% element-id="1263" %)
559 XmlSerializer serializer = new XmlSerializer(typeof(ValidCredentialsCall.Response));
560
561 (% element-id="1262" %)
562 set = (ValidCredentialsCall.Response)serializer.Deserialize(ms);
563
564
565 (% element-id="1259" %)
566 return set;
567
568 (% element-id="1258" %)
569 }
570
571
572 (% element-id="1255" %)
573 }
574
575 (% element-id="1254" %)
576 catch (Exception ex)
577
578 (% element-id="1253" %)
579 {
580
581 (% element-id="1252" %)
582 #region handle exception
583
584
585 (% element-id="1249" %)
586 set.Status = new BusinessEntities.LabRestService.ValidCredentialsCall.ResponseStatus();
587
588 (% element-id="1248" %)
589 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString();
590
591 (% element-id="1247" %)
592 set.Status.ErrorMessage = "Exception occurred in GetValidCredentials (username: " + WebserviceUsername + ", with message: " + ex.Message;
593
594
595 (% element-id="1244" %)
596 ex.Data.Add("WebserviceUsername", WebserviceUsername);
597
598 (% element-id="1243" %)
599 ex.Data.Add("WebservicePassword", WebservicePassword);
600
601 (% element-id="1242" %)
602 ex.Data.Add("CustomerUsername", CustomerUsername);
603
604
605 (% element-id="1239" %)
606 ExceptionHandler.HandleException(ex);
607
608 (% element-id="1238" %)
609 #endregion
610
611 (% element-id="1237" %)
612 }
613
614
615 (% element-id="1234" %)
616 return set;
617
618 (% element-id="1233" %)
619 }
620 )))
621
622 (% element-id="1232" %)
623 (% element-id="1230" %)|(% element-id="1229" %)(% element-id="1228" %)
624 (((
625 (% element-id="1227" %)
626 POST https:~/~/<URL>/ValidCredentials HTTP/1.1
627
628 (% element-id="1226" %)
629 Content-Type: application/x-www-form-urlencoded
630
631 (% element-id="1225" %)
632 Host: 81.175.89.24
633
634 (% element-id="1224" %)
635 Content-Length: 125
636
637 (% element-id="1223" %)
638 Expect: 100-continue
639
640
641 (% element-id="1220" %)
642 userName=<webservice_username>&password=<Webservice_password>&clientId=<optional otherwise empty>&customerUsername=<customer_username or token>
643 )))
644
645 (% element-id="1219" %)
646 === (% element-id="1218" %)Response example(%%) ===
647
648 (% element-id="1217" %)
649 (% element-id="1215" %)|(% element-id="1214" %)(% element-id="1213" %)
650 (((
651 (% element-id="1212" %)
652 <?xml version="1.0" encoding="UTF-8" standalone="no"?><Response>
653
654 (% element-id="1211" %)
655 <Status>
656
657 (% element-id="1210" %)
658 <StatusCode>1</StatusCode>
659
660 (% element-id="1209" %)
661 <StatusCodeDescription>OK</StatusCodeDescription>
662
663 (% element-id="1208" %)
664 <ErrorMessage></ErrorMessage>
665
666 (% element-id="1207" %)
667 </Status>
668
669 (% element-id="1206" %)
670 </Response>
671 )))
672
673 (% element-id="1205" %)
674 = (% element-id="1204" %)Labassignment request delivery(POST)(%%) =
675
676 (% element-id="1203" %)
677 == (% element-id="1202" %)Solution/Design(%%) ==
678
679 (% element-id="1201" %)
680 For this we create a Webserice for CreateOrder to create the order in the lab system.
681 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.
682 Depending on the user's choice at the laboratory, to support this or not, TerraIndex calls the ApproveOrder or the CancelOrder.
683
684 (% element-id="0" %)
685 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.
686
687
688 (% class="table-hover" element-id="1195" %)
689 (% 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**
690 (% 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),
691 WebservicePassword (string),
692 CustomerUsername (string),
693 FileContent_Base64 (string),
694 UseZipStream/UseZip (bool, default: 'false'),
695 CustomerCode (string),
696 SIKBVersion (string, default: '13.4.0'),
697 needsApprovalIsSupported (bool)|(% element-id="1164" %)SIKB Version included, so labs can quickly check the version.
698 Besides SIKB 13.4.0, TerraIndex also supports 9.0.0.
699 \\Before sending the SIKB, validate to the XSD!
700 And to the XSLT?
701 \\needsApprovalIsSupported = false; means we dont get PDF with offerte. This will make is faster.
702 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" %)
703 (% 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" %)
704 (% 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.
705 Otherwise we use the idanlmons unique ID.|(% colspan="1" element-id="1130" %)
706 (% 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" %)
707 (% 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 (),
708 ErrorMessage (string),
709 OrderId (string),
710 NeedsApprove (bool),
711 FileContent_Base64 (string),
712 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,
713 2 = GeneralError,
714 3 = WrongSIKBVersion,
715 4 = InvalidCredentials,
716 5 = CustomerUsernameInvalid,
717 6 = CustomerUsernameNotValidForCustomerCode
718 7 = FileContentProblem,
719 8 = InvalidOrderId,
720 9 = OrderIdAlreadyApproved
721 10 = PDFNotAvailable
722 (% element-id="1091" %)|(% colspan="1" element-id="1090" %)6|(% colspan="1" element-id="1089" %)Receives the OrderId, and saves it.
723 |(% colspan="1" element-id="1086" %) |(% colspan="1" element-id="1084" %) |(% colspan="1" element-id="1082" %) |(% colspan="1" element-id="1080" %)(% element-id="1079" %)
724 (((
725 (% element-id="1078" %)
726 Default for now laboratorium will send:
727 NeedsApprove = False,
728 PDF = Empty,
729 Zipstream = False,
730
731
732 (% element-id="1072" %)
733 In the future, do something with the PDF and show the PDF to users to Approve or Cancel.
734 This will be done by; NeedsApprove = true.
735 \\If NeedsApprove is False, the order is Processed and can't be changed in TI. Like it is now.
736
737 (% element-id="1068" %)
738
739 )))|(% colspan="1" element-id="1066" %)
740 (% 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" %)
741 (% 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" %)
742 (% 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" %)
743 (% 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),
744 WebservicePassword (string),
745 CustomerUsername (string),
746 OrderId (string)|(% colspan="1" element-id="1009" %) |(% colspan="1" element-id="1007" %)
747 (% 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" %)
748 (% 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 (),
749 ErrorMessage (string),
750 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,
751 2 = GeneralError,
752 3 = WrongSIKBVersion,
753 4 = InvalidCredentials,
754 5 = CustomerUsernameInvalid,
755 6 = CustomerUsernameNotValidForCustomerCode
756 7 = FileContentProblem,
757 8 = InvalidOrderId,
758 9 = OrderIdAlreadyApproved
759 10 = PDFNotAvailable
760 (% 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" %)
761 (% 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" %)
762 (% 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" %)
763 (% 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),
764 WebservicePassword (string),
765 CustomerUsername (string),
766 OrderId (string)|(% element-id="919" %) |(% element-id="917" %)
767 (% 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" %)
768 (% element-id="902" %)|(% element-id="901" %)9|(% element-id="900" %) |(% element-id="898" %)<=|(% element-id="897" %)Sends back a Success |(% element-id="896" %)ResultCode (),
769 ErrorMessage (string)|(% element-id="894" %) |(% element-id="892" %)1 = Success,
770 2 = GeneralError,
771 3 = WrongSIKBVersion,
772 4 = InvalidCredentials,
773 5 = CustomerUsernameInvalid,
774 6 = CustomerUsernameNotValidForCustomerCode
775 7 = FileContentProblem,
776 8 = InvalidOrderId,
777 9 = OrderIdAlreadyApproved
778 10 = PDFNotAvailable
779 (% 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" %)
780 (% 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" %)
781
782 (% element-id="855" %)
783 == (% element-id="854" %)Create Order(%%) ==
784
785 (% element-id="853" %)
786 === (% element-id="852" %)Request example(%%) ===
787
788 (% element-id="851" %)
789 (% element-id="849" %)|(% element-id="848" %)(% element-id="847" %)
790 (((
791 (% element-id="846" %)
792 public CreateOrderResponse.Response SendLabAssignment(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, string sikbVersion, string assignmentXML, string languageCode, bool needsApprovalIsSupported = false)
793
794 (% element-id="845" %)
795 {
796
797 (% element-id="844" %)
798 CreateOrderResponse.Response set = new CreateOrderResponse.Response();
799
800
801 (% element-id="841" %)
802 try
803
804 (% element-id="840" %)
805 {
806
807 (% element-id="839" %)
808 bool useZipstream = true;
809
810
811 (% element-id="836" %)
812 MultipartFormDataContent content = new MultipartFormDataContent();
813
814
815 (% element-id="833" %)
816 ~/~/Add Formdata
817
818 (% element-id="832" %)
819 var formDataDictionary = new[]
820
821 (% element-id="831" %)
822 {
823
824 (% element-id="830" %)
825 new KeyValuePair<string, string>("userName", WebserviceUsername),
826
827 (% element-id="829" %)
828 new KeyValuePair<string, string>("password", WebservicePassword),
829
830 (% element-id="828" %)
831 new KeyValuePair<string, string>("customerUserName", CustomerUsername),
832
833 (% element-id="827" %)
834 new KeyValuePair<string, string>("clientId", customerid),
835
836 (% element-id="826" %)
837 new KeyValuePair<string, string>("sikbVersion", sikbVersion),
838
839 (% element-id="825" %)
840 new KeyValuePair<string, string>("languageCode", languageCode),
841
842 (% element-id="824" %)
843 new KeyValuePair<string, string>("useZip", useZipstream.ToString() ),
844
845 (% element-id="823" %)
846 new KeyValuePair<string, string>("needsApprovalIsSupported", needsApprovalIsSupported.ToString() ),
847
848 (% element-id="822" %)
849 ~/~/new KeyValuePair<string, string>("orderXml", ZipStreamHelper.CompressToBase64String(assignmentXML)),
850
851 (% element-id="821" %)
852 ~/~/new KeyValuePair<string, string>("orderXml", assignmentXML),
853
854 (% element-id="820" %)
855 };              
856
857 (% element-id="819" %)
858 foreach (var item in formDataDictionary)
859
860 (% element-id="818" %)
861 {
862
863 (% element-id="817" %)
864 content.Add(new StringContent(item.Value), $"\"{item.Key}\"");
865
866 (% element-id="816" %)
867 }
868
869
870 (% element-id="813" %)
871 string filexml = string.Empty;
872
873 (% element-id="812" %)
874 if (useZipstream)
875
876 (% element-id="811" %)
877 {
878
879 (% element-id="810" %)
880 filexml = ZipStreamHelper.CompressToBase64String(assignmentXML);
881
882 (% element-id="809" %)
883 }
884
885 (% element-id="808" %)
886 else
887
888 (% element-id="807" %)
889 {
890
891 (% element-id="806" %)
892 filexml = assignmentXML;
893
894 (% element-id="805" %)
895 }
896
897
898 (% element-id="802" %)
899 ~/~/Add filecontent
900
901 (% element-id="801" %)
902 var fileContent = new ByteArrayContent(ZipStreamHelper.stringToByteArray(filexml));
903
904 (% element-id="800" %)
905 fileContent.Headers.ContentDisposition =
906
907 (% element-id="799" %)
908 new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") ~/~/<- 'form-data' instead of 'attachment'
909
910 (% element-id="798" %)
911 {
912
913 (% element-id="797" %)
914 Name = "\"orderXml\"", ~/~/ \" is needed so the message contains the quotes, wihtout it will fail
915
916 (% element-id="796" %)
917 FileName = "\"VivaTerraIndexAssignment.xml\""
918
919 (% element-id="795" %)
920 };
921
922 (% element-id="794" %)
923 fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/xml");              
924
925 (% element-id="793" %)
926 content.Add(fileContent);
927
928
929 (% element-id="790" %)
930 ~/~/Start sending
931
932
933 (% element-id="787" %)
934 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/CreateOrder", content).Result;
935
936 (% element-id="786" %)
937 response.EnsureSuccessStatusCode();
938
939 (% element-id="785" %)
940 string responseMessage = response.Content.ReadAsStringAsync().Result;
941
942
943 (% element-id="782" %)
944 if (string.IsNullOrEmpty(responseMessage))
945
946 (% element-id="781" %)
947 {
948
949 (% element-id="780" %)
950 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /CreateOrder" + "]");
951
952 (% element-id="779" %)
953 }
954
955 (% element-id="778" %)
956 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~)
957
958 (% element-id="777" %)
959 {
960
961 (% element-id="776" %)
962 XmlSerializer serializer = new XmlSerializer(typeof(CreateOrderResponse.Response));
963
964 (% element-id="775" %)
965 set = (CreateOrderResponse.Response)serializer.Deserialize(ms);
966
967 (% element-id="774" %)
968 }
969
970
971 (% element-id="771" %)
972 ~/~/Can contain a PDf with price information
973
974 (% element-id="770" %)
975 if (set.UseZip && !string.IsNullOrEmpty(set.FileContent))
976
977 (% element-id="769" %)
978 {
979
980 (% element-id="768" %)
981 ~/~/convert from base64 string back to normal
982
983 (% element-id="767" %)
984 set.FileContent = ZipStreamHelper.DecompressBase64StringToString(set.FileContent);                  
985
986 (% element-id="766" %)
987 }
988
989
990 (% element-id="763" %)
991 }
992
993 (% element-id="762" %)
994 catch (Exception ex)
995
996 (% element-id="761" %)
997 {
998
999 (% element-id="760" %)
1000 #region handle exception
1001
1002
1003 (% element-id="757" %)
1004 set.Status = new BusinessEntities.LabRestService.CreateOrderResponse.ResponseStatus();
1005
1006 (% element-id="756" %)
1007 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString();
1008
1009 (% element-id="755" %)
1010 set.Status.ErrorMessage = "Exception occurred in CreateOrder (username: " + WebserviceUsername + ") with message: " + ex.Message;
1011
1012
1013 (% element-id="752" %)
1014 ex.Data.Add("WebserviceUsername", WebserviceUsername);
1015
1016 (% element-id="751" %)
1017 ex.Data.Add("WebservicePassword", WebservicePassword);
1018
1019 (% element-id="750" %)
1020 ex.Data.Add("CustomerUsername", CustomerUsername);
1021
1022 (% element-id="749" %)
1023 ex.Data.Add("sikbVersion", sikbVersion);
1024
1025 (% element-id="748" %)
1026 ex.Data.Add("customerid", customerid);
1027
1028
1029 (% element-id="745" %)
1030 ExceptionHandler.HandleException(ex);
1031
1032 (% element-id="744" %)
1033 #endregion
1034
1035 (% element-id="743" %)
1036 }
1037
1038
1039 (% element-id="740" %)
1040 return set;
1041
1042 (% element-id="739" %)
1043 }
1044 )))
1045
1046 (% element-id="738" %)
1047 (% element-id="736" %)|(% element-id="735" %)(% element-id="734" %)
1048 (((
1049 (% element-id="733" %)
1050 POST https:~/~/<URL>/CreateOrder HTTP/1.1
1051
1052 (% element-id="732" %)
1053 Content-Type: multipart/form-data; boundary="28a3e130-70c9-4a1a-b544-a802a1ade6ca"
1054
1055 (% element-id="731" %)
1056 Host: 81.175.89.24
1057
1058 (% element-id="730" %)
1059 Content-Length: 5010
1060
1061 (% element-id="729" %)
1062 Expect: 100-continue
1063
1064
1065 (% element-id="726" %)
1066 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1067
1068 (% element-id="725" %)
1069 Content-Type: text/plain; charset=utf-8
1070
1071 (% element-id="724" %)
1072 Content-Disposition: form-data; name="userName"
1073
1074
1075 (% element-id="721" %)
1076 <Webservice_Username>
1077
1078 (% element-id="720" %)
1079 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1080
1081 (% element-id="719" %)
1082 Content-Type: text/plain; charset=utf-8
1083
1084 (% element-id="718" %)
1085 Content-Disposition: form-data; name="password"
1086
1087
1088 (% element-id="715" %)
1089 <Webservice_Password>
1090
1091 (% element-id="714" %)
1092 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1093
1094 (% element-id="713" %)
1095 Content-Type: text/plain; charset=utf-8
1096
1097 (% element-id="712" %)
1098 Content-Disposition: form-data; name="customerUserName"
1099
1100
1101 (% element-id="709" %)
1102 <Customer_Username or token>
1103
1104 (% element-id="708" %)
1105 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1106
1107 (% element-id="707" %)
1108 Content-Type: text/plain; charset=utf-8
1109
1110 (% element-id="706" %)
1111 Content-Disposition: form-data; name="clientId"
1112
1113
1114 (% element-id="703" %)
1115 300
1116
1117 (% element-id="702" %)
1118 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1119
1120 (% element-id="701" %)
1121 Content-Type: text/plain; charset=utf-8
1122
1123 (% element-id="700" %)
1124 Content-Disposition: form-data; name="sikbVersion"
1125
1126
1127 (% element-id="697" %)
1128 13.4.0
1129
1130 (% element-id="696" %)
1131 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1132
1133 (% element-id="695" %)
1134 Content-Type: text/plain; charset=utf-8
1135
1136 (% element-id="694" %)
1137 Content-Disposition: form-data; name="languageCode"
1138
1139
1140 (% element-id="691" %)
1141 nld
1142
1143 (% element-id="690" %)
1144 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1145
1146 (% element-id="689" %)
1147 Content-Type: text/plain; charset=utf-8
1148
1149 (% element-id="688" %)
1150 Content-Disposition: form-data; name="useZip"
1151
1152
1153 (% element-id="685" %)
1154 True
1155
1156 (% element-id="684" %)
1157 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1158
1159 (% element-id="683" %)
1160 Content-Type: text/plain; charset=utf-8
1161
1162 (% element-id="682" %)
1163 Content-Disposition: form-data; name="needsApprovalIsSupported"
1164
1165
1166 (% element-id="679" %)
1167 False
1168
1169 (% element-id="678" %)
1170 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca
1171
1172 (% element-id="677" %)
1173 Content-Disposition: form-data; name="orderXml"; filename="VivaTerraIndexAssignment.xml"
1174
1175 (% element-id="676" %)
1176 Content-Type: application/xml
1177
1178
1179 (% element-id="673" %)
1180 <SIKB File in Zip stream Base64  encoding>
1181
1182 (% element-id="672" %)
1183 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca~-~-
1184 )))
1185
1186 (% element-id="671" %)
1187 === (% element-id="670" %)Response example(%%) ===
1188
1189 (% element-id="669" %)
1190 (% element-id="667" %)|(% element-id="666" %)(% element-id="665" %)
1191 (((
1192 (% element-id="664" %)
1193 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1194
1195 (% element-id="663" %)
1196 <Response>
1197
1198 (% element-id="662" %)
1199 <OrderId>7113828</OrderId>
1200
1201 (% element-id="661" %)
1202 <NeedsApproval>True</NeedsApproval>
1203
1204 (% element-id="660" %)
1205 <FileContent></FileContent>
1206
1207 (% element-id="659" %)
1208 <Status>
1209
1210 (% element-id="658" %)
1211 <StatusCode>1</StatusCode>
1212
1213 (% element-id="657" %)
1214 <StatusCodeDescription>OK</StatusCodeDescription>
1215
1216 (% element-id="656" %)
1217 <ErrorMessage></ErrorMessage>
1218
1219 (% element-id="655" %)
1220 </Status></Response>
1221 )))
1222
1223 (% element-id="654" %)
1224 = (% element-id="653" %)Get Order status and Results(%%) =
1225
1226 (% element-id="652" %)
1227 == (% element-id="651" %)Soluion/Design(%%) ==
1228
1229 (% element-id="650" %)
1230 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.
1231
1232 (% class="table-hover" element-id="647" %)
1233 (% 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
1234 (% 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), 
1235 WebservicePassword (string),
1236 CustomerUsername (string)|(% element-id="627" %)We want to skip the Password of the customer, and we introduce the WebserviceUsername + WebservicePassword.|(% element-id="626" %)
1237 (% 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" %)
1238 (% 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 (),
1239 ErrorMessage (string),
1240 List<customer> , Customer:
1241 CustomerCode (string),
1242 CustomerName (string),
1243 LabID (int),
1244 LabName (string),
1245 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,
1246 2 = GeneralError,
1247 3 = WrongSIKBVersion,
1248 4 = InvalidCredentials,
1249 5 = CustomerUsernameInvalid,
1250 6 = CustomerUsernameNotValidForCustomerCode
1251 7 = FileContentProblem,
1252 8 = InvalidOrderId,
1253 9 = OrderIdAlreadyApproved
1254 10 = PDFNotAvailable
1255 (% 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" %)
1256 (% 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.
1257 Function: GetOrderStatuses()|=(% element-id="569" %)>|(% element-id="568" %) |(% element-id="566" %)WebserviceUsername (string), 
1258 WebservicePassword (string),
1259 CustomerUsername (string),
1260 CustomerCode (string),
1261 LastCheckedTimestamp (DateTime)|(% element-id="561" %)TerraIndex keeps track of the last check timestamp for each license.|(% element-id="560" %)
1262 (% 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" %)
1263 (% 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 (),
1264 ErrorMessage (string),
1265 OrderID (string),
1266 LabassignmentGUID (GUID),
1267 CertificateNumber (string)
1268 OrderStatusSIKB (int),
1269 Delayed (boolean),
1270 ExpectedTimeStamp (DateTime),|(% element-id="531" %)OrderStatusSIKB is the SIKB Labassignment status.
1271 \\Delayed is a boolean to tell the customer a order will be later ready then expected. The ExpectedTimestamp.
1272 If Delayed for the firsttime, TerraIndex can send a notification to the users and show a different layout.
1273 \\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|(% element-id="525" %)1 = Success,
1274 2 = GeneralError,
1275 3 = WrongSIKBVersion,
1276 4 = InvalidCredentials,
1277 5 = CustomerUsernameInvalid,
1278 6 = CustomerUsernameNotValidForCustomerCode
1279 7 = FileContentProblem,
1280 8 = InvalidOrderId,
1281 9 = OrderIdAlreadyApproved
1282 10 = PDFNotAvailable
1283 (% element-id="515" %)|(% element-id="514" %)8|(% element-id="513" %)Receives the list of Orders with status.
1284 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" %)
1285 (% element-id="502" %)|(% element-id="501" %)9|(% element-id="500" %)Send for each Order a call to retreive all results.
1286 Function: GetOrderResults()|=(% element-id="498" %)>|(% element-id="497" %) |(% element-id="495" %)WebserviceUsername (string), 
1287 WebservicePassword (string),
1288 CustomerUsername (string),
1289 CustomerCode (string),
1290 OrderID (string),
1291 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" %)
1292 (% 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" %)
1293 (% 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 (),
1294 ErrorMessage (string),
1295 OrderId (string),
1296 LabassignmentGUID (GUID),
1297 FileContent_Base64 (string),
1298 UseZipStream/UseZip (bool, default: 'false'),|(% element-id="461" %) |(% element-id="459" %)1 = Success,
1299 2 = GeneralError,
1300 3 = WrongSIKBVersion,
1301 4 = InvalidCredentials,
1302 5 = CustomerUsernameInvalid,
1303 6 = CustomerUsernameNotValidForCustomerCode
1304 7 = FileContentProblem,
1305 8 = InvalidOrderId,
1306 9 = OrderIdAlreadyApproved
1307 10 = PDFNotAvailable
1308 (% 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" %)
1309 (((
1310 (% element-id="438" %)
1311 Import will be done to corresponding samples based on:
1312
1313 (% element-id="437" %)
1314 * Find Project by ProjectGUID (as provided in the labassignment)
1315 * Find Project by ProjectCode (as provided in the Labassignment)
1316 * Find Project and Labassignment by LabassignmentGUID (as provided in the Labassignment)
1317 * Find Project (only if Project is not found yet) and Samples based on SampleGUID (as provided in the Labassignment) .
1318 Sample GUIDs that are send to the lab in the labassignment version SIKB 13 or higher are required in the results for labassignment.
1319 For lower version Labassignments the lab should return the 'old' idanlmons as SampleGUID in the XML.
1320 * Find Samples (only if Project is already found ) by SampleName
1321
1322 (% element-id="429" %)
1323 What is imported?
1324
1325 (% element-id="428" %)
1326 * If Sample is found, the results in the XML are always all updated and/or inserted.
1327 * 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)
1328 )))|(% element-id="425" %)
1329 (% element-id="423" %)|(% element-id="422" %)13|(% element-id="421" %)If OrderStatus is 'Completed/Reported' (SIKBID: 5)
1330 Request the PDF certificate.
1331 Function: GetOrderPDF()|=(% element-id="418" %)>|(% element-id="417" %) |(% element-id="415" %)WebserviceUsername (string), 
1332 WebservicePassword (string),
1333 CustomerUsername (string),
1334 CustomerCode (string),
1335 OrderID (string),|(% element-id="410" %) |(% element-id="408" %)
1336 (% 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" %)
1337 (% 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 (),
1338 ErrorMessage (string),
1339 OrderId (string),
1340 LabassignmentGUID (GUID),
1341 FileContent_Base64 (string),
1342 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,
1343 2 = GeneralError,
1344 3 = WrongSIKBVersion,
1345 4 = InvalidCredentials,
1346 5 = CustomerUsernameInvalid,
1347 6 = CustomerUsernameNotValidForCustomerCode
1348 7 = FileContentProblem,
1349 8 = InvalidOrderId,
1350 9 = OrderIdAlreadyApproved
1351 10 = PDFNotAvailable
1352 (% 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" %)
1353
1354 (% element-id="357" %)
1355 = (% element-id="356" %)
1356 Customer wants to see real time information about the status in the interface(%%) =
1357
1358 (% element-id="354" %)
1359 == (% element-id="353" %)Solution/Design(%%) ==
1360
1361 (% element-id="352" %)
1362 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.
1363
1364 (% element-id="351" %)
1365 ..NOT SUPPORTED YET...
1366
1367 (% class="table-hover" element-id="350" %)
1368 (% 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
1369 (% element-id="339" %)|(% element-id="338" %)1|(% element-id="337" %)Request the Order status for a single Order/Labassignment.
1370 Function: GetOrderStatus()|=(% element-id="335" %)>|(% element-id="334" %) |(% element-id="332" %)WebserviceUsername (string), 
1371 WebservicePassword (string),
1372 CustomerUsername (string),
1373 CustomerCode (string),
1374 OrderID (string),|(% element-id="327" %) |(% element-id="325" %)
1375 (% 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" %)
1376 (% 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 (),
1377 ErrorMessage (string),
1378 OrderID (string),
1379 LabassignmentGUID (GUID),
1380 CertificateNumber (string)
1381 OrderStatusSIKB (int),
1382 Delayed (boolean),
1383 ExpectedTimeStamp (DateTime),|(% element-id="296" %)OrderStatusSIKB is the SIKB Labassignment status.
1384 \\Delayed is a boolean to tell the customer a order will be later ready then expected. The ExpectedTimestamp.
1385 If Delayed for the firsttime, TerraIndex can send a notification to the users and show a different layout.
1386 \\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|(% element-id="290" %)1 = Success,
1387 2 = GeneralError,
1388 3 = WrongSIKBVersion,
1389 4 = InvalidCredentials,
1390 5 = CustomerUsernameInvalid,
1391 6 = CustomerUsernameNotValidForCustomerCode
1392 7 = FileContentProblem,
1393 8 = InvalidOrderId,
1394 9 = OrderIdAlreadyApproved
1395 10 = PDFNotAvailable
1396 (% element-id="280" %)|(% element-id="279" %)4|(% element-id="278" %)Receives the status and shows in the interface the updated info.
1397 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" %)
1398
1399 (% element-id="265" %)
1400