Udostępnij za pośrednictwem


Uzyskiwanie dostępu do danych w dokumentach na serwerze

Można programować względem danych w dostosowywaniu na poziomie dokumentu bez konieczności używania modelu obiektów programu Microsoft Office Word lub Microsoft Office Excel. Oznacza to, że można uzyskać dostęp do danych zawartych w dokumencie na serwerze, na którym nie zainstalowano programu Word ani Excel. Na przykład kod na serwerze (na przykład na stronie ASP.NET) może dostosować dane w dokumencie i wysłać dostosowany dokument do użytkownika końcowego. Gdy użytkownik końcowy otworzy dokument, kod powiązania danych w zestawie rozwiązania wiąże dostosowane dane z dokumentem. Jest to możliwe, ponieważ dane w dokumencie są oddzielone od interfejsu użytkownika. Aby uzyskać więcej informacji, zobacz Buforowane dane w dostosowaniach na poziomie dokumentu.

Dotyczy: informacje w tym temacie dotyczą projektów na poziomie dokumentu dla programów Excel i Word. Aby uzyskać więcej informacji, zobacz Funkcje dostępne przez aplikacja pakietu Office lication i typ projektu.

Buforowanie danych do użycia na serwerze

Aby buforować obiekt danych w dokumencie, oznacz go atrybutem CachedAttribute w czasie projektowania lub użyj StartCaching metody elementu hosta w czasie wykonywania. Podczas buforowania obiektu danych w dokumencie środowisko uruchomieniowe Visual Studio Tools dla pakietu Office serializuje obiekt w ciąg XML przechowywany w dokumencie. Obiekty muszą spełniać pewne wymagania, aby kwalifikować się do buforowania. Aby uzyskać więcej informacji, zobacz Buforowanie danych.

Kod po stronie serwera może manipulować dowolnymi obiektami danych w pamięci podręcznej danych. Kontrolki powiązane z buforowanymi wystąpieniami danych są synchronizowane z interfejsem użytkownika, dzięki czemu wszelkie zmiany po stronie serwera wprowadzone w danych są wyświetlane automatycznie po otwarciu dokumentu na kliencie.

Uzyskiwanie dostępu do danych w pamięci podręcznej

Dostęp do danych w pamięci podręcznej można uzyskać z aplikacji spoza pakietu Office, na przykład z poziomu aplikacji konsolowej, aplikacji Windows Forms lub strony sieci Web. Aplikacja, która uzyskuje dostęp do buforowanych danych, musi mieć pełne zaufanie; Aplikacja sieci Web, która ma częściowe zaufanie, nie może wstawiać, pobierać ani zmieniać danych buforowanych w dokumencie pakietu Office.

Pamięć podręczna danych jest dostępna za pośrednictwem hierarchii kolekcji, które są udostępniane przez CachedData właściwość ServerDocument klasy:

  • Właściwość CachedData zwraca CachedDataobiekt , który zawiera wszystkie buforowane dane w dostosowywaniu na poziomie dokumentu.

  • Każdy CachedData obiekt zawiera co najmniej jeden CachedDataHostItem obiekt. Obiekt CachedDataHostItem zawiera wszystkie buforowane obiekty danych zdefiniowane w ramach jednej klasy.

  • Każdy CachedDataHostItem obiekt zawiera co najmniej jeden CachedDataItem obiekt. Obiekt CachedDataItem reprezentuje pojedynczy obiekt danych w pamięci podręcznej.

    W poniższym przykładzie kodu pokazano, jak uzyskać dostęp do buforowanego ciągu w Sheet1 klasie projektu skoroszytu programu Excel. Ten przykład jest częścią większego przykładu udostępnionego Save dla metody .

    serverDocument1 = new ServerDocument(documentPath);
    CachedDataHostItem hostItem1 = 
        serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
    CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];
    

Modyfikowanie danych w pamięci podręcznej

