Введення в дослідну бібліотеку, Web Services, ASP, статті

У цьому місяці я хочу розповісти про таємний скарб (в усякому разі, я так вважаю) Microsoft Office 2003 – про дослідницьку бібліотеці (Research library). Оскільки в Office 2003 багато інших чудових коштів, цій бібліотеці особливої ​​уваги не приділяли. Вона доступна в нових версіях Microsoft Word, Microsoft Excel, Microsoft PowerPoint®,
Microsoft Outlook®, Microsoft Publisher, Microsoft OneNote ™ і Internet Explorer. У всіх цих додатках дослідна бібліотека доступна у вигляді секції задач (task pane).

Що таке дослідна бібліотека? Як і випливає з її назви, це вбудований інструмент для досліджень, що дозволяє шукати інформацію з Office в найрізноманітніших джерелах. Деякі джерела є в Office, інші є зовнішніми сервісами, для використання яких потрібно з’єднання з Інтернетом. На рис. 1 показана робота вбудованого тезауруса англійських слів.

Рис 1. Секція завдань Research в Microsoft Word 2003

У секції завдань Research можна виділити наступні елементи.

  1. У більшості програм, які підтримуються для доступу до дослідної бібліотеці досить натиснути кнопку Research на панелі інструментів Standard. Крім того, для доступу до секції завдань Research можна відкрити секцію завдань (View |
    Task Pane
    ) І вибрати Research зі списку доступних секцій.
  2. Після того як секція завдань Research відкрита, введіть текст для пошуку в поле Search for. Додатково користувач може клацнути текст в документі, одночасно утримуючи клавішу ALT в натиснутому стані. Тоді додаток Office відкриває секцію завдань і поміщає текст в поле Search for.
  3. Потім виберіть сервіс досліджень зі списку сервісів. Далі в цій статті я розповім про деякі сервіси. І нарешті, клацніть кнопку Go (зелену стрілку), щоб запустити пошук.
  4. Секція завдань Research містить кнопки Back і
    Forward
    , Аналогічні таким же кнопкам браузерів і дозволяють переходити до результатів попередніх операцій пошуку.
  5. Секція завдань Research виводить результати пошуку. В одній операції пошуку можна задіяти декілька сервісів, результати поділяються заголовком, що містить ім’я сервісу.
  6. Секція завдань Research підтримує найрізноманітніші способи управління результатами. На рис. 1 приведено спадне меню, яке дозволяє вставити або скопіювати виділений текст в поточний документ.
  7. У самому низу секції завдань Research знаходиться посилання
    Research options
    . Вона відкриває діалогове вікно Research
    Options
    , Показане на рис. 2.

Рис. 2. Діалогове вікно Research Options для налаштування сервісів досліджень, що викликаються з Office

Діалогове вікно Research Options використовується для додавання нових сервісів досліджень, оновлення існуючих, зміни параметрів контролю за діями дітей (Parental controls), а також переглянути властивості встановлених сервісів. Як видно з рис. 2, Office 2003 Beta 2 поставляється з набором сервісів досліджень. Деякі з них перераховані нижче.

Більшості з цих сервісів потрібно з’єднання з Інтернетом. Якщо користувач не підключений, деякі сервіси виявляться недоступними. Потребують з’єднання сервіси призначені для отримання актуальної інформації з багатьох корисних джерел в Web. Один з моїх самих коханих – сервіс досліджень MSN Money Stock Quotes. На рис. 3 показані результати пошуку по біжучому рядку котирувань на MSFT.

Рис. 3. Приклад використання сервісу досліджень MSN Money Stock
Quotes

Порівнявши результати, наведені на рис. 1 і рис. 3, що ілюструють два сервіси, ви оціните гнучкість виведення різних типів даних. MSN Money Stock Quotes виводить відформатовану таблицю, гіперпосилання, відкривають Web-сайт MSN, і кнопку Insert Stock Price. Остання насправді смарт-тег. Секція завдань Research може використовувати операції, підтримувані встановленими смарт-тегами, для розширення можливостей взаємодії між секцією Research і додатком Office. В даному випадку MSN Money Stock Quotes вставляє поточну біржову ціну або відформатовану таблицю з поточною статистикою біржових котирувань.

Створення власної дослідницької бібліотеки

