Project 2003 Sviluppare Soluzioni EPM con Project Server (1/4)

Project 2003
Sviluppare
Soluzioni
EPM con
Project Server
(1/4)
Massimiliano Bosco – Aliware – Torino – [email protected]
Finalità della sessione
•
•
•
•
Programmazione in Project 2003
Project Server 2003
Project Data Service (PDS)
Integrazione applicazioni e connettori
– Esempi sui meccanismi di scambio dati con SAP,
Siebel, applicativi gestionali custom di terze parti,
etc.
• Analisi dati della raccolta di progetti (portfolio)
• Ottimizzazione del processo di sviluppo con le
nuove tecnologie (Web Service, XML, Visual
Studio .NET)
Destinatari
• Programmatori Office con esigenze di
– condivisione dei dati di progetto in team
– implementazione e/o migrazione a soluzioni
client-server ed EPM
– integrazione e sincronizzazione dati tra
applicazioni eterogenee
• Programmatori “classici” (VB, VBA, .NET)
che sviluppano in client-server e devono
integrare le loro applicazioni in Office
Prerequisiti
• Conoscenze di base della piattaforma Microsoft
Project 2002 professional e server
• Conoscenza di base dei linguaggi di
programmazione MS Visual Basic e Visual Basic
.NET
• Concetti di base in ambito database e SQL
• Risulteranno utili l’esperienza nello sviluppo di
applicazioni Web (ASP o ASP.NET) e la
conoscenza di BizTalk server
Agenda
• Parte 1: programmazione in ambito EPM
–
–
–
–
–
Alcune richieste tipiche
Soluzioni stand-alone, client-server, EPM
Architettura di Project Server 2003
Project Data Service (PDS)
Esempio 1.1: utilizzo del PDS
• Parte 2: architetture di connessione
– Schema generale di un connettore
– Esempio 2.1: importare le risorse con file XML
• Parte 3: uso dei cubi OLAP e loro estensioni
– Acquisizione dati da Sharepoint
– Esempio 3.1: gestione rischi e problemi
• Parte 4: estendere il PDS con codice gestito (.NET)
– Schema generale di un’estensione PDS
– Esempio 4.1: estensione PDS in C#
Strumenti
• MS Project SDK 2003
go.microsoft.com/fwlink/?linkid=21722
Strumenti lato client
• VBA: macro recorder, IDE (automazione task,
add-in, integrazione con altre applicazioni Office,
etc.)
• Project Guide: guide e wizard personalizzabili
dal programmatore con XML content definition,
link a pagine HTML, script
• OLE DB provider: accesso ai dati del progetto
sul client o in project server
• COM Add Ins: funzionalità aggiuntive e
personalizzate richiamabili da menu (impl. VB o
.NET)
Strumenti lato server
• Project Data Service (PDS): API basata su XML per
l’accesso a progetti, risorse, custom field,…
• Servizio Enterprise Data Maintenance (EDM):
sincronizzazione dati del PDS tramite messaggi
SOAP/XML o file drop
• Object Link Provider (OLP): interfaccia per collegare i
dati di progetto e la gestione documentale (normalmente
WSS) a cui ci si deve attenere nell’integrazione con
gestori di terze parti per documenti, attività, eventi, etc.
• Project Server Web Parts e URL options:
personalizzazione delle pagine di PWA (nascondendo
con le options o modificando le sezioni con le Web parts)
Alcune richieste tipiche
• Sincronizzare elenchi di risorse
– HR, Active Directory, fogli elettronici, DB, XML, etc.
• Sincronizzare attività
– Gestionali, ERP, schedulatori, etc.
• Personalizzare report
– Applicativi stand-alone, pagine ASP o ASP.NET
• Esportazione dei dati
– Testo, fogli elettronici, DB, XML
• Business intelligence
– Estensioni cubi OLAP per gestione rischi, problemi,
calcolo valore della produzione, etc.
Risposte
Client Tier
Web Front
End
Services
E-Mail
Database Tier
Microsoft Project Professional 2003
Microsoft Project Web Access
Microsoft Office Outlook 2003
Microsoft Office Web Controls 2003
Line of Business Applications
•Microsoft Office Project Server 2003
•Project Data Services (PDS)
•Windows Sharepoint Services
•Session Manager
•View Publishing
Microsoft Windows
Server 2003 Family
•Exchange Server
Windows 2000
Server Family
Microsoft SQL Server 2000
Project Server Tables
Project Web Tables
SQL 2000 Analysis Services
Possibili architetture
“Thin” Client
Client logic
Business logic
Data storage
1-Tier
(monolithic)
XML
Web
service
“Fat” Client
2-Tier
3-Tier
N-Tier
Internet
Requisiti SW
• Sistema operativo e server Web:
– Windows Server 2003 (IIS 6.0) o Windows 2000 Server (IIS
5.0)
• Windows SharePoint Services (WSS):
– Project Server 2003 funziona solo con WSS – (non con
SharePoint Team Services)
• WSS richiede Windows Server 2003
• In caso di aggiornamento occorre migrare da STS a WSS
• Database:
– SQL Server 2000 SP3 o MSDE 2000 SP3
– SQL Server 2000 Analysis Services se occorre
– DTC (partizionando il DB SQL)
• Visual Studio .NET, opp. SOAP Toolkit 2.0 o superiore
• .NET Enterprise Servers (p. es. BizTalk) se occorre
Architettura
Project Professional
WSS
Database
Project Server 2003
Core
View Tables
Session Management
Service
PWA Tables
View Processing
Service
Scheduled Process
Service
Project Data
Tables
SQL Analysis Server
OLAP Cubes
Client
Application
SQL Server 2000
Oulook 2003
Internet Information Services
Internet Explorer
Project Web Access
Windows Sharepoint
Services
Database
Requisiti SW
Scelta del DB
• SQL Server 2000
– Obbligatorio in ambienti di produzione
– Consente prestazioni e scalabilità ottimali
– Fornisce gli “Analysis Services” per generare report
avanzati e cubi OLAP
• MSDE
– Non fornito con l’installazione
– Non prevede la connessione agli “Analysis Services”
e quindi non è possibile generare cubi e/o report
avanzati
– Ha delle limitazioni sul numero di batch T-SQL
concorrenti e quindi in definitiva sul numero di utenti
contemporanei
Project Data Service (PDS)
•
•
•
PDS è l’API di Project Server
Supporto per i metodi delle versioni precedenti
Due ruoli:
–
Servizio middle tier
•
•
–
ProjectsStatus: elenco progetti e informazioni base
ResourcesStatus: elenco risorse e stato
Security gatekeeping
•
•
ProjectsAccess: accesso al progetto e check out
ResourcesAccess: accesso a risorse e check out
PDS e i Web Services
• Componenti accessibili per mezzo di Internet anziché
DCOM





