B. U. S.
Home Nach oben Inhalt Nützliches

 

Home
Nach oben

 

Austausch möglich - Project,  Outlook und Sharepoint Team Services im Zusammenspiel

 

 


 

___ In einem Projekt zum Aufbau einer PKI [1] stehen die Microsoftprodukte Outlook§, Project, InternetExplorer und SharePoint Team Service zur Information und Datenhaltung zur Verfügung. Mit einem externen Auftragnehmer ist die Planung und Durchführung des Projektes mit MS Project vereinbart, die Projektleitung und einige Mitglieder nutzen unter MS Exchange Öffentliche Ordner zum Informationsaustausch, während andere Mitglieder über SharePoint Team Service bzw. ein Intranet-Angebot informiert werden.
Es soll im folgenden eine Lösung zum Abgleich der Daten untereinander gezeigt werden, die sicherstellt, dass mit allen Programmen die gleichen Dateninhalte präsentiert werden.



Datenmodelle von MS Project und SharePoint Team Service

Das Datenmodell von Outlook wird auf Grund zahlreicher Veröffentlichungen auch und gerade an dieser Stelle als bekannt vorausgesetzt und nicht beschrieben.

 

MS Project

 

MS Project ist ein Programm für Projektmanagement, d.h. es hilft beim Planen, Organisieren und Verwalten von Vorgängen und Ressourcen zum Erreichen eines definierten Ziels. In der Regel gibt es innerhalb eines Projekts Einschränkungen bezüglich Zeit, Ressourcen oder Kosten. Die Bearbeitung in MS Project erfolgt auf der Basis eines Projektplanes. Dieser kann einfach eine Liste von Vorgängen mit ihren Anfangs- und Endterminen, er kann jedoch auch komplex sein und aus Tausenden von unabhängigen Vorgängen und Ressourcen bestehen.

In Abbildung 1 ist ein Beispiel für die Darstellung eines Projektes gegeben. In der linken Hälfte können nach Einstellung durch den Anwender Bezeichnung, Beginn, Ende, Dauer, Resourcenverbrauch aller Teilaktivitäten u.v.m dargestellt werden. In der rechten Hälfte werden diese Daten in einer grafischen Repräsentation auf einer Zeitachse aufbereitet. Abhängigkeiten zwischen den Produkten werden durch Pfeile repräsentiert. In Abbildung 2 ist das Objekt-Modell von MS Project Version 2002 dargestellt. Im hier beschriebenen Zusammenhang ist lediglich das Task-Objekt bzw. die Tasks-Auflistung von Bedeutung.
In Listing 1 wird nach üblicher Vorbereitung der frühen Bindung an die dll
Microsoft Project 10.0 Library mittels

Set appMsProject = GetObject("", "MSProject.Application")
appMsProject.FileOpen msp_Datei, ReadOnly = True


 

die im String msp_Datei bezeichnete Datei zum Lesen geöffnet. Mit

Set mspProjekt = appMsProject.Projects(1)
MsgBox mspProjekt.Tasks.Count, , mspProjekt.Name

 

wird auf das erste Projekt instantiiert. Über die count-Eigenschaft der Liste der Aufgaben mspProjekt.Tasks wird die Anzahl der Aufgaben ermittelt und zusammen mit dem Projektnamen mspProjekt.Name in einer MessageBox dargestellt.
Innerhalb der Tasks-Auflistung werden für jede Teilaufgaben mit einem nicht leeren Namen Beginn, Ende und Zielerreichungsgrad in % dargestellt. Hierfür steht auf der diesem Heft beigefügten CD das Programm VB_MSProject_01 zur Verfügung.
Eine Strukturierung von Aufgaben und
Teilaufgaben kann in MS Project durch „Einrücken“ von Aufgaben vorgenommen werden. Graphisch ist dieses in Abbildung 1 gut zu erkennen.
Im Objektmodell wird diese Einrückung mit der Task-Eigenschaft OutlineLevel abgebildet.
Fügt man z.B. mit der Visual Basic Function Space(mspAufgabe.OutlineLevel - 1) vor den Namen der Aufgabe eine dem Einrück-Level proportionale Anzahl von Leerzeichen ein, so erhält man mit dem VB-Programm mittels ListView-Object die Darstellung von Abbildung 3.


