Scambia dati tra TDox e sistemi esterni grazie alle API

Esplora l’OData Service, ovvero il servizio che ti permette di integrare la piattaforma TDox con qualsiasi altro strumento esterno. Tutto questo grazie all’utilizzo delle API.

Sfrutta TDox al massimo attraverso le integrazioni, trovi il link per le API qui sotto! (Clicca il tasto API che trovi nella pagina per accederci)

api

Web Services esposti dal cliente (Metodo PUSH)

Il cliente potrà esporre uno o più web services in modo da ricevere notifica per ogni documento completato. Una volta che un documento è stato completato, TDox chiamerà il relativo Web Service ed invierà il file XML contenente le informazioni dei dati raccolti. Dall’XML sono escluse le foto e il documento PDF che potranno essere recuperati attraverso i metodi prima descritti in un secondo momento avendo cura di evvettuare la chiamata utilizzando il GUID della compilazione.

NOME DEL METODO ESPOSTO: <impostato dal cliente in fase di set up>

INPUT: Stringa (documento in formato XML sullo stato dei documenti in fase di compilazione)

RISULTATO: TDox chiamerà il servizio , dandoti i seguenti dati in formato XML:

  • Instance: Codice univoco (guid) per il flusso generato per l’istanza
  • DateStart: Data inizio flusso
  • DateEnd: Data fine flusso
  • ModelId: Codice interno del tipo di processo
  • ModelName: Titolo del processo
  • Operator: Nome dell’operatore che ha compilato il flusso e raccolto i dati
  • Status: Stato del processo (CLOSED = chiuso con successo, ABORTED = annullato dall’utente)

OUTPUT: Il sistema restituirà un messaggio XML contenente lo stato di una determinata istanza richiesta.

TDox supporta l’esportazione di webmethods multipli, spetterà poi al cliente scegliere quale sarà il più conveniente. La funzione dovrà essere impostata a livello di programma, basato sulle esigenze del cliente. Webmethod con parametri DataSet: Il Webmethod avrà 2 parametri come input e 1 come output.

DataSet[Input]: Il DataSet è l’input contenente la lista di DataTable associati al modulo esportato. String[Input]: descrizione univoca  del modulo esportato.

DataSet[Output]: è il DataSet di ritorno, contenente il DataTable che restituisce i risultati dei dati esportati.

*Alla fine del capitolo, troverai un esempio della firma del metodo e la navigazione dell’XML.

Webmethod con parametri string: questo webmethod ha 3 parametri in input e 1 parametro in output.

string[Input]: Stringa contenente uno schema XML 

string[Input]: stringa contenente un DataSet XML che restituisce tutti i valori esportati

string[Input]: Descrizione univoca del modulo esportato

string[Output]: stringa contenente un DataSet XML che restituisce i risultati dei dati esportati

*Alla fine del capitolo troverai un esempio della firma del metodo e la navigazione XML.

Struttura del DataSet XML inviato

Come descritto, TDox invoca il servizio richiesto e invia il file XML contenente tutti i dati raccolti dagli operatori. Questo documento rappresenta il DataSet strutturato come segue: 

 

HEADER TABLE: Table contenente tutti i dati descritti precedentemente, è comune a tutti i processi (instance, Date Start, etc) più tutti i dati non tabulari raccolti durante i processi.

Repeated Data Tabs: in ogni processo di raccolta dati possono esserci 0 o N tabelle (STP RIPETUTI) che possono essere compilate da un operatore. Il file XML conterrà da 0 a N tabelle aggiuntive a quelle dell’header. In ogni tabella aggiuntiva ci saranno sempre dei campi istanza che sono una chiave esterna nell’header.

In modo da chiarire tutto ciò che è stato discusso, ecco un semplice esempio: Immagina che alcuni dei tuoi utenti stiano usando TDox per raccogliere ordini dai tuoi clienti. Un processo di raccolta ordini è fatto delle informazioni di testata (data acquisto, codice cliente, data di consegna prevista, numero d’ordine) e una tabella dove un operatore può aggiungere righe multiple per ogni ordine (ad esempio codice prodotto, quantità, prezzo). In questo caso, TDox esporterà all’invocante un file XML contenente un HEADER TABLE (con istanza, data d’inizio, data ordine, codice cliente) e un tabella aggiuntiva contenente i dati delle righe relative all’istanza.