А тепер саме чудове – секція завдань Research розширювана. Microsoft буде поставляти Office Research Software Developers Kit разом з Beta 2 і остаточною версією продукту. Таким чином, розробники зможуть інтегрувати продукти третіх фірм і внутрішню системну інформацію, а ISV, крім того, – вбудовувати свої продукти в середу Microsoft Office.

В іншій частині статті я розгляну основи створення сервісу дослідницької бібліотеки. Приклад заснований на Google Web API – наборі Web-сервісів XML, що дозволяють розробнику запитувати більше трьох мільярдів Web-документів прямо з програми. У нашому випадку ми будемо запитувати Google з секції завдань Research. Докладніше про використанні Google Web API см.
www.google.com/apis/.

Який сценарій роботи з сервісом дослідницької бібліотеки, звертається до Google? Я часто запускаю Internet Explorer і шукаю в Google інформацію по ключовим словам, які беру зі свого документа або поштового повідомлення. Тепер я можу виконувати пошук прямо з Office, використовуючи код, розглянутий далі. Я натискаю кнопкою миші на якомусь слові (або словах) в повідомленні, утримуючи клавішу ALT в натиснутому стані. Відкривається секція завдань Research з моїм текстом, вже введеним в поле Search for. Після цього я викликаю сервіс Google Web Search і клацаю Go. Після цього секція завдань Research виводить результати пошуку. Я можу клацнути на одному з результатів, і Web-сайт завантажиться в браузері. На рис. 4 представлено вікно дослідницької бібліотеки Google Web Search.

Рис. 4. Вікно дослідницької бібліотеки Google Web Search

В матеріали для скачування до цієї статті включено сервіс дослідницької бібліотеки Google Web Search, протестований в Office 2003 Beta 2. Він пропонується в двох версіях: одна – на C #, інша – На Visual Basic® . NET. Крім синтаксису, вони абсолютно ідентичні. Цікаво, що спочатку я написав його на C #, а потім перетворив в Visual Basic. NET. Це зайняло у мене близько 10 хвилин, що наочно демонструє, наскільки легко переходити з мови на мову. Щоб не роздмухувати обсяг статті, я в основному наводжу приклади на C #.

І нарешті, щоб звертатися до сервісів Google Web API, вам потрібно створити обліковий запис Google і отримати безкоштовний ліцензійний ключ. Рахунок Google і ліцензійний ключ дозволяють виконувати до 1000 автоматизованих запитів в день. Запитати ключ можна за посиланням
www.google.com/apis/. Весь процес займає пару хвилин. Потім в залежності від використовуваної мови програмування відкрийте web.config і змініть нестандартне властивість GoogleKey. Нижче перераховані каталоги й мови.

<< Каталог з розпакованими файлами >> GoogleResearchLibraryCSharp - C #-версія << Каталог з розпакованими файлами >> GoogleResearchLibraryVBNet - VB.NET-версія

Помістіть ліцензійний ключ, виданий Google, в атрибут value:

<add key="GoogleKey" value="[INSERT YOUR KEY HERE - SEE README]"/>

Наприклад, змінений XML-вузол може виглядати так:

<add key="GoogleKey" value="abc123ThisIsAMadeUpKeyxyz/abc"/>

Додаткові відомості про установку наведено у файлі README.DOC.

Основи архітектури дослідницької бібліотеки

Дослідницька бібліотека складається в основному з Web-сервісу XML з двома Web-методами. У цьому її відмінність від багатьох інших моделей розширення Office. Раніше розширення Office часто вимагали установки коду на стороні клієнта. Сервіс дослідної бібліотеки – стандартний Web-сервіс XML, що не вимагає коду на стороні клієнта за винятком тих випадків, коли застосовуються смарт-теги (що абсолютно не обов’язково, у багатьох бібліотеках вони не потрібні). Використовуючи Visual
Studio® . NET або іншу платформу, яка підтримує Web-сервіси XML, ви створюєте набір Web-сервісів, які виконуються на сервері і взаємодіють з Office через зумовлені інтерфейси. На рис. 5, взятому з Office Research SDK, показано, як взаємодіють Office і Web-сервіс XML дослідницької бібліотеки.

Рис. 5. Взаємодія між Office і Web-сервісом XML дослідницької бібліотеки

