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

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