Aby zmodyfikować buforowany obiekt danych, zazwyczaj wykonaj następujące czynności:

  1. Deserializuj reprezentację XML obiektu buforowanego w nowym wystąpieniu obiektu. Dostęp do kodu XML można uzyskać przy użyciu Xml właściwości CachedDataItem , która reprezentuje buforowany obiekt danych.

  2. Wprowadź zmiany w tej kopii.

  3. Serializuj zmieniony obiekt z powrotem do pamięci podręcznej danych przy użyciu jednej z następujących opcji:

    • Jeśli chcesz automatycznie serializować zmiany, użyj SerializeDataInstance metody . Ta metoda używa formatu DiffGram do serializacji DataSet, DataTablei typizowane obiekty zestawu danych w pamięci podręcznej danych. Format DiffGram gwarantuje, że zmiany w pamięci podręcznej danych w dokumencie offline są prawidłowo wysyłane do serwera.

    • Jeśli chcesz wykonać własną serializacji zmian w buforowanych danych, możesz zapisać bezpośrednio we Xml właściwości . Określ format DiffGram, jeśli używasz elementu , aby zaktualizować bazę danych przy użyciu DataAdapter zmian wprowadzonych w danych w zestawie danych , DataSetDataTablelub wpisanym zestawie danych. W przeciwnym razie baza danych zostanie zaktualizowana, DataAdapter dodając nowe wiersze zamiast modyfikować istniejące wiersze.

Modyfikowanie danych bez deserializacji bieżącej wartości

W niektórych przypadkach można zmodyfikować wartość obiektu buforowanego bez wcześniejszego deserializacji bieżącej wartości. Na przykład można to zrobić, jeśli zmieniasz wartość obiektu, który ma prosty typ, taki jak ciąg lub liczba całkowita, lub jeśli inicjujesz buforowane DataSet w dokumencie na serwerze. W takich przypadkach można użyć SerializeDataInstance metody bez wcześniejszego deserializacji bieżącej wartości obiektu buforowanego.

W poniższym przykładzie kodu pokazano, jak zmienić wartość buforowanego ciągu w Sheet1 klasie projektu skoroszytu programu Excel. Ten przykład jest częścią większego przykładu udostępnionego Save dla metody .

serverDocument1 = new ServerDocument(documentPath);
CachedDataHostItem hostItem1 = 
    serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];

if (dataItem1 != null &&
    Type.GetType(dataItem1.DataType) == typeof(string))
{
    dataItem1.SerializeDataInstance("This is the new cached string value.");
    serverDocument1.Save();
}

Modyfikowanie wartości null w pamięci podręcznej danych

Pamięć podręczna danych nie przechowuje obiektów, które mają wartość null po zapisaniu i zamknięciu dokumentu. To ograniczenie ma kilka konsekwencji podczas modyfikowania buforowanych danych:

  • Jeśli ustawisz dowolny obiekt w pamięci podręcznej danych na wartość null, wszystkie obiekty w pamięci podręcznej danych zostaną automatycznie ustawione na wartość null po otwarciu dokumentu, a cała pamięć podręczna danych zostanie wyczyszczone po zapisaniu i zamknięciu dokumentu. Oznacza to, że wszystkie buforowane obiekty zostaną usunięte z pamięci podręcznej danych, a kolekcja będzie pusta CachedData .

  • Jeśli utworzysz rozwiązanie z obiektami null w pamięci podręcznej danych i chcesz zainicjować te obiekty przy użyciu ServerDocument klasy przed otwarciem dokumentu po raz pierwszy, musisz upewnić się, że zainicjowano wszystkie obiekty w pamięci podręcznej danych. Jeśli zainicjujesz tylko niektóre obiekty, wszystkie obiekty zostaną ustawione na wartość null po otwarciu dokumentu, a cała pamięć podręczna danych zostanie wyczyszczone po zapisaniu i zamknięciu dokumentu.

Dostęp do typowanych zestawów danych w pamięci podręcznej

Jeśli chcesz uzyskać dostęp do danych w typowym zestawie danych zarówno z rozwiązania pakietu Office, jak i z aplikacji spoza pakietu Office, takiej jak aplikacja Windows Forms lub projekt ASP.NET, musisz zdefiniować typowy zestaw danych w osobnym zestawie, do którego odwołuje się oba projekty. W przypadku dodania wpisanego zestawu danych do każdego projektu przy użyciu Kreatora konfiguracji źródła danych lub zestawu danych Projektant program .NET Framework będzie traktować typizowane zestawy danych w dwóch projektach jako różne typy. Aby uzyskać więcej informacji na temat tworzenia typowych zestawów danych, zobacz Tworzenie i konfigurowanie zestawów danych w programie Visual Studio.