{
Написи на малюнку:
RegistrationQuery schema – Схема RegistrationQuery
RegistrationResponse schema – Схема RegistrationResponse
QueryPacket schema – Схема QueryPacket
Response schema – Схема Response
Office – Office
Research Service – Сервіс досліджень
}

  1. Користувач клацає кнопку Add Service діалогового вікна
    Research Options (Рис. 2). Він вказує посилання на сторінку реєстрації сервісу дослідницької бібліотеки. Сторінка реєстрації містить Web-метод Registration().
  2. Registration() повертає відомості про провайдера сервісу, тип сервісу, а також його категорію і покажчик на Web-метод
    Query()
    , Який використовується для пошуку. Тепер сервіс готовий до використання.
    Примітка Вам може здатися, що тут занадто багато роботи покладено на користувача, якому не обов’язково захочеться возитися з додаванням сервісу. Для вирішення цієї проблеми є два шляхи: (1) передбачити інсталяційний файл, який створює необхідні записи в реєстрі для дослідницької бібліотеки або (2) задіяти вбудований в Office механізм виявлення для додавання та оновлення сервісів дослідних бібліотек. Коли організація розгортає Office 2003, в програму установки можна включити покажчик, що дозволяє виявляти Web-сервіси XML. Це дозволяє додавати нові сервіси, не вимагаючи ніяких дій від користувача.
  3. Користувальницькі запити надсилаються від дослідницької бібліотеки Web-методу Query() сервісу.
  4. Останній розбирає запит і формулює відповідь, яка надсилається назад Office. Додаток Office виводить результати.
    Взаємодія між Office і Web-сервісом XML має задовольняти набору XML-схем, визначених в Office Research SDK. Наприклад, пакет відповіді на реєстрацію, заснований на схемі відповіді, може виглядати так:
    <?xml version="1.0" encoding="utf-8"?>
    <ProviderUpdate xmlns="urn:Microsoft.Search.Registration.Response">
        <Status>SUCCESS</Status>
        <Providers>
        <Provider>
            <Message>This is a sample research library </Message>
            <Id>{9FF837AF-34D6-4a94-BB52-B0F19F3A343A}</Id>
            <Name>OfficeZealot.com</Name>
            <QueryPath>
            http://localhost/googleresearchlibrarycsharp/Query.asmx
            </QueryPath>
            <RegistrationPath>
            http://localhost/googleresearchlibrarycsharp/registration.asmx<
            </RegistrationPath>
            <AboutPath/>
            <Type>SOAP</Type>
            <Services>
                <Service>
                <Id>{CD144577-9D90-4144-AE38-0D6553CA4004}</Id>
                <Name>Google Web Search (CSharp)</Name>
                <Description>Google Web Service research library</Description>
                <Copyright>All content Copyright OfficeZealot.com (c) 
                2003.</Copyright>
                <Display>On</Display>
                <Category>RESEARCH_GENERAL</Category>
                </Service>
            </Services>
        </Provider>
        </Providers>
    </ProviderUpdate>
    

    Ці дані передаються користувачеві при установці сервісу дослідницької бібліотеки. Крім того, в них містяться відомості, необхідні Office для взаємодії з сервісом на віддаленому сервері.

Більш глибоке вивчення Web-сервісу XML

Як уже згадувалося, бібліотека складається з Web-сервісу XML з двома Web-методами. Обидва методи співіснувати в одному файлі Web-сервісу. Проте я волію логічно і фізично розділити їх з метою спрощення коду. Таким чином, сервіс досліджень Google Web Service містить два основних файлу:

  1. Файл Registration.asmx для Web-метода Registration().
  2. Файл TheQuery.asmx для Web-метода Query().

Office очікує, що відповіді Web-методів підкоряються схемам бібліотеки досліджень і пов’язаним з ними просторів імен. Таким чином, для кожного Web-сервісу потрібно визначити відповідне простір імен для відповіді, а саме urn: Microsoft.Search. В C # при визначенні Web-сервісу використовується наступний атрибут:

[WebService(Namespace="urn:Microsoft.Search")]

У Visual Basic. NET:

<WebService(Namespace:="urn:Microsoft.Search")>

Ця конструкція вказує. NET Framework укласти тіла SOAP-відповідей в простір імен urn: Microsoft.Search.

Далі наведено код на C # для Web-метода Registration(), зберігається у файлі Registration.asmx.cs