Il nome dell’HEADER TABLE sarà sempre HEADER <nome processo>.

I nomi per ogni tabella aggiuntiva saranno sempre personalizzabili dal workflow designer, in questo caso varierebbero ogni volta, anche se sarebbero seguiti da <nome processo>.

Qui puoi vedere uno schema XML completo. Seguendo questo esempio e supponendo che l’intero processo venga chiamato “Purchase order”, per ogni singolo record raccolto dagli utenti, TDox esporterà un XML strutturato come segue:

<NewDataSet>

<HEADER_Purchase_Order>

<Customer__ENTITY_REVISION>523d9684-d3a1-4d6d-96b2-91b6a2d0452f</Customer__ENTITY_REVISION>

 <Customer__DS_BUSINESS_NAME>Sebastian Wagner</Customer__DS_BUSINESS_NAME>

 <Customer__CD_ERP_CODE>IYD6896</Customer__CD_ERP_CODE>

<Instance>2bdccb1d-0370-4d5b-462a-4ead6cde1dc2</Instance>

<DateStart>2015-04-22T16:31:32.113+02:00</DateStart>

<DateEnd>2015-04-22T16:31:50.113+02:00</DateEnd>

<ModelId>20232</ModelId>

<Status>CLOSED</Status>

<ModelName>Purchase Order</ModelName>

<Operator>prova@tdox.com</Operator>

<Purchase_Date>2015-05-22T00:00:00.00+02:00</Purchase_Date>

 </HEADER_Purchase_Order>

 <DETAILS_Purchase_Order>

<Instance>2bdccb1d-0370-4d5b-462a-4ead6cde1dc2</Instance>

<PrIndex>0</PrIndex>

<Product_Code>125689 </Product_Code>

<Quantity>10</Quantity >

<Price>1.56</Price>

 </DETAILS_Purchase_Order>

 <DETAILS_Purchase_Order>

<Instance>2bdccb1d-0370-4d5b-462a-4ead6cde1dc2</Instance>

<PrIndex>0</PrIndex>

< Product_Code >025668 </Product_Code>

<Quantity>15</Quantity>

<Price>100.23</Price>

 </DETAILS_Purchase_Order>

<NewDataSet> 

In ogni record di dettaglio il campo istanza è disponibile come chiave esterna all’header.

Con ogni esportazione, il file XML conterrà sempre, insieme ai dati rilevanti, la struttura dello schema.

Struttura del DataSet XML di risposta

Il webmethod di risposta deve contenere il DataSet in una sola tabella. Questa tabella deve essere chiamata RESULTS. Questa tabella avrà 2 colonne stringa.

  • Instance: codice istanza inserito del datatable HEADER:”…”
  • RES: Risulta relativo all’Istanza (accetta valori come “OK”, “KO”)

Test e Setup

I ruoli amministratore e System integrator in TDox, avranno accesso alla sezione EXCHANGE DATA sulla web app dalla barra in alto, andando sull’icona a forma di ingranaggio > Data Export.

api

Dal menù, sarà possibile avere accesso alle pagine per dei test e il setup di transazioni in uscita. A sinistra saranno mostrati i moduli creati con TDox. Selezionando un modulo qualsiasi, sarà possibile settare la richiesta a dei web service esterni.

Cliccando sull’icona a forma di matita in alto a destra, sarà possibile vedere le impostazioni per le richieste ai servizi esterni relativi al modulo selezionato.

api

Le seguenti opzioni possono essere modificate:

URI: file del percorso wsdl 

Web Method: nome del servizio web richiesto

Filtri: nome degli oggetti che vuoi esportare nell’XML. Lasciando questo campo vuoto, TDox esporterà tutti i dati disponibili all’interno del modulo. Considera di usare questo filtro per esportare solo alcune informazioni.

.NET?: va spuntato solo qualora tu stia utilizzando un servizio .NET di Microsoft

Tipo risultato: puoi impostare un tipo di dato contenuto  nell’oggetto restituito dal metodo impostato: DataSet o Stringa.

Automatico?: Va spuntato in caso una volta finiti i test, tu desideri esportare automaticamente i dati raccolti

Data Inizio: Data in cui desideri iniziare a esportare i dati automaticamente 

Una volta finito il setup, è possibile salvare le impostazioni con il relativo bottone oppure annullare il tutto.

