Project 2003
Sviluppare
Soluzioni
EPM con
Project Server
(4/4)
Massimiliano Bosco – Aliware – Torino – [email protected]
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
– Regole generali per i connettori
– 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
Estendere il PDS
• E’ possibile personalizzare l’interfaccia del
PDS mediante i PDS extender
• Poiché si rispetta l’interfaccia standard di
PDS
– non c’è differenza tra le chiamate a PDS
standard e quelle personalizzate e lo scambio
di dati avviene mediante flussi XML
– Il meccanismo garantisce la sicurezza e
l’integrità dei dati perché evita l’accesso
diretto alle tabelle
Estendere il PDS (2)
Estendere il PDS (3)
• Quando PDS riceve una richiesta
– Controlla l’appartenenza all’API standard e in
caso affermativo la processa
– Altrimenti controlla se esistono estensioni
registrate e inoltra la richiesta alla prima
– Se la prima non è in grado di rispondere gira
la richiesta alle successive (ne sono
ammesse fino a 100)
– Se nessuna estensione può soddisfare la
richiesta, PDS restituisce un codice di errore
Estendere il PDS (4)
• Implementazione del PDS extender
minimo
– Componente COM che implementa una
classe Cmain con un solo metodo
Public Function XMLRequest(ByVal sXML As
String, ByVal sUser As String, ByVal
sConnect As String, ByVal lDBType As
Long, ByRef nHandled As Integer) As
String
Estendere il PDS (5)
• Parametri passati a XMLRequest
– sXML: stringa contenente la richiesta XML
<Request>
<NameOfExtenderMethod>
<ExtenderParameter1>Value1</ExtenderParameter1>
<ExtenderParameter2>Value2</ExtenderParameter2>
...
</NameOfExtenderMethod>
</Request>
Estendere il PDS (6)
– sUser: è il nome dell’utente di Project Server
che è stato autenticato e che effettua la
richiesta
– lDBType: vale 1 quando il DB è SQL Server
(sempre 1 nel caso di Project Server)
– sConnect: dati per la connessione
• Compito primario di XMLRequest
– Interpretare la stringa sXML e restituire come
valore di ritorno un XML con la risposta
Estendere il PDS (7)
• Esempio di risposta XML
<Reply>
<HRESULT></HRESULT>
<Status></Status>
<NameOfExtenderMethod>
-- method-specific output
</NameOfExtenderMethod>
</Reply>
Estendere il PDS (8)
• Significato dei codici di risultato
– 0: successo
– HRESULT <> 0: errore di comunicazione
– STATUS <> 0: errore logico nella chiamata
del metodo
– I codici di errore riservati a PDS sono quelli
compresi tra 1 e 10000
Estendere il PDS (9)
• Il parametro lHandled è essenziale nella
comunicazione col PDS
– Se vale 1 il PDS considera la risposta XML
valida e la restituisce al client
– Se vale 0 il PDS deduce che l’estensione non
è in grado di soddisfare la richiesta e la passa
ad altre estensioni
Estendere il PDS (10)
• Un PDS extender deve essere registrato
– Come classe COM nelle chiavi standard del
registro di sistema (HKCR…)
– Come estensione di Project Server nella
chiave seguente
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.
0\MS Project\WebClient Server\<Virtual
Directory>]
• Dove occorre inserire il valore seguente (di tipo
String) con N compreso tra 1 e 100
"PDSExtensionN"="PDSExtenderDllName.PublicInterfa
ceClass"
Estendere il PDS (12)
• La versione 2003 introduce un’interfaccia estesa
XMLRequestEx (ByVal sXML As String, ByVal sPDSInfoEx As
String, ByRef nHandled As Integer) As String
• Dove
– sXML e nHandled hanno lo stesso significato
di prima
– sPDSInfoEx contiene una struttura dati XML
con almeno le seguenti informazioni:
•
•
•
•
Current user and connection info
BasePath (for security object usage)
SOAPRequestCookie
HTTPRequestCreate
Estensioni in .NET
• Vantaggi
– Approfittare delle classi .NET Framework
• accesso ai dati
• elaborazione dell’XML
– Approccio completamente orientato agli oggetti
• Miglior riuso di codice
• Incapsulamento dei dettagli
– Accesso semplificato a codice gestito
– Approfittare di Visual Studio .NET
• Svantaggi
– Investimento iniziale più elevato per lo sviluppatore
• Maggiori benefici nel lungo periodo
• Passaggio da VBA a VB.NET più semplice rispetto a C#
Esempio
using System;
using System.Runtime.InteropServices;
// Other using directives go here; see the sample code
namespace Microsoft.ProjectServer.Extension
{
/* attribute that enables
* interoperability between COM and .NET objects */
[Guid("EAA49654-65E3-4BC5-BCC7-E465264323D5"),
ComVisible(true),
ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
// The General class derives from the Extender class.
public class General : Extender
{
// … metodi
}
}
Metodi della classe Extender
[ComVisible(true)]
public string XMLRequestEx(string sXML, string sPDSInfoEx,
ref short nHandled)
{
if (IsRequestError(sXML, sPDSInfoEx, ref nHandled))
return ReplyInvalidRequestError();
switch (Command)
{
case "GeneralPing":
return Reply("GENERAL PING WORKED!");
// Other cases go here
default:
return ReplyUnknownRequestError(ref nHandled);
}
}
Riferimenti
• download.microsoft.com
– MS Project Server 2003 Software Development Kit (SDK)
• Writing Managed PDS Extensions
– MS Project 2003 Resource Kit
• Componenti
Per approfondire l’interoperabilità tra componenti COM e .NET
http://msdn.microsoft.com/library/default.asp?url=/library/enus/vbcn7/html/vaconIntroductionToCOMInteroperability.asp
MOC 2349: Programmazione col framework .NET in C#
MOC 2415: Programmazione col framework .NET in VB.NET
MOC 2124: Programmazione in C#
MOC 2373: Programmazione in Visual Basic.NET
Scarica

Project 2003 Sviluppare Soluzioni EPM con Project