[WebMethod (CacheDuration = 86400)] / / кешувати на весь день, / / Так як дані змінюються рідко / / (86400 секунд = 24 годинах)
public string Registration(string registrationxml)
{
    string physicalPath = 
        HttpContext.Current.Server.MapPath(".").ToString();
    string httpPath = 
        ConfigurationSettings.AppSettings["ServerPath"]  
        + HttpContext.Current.Request.ApplicationPath + "/";
    XmlDocument registrationResponse = new XmlDocument();
    registrationResponse.Load(physicalPath + 
    "RegistrationResponse.xml");
           
    XmlNamespaceManager nsm = 
        new XmlNamespaceManager(registrationResponse.NameTable);
    nsm.AddNamespace("ns", "urn:Microsoft.Search.Registration.Response");
    registrationResponse.SelectSingleNode("//ns:QueryPath", nsm).InnerText = 
        httpPath + "Query.asmx";
    registrationResponse.SelectSingleNode("//ns:RegistrationPath", 
        nsm).InnerText =  httpPath + "Registration.asmx";
    registrationResponse.SelectSingleNode("//ns:AboutPath", nsm).InnerText =
        httpPath + "about.asmx";
    return registrationResponse.InnerXml.ToString();
}

Відповідь на реєстрацію досить простий, так як він лише містить відомості про сервіс дослідницької бібліотеки. Код завантажує локальний XML-файл RegistrationResponse.xml, службовець загальним шаблоном для відповіді, і вставляє в нього додаткові елементи, які визначаються на етапі виконання. Все це повертається Office.

Нижче наведено код Web-метода Query() і однієї з його залежних закритих функцій:

[WebMethod (CacheDuration = 3600)] / / кешувати на 1:00
public string Query(string queryXml)
{ / / Перевірити, задано Чи має значення для запиту
    if (queryXml.Length == 0)
        return "";
    string queryString;
    string applicationName;
    int startAt = 1;
    XmlDocument requestXml = new XmlDocument();
    try
    {
        requestXml.LoadXml(queryXml.ToString());
        XmlNamespaceManager nsmRequest = 
            new XmlNamespaceManager(requestXml.NameTable);
        nsmRequest.AddNamespace("ns", "urn:Microsoft.Search.Query");
        nsmRequest.AddNamespace("oc", 
           "urn:Microsoft.Search.Query.Office.Context");
        queryString = requestXml.SelectSingleNode("//ns:QueryText", 
             nsmRequest).InnerText;
        applicationName = requestXml.SelectSingleNode("//oc:Name", 
            nsmRequest).InnerText;
        try
        {
            startAt = Convert.ToInt32(requestXml.SelectSingleNode("//ns:StartAt", 
                nsmRequest).InnerText.ToString());
        }
        catch
        {
            startAt = 1;
        }
    }
    catch
    { / / Розбір queryXML не вдався, / / Використати вхідні рядок для пошуку в Google
        queryString = queryXml;
    }
                
    XmlDocument responseWrapper = new XmlDocument();
    try
    {
        responseWrapper.Load(physicalPath + "ResponseWrapper.xml");
    }
    catch
    { / / Не можна розібрати оболонку відповіді, повернути порожній рядок
        return "";
    }
    XmlNamespaceManager nsmResponse = 
        new XmlNamespaceManager(responseWrapper.NameTable);
    nsmResponse.AddNamespace("ns", "urn:Microsoft.Search.Response");
    responseWrapper.SelectSingleNode("//ns:Range",nsmResponse).InnerXml = 
        QueryGoogle(queryString, startAt);
    return responseWrapper.InnerXml.ToString();
}
private string QueryGoogle(string queryString, int startAt)
{
    StringWriter queryResponse = new StringWriter();
    XmlTextWriter writer = new XmlTextWriter(queryResponse);
    GoogleSearchService search = new GoogleSearchService();
    try 
    { / / Викликати пошуковий метод
        GoogleSearchResult results = 
            search.doGoogleSearch(ConfigurationSettings.AppSettings["GoogleKey"] , 
            queryString, startAt, PageCount, true, "", true, "", "", "");
 / / Елементи для посилань Previous | Next
        writer.WriteElementString("StartAt",startAt.ToString());
        writer.WriteElementString("Count",PageCount.ToString());
        writer.WriteElementString("TotalAvailable", 
            results.estimatedTotalResultsCount.ToString());
 / / Початок елемента Results
        writer.WriteStartElement("Results"); / / Початок елемента Content
        writer.WriteStartElement("Content", 
            "urn:Microsoft.Search.Response.Content");
 / / Вставити зображення
        writer.WriteStartElement("Image");
        writer.WriteAttributeString("source", httpPath + "/gLogo.gif");
        writer.WriteEndElement();
        foreach(ResultElement result in results.resultElements)
        {
            writer.WriteStartElement("Heading");
            writer.WriteAttributeString("collapsible","true");
            
            if (result.title.Length> 0)
                writer.WriteElementString("Text", 
                    StripHtml(result.title).Trim());
            else
                writer.WriteElementString("Text", "No Title");
            if (result.snippet.Length > 0)
                writer.WriteElementString("P",
                    StripHtml(result.snippet));
            if (result.summary.Length>0)
            {
                writer.WriteStartElement("P");
                    writer.WriteStartElement("Char");
                    writer.WriteAttributeString("light", "true");
                    writer.WriteString("Description: ");
                    writer.WriteEndElement();
                    writer.WriteString(StripHtml(result.summary));
                writer.WriteEndElement();
            }
            writer.WriteStartElement("Hyperlink");
            writer.WriteAttributeString("url", result.URL);
            writer.WriteElementString("Text", result.URL);
            writer.WriteEndElement();
 writer.WriteEndElement (); / / заголовок
        }
        writer.WriteElementString("HorizontalRule","");
        writer.WriteStartElement("Hyperlink");
            writer.WriteAttributeString("url", 
                "http://www.google.com/search?q=" + queryString);
            writer.WriteElementString("Text", 
                "Continue your search at Google.com ...");
        writer.WriteEndElement();
        writer.WriteStartElement("Hyperlink");
            writer.WriteAttributeString("url", 
                "http://groups.google.com/groups?q=" + queryString);
            writer.WriteElementString("Text", 
                "Search at groups.Google.com ...");
        writer.WriteEndElement(); / / Аналіз результатів пошуку
        writer.WriteElementString("P", "Search took " + 
            Math.Round(results.searchTime,2).ToString() + " seconds.");
        writer.WriteElementString("HorizontalRule",""); writer.WriteStartElement ("Image"); / / вставити зображення / / Логотипу OZ
        writer.WriteAttributeString("source", httpPath + "/oz15owide.gif");
        writer.WriteEndElement();
 writer.WriteEndElement (); / / закрити елемент Content writer.WriteEndElement (); / / закрити елемент Content
        writer.Close();
        return queryResponse.ToString();
    }
    catch (System.Web.Services.Protocols.SoapException ex) 
    {
        return "";
    }
}

