Version 26.5 by Nico Lemaire on 2025/05/06 15:49

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