Nella tabella sottostante, il programma mostrerà almeno 10 transazioni effettive fatte dagli operatori. Per ogni singolo operatore, è possibile vedere un XML con i dati relativi alla transazione cliccando sull’icona o mandare una richiesta a un web service esterno cliccando su e aspettando che l’operazione finisca. In caso tutto ciò dovesse andare a buon fine, il programma restituirà un XML generato da un servizio esterno (XML Return).

Campo filtro:

Il filtro sui dati è una funzionalità complessa. Iniziamo dicendo che un processo/documento può essere composto di dati “piatti” come l’header, il footer e i dati contenuti nelle tabelle. Per capire meglio questo concetto, vedi Struttura del DataSet XML inviato.

Usando il filtro sui dati, puoi ridurre al minimo la dimensione del file XML, in modo che sia poi esportato da TDox al webservice esterno, contenente i dati nell’header e quelli contenuti nelle relative tabelle.

L’header deve essere il primo oggetto disponibile, all’interno di quest’ultimo, tutte le variabili che desideri esportare devono essere dichiarate (con “*” puoi esportare tutte le colonne). {“Header”:{“Col”:[“*”]}}.

Il seguente esempio mostra l’esportazione per tutte le variabili nell’header.

Oltre a “Header”, c’è un’altra parola chiave: “Repeaters”. Nella sezione “Repeaters” potrai inserire ogni colonna che desideri esportare da un determinato step ripetuto. In ogni caso, con “*” potrai esportare la lista completa delle variabili.

{“Header”:{“Col”:[“*”]},”Repeaters”:[{“Step”:”Expense”,”Col”:[“*”]}]}

In modo da capire meglio come impostare il tutto, ecco qua un esempio pratico:

{“Header”:{“Col”:[“*”]},”Repeaters”:[{“Step”:”Expense”,”Col”:[“Date_1”,”Travelled_kilometers”]}]}

Questo esporterà tutte le colonne dell’header e le colonne dallo step ripetuto “Expense”. In questo caso, le colonne esportate saranno “Date_1” e “Travelled_kilometers”.

{“Header”:{“Col”:[“*”]},”Repeaters”:[{“Step”:”Expense”,”Col”:[“Date_1”,”Travelled_kilometers”]}, {“Step”:”Food_Expense”,”Col”:[“Launch”,”Dinner”]}]}

Questo esporterà tutte le colonne dell’header e le colonne dello step ripetuto “Expense” (Daste_!, Travelled:kilometers) e le colonne dello step ripetuto “Food_Expense” (Lunch, Dinner).

{“Header”{“Col”:[“First_and_last_name”,”Registrazion_Numer”]},”Repeaters”:[{“Step”:”Expense”,”Col”:[“*”]}]}

Questo esporterà le tabelle header “First_and_last_name” e “Registration_Number” e oltre a queste, tutte le colonne contenute nello step ripetuto “Expense”.

Esempio di schema XML inviato da TDox and un webservice esterno

<?xml version=”1.0″ encoding=”utf-16″?>

<xs:schema id=”NewDataSet” xmlns=”” xmlns:xs=”http://www.w3.org/2001/XMLSchema”

xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata”>

 <xs:element name=”NewDataSet” msdata:IsDataSet=”true” msdata:UseCurrentLocale=”true”>

<xs:complexType>

 <xs:choice minOccurs=”0″ maxOccurs=”unbounded”>

 <xs:element name=”HEADER_Example”>

 <xs:complexType>

 <xs:sequence>

 <xs:element name=”Client__ENTITY_REVISION” msdata:DataType=”System.Guid, mscorlib,

Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__IS_PERSON” type=”xs:boolean” minOccurs=”0″ />

 <xs:element name=”Client__DS_BUSINESS_NAME” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_FIRST_NAME” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_LAST_NAME” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_FULL_NAME” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__CD_ERP_CODE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_PHONE1″ type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_FAX1″ type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_MOBILE1″ type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_EMAIL” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_WEB_SITE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_TAX_CODE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_VAT_CODE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__CD_STATUS” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_ADDRESS” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_ZIP” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_CITY” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_PROVINCE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__TX_COUNTRY” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Notes” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Gps” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Gps__LATITUDE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Gps__LONGITUDE” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Gps__PROVIDER” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Gps__TIMESTAMP” type=”xs:dateTime” minOccurs=”0″ />

 <xs:element name=”STEP_1__COUNT” type=”xs:double” minOccurs=”0″ />

 <xs:element name=”Instance” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”DateStart” type=”xs:dateTime” minOccurs=”0″ />

 <xs:element name=”DateEnd” type=”xs:dateTime” minOccurs=”0″ />

 <xs:element name=”ModelId” type=”xs:int” minOccurs=”0″ />

 <xs:element name=”ModelName” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Status” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Operator” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”ID_FKS” type=”xs:string” minOccurs=”0″ />