Implementati con standard
Internet aperti
I consumatori spediscono e ricevono
messaggi XML
Sono definiti in termini di formati e
ordine di precedenza dei messaggi
W3C prevede che il sito offra un
documento che descrive i servizi attivi
W3C ha standardizzato un insieme di
criteri per pubblicazione e ricerca
XML, XSD, HTTP, SMTP
SOAP
Web Services
Description Language
Discovery Document
UDDI
Uso di PDS
• Preliminarmente:
– Scaricare la guida PDS Reference da MSDN
– Installare Visual Studio .NET(oppure il SOAP Toolkit
3.0)
• Da programma:
–
–
–
–
–
Effettuare il logon a PDS con UserID e password
Ottenere il security cookie
Preparare la richiesta XML
Inviare il flusso XML unito al security cookie
Ricevere la risposta XML
Uso di PDS
• Preliminarmente:
– Scaricare la guida PDS Reference da MSDN (link da
SDK o download.microsoft.com)
– Installare Visual Studio .NET (oppure il SOAP Toolkit
3.0)
• Da programma:
–
–
–
–
–
Effettuare il logon a PDS con UserID e password
Ottenere il security cookie
Preparare la richiesta XML
Inviare il flusso XML unito al security cookie
Ricevere la risposta XML
Uso di PDS (2)
• Demo:
– Esempio di accesso in VB 6 con SOAP Toolkit
3.0
– Esempio di accesso in C# da Visual Studio
.NET
Background su PDS
• Introdotto per la prima volta in Project 2002
• Usato da vari tipi di client per l’accesso ai
dati della raccolta di progetti
– Project professional
– Project Web Access
– Applicativi sviluppati da solution provider
• Accede alle tabelle e alle viste del DB di
project server con funzione di gateway
Background su PDS (2)
Background su PDS
• Garantisce la consistenza dei dati nel DB
• Gestisce una connessione al DB in nome e per
conto del client
• Autentica il client e accede ai dati rilevanti del
progetto
• Fornisce metodi per l’accesso diretto alle viste
del DB
– Usato nella personalizzazione dei report
– Non è permesso l’accesso diretto alle tabelle per
assicurare che l’utente veda i soli dati per cui dispone
dei privilegi d’accesso
Accesso diretto
Accesso diretto (2)
1.
2.
3.
4.
5.
6.
7.
Il client effettua il logon a Project Server
Se ok richiede a PDS i dati della connessione con
GetLoginInformation
Se ok effettua una connessione diretta al database e
richiede il relativo SPID
Al PDS richiede l’accesso al progetto o alla risorsa con
ProjectAccess o ResourceAccess rispettivamente
Effettua le query sul DB richiamando direttamente le
viste
Al PDS comunica la fine dell’operazione per mantenere
la sicurezza dei dati con ProjectAccessCompleted o
ResourceAccessCompleted
Quindi chiude la connessione
Accesso diretto (3)
• GetLoginInformation
– Avviene inviando la seguente richiesta SOAP
<Request>
<GetLoginInformation/>
</Request>
Accesso diretto (4)
– La risposta in XML è la seguente:
<Reply>
<HRESULT>0</HRESULT>
<STATUS>0</STATUS>
<UserName>Administrator</UserName>
<GetLoginInformation>
<DBType>0</DBType>
<DVR>{SQL Server}</DVR>
<DB>ProjectServer</DB>
<SVR>MYPROJECTS</SVR>
<ResGlobalID>1</ResGlobalID>
<ResGlobalName>resglobal</ResGlobalName>
<UserName>MSProjectUser</UserName>
<Password>password</Password>
</GetLoginInformation>
</Reply>
Accesso diretto (5)
• Con la GetLoginInformation otteniamo i
dati per una connessione ADO
• E’ di vitale importanza considerare da
subito gli aspetti di sicurezza
– UserID e password per l’accesso al DB
viaggiano in chiaro
– La connessione deve essere protetta con SSL
se la rete non è fidata (es. Internet)
Accesso diretto (6)
• Una volta aperta la connessione ADO occorre
recuperare con una query T-SQL lo SPID da
ripresentare al PDS per le richieste successive
– La query è banale:
SELECT @@SPID
– Project Server utilizza lo SPID per tracciare gli
accessi in lettura e in lettura/scrittura ai progetti e alle
risorse globali (tabelle MSP_PROJ_SECURITY e
MSP_RES_SECURITY)
Accesso diretto (7)
• L’utente che vuole accedere ai dati del
progetto per creare un report deve prima
richiamare ProjectsAccess specificando
l’ID del progetto (ottenuto p.es. da
ProjectsStatus), lo SPID e il relativo
timestamp.
– Nella tabella MSP_PROJ_SECURITY appare
una riga come la seguente:
PROJ_ID SEC_SPID SEC_SPIDDATESTAMP
SEC_READCOUNT SEC_WRITECOUNT
------- -------- ----------------------- ------------- -------------1
51
2001-10-17 10:55:00.000 1
0
Accesso diretto (8)
– La chiamata in XML è la seguente:
<Request>
<ProjectsAccess>
<Mode>0</Mode>
<SPID>58</SPID>
<SPIDTimestamp>20011017105500</SPIDTimestamp>
<Project>
<ProjectID>3</ProjectID>
</Project>
</ProjectsAccess>
</Request>
Accesso diretto (9)
• Nella risposta XML otteniamo la lista dei progetti e delle
eventuali risorse globali:
<Reply>
<HRESULT>0</HRESULT>
<STATUS>0</STATUS>
<UserName>Administrator</UserName>
<ProjectsAccess>
<Mode>0</Mode>
<ResGlobalID>1</ResGlobalID>
<ResGlobalName>resglobal</ResGlobalName>
<Project>
<ProjectID></ProjectID>
<ProjectName> </ProjectName>
<ProjectType></ProjectType>
<ReplyStatus></ReplyStatus>
</Project>
</ProjectsAccess>
</Reply>
Accesso diretto (10)
• La sicurezza e l’integrità dei dati sono assicurate
dalle regole seguenti:
– L’account utente specificato nella stringa ADO deve
avere i permessi di accesso alle viste di SQL server
– L’account MSProjectUser creato in fase di
installazione dispone dei privilegi necessari in quanto
appartiene al ruolo MSProjectRole ma non ha
accesso diretto alle tabelle
• Eventuali deroghe devono seguire le linee guida
contenute nel file PJDB.HTM contenuto nella
directory di installazione di Project Server
– Non è garantita la compatibilità dei client che
accedono alle tabelle con versioni future di PDS
Accesso diretto (11)
• Esempio di vista SQL per sola lettura:
CREATE VIEW dbo.MSP_TASKS_PROJ_READVIEW AS
SELECT * FROM MSP_TASKS
WHERE PROJ_ID IN
(SELECT PROJ_ID FROM MSP_PROJ_SECURITY
WHERE @@SPID = SEC_SPID AND
SEC_READCOUNT > 0)
WITH CHECK OPTION
Accesso diretto (12)
• Esempio di vista SQL per accesso
read/write alle risorse enterprise globali
(tipo 3)
CREATE VIEW dbo.MSP_TASKS_RES_READVIEW AS
SELECT * FROM MSP_TASKS
WHERE PROJ_ID IN
(SELECT PROJ_ID FROM MSP_PROJECTS
WHERE PROJ_TYPE = 3)
WITH CHECK OPTION
Accesso diretto (13)
• Esempio di uso delle viste per estrarre un
elenco delle risorse impegnate in un
progetto e delle relative attività:
select p.TASK_ID 'Task Number', p.TASK_NAME 'Task
Name', CONVERT(VARCHAR(4), p.TASK_DUR_VAR/(60*60))
+ 'd' 'Duration', r.RES_NAME 'Resource Name' from
MSP_TASKS_PROJ_READVIEW p inner join
MSP_ASSIGNMENTS_PROJ_READVIEW a on (p.TASK_UID =
a.TASK_UID) inner join MSP_RESOURCES_PROJ_READVIEW
r on (a.RES_UID = r.RES_UID) order by
TASK_OUTLINE_NUM
Accesso diretto (14)
• Esempio di output della query precedente:
Task Number
----------1
2
3
Task Name
------------Write outline
Write draft
Create art
Duration
-------1d
2d
1d
Resource Name
------------Writer
Writer
Artist
Accesso diretto (15)
• Al termine delle operazioni occorre richiedere a
PDS la rimozione dei record nelle tabelle
MSP_PROJ_SECURITY e
MSP_RES_SECURITY
<Request>
<ProjectsAccessCompleted>
<Mode>0</Mode>
<SPID>58</SPID>
<Project>
<ProjectID>3</ProjectID>
</Project>
</ProjectsAccessCompleted>
</Request>
Accesso a Project Server
Dim sURL As String
sURL = "http://myserver/projectserver/LgnIntAu.asp"
Dim oXMLDocument As DOMDocument30
Set oXMLDocument = New DOMDocument30
oXMLDocument.Load sURL
'Wait for the XML Document to load from Microsoft
‘Project Server
Const cTimeout As Long = 45
Dim startTime As Long, elapsed As Long
startTime = Timer
Do While oXMLDocument.readyState < 4
DoEvents
elapsed = Timer - startTime
If elapsed > cTimeout Then GoTo errTimeout
Loop
Accesso a Project Server (2)
Dim sCookie As String
Dim oNode As IXMLDOMNode
If oXMLDocument.parseError.errorCode = 0 Then
If Not oXMLDocument Is Nothing Then
Set oNode =
XMLDocument.selectSingleNode("Reply/Cookie")
If Not oNode Is Nothing Then
sCookie = oNode.Text
End If
End If
Else
sCookie = ""
End If
Accesso a Project Server (3)
errTimeout:
MsgBox prompt:="Login Timeout Occurred." &
vbCrLf & "Elapsed time = " _ & elapsed & "
seconds" & vbCrLf &
"xmlDocument.ReadyState = " & _
oXMLDocument.readyState, Title:="Login
Timeout"
MsgBox prompt:=oXMLDocument.xml
Struttura delle chiamate a PDS
<Request>
<MethodName>
<Parameter1>value</Parameter1>
<Parameter2>value</Parameter2>
...
<ParameterN>value</ParameterN>
</MethodName>
</Request>
Trattamento dei dati XML
• Per isolare il singolo dato occorre
accedere al nodo corrispondente del
documento XML col metodo
selectSingleNode del parser
• Per inviare la richiesta a PDS si può
utilizzare il metodo SOAPXmlRequest
Riferimenti
• download.microsoft.com
– MS Project Server 2003 Software Development Kit (SDK)
– MS Project 2003 Resource Kit
• Office developer center: articoli, SDK, esempi, codice
http://msdn.microsoft.com/office/understanding/project/
• Getting started: developing with Project 2003
http://msdn.microsoft.com/office/understanding/project/techarticles/
default.aspx?pull=/library/enus/odc_pj2003_ta/html/odc_pjgetstarted.asp/
Articoli KB
• Q307033 HOW TO: use an XML Web Service by using
ASP.NET from an Office VBA Macro in Word or Excel
• Q301273 HOW TO: Write a Simple Web Service by
Using Visual Basic .NET
• Q308359 HOW TO: Write a Simple Web Service by
Using Visual C# .NET
• Q892964 How to troubleshoot common errors that occur
when you use the PDSTest tool or the PDSTest.NET tool
to test the Project Server 2003 Project Data Service
• KB811318 PRB: "Access Denied" Error Message When
You Call a Web Service While Anonymous
Authentication Is Turned Off