SharePoint Team Services

 

Sie sind ein einfaches Hilfsmittel um die Kommunikation und den Informationsaustausch in Projektteams zu unterstützen und sind ( kostenloser ) Bestandteil von MS FrontPage 2002. Mit ihnen können Projektgruppen einfach und schnell die Zusammenarbeit und Aufgabenverteilung über Team-Websites organisieren. Diese ermöglichen die Einrichtung zentraler Foren, in denen Teammitglieder Termine, Aufgaben, Dokumente, Kontakte und Ankündigungen veröffentlichen können.
SharePoint Team Services bieten eine Vielzahl vordefinierter Listen wie Dokumentarchive, Linklisten, Adressverzeichnisse, Ankündigungen oder Umfragen an .
Reichen diese nicht aus, lassen sich individuelle Listen und dazugehörige Ansichten einfach und schnell über vordefinierte Web-Formulare erstellen.

Abbildung 4 stellt eine typische SharePoint Team Service - Seite dar, wie sie ohne Anwendung von Zusatzsoftware binnen ( weniger als 10 ) Minuten erstellt werden kann
Durch die Integration mit SharePoint Team Services können Nutzer äusserst einfach und problemlos Informationen zwischen Office-Anwendungen und der Website ihres Teams austauschen. Die Teammitglieder können Inhalte zur Website beitragen, Dokumente in Dokumentbibliotheken laden
und an Besprechungen und Umfragen teilnehmen. Über eine Abonnement-Funktíon können einzelne Seiten des Portals überwacht werden, um bei Änderungen definierbarer Art einen Mail-Versand zu starten. Die Speicherung der Inhalte erfolgt ausschliesslich in Tabellen des SQL-Servers in der Art von Abbildung 5 und Abbildung 6. Hierdurch können Datenbank-Anwendungen sehr einfach und schnell erstellt und im Projekt zur Nutzung freigegeben werden, wie an dem einfachen Beispiel eines Formulars zur Fehlermeldung und Auswertung der Listen in Abbildung 7 – Abbildung 10 verdeutlicht werden soll. Für den Zugriff auf die Tabellen von Abbildung 5 ist über ODBC-Datenbankmanager ein Zugriff mit Namen SPTS vorbereitet worden.
In Listing 2 wird durch die Befehle

conn.Open "Provider=MSDASQL.1;Data Source =SPTS;"[2]
 comm.CommandText = "Select * From ows_Project1_u_Terminplanung"
Set comm.ActiveConnection = conn
Set rec = comm.Execute

 

die Verbindung zur Datenbank und der Tabelle mit den Terminen hergestellt und über die Select-Abfrage werden alle Datensätze ausgewählt. Die Auflistung aller Datensätze und Darstellung in einem ListView-Object wird wie folgt vorgenommen


While Not rec.EOF
  Set litem = ListItems.Add(Text:=rec.Fields(0).Value)
    For col = 1 To rec.Fields.Count – 1
      litem.SubItems(col) = CStr(rec.Fields(col).Value)
    Next  rec.MoveNext

Wend

 

Die Befehle
ListItems.Clear
ColumnHeaders.Clear
For col = 0 To rec.Fields.Count – 1
  ColumnHeaders.Add
  ColumnHeaders(col + 1).Text = rec.Fields(col).Name
Next


 

werden zum Löschen eventuell vorhandener alter Einträge und zur Beschriftung der Spalten des ListView-Elementes ausgeführt.



Übertragen der Daten von MS Project nach Outlook und SharePoint Team Service

 

Die Projektdaten sind unter MS Project erstellt und in Dateien mit unterschiedlichem Namen gespeichert. Für die Projektleitung und einige Projekt-Mitglieder stehen in dem Öffentlichen Ordner outlook:\\Öffentliche Ordner\Alle Öffentlichen Ordner\PKI_Hessen\ Unterordner für Ms Project Termindaten, Ms Project Aufgaben und für mit Outlook-Formularen erstellte Aufgaben bereit. Die Mehrzahl der Projekt-Mitglieder hat Zugriff auf eine SharePoint Team Service Anwendung der im vorherigen Abschnitt beschriebenen Art. Um eine einheitliche Datenhaltung in allen Datenspeichern sicher zustellen, werden mit dem im folgenden kurz beschriebenen Programm
 Listing 3 die Daten aus MS Project in die Öffentlichen Ordner und nach SharePoint Team Service geschrieben.