Коли користувач запитує інформацію за допомогою секції завдань
Research
, Запит упаковується відповідно до схеми для запиту. Потім дані передаються Web-методу Query() в параметрі queryXml. Метод витягує рядок для пошуку з queryXml і передає її функції
QueryGoogle()
, В якій і виконується основна робота. Вона викликає Google Web Service API, передаючи пошуковий рядок. Потім розбирає відповідь від Google і упаковує його у відповідності зі схемою відповіді дослідницької бібліотеки. Нижче як приклад наведено XML-пакет, відповідний відповіді на рис. 4.

<?xml version="1.0" encoding="utf-8"?>
<ResponsePacket revision="1" xmlns="urn:Microsoft.Search.Response">
<Response domain="{CD144577-9D90-4144-AE38-0D6553CA4004}">
    <Range>
        <StartAt>1</StartAt>
        <Count>2</Count>
        <TotalAvailable>738</TotalAvailable>
        <Results>
        <Content xmlns="urn:Microsoft.Search.Response.Content">
            <Image source="http://localhost/GoogleResearchLibraryCSharp//gLogo.gif"/>
            <Heading collapsible="true">
            <Text>Smart Solutions Opinion</Text>
            <P>Office as Swiss Army Knife. Chris Kunicki.. </P>
            <Hyperlink url="http://www.msofficemag.net/opinion/default.asp?sort=W&Ord=A">
                <Text>http://www.msofficemag.net/opinion/default.asp?sort=W&Ord=A</Text>
            </Hyperlink>
            </Heading>
            <Heading collapsible="true">
            <Text>What´s New with Smart Tags in Office 11</Text>
            <P>Rate this page: 4 users, 3.8 out of 5. Read User ... </P>
            <Hyperlink url="http://msdn.microsoft.com/columns/office.asp">
                <Text>http://msdn.microsoft.com/columns/office.asp</Text>
            </Hyperlink>
            </Heading>
            <HorizontalRule/>
            <Hyperlink url="http://www.google.com/search?q=Chris Kunicki">
            <Text>Continue your search at Google.com ...</Text>
            </Hyperlink>
            <Hyperlink url="http://groups.google.com/groups?q=Chris Kunicki">
            <Text>Search at groups.Google.com ...</Text>
            </Hyperlink>
            <P>Search took 0.19 seconds.</P>
            <HorizontalRule/>
            <Image source="http://localhost/GoogleResearchLibraryCSharp//oz15owide.gif"/>
        </Content>
        </Results>
    </Range>
    <Status>SUCCESS</Status>
    </Response>
