Dieser Artikel wurde maschinell übersetzt.

Office-Dienste

Zusammenführen von Word-Dokumenten auf Serverseite mit SharePoint 2010

Ankush Bhatia

Downloaden des Codebeispiels

Business-Anwendungsentwickler müssen häufig Lösungen erstellen, die tägliche Aktivitäten für Ihre Organisationen zu automatisieren. Diese Aktivitäten in der Regel umfassen, Verarbeitung und Bearbeiten von Daten in verschiedenen Dokumenten – z. B. extrahieren und Konsolidieren von Daten aus mehreren Herkunftsbelegen, Zusammenführen von Daten in e-Mail-Nachrichten, suchen und Ersetzen Inhalte in Dokumenten, Neuberechnen von Daten in Arbeitsmappen, die Bilder von Präsentationen extrahieren... und die Liste wird auch auf.

Microsoft Office macht diese Arten von sich wiederholenden Aufgaben einfacher durch eine umfassende API, mit denen Entwickler diese automatisieren bereitstellen. Da solche Lösungen nahtlos für normale Desktopbenutzer arbeiten, haben Entwickler diese auf die nächste Ebene ausgeführt: Bereitstellen von Lösungen für Server, die einen zentralen Ort, in dem alle diese sich wiederholende Aufgaben behandelt werden, können, für mehrere Benutzer ohne menschliches Eingreifen.

Verschieben von Lösungen, die sich wiederholende Office über den Desktop auf einem Server Aufgaben einfach erscheint, ist zwar nicht ganz so einfach, wie es scheint.

Microsoft hat das Office-Anwendungssuite für Desktopcomputer Szenarien, in denen ein Benutzer an einem Computer angemeldet ist und davor sitzt, entwickelt. Aus Gründen der Sicherheit, Leistung und Zuverlässigkeit sind Office-Anwendungen nicht die richtigen Tools für die serverseitigen Szenarios. Office-Anwendungen in einer Serverumgebung möglicherweise manuelle Eingriffe erforderlich, und das ist nicht optimal für eine serverseitige Lösung. Microsoft empfiehlt, vermeiden diese Art von Lösung, wie in den Microsoft-Support-Artikel “ Überlegungen zur serverseitigen Automatisierung von Office ” erläutert.

Seit der Veröffentlichung von Office 2007 hat die Office-Automatisierung Story jedoch viel geändert. Eingeführt, mit Office 2007 Microsoft Office-OpenXML und Excel Services für Entwickler, die Office-basierten Lösungen auf dem Server entwickeln möchten.

Mit Office 2010 und SharePoint 2010 hat Microsoft mit einem neuen Satz Komponenten namens Application Services gestartet. Diese setzen einen umfassenden Satz von Tools in einem Entwickler Tasche für Office Automation-Lösungen. Anwendung Dienstleister, Excel Services, Word-Automatisierung Services, InfoPath Forms Services, PerformancePoint-Dienste und Dienste von Visio. Sie können über die Details dieser Dienste msdn.microsoft.com/library/ee559367(v=office.14)-informieren.

In diesem Artikel werden erfahren, wie Sie Office OpenXML, die Word-Automatisierung Services und SharePoint eine einfache Anwendung erstellen, die eigenen Statusberichte in einem einzigen Dokument zusammengeführt.

Status Report-Workflow

Let’s sagen, Sie sind ein Entwickler ein Dienste-orientierten Unternehmen, in dem viele Projekte von verschiedenen Teams verwaltet werden. Jede Woche verwendet jedes Projekt-Manager eine gemeinsame Vorlage, um einen wöchentlichen Statusbericht erstellen und an eine interne SharePoint-Repository zu uploaden. Nun möchte, dass die Gruppen-Manager einen konsolidierten Bericht zu erhalten, der enthält alle diese Wöchentliche Statusberichte und, wissen Sie was können Sie ausgewählte diejenige, die zum Implementieren dieser Anforderung hat.

Sie Glück, obwohl. Wie bereits erwähnt, ist Ihr Leben einfacher heute, da diese Anforderung mit viel weniger Aufwand mithilfe von OpenXML und Word-Automatisierung Services implementiert werden können. Sie müssen möglicherweise erzeugen eine Lösung noch stabile und stabile als ohne diese Technologien stehen könnten.