Im Bereich I werden die erforderlichen Variablen deklariert und das Formular vorbereitet.
Anschliessend werden im Bereich II über Outlook die Öffentlichen Ordner MS_Projekt_Kalender und MS_Projekt_Aufgaben addressiert.
Sollen bestehende Daten in diesen Ordnern und in SharePoint Team Service gelöscht werden, so erfolgt diese
Bearbeitung in Bereich III.
In dem Programm SynchroProjektdaten auf der CD wird das Löschen von Einträgen über Kategorien gesteuert, deren Speicherung in SharePoint Team Service in einer extra Spalte vorbereitet werden muss )
Im Bereich IV wird MS Project adressiert. Es wird vorausgesetzt, dass dieses
geschlossen ist oder dass nur das Projekt aus msp_Datei offen ist. Ohne diese Annahme oder einen Vergleich zwischen Dateiname und Projektname kann die Festlegung

Set mspProjekt = appMsProject.Projects(1) S

auf ein falsches Projekt verweisen.
Mit einem Vergleich zwischen Dateiname und Projektname kann dieses Problem jedoch leicht gelöst werden.
Durch iterative Abarbeitung der Liste mspProjekt.Tasks werden alle Aufgaben adressiert.
Mit  

 Set aTermin = appOut.CreateItem(olAppointmentItem)

und   

  
Set tAufgabe = appOut.CreateItem(olTaskItem)


werden die Objekte für die Öffentlichen Ordner MS_Projekt_Aufgaben und MS_Projekt_Kalender erstellt. Die Eigenschaften Anfangs-, Endedatum, Subject usw. werden zugewiesen und mit den Befehlen 

aTermin.Move Projekt_Kalender
 bzw.  
tAufgabe.Move Projekt_Aufgaben  
werden die Objekte in die Öffentlichen Ordner geschoben. Über

conn.Open "Provider=MSDASQL.1;Data Source =SPTS;"
rec.Open "Select * From ows_Project1_u_Terminplanung", conn, adOpenStatic, adLockOptimistic

 

wird der Zugriff auf die Tabelle von SharePoint Team Service vorbereitet.
Mit  rec.AddNew  wird ein neuer Eintrag in der Tabelle angelegt. Die Hilfsfunktion KDB_Space fügt vor die Projektbezeichnung abhängig vom Level der Einrückung das Zeichen _ ein, um die Hierarchie von Projekten abzubilden. Der Umweg ist erforderlich, da die Verarbeitung von führenden Blanks oder Tabulatorzeichen Probleme bereitet :

rec!tp_Title = KDB_Space(mspAufgabe.OutlineLevel - 1) & sInformation            
Sharepoint Team Service markiert standardmässig gemäss Abbildung 4 neue Einträge mit dem grün gefärbtem Text “! neu“ und hält diese Markierung in Abhängigkeit vom Feld Created einen Tag aufrecht. Ist dieses auf Grund von Markierung im Formularfeld chk_Neu unerwünscht, wird der Eintrag Created um 2 Tage zurückgesetzt.
Ebenfalls wird für Aufgaben die zu 100 % erledigt sind dieses durchgeführt
.

rec!tp_Modified = Now()

If (Form1.chk_Neu) AND (iErledigt < 100) Then

          rec!tp_Created = Now()

      Else

          rec!tp_Created = Now() - 2

End If

rec!tp_Version = 1

rec!tp_Beginn = dAnfang

rec!tp_Ende = dEnde

rec!tp_Erledigt = iErledigt / 100

 

Mit  rec.Update wird der Eintrag endgültig in der Tabelle gespeichert.
Es empfiehlt sich in
Sharepoint Team Service einen User PROGRAMM o.ä. anzulegen. Mit dessen ID_Nummer sollte der Tabelleneintrag um

rec!tp_Author = ID_Nummer

 

erweitert werden, damit die Autorenschaft der Einträge transparent bleibt.

