Changes for page Download a project (export)
Last modified by Robert Jan Daams on 2025/03/05 18:02
Change comment:
There is no comment for this version
Summary
-
Page properties (3 modified, 0 added, 0 removed)
Details
- Page properties
-
- Parent
-
... ... @@ -1,1 +1,1 @@ 1 -Implementati edcoumentatie.WebHome1 +Implementation documentation.WebHome - Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki.R oelofZwaan1 +XWiki.RjDaams - Content
-
... ... @@ -8,10 +8,27 @@ 8 8 ))) 9 9 ))) 10 10 11 +{{box title="**Contents**"}} 12 +[[image:data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==||height="15" role="presentation" title="Click and drag to move" width="15"]] 13 +{{/box}} 14 + 11 11 (% class="row" %) 12 12 ((( 13 13 (% class="col-xs-12 col-sm-8" %) 14 14 ((( 19 +== Changelog == 20 + 21 +=== Update 2022-08-23 === 22 + 23 +As part of on-going efforts to improve performance and scalability, we have introduced a dedicated version of DataWS named DataWSExternals. This new service should be used for external API consumers. 24 + 25 +| |**URL**| 26 +|**Old**|{{code language="none"}}https://web.terraindex.com/DataWS/{{/code}}|[[https:~~/~~/web.terraindex.com/DataWS/ITWImportExportServiceASMX_V1_0.asmx?wsdl>>https://web.terraindex.com/DataWS/ITWImportExportServiceASMX_V1_0.asmx?wsdl]] 27 +|**New**|{{code language="none"}}https://web.terraindex.com/DataWSExternals/{{/code}}|[[https:~~/~~/web.terraindex.com/DataWSExternals/ITWImportExportServiceASMX_V1_0.asmx?wsdl>>https://web.terraindex.com/DataWSExternals/ITWImportExportServiceASMX_V1_0.asmx?wsdl]] 28 + 29 +(% class="wikigeneratedid" %) 30 +== == 31 + 15 15 == 1. Retreive all changed project from TerraIndex == 16 16 17 17 To retreive all changed project from the TerraIndex database since a specific timestamp, there is a webservice call you can do. This will return all project rows that have changes since the timestamp you send within the request. ... ... @@ -32,7 +32,7 @@ 32 32 "Language": "en" 33 33 }, 34 34 "LanguageCode": "en", 35 - "WebserviceVersion": 1, 52 + "WebserviceVersion": "1.0", 36 36 "SearchFilter": "", 37 37 "ArchiveID": 0, 38 38 "PageSize": 30, ... ... @@ -234,7 +234,7 @@ 234 234 == 2. Retreive the project export from TerraIndex == 235 235 236 236 To request the export from TerraIndex we have a SOAP webservice. This webservice is called the ExportService, and it will provide a full project in TerraIndex Format. 237 -The format of the projectfile is documentated here: [[Documentation TerraIndex Export format - dsFieldProject.xsd>>Implementati edcoumentatie.Documentation TerraIndex Export format - dsFieldProject\.xsd.WebHome]]254 +The format of the projectfile is documentated here: [[Documentation TerraIndex Export format - dsFieldProject.xsd>>Implementation documentation.Documentation TerraIndex Export format - dsFieldProject\.xsd.WebHome]] 238 238 239 239 To start connecting this webservice, you should use this URL of the Import Export Webservice: 240 240 [[https:~~/~~/web.terraindex.com/DataWS/ITWImportExportServiceASMX_V1_0.asmx>>url:https://web.terraindex.com/DataWS/ITWImportExportServiceASMX_V1_0.asmx]] ... ... @@ -252,12 +252,15 @@ 252 252 Also fill the license and the applicationCode. //(These two fields can be requested at the TerraIndex Servicedesk.)// 253 253 5; Fill the **ExportType **'**Export_FIELD_XML_v1_0_0**’. This export corresponds with dsFieldProject.xsd and is the best XML to connect TI with. 254 254 Create at least create 2 parameters as in the image. Beacause 2 parameters are needed. 272 +//If JSON is prevered use: ExportType = 'Export_FIELD_JSON_v1_0_0'// 255 255 6; Fill the parameter with the FileName. 256 256 7; Fill the parameter with **projectID**. Instead of ‘ProjectID' it’s also possible to fill the parameter ‘ProjectCode'. 257 257 8; Send the request and wait for the reponse. In response field ‘ResultCode’ should be 'SUCCES’ when it all went OK. If not it will tell what went wrong. 258 258 9; The response field 'Filecontent’is filled if it went OK, and it contains XML you can serialize. 259 -\\*Username and password are known by each TI user and the application manager of your company can create new usernames. 277 +10; an extra parameter is added calles: **UseZipStream**. The result data is default Base64 encoded, if you add UseZipStream = true, the result string is GZIPSTREAMED Base64 encoded. **At the end of this page, we have added an class as code, to parse the base64 or ZIPStream Base64 to a normal string.** 278 +*Username and password are known by each TI user and the application manager of your company can create new usernames. 260 260 280 + 261 261 **EXAMPLE CODE** 262 262 263 263 ExportType: ... ... @@ -299,11 +299,76 @@ 299 299 300 300 Example call 301 301 302 -<soapenv:Envelope xmlns:soapenv="http:~/~/schemas.xmlsoap.org/soap/envelope/" xmlns:itw="https:~/~/wsterraindex.terraindex.com/ITWorks.TerraIndex/"> <soapenv:Header/> <soapenv:Body> <itw:Export> <itw:request> <itw:AuthorisationRequest> <itw:Username>USERNAME</itw:Username> <itw:Password>PASSWORD</itw:Password> <itw:Licensenumber>LICENSE</itw:Licensenumber> <itw:ApplicationCode>APPCODE</itw:ApplicationCode> </itw:AuthorisationRequest> <itw:WebserviceVersion>1.0</itw:WebserviceVersion> <itw:LanguageCode>nld</itw:LanguageCode> <itw:UseCompression>true</itw:UseCompression> <itw:TypeOfExport>Export_FIELD_XML_v1_0_0</itw:TypeOfExport> <itw:Parameters> <itw:ExportParameter> <itw:ParameterType>FileName</itw:ParameterType> <itw:StringValue>Export</itw:StringValue> </itw:ExportParameter> <itw:ExportParameter> <itw:ParameterType>projectID</itw:ParameterType> <itw:FloatValue>917</itw:FloatValue> </itw:ExportParameter> ~-~-~-~-- <itw:ExportParameter> <itw:ParameterType>ProjectCode</itw:ParameterType> <itw:StringValue>202020</itw:StringValue> </itw:ExportParameter> ~-~-~-~- </itw:Parameters> <itw:LogFormat>XML</itw:LogFormat> <itw:UseZipStream>true</itw:UseZipStream> </itw:request> </itw:Export> </soapenv:Body></soapenv:Envelope> 322 +{{code language="none" layout="LINENUMBERS"}} 323 +<soapenv:Envelope 324 + xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 325 + xmlns:itw="https://wsterraindex.terraindex.com/ITWorks.TerraIndex/"> 326 + <soapenv:Header></soapenv:Header> 327 + <soapenv:Body> 328 + <itw:Export> 329 + <itw:request> 330 + <itw:AuthorisationRequest> 331 + <itw:Username>USERNAME</itw:Username> 332 + <itw:Password>PASSWORD</itw:Password> 333 + <itw:Licensenumber>LICENSE</itw:Licensenumber> 334 + <itw:ApplicationCode>APPCODE</itw:ApplicationCode> 335 + </itw:AuthorisationRequest> 336 + <itw:WebserviceVersion>1.0</itw:WebserviceVersion> 337 + <itw:LanguageCode>nld</itw:LanguageCode> 338 + <itw:UseCompression>true</itw:UseCompression> 339 + <itw:TypeOfExport>Export_FIELD_XML_v1_0_0</itw:TypeOfExport> 340 + <itw:Parameters> 341 + <itw:ExportParameter> 342 + <itw:ParameterType>FileName</itw:ParameterType> 343 + <itw:StringValue>Export</itw:StringValue> 344 + </itw:ExportParameter> 345 + <itw:ExportParameter> 346 + <itw:ParameterType>projectID</itw:ParameterType> 347 + <itw:FloatValue>917</itw:FloatValue> 348 + </itw:ExportParameter> ----- 349 + <itw:ExportParameter> 350 + <itw:ParameterType>ProjectCode</itw:ParameterType> 351 + <itw:StringValue>202020</itw:StringValue> 352 + </itw:ExportParameter> ---- 353 + </itw:Parameters> 354 + <itw:LogFormat>XML</itw:LogFormat> 355 + <itw:UseZipStream>true</itw:UseZipStream> 356 + </itw:request> 357 + </itw:Export> 358 + </soapenv:Body> 359 +</soapenv:Envelope> 360 +{{/code}} 303 303 304 304 Example response: 305 305 306 -<soap:Envelope xmlns:soap="http:~/~/schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http:~/~/www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:~/~/www.w3.org/2001/XMLSchema"> <soap:Body> <ExportResponse xmlns="https:~/~/wsterraindex.terraindex.com/ITWorks.TerraIndex/"> <ExportResult> <ResultCode>Export_Succes</ResultCode> <TypeOfExport>Export_TI_v1_0_0</TypeOfExport> <Files> <File> <FileName>917.xml</FileName> <TypeOfFile>Field_XML_Compressed</TypeOfFile> <FileContent>H4sIAAAAAAAEAFWRuZaqQABEP4hAGnAGggm6odlREFkkA2WRRRCBxv76YeYF70yFVXUqqBvgl4KQBzcZ8Aho2iqxdhxDSPDmNGjz9Z/weMa8/aimTAUeF42KgxRRzd3YaGfdXtvECEBvWafSNwf+dOsjVXpZUzs+lw/p3gBhuXQ5S8T3MdIBlxUQEam+LOVgVo4D8w4c2E8pEgp3haewcpQx1KQ41Z8DKWv16seaDLp3GABLuIKXK5Ucq31EfSXm0172YvG87hcbayYGdB1t0CbcuueLpU5UawgHSitFr564Aet5LeegD0/tocZDTvuIuc9Ja0tDFt/m7kZnomdVJc+2SkqBGXmTdPiiPzJa2OznLkX67p2PCNM7iHU11QbIilVkMDBVd0J8gK4Ams6ycJQagnww/SaxuiZ/EdS6DZ0cf17BIhUq87CSkQvxat/2dEG1xu94BoaeT7C8XR38/C1DZbpygwfW+gk8Z+Mgm3DDhAj8r6099Rj+5YNs5F3+5R5EUPmd6+EvYvj1Dd8o9lLwAQAA</FileContent> </File> <File> <FileName>ProjectInfo.xml</FileName> <TypeOfFile>Field_XML_Compressed</TypeOfFile> <FileContent>H4sIAAAAAAAEAI1Qy5JDQAD8IAdj1/M4hJggDBnEbTxDsV7BxtdvNqm9bx+6urq7+tBEnw+qiuETCLrcTlst9Pajtb0soj7JeynztNIubHK9XZJOXoojN8dXpaxltOlOwAZzK033Edx7HWT1ZFVYNljpsT7iCVDbxb5tlmw3GhV7vgty5jqiGzWSYEvL7RCIQifzchIoMJnHz+fO17C4JAwA0hNRb247SR1ba8OunCV4ralK1rjwBhUAJ2pihopeuxqXIUecePETLhx8zT6IZX5GzafC0XHTrauISeyIM2+2g1PzEymRZrTtglKlsFYHXDKmoYTp+jw1zNDyAFZOTN9XHkuNGmU33905uipWMTsjm2ccm6+bxqk2xAjCf/z3BwS1j+qVqTjrlDGJziCIhC59CHwafeNgI8d3U4cQQ+VXSdXb+QGLuAuvrAEAAA==</FileContent> </File> </Files> </ExportResult> </ExportResponse> </soap:Body></soap:Envelope> 364 +{{code language="none"}} 365 +<soap:Envelope 366 + xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 367 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 368 + xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 369 + <soap:Body> 370 + <ExportResponse 371 + xmlns="https://wsterraindex.terraindex.com/ITWorks.TerraIndex/"> 372 + <ExportResult> 373 + <ResultCode>Export_Succes</ResultCode> 374 + <TypeOfExport>Export_TI_v1_0_0</TypeOfExport> 375 + <Files> 376 + <File> 377 + <FileName>917.xml</FileName> 378 + <TypeOfFile>Field_XML_Compressed</TypeOfFile> 379 + <FileContent>H4sIAAAAAAAEAFWRuZaqQABEP4hAGnAGggm6odlREFkkA2WRRRCBxv76YeYF70yFVXUqqBvgl4KQBzcZ8Aho2iqxdhxDSPDmNGjz9Z/weMa8/aimTAUeF42KgxRRzd3YaGfdXtvECEBvWafSNwf+dOsjVXpZUzs+lw/p3gBhuXQ5S8T3MdIBlxUQEam+LOVgVo4D8w4c2E8pEgp3haewcpQx1KQ41Z8DKWv16seaDLp3GABLuIKXK5Ucq31EfSXm0172YvG87hcbayYGdB1t0CbcuueLpU5UawgHSitFr564Aet5LeegD0/tocZDTvuIuc9Ja0tDFt/m7kZnomdVJc+2SkqBGXmTdPiiPzJa2OznLkX67p2PCNM7iHU11QbIilVkMDBVd0J8gK4Ams6ycJQagnww/SaxuiZ/EdS6DZ0cf17BIhUq87CSkQvxat/2dEG1xu94BoaeT7C8XR38/C1DZbpygwfW+gk8Z+Mgm3DDhAj8r6099Rj+5YNs5F3+5R5EUPmd6+EvYvj1Dd8o9lLwAQAA</FileContent> 380 + </File> 381 + <File> 382 + <FileName>ProjectInfo.xml</FileName> 383 + <TypeOfFile>Field_XML_Compressed</TypeOfFile> 384 + <FileContent>H4sIAAAAAAAEAI1Qy5JDQAD8IAdj1/M4hJggDBnEbTxDsV7BxtdvNqm9bx+6urq7+tBEnw+qiuETCLrcTlst9Pajtb0soj7JeynztNIubHK9XZJOXoojN8dXpaxltOlOwAZzK033Edx7HWT1ZFVYNljpsT7iCVDbxb5tlmw3GhV7vgty5jqiGzWSYEvL7RCIQifzchIoMJnHz+fO17C4JAwA0hNRb247SR1ba8OunCV4ralK1rjwBhUAJ2pihopeuxqXIUecePETLhx8zT6IZX5GzafC0XHTrauISeyIM2+2g1PzEymRZrTtglKlsFYHXDKmoYTp+jw1zNDyAFZOTN9XHkuNGmU33905uipWMTsjm2ccm6+bxqk2xAjCf/z3BwS1j+qVqTjrlDGJziCIhC59CHwafeNgI8d3U4cQQ+VXSdXb+QGLuAuvrAEAAA==</FileContent> 385 + </File> 386 + </Files> 387 + </ExportResult> 388 + </ExportResponse> 389 + </soap:Body> 390 +</soap:Envelope> 391 +{{/code}} 307 307 308 308 309 309 == Zip Stream class == ... ... @@ -310,16 +310,137 @@ 310 310 311 311 If needed, this is the Zip Stream class you can use to extract the zipstream as used above: 312 312 313 -~/~// <summary> ~/~// Helper class for compress en decompress of file data ~/~// </summary> public static class ZipStreamHelper { #region Compress and encode ~/~// <summary> ~/~// Comprimeer een string en geeft deze terug in Base64 string. ~/~// </summary> ~/~// <param name="content">filecontent</param> ~/~// <returns>gecomprimeerde string</returns> public static string CompressToBase64String(string content) { ~/~/string to byte[] byte[] contentArray = stringToByteArray(content); ~/~/ Compress byte[] compressed = Compress(contentArray); return base64_encode(compressed); } ~/~// <summary> ~/~// Zet een string om naar een ByteArray ~/~// </summary> ~/~// <param name="content">filecontent</param> ~/~// <returns>ByteArray</returns> public static byte[] stringToByteArray(string content) { System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); return encoding.GetBytes(content); } ~/~// <summary> ~/~// comprimeer een ByteArray ~/~// </summary> ~/~// <param name="data">filedata als ByteArray</param> ~/~// <returns>gecomprimeerde ByteArray</returns> public static byte[] Compress(byte[] data) { using (var compressedStream = new MemoryStream()) using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress)) { zipStream.Write(data, 0, data.Length); zipStream.Close(); return compressedStream.ToArray(); } } ~/~// <summary> ~/~// Zet een ByteArray om naar een Base64 string ~/~// </summary> ~/~// <param name="data">gecomprimeerde ByteArray</param> ~/~// <returns>Base 64 string</returns> public static string base64_encode(byte[] data) { if (data == null) return string.Empty; return Convert.ToBase64String(data); } ~/~// <summary> ~/~// Zet een string om naar een Base64 string ~/~// </summary> ~/~// <param name="data">string</param> ~/~// <returns>Base 64 string</returns> public static string string_base64_encode(string data) { if (string.IsNullOrEmpty(data)) return string.Empty; ~/~/string to byte[] byte[] contentArray = stringToByteArray(data); return base64_encode(contentArray); } #endregion #region Decompress and decode ~/~/ Decode and decompress ~/~// <summary> ~/~// Decomprimeer een Base64 string naar een string ~/~// </summary> ~/~// <param name="contentBase64">GZIP Base64 string</param> ~/~// <returns>string</returns> public static string DecompressBase64StringToString(string contentBase64) { ~/~/ Decompress byte[] decoded = base64_decode(contentBase64); byte[] decompressed = Decompress(decoded); return byteArrayTostring(decompressed); } ~/~// <summary> ~/~// Zet een ByteArray om in een normale string ~/~// </summary> ~/~// <param name="data">ByteArray</param> ~/~// <returns>string</returns> public static string byteArrayTostring(byte[] data) { System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); return enc.GetString(data); } ~/~// <summary> ~/~// Zet een Base64 string om naar een ByteArray ~/~// </summary> ~/~// <param name="encodedData">Base64 string</param> ~/~// <returns>gecomprimeerde ByteArray</returns> public static byte[] base64_decode(string encodedData) { byte[] encodedDataAsBytes = Convert.FromBase64String(encodedData); return encodedDataAsBytes; } ~/~// <summary> ~/~// Zet een gecomprimeerde ByteArray om in een ByteArray ~/~// </summary> ~/~// <param name="data">gecomprimeerde ByteArray</param> ~/~// <returns>ByteArray (gedecomprimeerd)</returns> public static byte[] Decompress(byte[] data) { using (var compressedStream = new MemoryStream(data)) using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) using (var resultStream = new MemoryStream()) { var buffer = new byte[4096]; int read; while ((read = zipStream.Read(buffer, 0, buffer.Length)) > 0) { resultStream.Write(buffer, 0, read); } return resultStream.ToArray(); } } #endregion } 398 +{{code language="Csharp" layout="LINENUMBERS"}} 399 +/// <summary> 400 +/// Helper class for compress en decompress of file data 401 +/// </summary> 402 +public static class ZipStreamHelper { 403 + #region Compress and encode 404 + /// <summary> 405 + /// Comprimeer een string en geeft deze terug in Base64 string. 406 + /// </summary> 407 + /// <param name="content">filecontent</param> 408 + /// <returns>gecomprimeerde string</returns> 409 + public static string CompressToBase64String(string content) { 410 + //string to byte[] 411 + byte[] contentArray = stringToByteArray(content); 412 + // Compress 413 + byte[] compressed = Compress(contentArray); 414 + return base64_encode(compressed); 415 + } 416 + 417 + /// <summary> 418 + /// Zet een string om naar een ByteArray 419 + /// </summary> 420 + /// <param name="content">filecontent</param> 421 + /// <returns>ByteArray</returns> 422 + public static byte[] stringToByteArray(string content) { 423 + System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 424 + return encoding.GetBytes(content); 425 + } 426 + 427 + /// <summary> 428 + /// comprimeer een ByteArray 429 + /// </summary> 430 + /// <param name="data">filedata als ByteArray</param> 431 + /// <returns>gecomprimeerde ByteArray</returns> 432 + public static byte[] Compress(byte[] data) { 433 + using(var compressedStream = new MemoryStream()) 434 + using(var zipStream = new GZipStream(compressedStream, CompressionMode.Compress)) { 435 + zipStream.Write(data, 0, data.Length); 436 + zipStream.Close(); 437 + return compressedStream.ToArray(); 438 + } 439 + } 440 + 441 + /// <summary> 442 + /// Zet een ByteArray om naar een Base64 string 443 + /// </summary> 444 + /// <param name="data">gecomprimeerde ByteArray</param> 445 + /// <returns>Base 64 string</returns> 446 + public static string base64_encode(byte[] data) { 447 + if (data == null) 448 + return string.Empty; 449 + return Convert.ToBase64String(data); 450 + } 451 + 452 + /// <summary> 453 + /// Zet een string om naar een Base64 string 454 + /// </summary> 455 + /// <param name="data">string</param> 456 + /// <returns>Base 64 string</returns> 457 + public static string string_base64_encode(string data) { 458 + if (string.IsNullOrEmpty(data)) 459 + return string.Empty; 460 + 461 + //string to byte[] 462 + byte[] contentArray = stringToByteArray(data); 463 + return base64_encode(contentArray); 464 + } 465 + #endregion 466 + 467 + #region Decompress and decode 468 + // Decode and decompress 469 + /// <summary> 470 + /// Decomprimeer een Base64 string naar een string 471 + /// </summary> 472 + /// <param name="contentBase64">GZIP Base64 string</param> 473 + /// <returns>string</returns> 474 + public static string DecompressBase64StringToString(string contentBase64) { 475 + // Decompress 476 + byte[] decoded = base64_decode(contentBase64); 477 + byte[] decompressed = Decompress(decoded); 478 + 479 + return byteArrayTostring(decompressed); 480 + } 481 + 482 + /// <summary> 483 + /// Zet een ByteArray om in een normale string 484 + /// </summary> 485 + /// <param name="data">ByteArray</param> 486 + /// <returns>string</returns> 487 + public static string byteArrayTostring(byte[] data) { 488 + System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 489 + return enc.GetString(data); 490 + } 491 + 492 + /// <summary> 493 + /// Zet een Base64 string om naar een ByteArray 494 + /// </summary> 495 + /// <param name="encodedData">Base64 string</param> 496 + /// <returns>gecomprimeerde ByteArray</returns> 497 + public static byte[] base64_decode(string encodedData) { 498 + byte[] encodedDataAsBytes = Convert.FromBase64String(encodedData); 499 + return encodedDataAsBytes; 500 + } 501 + 502 + /// <summary> 503 + /// Zet een gecomprimeerde ByteArray om in een ByteArray 504 + /// </summary> 505 + /// <param name="data">gecomprimeerde ByteArray</param> 506 + /// <returns>ByteArray (gedecomprimeerd)</returns> 507 + public static byte[] Decompress(byte[] data) { 508 + using(var compressedStream = new MemoryStream(data)) 509 + using(var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) 510 + using(var resultStream = new MemoryStream()) { 511 + var buffer = new byte[4096]; 512 + int read; 513 + 514 + while ((read = zipStream.Read(buffer, 0, buffer.Length)) > 0) { 515 + resultStream.Write(buffer, 0, read); 516 + } 517 + 518 + return resultStream.ToArray(); 519 + } 520 + } 521 + #endregion 522 +} 523 +{{/code}} 314 314 ))) 315 315 316 316 317 317 (% class="col-xs-12 col-sm-4" %) 318 318 ((( 319 -{{box title="**Contents**"}} 320 -{{toc/}} 321 -{{/box}} 322 - 323 323 324 324 ))) 325 325 )))