</ResponsePacket>

Query.asmx інтенсивно використовує об’єкт XMLTextWriter. Він надає ефективний і простий спосіб створення синтаксично коректного XML-документа. Так як відповідь від інтерфейсу Query заснований на XML-схемі, необхідний коректний XML-документ, інакше секція задач Research з великою часткою ймовірності виведе пусте вікно. Наступний приклад ілюструє застосування об’єкта XMLTextWriter:

writer.WriteStartElement("P");
writer.WriteStartElement("Char");
writer.WriteAttributeString("light", "true");
writer.WriteString("Description: ");
writer.WriteEndElement();
writer.WriteString(StripHtml(result.summary));
writer.WriteEndElement();

Що призводить до створення наступного XML:

<P><Char light="True">Description: information from google</Char></P>

На перший погляд здається, що створення простий XML-рядки зажадало занадто багато коду. Однак типовий пакет відповіді містить 50-100 рядків XML. І їм вже досить незручно управляти за допомогою звичайних строкових функцій. Об’єкт XMLTextWriter не тільки ефективніше витрачає пам’ять, але і простіше у створенні та управлінні.

Нотатки з окопів

Як ви розумієте, ми розглянули лише вершину айсберга. Будучи одним з перших користувачів цієї технології, хотів би на закінчення поділитися своїм досвідом у створенні секції завдань Research.

Тут багато що нагадує HTML, так як дослідницька бібліотека – це відповідь Web-сервісу, форматований у вигляді XML-структури, обумовленою Microsoft. Мені знадобилося близько двох днів на вивчення схем, щоб відчути себе впевнено. Хоча секція завдань Research
Library
виглядає як вбудований браузер, вона не має його гнучкістю. Поставити фоновий колір не можна, у вас дуже обмежений контроль над розміткою тексту і зображень, немає сценаріїв, які можна було б виконувати на стороні клієнта. Але навіть при таких обмеженнях, як тільки ви зрозумієте можливості синтаксису, ви виявите, що він дозволяє робити дуже багато.

Ще одна цікава річ. Вам доведеться навчитися працювати з екраном обмеженого розміру. Зазвичай ви маєте справу з областю шириною 100-200 пікселів. Тобто доведеться економити місце. В принципі, це можна порівняти з форматуванням тексту для PDA аналогічного форм-фактора.

Вигода від використання. NET Framework для Web-сервісів XML полягає в потужній вбудованої підтримки кешування. Додавши наступний атрибут до Web-методу Response(), Ми забезпечимо кешування рідко мінливого відповіді на реєстрацію:

[WebMethod (CacheDuration = 86400)] / / кешувати на весь день, / / Так як дані змінюються рідко / / (86400 секунд = 24 годинах)
public string Registration(string registrationxml)

Я також застосував цей атрибут до методу Query() І встановив термін кешування в 1:00, як показано в коді:

[WebMethod (CacheDuration = 3600)] / / кешувати на 1:00
public string Query(string queryXml)

Як налагоджувати дослідницьку бібліотеку? Знову ж, її налагодження корисно порівняти з налагодженням HTML в браузері, тільки в нашому випадку браузер – це клієнт Office. Встановіть точки переривання в Web-методах, які ви хочете налагодити, і запустіть проект з включеною налагодженням. Visual Studio. NET запустить примірник Internet Explorer і переведе код в режим налагодження. Залиште вікно Internet Explorer відкритим і перейдіть в тестоване додаток Office. У міру виконання запитів у дослідницькій бібліотеці Visual Studio. NET буде зупинятися на точках переривання.

І нарешті, кілька нескладних зауважень:


Кріс Куницькі (Chris Kunicki) працює з замовниками, архітекторами і інженерами над створенням вражаючих настільних, корпоративних і Web-додатків в OfficeZealot.com. Кріс давно і з ентузіазмом займається розробкою під Office і пропагує його важливість як платформи для створення рішень. З ним можна зв’язатися за адресою
chris@officezealot.com. Крім того, ви можете познайомитися з його точкою зору на сайті
www.officezealot.com.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*