Der Transfer von Daten aus dem Öffentlichen Ordner Öffentliche Ordner\Alle Öffentlichen Ordner\PKI_Hessen\ProjektAufgaben nach Sharepoint Team Service erfolgt auf ähnliche Art, wie in Listing 4 dargestellt ist.


Schlussbemerkung

 

Sharepoint Team Service ist ein einfach zu bedienendes Informationssystem für Projekte und fügt sich relativ übersichtlich in die Datenstruktur der Office Produkte ein. Mit wenig Aufwand gelingt es deshalb die Daten zwischen beiden Welten auszutauschen und den Nutzern eine einheitliche Sicht auf die Informationen zu verschaffen.
Mit der Datenhaltung im SQL-Server wird im aktuellen Projekt weiterhin eine zeit- und ereignisabhängige Veröffentlichung von Informationen in einem HTML-Webangebot derart vorgenommen, dass zu festen Zeiten oder in Abhängigkeit von Triggern der SQL-Server vordefinierte Abfragen ausführt und das Ergebnis im HTML-Format in das statische Web schreibt. Hierdurch wird das Informationsangebot ständig automatisch aktualisiert.



 


 

 


 

 

 

 

 

 



 

Abbildung 1 Darstellung eines Projektplanes in MS Project

 


 



 

 

 

 

 

 

Abbildung 2 Object Modell von MS Project


 





 

Abbildung 3 Strukturierte Ausgabe durch Nutzung von Space(mspAufgabe.OutlineLevel - 1)

 


 




 

Abbildung 4 Startseite von SharePoint TeamService

 



 


 

 

 

 

Abbildung 5 Tabellenübersicht für SharePoint TeamService

 

 

 

 




 

 


Abbildung 6 Tabellenaufbau für Ankündigungen und Ereignisse



 

 


 



 

Abbildung 7 Erstellen einer benutzerdefinierten Seite

 

 




 

Abbildung 8 Festlegung der Seitenparameter


 

 





 

Abbildung 9 Festlegung der Spaltenparameter

 



 

Abbildung 10 Definition einer Ansicht zum Anzeigen gemeldeter Hardware-Fehler


 

 

Dim appMsProject As MSProject.Application
Dim mspProjekt As MSProject.Project
Dim mspAufgabe As MSProject.Task

 

Set appMsProject = GetObject("", "MSProject.Application")
appMsProject.FileOpen msp_Datei, ReadOnly = True
Set mspProjekt = appMsProject.Projects(1)
MsgBox mspProjekt.Tasks.Count, , mspProjekt.Name
For Each mspAufgabe In mspProjekt.Tasks
If mspAufgabe.Name <> "" Then
   Set litem =ListView1.ListItems.Add(Text:=mspAufgabe.Name)
   litem.SubItems(1) = mspAufgabe.Start

   litem.SubItems(2) = mspAufgabe.Finish

   litem.SubItems(3) = mspAufgabe.PercentComplete
End If
Next

 

Listing 1 Darstellen von Informationen aus MS Project in einem ListView Element

 


 

 

Dim comm As New ADODB.Command
Dim rec As Recordset
conn.Open "Provider=MSDASQL.1;Data Source =SPTS;"
comm.CommandText = "Select * From ows_Project1_u_Terminplanung"
Set comm.ActiveConnection = conn
Set rec = comm.Execute
row = 0
Const maxrow = 200
With ListView1
  ListItems.Clear
  ColumnHeaders.Clear
  For col = 0 To rec.Fields.Count – 1
.   ColumnHeaders.Add
.   ColumnHeaders(col + 1).Text = rec.Fields(col).Name
  Next
On Error Resume Next
  While Not (rec.EOF Or row > maxrow)
    Set litem = .ListItems.Add(Text:=rec.Fields(0).Value)
    For col = 1 To rec.Fields.Count – 1
      litem.SubItems(col) = CStr(rec.Fields(col).Value)
    Next
    rec.MoveNext
    row = row + 1
  Wend
End With

 

Listing 2 Darstellen der Termine aus SharePoint Team Service und Darstellung in ListView-Element.

 


 

 

'                                                                          ----------------------------------------
'   MS Project Objekte                                                               Bereich I
'
    Dim appMsProject As MSProject.Application
    Dim mspProjekt As MSProject.Project
    Dim mspAufgabe As MSProject.Task