Durch die Umsetzung der Lösung Let’s starten. Abbildung 1 zeigt einen vorgeschlagenen Workflow. Der Prozess startet mit den einzelnen Projektmanagern, Statusberichte ausfüllen und in SharePoint auf dem Server uploaden. Gruppen-Manager können Sie dann bei der Zusammenführung alle Berichte, die auf dem Server gespeicherten initiieren und einen zusammenfassender Bericht generieren.

Figure 1 Workflow for Generating a Status Report

Abbildung 1 Workflow für das Erstellen eines Status Report

Erstellen einer Vorlage

Um diese Lösung zu implementieren, ist der erste Schritt in eine gemeinsame Vorlage zum Ausfüllen der wöchentlichen Statusberichte an die Projektmanager zu bieten. Wenn Sie nicht in den Daten gefüllt länger, erhalten Sie die Berichte SharePoint-Repository hochladen. Sich am Montagmorgen kann Gruppen-Manager bei der SharePoint-Website anmelden und ausgelöst werden, bis die Logik, die folgenden Aufgaben ausführt:

  1. Liest alle einzelnen Status Bericht Dokumente.
  2. Werden diese in einem Bericht zusammengeführt werden.
  3. Speichert den Bericht in das Repository für Benutzer zugreifen.

Abbildung 2 zeigt die Status Berichtsvorlage aussehen wie wird (let’s WeeklyStatusReport.dotx aufgerufen). Wie Sie sehen können, enthält die Vorlage Felder einen Titel, Datum, des Projektmanagers Name, Meilensteine und zugeordneten Daten erfassen und Textfelder für die Eingabe von Informationen über zukünftige Pläne, Leistungen und Probleme. In diesem Fall haben wir Text-Feldern und der Datumsauswahl-Steuerelement verwendet, aus Gründen der Einfachheit, aber Sie konnte Dropdown-Listenfelder, Kontrollkästchen oder eine Vielzahl anderer Steuerelemente problemlos verwenden, um die Dateneingabe zu optimieren.

Figure 2 Weekly Status Report Template

Abbildung 2 wöchentlich Status Berichtsvorlage

Die Dokumentbibliothek

Der nächste Schritt besteht darin, eine benutzerdefinierte Dokumentbibliothek zu erstellen, die die wöchentlichen Statusberichte, die auf dieser Vorlage basierenden hostet.

Klicken Sie im Navigationsbereich SharePoint-Bibliotheken und dann auf erstellen, um eine neue Bibliothek zu erstellen. Im Dialogfeld Erstellen von Library filtern Sie, wählen Sie die Dokumentbibliothek ein, und geben Sie einen Namen für die Bibliothek (WSR-Bibliothek verwendet). Klicken Sie jetzt erstellen.

Nun müssen Sie einen Inhaltstyp für die neue Dokumentbibliothek erstellen. Klicken Sie auf Websiteaktionen dann auf Websiteeinstellungen, und klicken Sie im Abschnitt Galerien Websiteinhaltstypen. Klicken Sie auf erstellen, und geben Sie einen Namen für den Inhaltstyp (wir Wöchentliche Statusberichte verwendet).

Wählen Sie in der Liste Wählen Sie übergeordnete Content Type von Inhaltstypen für das Dokument ein. Wählen Sie in der Liste übergeordneter Content-Dokument aus, und klicken Sie auf OK.

Unter Einstellungen für erweiterte Einstellungen wählen Sie, dann wählen Sie das Optionsfeld “ neue Dokumentvorlage hochladen ”, und klicken Sie auf Durchsuchen. Die Berichtsvorlage (WeeklyStatusReport.dotx) suchen und in der Bibliothek zu uploaden.

Wechseln Sie zur WSR-Bibliothek, und wählen Sie Einstellungen für die Bibliothek. Wählen Sie unter Allgemeine Einstellungen erweitert. Für “ Verwaltung von Inhaltstypen zulassen ” Ja wählen Sie, und klicken Sie auf OK.

