Použitie .Net webovej služby v MS Office

Publikoval Michal Kočí dňa 11.10.2004 o 22:54 v kategórii Office

Neviem prečo, ale od pradávna nemám moc rád Basic. Visual Basic. Najviac nemám rád Visual Basic for Applications (VBA). Ovšem, keď sa musí, tak sa musí. Tak isto som musel z MS Office zavolať Web service naporgramovaný na .Net platforme. Moje útrapy síce ešte neskončili (ako popíšem nižšie), avšak prvý krok je za mnou. A to, ako vôbec pristúpiť k webovej službe.

Ak chceme pristúpiť k webovej službe z niektorej aplikácie balíka Office (napríklad Excel), musíme si doinštalovať Web Services Toolkit. K dispozícii sú pre Office XP a 2003 a stiahnuť sa dajú tu:

Inštalácia nevyžaduje žiadne nastavenie, je úplne bezproblematická. Po spustení aplikácie (v našom prípade Excel) a po prechode do Visual Basic Editora si môžete pridať v novo pridanej položke menu Tools, Web Service References pridať referenciu na web service, ktorý chcete používať.

Ja som si na tieto ukážkové účely vytvoril web service obsahujúci dve jednoduché metódy, jedna sčíta dve celé čísla a druhá ich odčíta. Zdrojový kód tejto web služby je:

public class MathWebService : System.Web.Services.WebService
{
    public MathWebService()
    {
        InitializeComponent();
    }

    private IContainer components = null;
    private void InitializeComponent() {}
    protected override void Dispose( bool disposing )
    {
        if(disposing && components != null)
        {
            components.Dispose();
        }
        base.Dispose(disposing);  
    }
    [WebMethod()]
    public int Plus(int a, int b)
    {
        return a + b;
    }
    [WebMethod()]
    public int Minus(int a, int b)
    {
        return a - b;
    }
}

Webovú službu mám umiestnenú na lokálnom stroji, vo virtuálnom adresári MathWebService a názov súboru, ktorý obsahuje službu je MathWS.asmx Preto do poľa Web Service Url, Url zadám http://localhost/MathWebService/MathWS.asmx a stlačím tlačidlo Search. Toolkit službu nájde a po jej výbere (zašrktnutie zaškrtávacieho políčka) a stlačení tlačidla Add začne automaticky vytvárať proxy pre prístup k tejto metóde. V našom prípade sa bude jednať iba o jednu proxy - teda jednu jedinú triedu.

No a túto proxy-triedu hneď môžem začať používať, ak by som teda chcel sčítať čísla z buniek A1 a B1 a výsledok by som chcel zapísať do bunky C1 (a nechcel by som použiť vstavanú možnosť súčtu aplikácie Excel), mohol by môj kód vo VBA vyzerať nasledovne:

Plne si uvedomujem, že praktičnosť tohto príkladu z dôvodu poskytnutých funkcií web metódy je blížiaca sa nule, ale ako demonštrácia použitia webovej služby v aplikáciách systému Office by mala stačiť.

Office Web Service Toolkit je nástroj, ktorý Microsoft poskytuje zdarma, avšak, ako sme už zvyknutý u nástroj zdarma od Microsoftu, neposkytuje naň žiadnu podporu.

No a tu korení aj môj problém, keďže som potreboval používať webovú službu aplikácie Reporting Services. Toolkit sa chvílu snaží pracovať ale po chvíli sebou sekne a všetok vygenerovaný zdrojový kód zase odstráni (odroluje späť všetko čo vygeneroval). Škoda. Najmä ak sú oba produktmi Microsoftu.

Chybová hláška je natoľko všeobecná, že dopátrať sa k riešeniu odstraňujúcemu tento problem je pre mňa zatiaľ nemožné. Ak som aj niečo našiel (či už cez google, alebo cez diskusné skupiny), tak sa vždy jednalo len o popis tohto istého problému, nikde však už nie o riešenie. No ale keďže by som to ozaj chcel používať, neosáva mi nič iné, len pátrať ďalej.

Takisto som sa natrápil s volaním metódy, ktorá potrebovala ako vstupný parameter pole bajtov (obsah súboru). Toto som nakoniec vyriešil spravením si COM objektu, ktorý mi toto pole zo súboru vytvorí. Tu však netvrdím, že sa jedná o obmedzenie VBA, možno som len správne nehľadal...

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.