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

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