Sie sehen eine Liste der Inhaltstypen auf der Bibliotheksseite für die Einstellung angezeigt. Wählen Sie den Link “ hinzufügen aus vorhandenen Websiteinhaltstypen ”. Wählen Sie den Inhaltstyp, den Sie weiter oben in die Liste der verfügbaren Standort Inhaltstypen erstellt. Im vorliegenden Beispiel ist dies die Wöchentliche Statusberichte. Klicken Sie auf Hinzufügen, und klicken Sie auf OK.

Erneut aus der Liste Inhaltstypen, klicken Sie auf Dokument und wählen Sie “ Löschen dieses Inhaltstyps ”. Wählen Sie OK, wenn Sie im Meldungsfeld Warnung.

Jetzt sollte den Inhaltstyp angezeigt, wenn Sie in Ihrer Bibliothek WSR neues Dokument auswählen wie in Abbildung 3 .

Figure 3 Selecting the Custom Content Type
Abbildung 3 Auswählen des benutzerdefinierten Inhaltstyp

An dieser Stelle können Sie fortfahren und eine Reihe von Statusberichten zur Dokumentbibliothek hinzufügen.

Erstellen von Webparts

Als Nächstes müssen Sie ein Gruppen-Manager, um die Logik Konsolidierung starten aktivieren. Sie können dies tun, über eine Schaltfläche unten in der Standardansicht der Dokumentbibliothek.

Es sind zwei Schritte erforderlich hier. Zunächst erstellen Sie ein Visual Webpart mithilfe von Visual Studio 2010. Zweitens: Fügen Sie Webparts auf die Dokumentbibliothek, die mithilfe von SharePoint Designer 2010.

Um ein benutzerdefiniertes Webpart zu erstellen, starten Sie ein neues Projekt in Visual Studio 2010 unter Verwendung der Projektvorlage für Visual-Webpart. Geben Sie dem Projekt einen Namen wie DocumentMerge, klicken Sie auf OK.

Der Assistent zum Anpassen von SharePoint-Seite Wählen Sie die Webanwendung (URL zur SharePoint-Website, die als Host für Ihre Dokumentbibliothek), und klicken Sie auf "Fertig stellen".

Nachdem das Projekt erstellt wurde, öffnen Sie die Datei VisualWebPart1.cs, und ändern Sie die CreateChildControls-Methode durch folgenden Code:

protected override void CreateChildControls() {
  Control control = Page.LoadControl(_ascxPath);
  Controls.Add(control);
  base.CreateChildControls();
  Button btnSubmit = new Button();
  btnSubmit.Text = "Merge Reports";
  btnSubmit.Click += new EventHandler(OnSubmitClick);
  Controls.Add(btnSubmit);
}

Fügen Sie auch einen Ereignishandler für das Klicken auf die Schaltfläche:

void OnSubmitClick(object sender, EventArgs e) {
  // TODO : Put code to merge documents here
}

Sie können zu diesem Zeitpunkt erstellen und Bereitstellen Ihres Projekts. Unsere OnSubmitClick Ereignishandler weiter unten in diesem Artikel werden wir die Implementierung hinzufügen.

Der nächste Schritt besteht darin, das Webpart zur Dokumentbibliothek hinzufügen. Öffnen Sie in SharePoint Designer 2010 die SharePoint-Website. Klicken Sie auf alle Dateien | WSR-Bibliothek | Forms, klicken Sie dann auf AllItems.aspx zu bearbeiten.

Klicken Sie auf den unteren Rand der Seite. Klicken Sie auf Einfügen | Webpart, und wählen Sie anschließend weitere Webparts. Geben Sie im Suchfeld Geben Sie VisualWebPart (den Namen des Webparts, die Sie gerade erstellt und bereitgestellt), und klicken Sie auf OK (siehe Abbildung 4 ). Abbildung 5 zeigt die Seite mit dem Webpart vorhanden. Speichern Sie die Seite, und schließen Sie SharePoint Designer.

Figure 4 Inserting the Web Part

Abbildung 4 Einfügen das Webpart von

Figure 5 The Web Part in Place on the Page

Abbildung 5 an der Stelle auf der Seite das Webpart

Die Berichte zusammenführen