<xs:element name=”Client__ENTITY_REVISION__ID_FKS” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Client__ENTITY_REVISION__PLANNED” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Note__ID_FKS” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Note__PLANNED” type=”xs:string” minOccurs=”0″ />

</xs:sequence>

 </xs:complexType>

 </xs:element>

 <xs:element name=”DETAILS_Example”>

 <xs:complexType>

 <xs:sequence>

 <xs:element name=”Serial_Number” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Notes” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Instance” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”PrIndex” type=”xs:int” minOccurs=”0″ />

 <xs:element name=”Serial_Number__ID_FKS” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Serial_Number__PLANNED” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Notes__ID_FKS” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”Notes__PLANNED” type=”xs:string” minOccurs=”0″ />

 </xs:sequence>

 </xs:complexType>

 </xs:element>

 </xs:choice>

 </xs:complexType>

 </xs:element>

</xs:schema>

Esempio di schema XML inviato da TDox a un webservice esterno

<NewDataSet>

 <HEADER_Example>

<Client__ENTITY_REVISION>523d9684-d3a1-4d6d-96b2-91b6a2d0452f</Client__ENTITY_REVISION>

 <Client__DS_BUSINESS_NAME>Sebastian Wagner</Client__DS_BUSINESS_NAME>

 <Client__CD_ERP_CODE>IYD6896</Client__CD_ERP_CODE>

 <Gps>Via Giuseppe Mazzini, 30,

46043 Castiglione delle Stiviere MN,

</Gps>

 <Gps__LATITUDE>45,3840157</Gps__LATITUDE>

 <Gps__LONGITUDE>10,4924296</Gps__LONGITUDE>

 <Gps__PROVIDER>network</Gps__PROVIDER>

 <Gps__TIMESTAMP>2015-04-22T16:31:42.29+02:00</Gps__TIMESTAMP>

 <STEP_1__COUNT>1</STEP_1__COUNT>

 <Instance>2bdccb1d-0370-4d5b-462a-4ead6cde1dc2</Instance>

 <DateStart>2015-04-22T16:31:32.113+02:00</DateStart>

 <DateEnd>2015-04-22T16:31:50.113+02:00</DateEnd>

 <ModelId>20232</ModelId>

<ModelName>Modello di Esempio</ModelName>

<Status>CLOSED</Status> 

<Operator>info@mytdox.com</Operator>

 </HEADER_Example>

 <HEADER_Example>

 <Client__ENTITY_REVISION>4d88183a-ab9f-4c91-aaea-830c51188a11</Client__ENTITY_REVISION>

 <Client__DS_BUSINESS_NAME>Cooper Bryan</Client__DS_BUSINESS_NAME>

 <Client__CD_ERP_CODE>CKS1576</Client__CD_ERP_CODE>

 <STEP_1__COUNT>0</STEP_1__COUNT>

 <Instance>b21cdfda-57f3-4d66-6965-511fc37b3743</Instance>

 <DateStart>2015-04-22T16:32:45.067+02:00</DateStart>

 <DateEnd>2015-04-22T16:32:55.01+02:00</DateEnd>

 <ModelId>20232</ModelId>

 <ModelName>Modello di Esempio</ModelName>

 <Operator>info@mytdox.com</Operator>

 <Status>CLOSED</Status> 