'
'   MS Outlook Objekte
'
    Dim appOut As Outlook.Application
    Dim Outlook_NameSpace As NameSpace
    Dim Outlook_Ordner As MAPIFolder
    Dim Projekt_Kalender As MAPIFolder
    Dim Projekt_Aufgaben As MAPIFolder
    Dim aTermin As AppointmentItem
    Dim tAufgabe As TaskItem
   
    Dim sInformation As String
    Dim iErledigt As Integer
    Dim dAnfang As Date
    Dim dEnde As Date
   
'
'   Datenbank Objekte für SharePoint Team Service
'
    Dim conn As New Connection
    Dim comm As New ADODB.Command
    Dim rec As New Recordset

    Form1.ListView1.Height = 6300
    Form1.ListView1.ListItems.Clear
    Form1.CmdEnde.Enabled = False
    Form1.cmdLOS.Enabled = False
    Form1.Dir1.Visible = False
    Form1.Drive1.Visible = False
    Form1.File1.Visible = False
    Form1.Dir1.Refresh
    Err.Clear
   
    Demo = False
 
    Form1.cmdLOS.Enabled = False
                                                                  --------------------------------------
-
'   Outlook öffnen und Öffentliche Ordner adressieren                      Bereich II
 
    Set appOut = GetObject("", "Outlook.Application")
    Set Outlook_NameSpace = appOut.GetNamespace("MAPI")
    Set Outlook_Ordner = Outlook_NameSpace.Folders("Öffentliche Ordner")
    Set Outlook_Ordner = Outlook_Ordner.Folders("Alle Öffentlichen Ordner")
    Set Outlook_Ordner = Outlook_Ordner.Folders("PKI_Hessen")
    Set Projekt_Kalender = Outlook_Ordner.Folders("MS_Project_Kalender")
    Set Projekt_Aufgaben = Outlook_Ordner.Folders("MS_Project_Aufgaben")
                                                                                     --------------------------------------
  
    If chk_Löschen Then                                                              Bereich III
        Form1.labInfo = "Outlook Kalender leeren"
        While Projekt_Kalender.Items.Count > 0
            For Each myDummy In Projekt_Kalender.Items
                myDummy.Delete
            Next myDummy
        Wend
        Form1.labInfo = "Outlook Aufgaben leeren"
        While Projekt_Aufgaben.Items.Count > 0
            For Each myDummy In Projekt_Aufgaben.Items
                myDummy.Delete
            Next myDummy
        Wend
        Form1.labInfo = "Portal Liste leeren"
        conn.Open "Provider=MSDASQL.1;Data Source =SPTS;"
        rec.Open "Select * From ows_Project1_u_Terminplanung", conn, _
        adOpenStatic, adLockOptimistic
        On Error GoTo weiter
        While Not rec.EOF
            rec.Delete
            rec.MoveNext
        Wend
       
            Else
        conn.Open "Provider=MSDASQL.1;Data Source =SPTS;"
        rec.Open "Select * From ows_Project1_u_Terminplanung", conn, _
        adOpenStatic, adLockOptimistic
    End If
weiter:
                                                                           ------------------------------------
    Form1.labInfo = "Outlook und Portal bearbeiten"                                  Bereich IV
    Set appMsProject = GetObject("", "MSProject.Application")
    appMsProject.FileOpen msp_Datei, ReadOnly = True
   
    Set mspPr