Nun fügen Sie die Logik zum Zusammenführen der hochgeladenen Dokumente in der Dokumentbibliothek let’s. Der Einfachheit halber wird in diesem Code alle Dokumente, die in einer einzigen Datei in diesen Ordner hochgeladen zusammengeführt. Ein realistischer Ansatz wäre nur ausgewählte Elemente oder nur Elemente, die in einem bestimmten Zeitraum hochgeladen zusammenführen. Sie könnten auch das zusammengeführte Dokument an einen anderen Speicherort oder eine andere Bibliothek speichern. Dies ist bei die Implementierung, unsere OnSubmitClick Handler unserer VisualWebPart-Projekts in Visual Studio 2010 hinzugefügt werden.

Im Ereignishandler OnSubmitClick des Webparts müssen Sie eine Logik für das Lesen der Berichte, die in der Dokumentbibliothek hochgeladen wurden, ein leeres OpenXML-Dokument zu erstellen und die Berichte in neues Dokument zusammenführen.

Zunächst müssen Sie alle Dokumente in der aktuellen Bibliothek zu lesen. Sie können den von der aktuellen SPContext, lesen jede Datei in ein Bytearray mithilfe der API SPFile.OpenBinary SPListItemCollection durchlaufen:

 

SPListItemCollection files = SPContext.Current.List.Items;
  foreach (SPListItem item in files) {
    SPFile inputFile = item.File;
    byte[] byteArray = 
      inputFile.OpenBinary();

    // process each byte array 
  }

Als Nächstes leere OpenXML-Dokument zu generieren. Dies erfordert das Generieren des Dokuments im Speicher ein MemoryStream verwenden, da der OpenXML-SDK keine Dokumente an einen URI speichern können. Stattdessen kann MemoryStream-Objekt im Dokument in die Bibliothek als neue Datei ausgeben. Abbildung 6 , wird der Code zum Erstellen der Datei angezeigt.

Abbildung 6 Erstellen einer neuen Datei für den zusammengeführten Bericht

// String containing the blank document part for our new DOCX
string strEmptyMainPart = 
  "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" +
  "<w:document xmlns:w='https://schemas.openxmlformats.org/wordprocessingml/2006/main'>" +
  "<w:body><w:p><w:r><w:t></w:t></w:r></w:p></w:body></w:document>";

// In-memory stream for our consolidated DOCX.
MemoryStream memOut = new MemoryStream();

// Output document's OpenXML object
WordprocessingDocument outputDoc = 
  WordprocessingDocument.Create(memOut, 
  DocumentFormat.OpenXml.WordprocessingDocumentType.Document);

MainDocumentPart mainPart = outputDoc.AddMainDocumentPart();

Stream partStream = mainPart.GetStream();
UTF8Encoding encoder = new UTF8Encoding();

// Add blank main part string to the newly created document
Byte[] buffer = encoder.GetBytes(strEmptyMainPart);
partStream.Write(buffer, 0, buffer.Length);

// Save the document in memory
mainPart.Document.Save();

Beachten Sie, dass Sie in den Referenzen und die entsprechende using-Anweisungen, um den Code DocumentFormat.OpenXml.dll und WindowsBase.dll hinzufügen müssen:

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

Der nächste Schritt besteht darin, implementiert die Logik für das zusammengeführte Dokument in die Bibliothek als neues Dokument speichern. Dies erfordert ein wenig Mühe, aber Sie können einfacher mithilfe von SharePoint verwalteten Client-Objektmodells. Sie müssen zum Hinzufügen von zwei Verweise auf das Projekt Microsoft.SharePoint.Client.dll und Microsoft.SharePoint.Client.Runtime.dll, in folgendem Ordner befinden:

%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI

Erstellen eines neuen Dokuments in die SharePoint-Bibliothek mit folgendem Code:

ClientContext clientContext = 
  new ClientContext(SPContext.Current.Site.Url);
ClientOM.File.SaveBinaryDirect(clientContext, 
  outputPath, memOut, true);

Diese Anweisungen zu arbeiten, müssen Sie die folgenden using-Anweisungen in der Quelldatei:

using Microsoft.SharePoint.Client;
using ClientOM = Microsoft.SharePoint.Client;

Machen das Dokument durchsuchbaren