</HEADER_Example>

 <HEADER_Example>

 <Client__ENTITY_REVISION>d6dcdf41-b873-4aee-98b5-a988ff479df7</Client__ENTITY_REVISION>

 <Client__DS_BUSINESS_NAME>Jocelyn Guy</Client__DS_BUSINESS_NAME>

 <Client__CD_ERP_CODE>EXK9296</Client__CD_ERP_CODE>

 <STEP_1__COUNT>1</STEP_1__COUNT>

 <Instance>2fc5d6aa-0d02-4700-4e01-d3a2b82876d9</Instance>

 <DateStart>2015-04-22T16:32:15.817+02:00</DateStart>

 <DateEnd>2015-04-22T16:32:38.6+02:00</DateEnd>

 <ModelId>20232</ModelId>

 <ModelName>Example</ModelName>

 <Operator>info@mytdox.com</Operator>

 </HEADER_Example>

 <HEADER_Example>

 <Client__ENTITY_REVISION>d6dcdf41-b873-4aee-98b5-a988ff479df7</Client__ENTITY_REVISION>

<Client__DS_BUSINESS_NAME>Jocelyn Guy</Client__DS_BUSINESS_NAME>

<Client__CD_ERP_CODE>EXK9296</Client__CD_ERP_CODE>

<Notes>ciao

</Notes>

 <Gps>Via Fratelli Kennedy, 30,

46043 Castiglione delle Stiviere MN,

</Gps>

 <Gps__LATITUDE>45,3841088</Gps__LATITUDE>

 <Gps__LONGITUDE>10,4953953</Gps__LONGITUDE>

 <Gps__PROVIDER>network</Gps__PROVIDER>

 <Gps__TIMESTAMP>2015-04-22T16:30:49.553+02:00</Gps__TIMESTAMP>

 <STEP_1__COUNT>2</STEP_1__COUNT>

 <Instance>e459f818-575d-484c-7bac-de8f11bf7044</Instance>

 <DateStart>2015-04-22T16:30:04.573+02:00</DateStart>

 <DateEnd>2015-04-22T16:31:24.56+02:00</DateEnd>

 <ModelId>20232</ModelId>

 <ModelName>Modello di Esempio</ModelName>

 <Operator>info@seltris.it</Operator>

<Status>CLOSED</Status>

 </HEADER_Example>

 <Example_DETAILS>

 <Serial_Number>gghhh</Serial_Number>

 <Instance>2bdccb1d-0370-4d5b-462a-4ead6cde1dc2</Instance>

 <PrIndex>0</PrIndex>

 </Example_DETAILS>

 <Example_DETAILS>

 <Serial_Number>rghu</Serial_Number>

 <Instance>2fc5d6aa-0d02-4700-4e01-d3a2b82876d9</Instance>

 <PrIndex>0</PrIndex>

 </ Example_DETAILS >

 < Example_DETAILS >

<Serial_Number>fghh</Serial_Number>

<Notes>ghhh</Notes>

<Instance>e459f818-575d-484c-7bac-de8f11bf7044</Instance> <PrIndex>0</PrIndex>

 </ Example_DETAILS >

 < Example_DETAILS >

 <Serial_Number>fhvff</Serial_Number>

 <Notes>ghhh</Notes>

 <Instance>e459f818-575d-484c-7bac-de8f11bf7044</Instance>

 <PrIndex>1</PrIndex>

 </ Example_DETAILS >

</NewDataSet> 

 

Schema XML restituito

<?xml version=”1.0″ encoding=”utf-16″?>

<xs:schema id=”NewDataSet” xmlns=”” xmlns:xs=”http://www.w3.org/2001/XMLSchema”

xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata”>

 <xs:element name=”NewDataSet” msdata:IsDataSet=”true” msdata:UseCurrentLocale=”true”>

 <xs:complexType>

 <xs:choice minOccurs=”0″ maxOccurs=”unbounded”>

 <xs:element name=”RESULTS”>

 <xs:complexType>

 <xs:sequence>

 <xs:element name=”Instance” type=”xs:string” minOccurs=”0″ />

 <xs:element name=”RES” type=”xs:string” minOccurs=”0″ />

 </xs:sequence>

 </xs:complexType>

 </xs:element>

 </xs:choice>

 </xs:complexType>

 </xs:element>

</xs:schema>

 

Esempio di risultato XML:

<NewDataSet>

 <RESULTS>

 <Instance>5d8922c2-7d33-4da6-5a98-2e7c04f028b3</Instance>

 <RES>OK</RES>

 </RESULTS>

 <RESULTS>

 <Instance>27858136-8528-476b-56fc-696601a58239</Instance>

 <RES>OK</RES>

 </RESULTS>

 <RESULTS>

 <Instance>89a4d4e0-c3d2-4440-50a3-71b68c2f43cb</Instance>

 <RES>OK</RES>

 </RESULTS>

 <RESULTS>

 <Instance>c22d951e-a1b9-4394-7ed5-eb64d3ceb232</Instance>

 <RES>OK</RES>

 </RESULTS>

 <RESULTS>

 <Instance>d4fc0a73-8b56-4b42-68cf-f91ccd8e89d8</Instance>

 <RES>OK</RES>

 </RESULTS>

</NewDataSet> 

Firma di esempio di un metodo esterno richiesto da TDox

using System; using

System.Collections.Generic; using

System.Data; using System.IO;

using System.Linq; using

System.Net; using

System.Net.Sockets;

using System.Text; using

System.Web; using

System.Web.Services;

namespace WebServiceExportTest

{

 /// <summary>

 /// Summary description for WSExportTest 

/// </summary>

 [WebService(Namespace = “http://tempuri.org/”)]

 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

 [System.ComponentModel.ToolboxItem(false)]

 // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.

 // [System.Web.Script.Services.ScriptService] public class 

WSExportTest : System.Web.Services.WebService

 {

 [WebMethod] public DataSet callExportMethod(DataSet ds,

string modelTitle)

 {

 // Dataset return

 DataSet dsRet = new DataSet();

 // Unique Dataset Table returned

 // RESULTS Table name

// fields:

 // Instance (string type)

 // RES (string type [“OK”,”KO”])

 DataTable dtRet = new DataTable(“RESULTS”);

dtRet.Columns.Add(new DataColumn(“Instance”, typeof(String)));

dtRet.Columns.Add(new DataColumn(“RES”, typeof(String)));

 dsRet.Tables.Add(dtRet);

 // Retrieving sent table name

 // This is how it will look like:

 // HEADER_ + … Model name

 List<DataTable> dtHeaders = new List<DataTable>();

foreach(DataTable dtIn in ds.Tables )

 {

 string tableName = dtIn.TableName.ToUpper();

if(tableName.StartsWith(“HEADER_”))

 {

 dtHeaders.Add(dtIn);

 }

 } 

// Preparing Return DataTable

foreach(DataTable dtIn in dtHeaders)

 {

 if (dtIn != null && dtIn.Rows != null && dtIn.Rows.Count > 0)

 {

 int id = 0;

 foreach (DataRow dr in dtIn.Rows)

 {

 DataRow drOut = dtRet.NewRow();

drOut[“Instance”] = dr[“Instance”];

 id++;

if (( id % 2)==0)

 {

 drOut[“RES”] = “OK”;

 }

else {

drOut[“RES”] =

“KO”; } 

drOut[“RES”] = “OK”;

dtRet.Rows.Add(drOut);

 }

 }

 }

 return dsRet;

 }

 [WebMethod] 

public string callExportMethodString(string strdsSchema, string strds,string modelTitle)

 {

 // Method similiar to the previous one with additional string parameter

 //Strings will be in XML:

//strdsSchema = This will contain the XML

scheme

 // strds = this will contain Dataset XML.

 // Returned value will be the XML gathered from Returned Dataset serilized structure. 

// See example in webmethod callExportMethod

 DataSet ds = getDataSetFromString(strds);

DataSet dsRet = callExportMethod(ds, modelTitle);

return dsRet.GetXml();

 }

 private DataSet getDataSetFromString(string xmlString)

 {

 DataSet dsRes = new DataSet(); byte[] byteArray

= Encoding.UTF8.GetBytes(xmlString);

 MemoryStream stream = new MemoryStream(byteArray);

 StreamReader reader = new StreamReader(stream);

 dsRes.ReadXml(reader);

 return dsRes;

 }

 }

Contattaci

Ottieni una consulenza gratuita con i nostri tecnici

Siamo felici di rispondere alle tue domande e di aiutarti nel processi di digitalizzazione aziendale. Scegli di dare una marcia in più al tuo lavoro grazie a soluzioni altamente specifiche.

Ti garantiamo:
Che cosa succede dopo?
1

Ti contattiamo e accordiamo una chiamata in base alle tue disponibilità

2

Ci racconti le tue problematiche in azienda e di cosa necessiti

3

Ti illustriamo come siamo in grado di risolverle, presentandoti i nostri casi di successo

Prenota la tua Consulenza Gratuita