ojekt = appMsProject.Projects(1)
    For Each mspAufgabe In mspProjekt.Tasks
        dAnfang = mspAufgabe.Start
        dEnde = mspAufgabe.Finish
        sInformation = mspAufgabe.Name
        iErledigt = mspAufgabe.PercentComplete
       
        If sInformation <> "" Then
            Set litem = Form1.ListView1.ListItems.Add(Text:=Space(mspAufgabe.OutlineLevel - 1) & sInformation)
            litem.SubItems(1) = dAnfang
            litem.SubItems(2) = dEnde
            litem.SubItems(3) = iErledigt
           
            Set aTermin = appOut.CreateItem(olAppointmentItem)
            aTermin.Subject = sInformation
            aTermin.Start = dAnfang
            aTermin.End = dEnde
            aTermin.AllDayEvent = True
            aTermin.ReminderSet = False
            aTermin.Categories = "Projekt_Hessen_PKI"
            aTermin.Move Projekt_Kalender
           
            Set tAufgabe = appOut.CreateItem(olTaskItem)
            tAufgabe.Subject = sInformation
            tAufgabe.DueDate = dEnde
            tAufgabe.StartDate = dAnfang
            tAufgabe.ReminderSet = False
            tAufgabe.Categories = "Projekt_Hessen_PKI"
            tAufgabe.PercentComplete = iErledigt
            tAufgabe.Move Projekt_Aufgaben
              
  
            rec.AddNew
            rec!tp_Title = KDB_Space(mspAufgabe.OutlineLevel - 1) & sInformation
            rec!tp_Modified = Now()
            If (Form1.chk_Neu) And (iErledigt < 100) Then
                    rec!tp_Created = Now()
                Else
                    rec!tp_Created = Now() - 2
            End If
            rec!tp_Author = 2
            rec!tp_Version = 1
            rec!tp_Beginn = dAnfang
            rec!tp_Ende = dEnde
            rec!tp_Erledigt = iErledigt / 100
            rec.Update
            Form1.Refresh
        End If
    Next
    Form1.labInfo = "Fertig"
    Form1.CmdEnde.Enabled = True
    Form1.cmdLOS.Enabled = True
    conn.Close


 Listing 3 Programm zum Datentransfer von MS Project nach Exchange und SharePoint Team Service


Set appOut = GetObject("", "Outlook.Application")
Set Outlook_NameSpace = appOut.GetNamespace("MAPI")
Set Outlook_Ordner = Outlook_NameSpace.Folders("Öffentliche Ordner")
Set Outlook_Ordner = Outlook_Ordner.Folders("Alle Öffentlichen Ordner")
Set Outlook_Ordner = Outlook_Ordner.Folders("PKI_Hessen")
Set Projekt_Aufgaben = Outlook_Ordner.Folders("ProjektAufgaben")

conn.Open "Provider=MSDASQL.1;Data Source =SPTS;"
rec.Open "Select * From ows_Project1_u_Terminplanung", conn, _
            adOpenStatic, adLockOptimistic


’  Enferne alle Einträge mit tp_Categories = sKategorien(1)


While Not rec.EOF
        If InStr(1, rec!tp_Categories, sKategorien(1)) > 0 Then
            rec.Delete
        End If
        rec.MoveNext
    Wend
weiter:
 
For Each tAufgabe In Projekt_Aufgaben.Items
            sInformation = tAufgabe.Subject
            iErledigt = tAufgabe.PercentComplete
            dAnfang = tAufgabe.StartDate
            dEnde = tAufgabe.DueDate
            iErledigt = tAufgabe.PercentComplete
            If sInformation <> "" Then
                Set litem = Form1.ListView1.ListItems.Add(Text:=sInformation)
                litem.SubItems(1) = dAnfang
                litem.SubItems(2) = dEnde
                litem.SubItems(3) = iErledigt
                rec.AddNew
                rec!tp_title = sInformation
                rec!tp_Modified = Now()
                If (Form1.chk_Neu) And (iErledigt < 100) Then
                    rec!tp_Created = Now()
                  Else
                    rec!tp_Created = Now() – 2
                End If
                rec!tp_Version = 1
                rec!tp_Beginn = dAnfang
                rec!tp_Ende = dEnde
                rec!tp_Erledigt = iErledigt / 100
                rec!tp_Categories = sKategorien(1)
Next
 rec.Close
conn.Close



 

Listing 4 Kopieren von Aufgaben aus einem Öffentlichen Ordner nach SharePoint Team Service

 


 

[1] PKI = Public Key Infrastructur = Infrastruktur zu Nutzung elektronischer Signaturen

§  Firmenbezeichnungen oder Eigennamen werden hier in diesem Layout dargestellt

[2] Ein Data Source Name mit der Bezeichnung SPTS muss über ODBC-Datenquellen-Administrator eingerichtet sein


B.U.S. Beratung, Unterstützung und Software für Privatpersonen, kleine und mittelständische Betriebe