Zu diesem Zeitpunkt haben Sie die Logik implementiert, um voll funktionsfähige konsolidierten Dokumente auf dem Server zu generieren, wenn ein Benutzer auf die Schaltfläche Berichte Zusammenführen klickt.

Es gibt jedoch einen kleinen Haken: Das generierte Dokument ist nicht kompatibel mit der SharePoint-crawling-Mechanismus, da Sie OpenXML AltChunk Markup enthält. Hierbei handelt es sich um ein Nebenprodukt der Zusammenführung der Berichte in das leere Dokument mithilfe des Codes, die wir weiter oben gezeigt. Die AltChunks werden mit den ursprünglichen Inhalt ersetzt, wenn ein Dokument in Word geöffnet ist.

Mit der neuen Word-Automatisierung Services in SharePoint 2010 kann diesen Vorgang programmgesteuert mit ConversionJob Klasse durchgeführt werden. Diese Klasse ist Bestandteil der Assembly Microsoft.Office.Word.Server.dll, also den Verweis auf diese Assembly dem Projekt manuell hinzufügen. Nachdem Sie diesen Verweis hinzugefügt haben, können den Code Sie zum Durchführen der Konvertierung von der AltChunks in Abbildung 7 .

Abbildung 7 Converting AltChunks in das zusammengeführte Dokument

string docPath = string.Format(@"{0}{1}", 
  SPContext.Current.Site.Url.Replace(@"\\", ""), 
  outputPath);
            
ConversionJobSettings JobSettings = 
  new ConversionJobSettings();
JobSettings.OutputFormat = SaveFormat.Document;
JobSettings.OutputSaveBehavior = 
  SaveBehavior.AlwaysOverwrite;

ConversionJob ConvJob = new ConversionJob(
  "Word Automation Services", JobSettings);
ConvJob.UserToken = SPContext.Current.Site.UserToken;
ConvJob.AddFile(docPath, docPath);
ConvJob.Start();

Finden Sie den Codedownload für diesen Artikel weitere Details der Lösung an, die Sie als Grundlage für Ihre eigene Berichtssystem verwenden können.

Abschließende Schritte

Um diesen Code testen, geändert wir unsere SharePoint-Server-Konfiguration nach einer Minute bekommen Sie eine Anforderung zur Automatisierung-Dienst ausführen.Dieses Intervall wird standardmäßig fünf Minuten festgelegt, und wir möchten nicht warten, lang für unsere Konvertierung auftreten.

Wenn Sie diese Einstellung ändern möchten, legen Sie es in der SharePoint-Zentraladministration unter Verwaltung | Service-Anwendungen verwalten | Word-Automatisierung Services und Festlegen der Häufigkeit Konvertierungen unter Conversion Durchsatz in einer Minute zu starten.

Den letzte generierten Bericht enthält alle Wöchentliche Statusberichte, die Sie erstellt haben, in ein neues Dokument mit jedem der 
individual zusammengeführt Berichte gestapelt, eines nach dem anderen.

Und das ist alles.In einem zukünftigen Artikel werden wir das Konzept der serverseitigen zusammenführen, der Inhalt des Dokuments auf die nächste Ebene in Anspruch nehmen.Das Implementieren eines Seriendruck-Typs von Szenario auf der Serverseite erfahren Sie erneut mit Office 2010, 2010 SharePoint und Visual Studio 2010.Erst dann, viel Spaß beim Codieren.

Weitere Informationen zu Office 2010 und SharePoint 2010 finden Sie unter der Office -und SharePoint Entwickler zentriert.Informationen zu Office OpenXML finden Sie unter msdn.microsoft.com/library/bb448854-, und Sie erhalten Informationen über die Word-Automatisierung Services msdn.microsoft.com/library/ee558278(v=office.14)-.

Manvir SinghundAnkush Bhatiasind Teil der Visual Studio Developer Support Team in Microsoft Product Support Services (PSS), hilft Kunden zum Programmieren von Problemen im Zusammenhang mit Office-Clientanwendungen.Sie können manvir.singh@microsoft.com -oder manvirsingh.net-Singh erreichen.Sie können ankush.bhatia@microsoft.com -oder <abhatia.wordpress.com>-Bhatia erreichen.

Dank an den folgenden technischen Experten für die Überprüfung der in diesem Artikel: Eric White