Excel oferă abilitatea de a adăuga propria schemă XML (XSD) la registrele de lucru. Când adăugați, este creată o hartă XML, care vă oferă opțiuni suplimentare atunci când lucrați cu date, și anume importarea și exportul de date. Astfel, puteți încărca datele în document din depozit și apoi puteți scrie datele înapoi prin aceeași schemă XML.
Procesul începe prin adăugarea unui fișier XSD în registrul de lucru Excel. Odată ce un fișier XSD este atașat, Excel creează o hartă XML care apare în panoul de activități "sursă XML" (vezi Figura 1), pe care utilizatorul îl folosește pentru a poziționa datele în regiuni sau celule individuale. Excel utilizează această hartă pentru a controla interacțiunea dintre regiunile poziționate și elementele de schemă XML. Un registru de lucru Excel poate conține mai multe hărți XML, în care fiecare dintre ele nu va depinde de ceilalți. De asemenea, puteți avea mai multe carduri care se vor conecta la o diagramă. Atunci când un utilizator importează sau exportă date XML, Excel utilizează harta pentru a conecta conținutul regiunii poziționate la elementele de schemă.
Figura 1. Panoul sursă XML
Acest articol descrie un proiect bazat pe hărți XML, care permite utilizatorilor să aibă șabloane comune de documente, scheme XML și magazine de date găzduite pe Internet. Un fel de Excel 365 cu mâinile tale.
Acum, presupunem că avem un registru de lucru Excel care conține o hartă XML, cu regiuni poziționate și date importate. Dacă te uiți la carte de pe partea programatorului, poate fi numit în mod liber cuplat. Cuvântul "cuplat slab" este înțeles ca fiind conceptul de programare a cuplajelor libere, adică șablonul de document este asociat în mod liber cu datele documentului, ceea ce face posibilă delegarea funcției de compilare a unui document de la dezvoltator către utilizator. O abordare similară poate fi observată în WPF, unde lucrarea cu privire la proiectare este delegată de dezvoltator proiectantului, care nu era în formularul Win.
Prin urmare, proiectul poate fi folosit, de asemenea, la implementarea modulului "output report in Excel" în aplicațiile de business. În acest caz, dezvoltatorul nu trebuie să creeze un șablon de document, iar utilizatorul îl poate face el însuși.
arhitectură
Acest proiect are o arhitectură orientată spre servicii (SOA). Clientul este Excel VSTO AddIn, iar serverul este serviciul WCF. Serviciul oferă următoarele funcționalități:
Lucrul cu șabloanele.
Figura 4. Protocolul de interacțiune la lucrul cu șabloanele.
- Clientul trimite o cerere Enumerate.
- Pe baza parametrilor primiți de la client, serviciul construiește un identificator de colectare și de colectare (context). Identificatorul este trimis clientului.
- Clientul trimite o cerere de tragere care conține identificatorul colecției și numărul de elemente care trebuie returnate ca parametru. Deoarece identificatorul (contextul) este un parametru necesar, interogarea Pull are sens numai după o cerere enumerată de succes. Prin urmare, protocolul WS-enumerare se numește protocol de stare.
- Ca răspuns la solicitarea de tragere, serverul trimite date către client.
- Clientul continuă să trimită solicitarea Pull până când primește un element în răspuns
. - După ce utilizatorul a selectat un element de colectare, o cerere de solicitare este trimisă la descărcare.
- Ca răspuns, serverul trimite o instanță a elementului selectat din colecție. În cazul nostru, acesta poate fi un șablon, fie o schemă XML, fie o reprezentare XML a datelor.
Mesaj SOAP Enumerați
Contractele de date tipizate și onorate.
Pentru a facilita înțelegerea, introducem trei concepte:
- O dată contractuală este o structură de date care este descrisă de o schemă XML.
- Contractul de dată dată este un tip de schemă XML + CLR, care este de obicei moștenit de la IXmlSerializabil și când este serializat, produce un document XML corespunzător schemei XML.
- O dată contractuală netipată este doar o schemă XML. O instanță este un document XML corespunzător acestei scheme XML. În același timp, metoda de formare a documentelor nu este indicată.
Această separare este utilă pentru o separare mai precisă a părților clientului și a serverului. Întrucât partea client nu trebuie să depindă de tipurile CLR pe care serverul le folosește pentru a genera documente XML, clientul ar trebui să utilizeze numai contracte de date netipărite. În caz contrar, când adăugați o nouă dată a contractului la server, va trebui să actualizați construirile pe clienți, pentru a adăuga tipul CLR lipsă.
Astfel, partea clientului se ocupă de contractele de date netipărite, iar partea de server cu cele tastate.
Descrierea implementării:
Să presupunem că avem o bază de date și dorim să importăm date din baza de date localizată pe server într-un registru de lucru Excel situat pe client. Pentru a face acest lucru, trebuie să adăugăm data contractului la partea de server:
- Creați o schemă XML care descrie structura de date a datelor importate din baza de date,
- a crea un tip CLR corespunzător schemei XML,
- implementa metoda DataContrac t [] Get DataContractName (), care invocă baza de date și construiește o colecție de contracte de date,
- Adăugați o referință la metodă în dicționarul metodei GetData și setați ca cheie cheia NamespaceName + RootElementName XML.
Tasta NamespaceName + RootElementName este o dată unică a contractului pentru întregul sistem (client-server).
Luați în considerare cazul când un client dorește să importe date într-un registru de lucru Excel. Clientul scanează hărțile XML atașate la registrul de lucru Excel și fiecare card trimite o cerere EnumerateData către serverul în care data contractului este trecut ca parametru. Serverul analizează dacă metoda DataContract [] Get DataContractName () a fost implementată pentru această dată a contractului. Dacă nu, nu se întâmplă nimic. Dacă da, se execută metoda Ge tDataContractName () și se creează o colecție care este transmisă clientului utilizând protocolul WS-Enumeration.
Spre deosebire de lucrul cu șabloane, nu folosim transferul WS, dar transferăm data contractelor ca răspuns la solicitarea de tragere.
Salvați modificările aduse șablonului și datelor
Excel oferă posibilitatea de a exporta date. Dar există mai multe restricții privind tipurile de date care pot fi exportate. Unele dintre aceste restricții sunt enumerate mai jos:
- Dacă schema conține un element de secvență, atunci atributul maxoccurs trebuie să fie 1.
- Un tip nu poate conține liste imbricate (lista de liste, o listă de elemente conține o altă listă de elemente).
Dacă tipul satisface condițiile de export și metoda de salvare a datelor este implementată, putem salva modificările efectuate în Excel în baza de date.
Când se salvează, se salvează atât modificările șablonului, cât și modificările datelor. Această operațiune are loc în două etape:
- exportând date dintr-un șablon
- trimiterea unui șablon și a datelor exportate XML către server
Creați o dată a contractului
Să presupunem că dorim să afișăm o structură de date Excel compusă din mai multe liste imbricate. De exemplu, luați: World-> Countries-> Areas -> Cities.
"Lumea" este elementul rădăcină care conține o listă de țări. Fiecare țară conține o listă de zone și fiecare regiune enumeră orașele. O hartă de date pentru acest tip de date va arăta astfel:
Următorul pas este de a crea tipuri CLR, cu serializarea cărora obținem un document Xml corespunzător hărții noastre. Pentru a crea mai multe structuri imbricate, este convenabil moștenirea tipului din IXmlSerializabil. Ca rezultat, pentru cazul nostru primim patru tipuri: