Condividi tramite


Modelli a oggetti compatibili con InfoPath 2003

Microsoft Office InfoPath 2007 è un'applicazione COM (Component Object Model) ed espone le interfacce di programmabilità sia per l'automazione esterna che per gli script dei modelli di modulo utilizzati come interfacce COM. Per supportare la creazione di soluzioni InfoPath che utilizzano i linguaggi con codice gestito Visual C# e Visual Basic, il programma di installazione di InfoPath installa tre assembly di interoperabilità, ovvero assembly .NET con funzione di ponte tra codice gestito e non gestito che eseguono il mapping tra i membri degli oggetti COM e i membri gestiti .NET equivalenti.

I file dei tre assembly di interoperabilità installati da InfoPath sono denominati:

  • Microsoft.Office.Interop.InfoPath.dll

  • Microsoft.Office.Interop.InfoPath.SemiTrust.dll

  • Microsoft.Office.Interop.InfoPath.Xml.dll

In questo argomento viene descritto il modello a oggetti esposto tramite l'assembly di interoperabilità Microsoft.Office.Interop.InfoPath.SemiTrust, che viene utilizzato esclusivamente per scrivere ed eseguire la regola business con codice gestito dai modelli di modulo di InfoPath con estensione xsn.

Per informazioni sugli assembly Microsoft.Office.Interop.InfoPath e Microsoft.Office.Interop.InfoPath.Xml, utilizzati esclusivamente per automatizzare l'applicazione InfoPath tramite codice gestito da applicazioni esterne, vedere "Automazione di InfoPath da altre applicazioni" nella documentazione installata con Microsoft Visual Studio Tools per Microsoft Office System 2007.

Informazioni importanti sull'installazione

Per impostazione predefinita, l'opzione di installazione Tipica del programma di installazione di InfoPath installa copie degli assembly Microsoft.Office.Interop.InfoPath.SemiTrust e Microsoft.Office.Interop.InfoPath.Xml nella cartella C:\Programmi\Microsoft Office\Office12. Gli assembly Microsoft.Office.Interop.InfoPath e Microsoft.Office.Interop.InfoPath.Xml vengono inoltre installati nella cache di assembly globale, il cui contenuto può essere visualizzato dalla cartella C:\Windows\Assembly.

Se questi assembly non vengono installati, è consigliabile verificare che Microsoft Office InfoPath 2007 sia installato correttamente. Se prima di eseguire il programma di installazione è stato installato .NET Framework 1.1 Redistributable o .NET Framework 1.1 Software Development Kit (SDK), l'opzione Supporto programmabilità .NET nel programma di installazione di InfoPath è impostata su Esecuzione dal computer locale per un'installazione Tipica di InfoPath. Se questi assembly di interoperabilità non sono disponibili nel computer locale, è necessario verificare che .NET Framework 1.1 sia installato e quindi eseguire Installazione applicazioni dal Pannello di controllo e impostare l'opzione Supporto programmabilità .NET su Esecuzione dal computer locale.

Per informazioni sul download di .NET Framework 1.1 Redistributable, vedere .NET Framework 1.1 Redistributable.

Spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust

Prima del rilascio di Microsoft Office InfoPath 2003 Service Pack 1 e di Microsoft Office InfoPath 2003 Toolkit per Visual Studio® .NET, tutta la logica di programmazione per i modelli di modulo di InfoPath veniva creata utilizzando codice Microsoft JScript o Microsoft VBScript scritto nell'ambiente di sviluppo Microsoft Script Editor (MSE) integrato in InfoPath. Lo script scritto in MSE viene interpretato in fase di esecuzione e accede al modello a oggetti COM esposto dalla libreria di collegamento dinamico IPEDITOR.dll.

Per supportare la creazione di modelli di modulo che utilizzano linguaggi con codice gestito quali Visual C# e Visual Basic per la logica di programmazione, in InfoPath sono state aggiunte nuove funzionalità che consentono di ospitare Common Language Runtime (CLR) ed è stato creato l'assembly di interoperabilità Microsoft.Office.Interop.InfoPath.SemiTrust che consente al codice gestito di interagire in modo protetto con il modello a oggetti COM esposto da InfoPath. Per informazioni sul modello di protezione applicato ai modelli di modulo con codice gestito di InfoPath, vedere Informazioni sul modello di protezione per i modelli di modulo con codice gestito.

Sebbene il processo di scrittura del codice gestito per una determinata attività in un modello di modulo di InfoPath sia molto simile a quello necessario per l'esecuzione della stessa attività di programmazione mediante script, il modello a oggetti esposto durante la visualizzazione dello spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust dal Visualizzatore oggetti in Microsoft Visual Studio Tools for Applications (VSTA), in Visual Studio 2005 con Microsoft Visual Studio Tools per Microsoft Office System 2007 o in Visual Studio 2008 con Visual Studio Tools per Office risulta più complesso, poiché la tecnologia di interoperabilità con .NET Framework utilizzata per supportare il modello a oggetti compatibile con InfoPath 2003 richiede un server COM per l'esposizione di tutte le interfacce pubbliche, nonché alcuni costrutti aggiuntivi necessari per lo stesso .NET Framework.

Esporre oggetti COM nel modello a oggetti compatibile con InfoPath 2003

Quando si utilizza un server COM in modalità nativa da linguaggi di altro livello quali JScript, VBScript o Visual Basic (ad esclusione della versione .NET di Visual Basic e di Visual C#), il modello a oggetti esposto risulta più semplice rispetto alle classi e alle interfacce COM sottostanti. Da questi linguaggi, ad esempio, l'oggetto UI di InfoPath espone un gruppo di sette metodi, incluso il metodo Alert per la visualizzazione di una finestra di messaggio agli utenti.

Tuttavia, i costrutti COM sottostanti che supportano l'oggetto UI in realtà sono costituiti da tre entità: due interfacce, UI e UI2, e una coclasse COM che implementa i membri di queste due interfacce. Esistono due versioni dell'interfaccia UI, perché l'infrastruttura COM prevede che la definizione di un'interfaccia rimanga invariata per garantire la compatibilità con le versioni precedenti per programmi e componenti che richiamano un'implementazione di tale interfaccia.

In questo caso, l'interfaccia UI, che era stata definita nella prima versione di InfoPath, fornisce quattro metodi, fra cui il metodo Alert. L'interfaccia UI2 può essere considerata una seconda versione dell'interfaccia UI ed è stata definita per InfoPath Service Pack 1. L'interfaccia UI2 eredita i quattro metodi dell'interfaccia UI originale, a cui si aggiungono tre nuovi metodi, fra cui il metodo Confirm. Sebbene sia possibile scrivere una riga di codice sia come codice script che come codice gestito che richiama il metodo Confirm utilizzando XDocument.UI.Confirm, il codice sottostante in realtà richiama il metodo Confirm dell'interfaccia UI2 dall'implementazione di tale metodo nella coclasse COM.

Il modello di oggetti esposto per il codice script nasconde questi dettagli, ma l'assembly di interoperabilità richiesto per interagire con un server COM dal codice gestito espone la coclasse ed entrambe le interfacce pubblicamente. Per l'oggetto UI utilizzato nell'ambiente di script MSE, lo spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust espone le seguenti tre interfacce:

  • Interfaccia UI

  • Interfaccia UI2

  • Interfaccia della coclasse UIObject

Sebbene tutte e tre le interfacce siano esposte nel Visualizzatore oggetti di Visual Studio e contenute nella documentazione relativa alla Libreria di classi per lo spazio dei nomi, vengono utilizzati solo l'interfaccia della coclasse UIObject che implementa l'oggetto UI e i membri dell'interfaccia UI2 che rappresenta la versione corrente dell'interfaccia implementata dall'interfaccia della coclasse UIObject. Per accedere all'interfaccia della coclasse UIObject dall'oggetto XDocument padre, esattamente come nello script, viene utilizzata la proprietà della funzione di accesso UI. Tranne alcune eccezioni di rilievo, questo schema è valido per tutti gli oggetti della versione originale di InfoPath che sono stati aggiornati per il rilascio di InfoPath Service Pack 1.

Anche se lo schema è sostanzialmente identico, la situazione è leggermente più semplice per gli oggetti completamente nuovi aggiunti in InfoPath Service Pack 1, come ad esempio l'oggetto Certificate. In questo caso, gli elementi da considerare sono solo due: l'interfaccia della coclasse CertificateObject e i membri dell'interfaccia Certificate, che è l'interfaccia più recente e l'unica implementata dall'interfaccia della coclasse CertificateObject. Così come avviene quando si utilizzano oggetti COM di InfoPath dallo script, viene utilizzata la proprietà della funzione di accesso Certificate per accedere all'oggetto dal relativo oggetto padre.

Questo stesso schema si applica alle interfacce per gli insiemi, con la differenza che alla fine del nome dell'interfaccia della coclasse di un insieme viene aggiunto "Collection" anziché "Object". Ad esempio, l'interfaccia della coclasse dell'insieme COM DataAdapters si chiama DataAdaptersCollection e l'interfaccia da essa implementata è l'interfaccia DataAdapters. In modo analogo, per accedere all'insieme viene utilizzata la proprietà della funzione di accesso DataAdapters dell'oggetto padre XDocument.

Questo schema di denominazione presenta tre eccezioni. Ai nomi delle interfacce delle coclassi degli oggetti COM Application e XDocument non viene aggiunto "Object". I nomi sono uguali a quelli degli oggetti COM corrispondenti: Application e XDocument. I nomi delle interfacce implementate dalle interfacce delle coclassi Application e XDocument, inoltre, sono preceduti dal carattere di sottolineatura: _Application2 e _XDocument2. La terza eccezione è rappresentata dall'oggetto COM DataObject. L'interfaccia della coclasse di questo oggetto è denominata DataSourceObject ma, esattamente come altri oggetti COM di InfoPath, l'interfaccia che implementa è DataObject.

Esporre oggetti di Microsoft XML Core Services (MSXML) 5.0 per Microsoft Office nel modello a oggetti compatibile con InfoPath 2003

Un sottoinsieme degli oggetti e dei membri del modello di oggetti fornito da Microsoft XML Core Services (MSXML) 5.0 per Microsoft Office, che è anche un server COM, è contenuto nelle interfacce esposte dall'assembly di interoperabilità Microsoft.Office.Interop.InfoPath.SemiTrust. Il motivo è che alcuni membri del modello di oggetti COM di InfoPath utilizzano MSXML 5.0 e deve essere possibile accedere a tali membri in modo protetto. I nomi delle interfacce dello spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust che contengono gli oggetti e i membri del modello di oggetti di MSXML 5.0 sono uguali ai nomi esposti dal server COM di MSXML 5.0. Nella maggior parte dei casi, questi nomi hanno il prefisso "IXMLDOM", perché vengono utilizzati per interagire con il modello DOM XML. Ad esempio, la proprietà DOM dell'interfaccia XDocument, che viene utilizzata per restituire un riferimento al documento XML sottostante un modulo, restituisce l'interfaccia IXMLDOMDocument, che è contenuta nell'assembly di interoperabilità Microsoft.Office.Interop.InfoPath.SemiTrust. Per richiamare e utilizzare i membri dell'interfaccia IXMLDOMDocument si procede praticamente come quando si utilizza codice script nei modelli di modulo che non fanno uso del codice gestito.

Per ulteriori informazioni sull'utilizzo dei membri del modello di oggetti Microsoft XML Core Services (MSXML) 5.0 per Microsoft Office nei modelli di modulo con codice gestito, vedere Utilizzo di MSXML5 e System.Xml tramite il modello a oggetti di InfoPath 2003.

Utilizzo di IntelliSense

Per la maggior parte del codice scritto in un modello di modulo con codice gestito, verranno utilizzate le variabili thisXDocument e thisApplication inizializzate nel metodo _Startup del file di classe predefinito FormCode.cs o FormCode.vb. È possibile utilizzare le variabili thisXDocument e thisApplication per accedere ai membri delle interfacce delle coclassi XDocument e Application. Dopo aver digitato il nome di una variabile seguito da un punto, grazie al completamento automatico delle istruzioni di IntelliSense verranno visualizzati i membri dell'interfaccia della coclasse corrispondente. È possibile continuare in questo modo per accedere al membro del modello a oggetti desiderato.

Nel semplice esempio seguente viene utilizzata la variabile thisXDocument per accedere al metodo Alert al fine di visualizzare la versione dell'applicazione InfoPath tramite la proprietà Version a cui si accede dalla variabile thisApplication.

thisXDocument.UI.Alert(thisApplication.Version);
thisXDocument.UI.Alert(thisApplication.Version)

Utilizzo della documentazione di riferimento alla Libreria di classi

L'organizzazione della documentazione di riferimento alla Libreria di classi per lo spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust riflette le relazioni tra le interfacce delle coclassi e le relative interfacce ereditate implementate. Tali relazioni sono descritte nella sezione "Esporre gli oggetti COM nel codice gestito" più indietro in questo argomento.

Sebbene l'organizzazione e la denominazione della documentazione di riferimento allo spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust possano a prima vista risultare complesse, gli argomenti sono organizzati sostanzialmente come nella Guida di riferimento al modello a oggetti di InfoPath, che fa parte della Guida di riferimento per sviluppatori di InfoPath inclusa in Microsoft Office InfoPath 2003. Ad eccezione degli argomenti relativi alle interfacce Application e XDocument, tutti gli argomenti delle interfacce delle coclassi COM sono associati agli argomenti equivalenti "Oggetto" e "Insieme" della guida di riferimento allo script di InfoPath. Ad esempio, il contenuto degli argomenti "Interfaccia UIObject" e "Interfaccia WindowsCollection" della documentazione di riferimento allo spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust corrisponde al contenuto degli argomenti "Oggetto UI" e "Insieme Windows" delle informazioni sullo script della Guida di riferimento al modello a oggetti di InfoPath.

Tuttavia, il collegamento ai membri dell'interfaccia della coclasse che segue la descrizione dell'interfaccia all'inizio dell'argomento rimanda a un argomento vuoto. Per visualizzare l'elenco dei membri implementati dall'interfaccia della coclasse, è necessario aprire l'argomento dell'interfaccia più recente ereditata dalla coclasse e quindi aprire la tabella dei suoi membri. All'inizio della sezione Osservazioni, nell'argomento sull'interfaccia della coclasse, è presente un collegamento all'interfaccia ereditata.

Quando si preme F1 nell'editor di codice, il comportamento è analogo tranne per il fatto che il membro per cui si richiama la Guida sensibile al contesto verrà visualizzato direttamente, perché nella maggior parte dei casi si utilizzano i membri di un'interfaccia. Il fatto che un membro possa essere implementato da un'interfaccia con versione, tuttavia, può inizialmente creare confusione. Se ad esempio si digita thisXDocument.UI.Alert, si posiziona il cursore su Alert e si preme F1, viene visualizzato un argomento intitolato "Metodo UI2.Alert" in quanto il metodo Alert è un'implementazione di un membro dell'interfaccia UI2.

Passaggio di parametri facoltativi ai membri del modello a oggetti di InfoPath

Se un membro di un modello a oggetti compatibile con InfoPath 2003 contiene un parametro facoltativo e non si specifica un valore per tale parametro, in sostituzione è necessario passare il campo Type.Missing relativo a tale parametro. Se non si passa il campo Type.Missing quando viene omesso un valore effettivo, verrà restituito un errore durante la generazione. Questo vale per il codice scritto sia in Visual C# che in Visual Basic. Ad esempio, il metodo SelectNodes dell'interfaccia ViewObject include due parametri facoltativi: varEndNode e varViewContext. Nell'esempio seguente viene illustrato l'aspetto di una riga di codice in cui non vengono specificati valori effettivi per questi parametri facoltativi.

IXMLDOMNode group1 = 
   thisXDocument.DOM.selectSingleNode("/my:myFields/my:group1");
thisXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing);
Dim group1 As IXMLDOMNode = _
   thisXDocument.DOM.selectSingleNode("/my:myFields/my:group1")
thisXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing)

Informazioni sulla compatibilità con CLS (Common Language Specification)

Internamente, l'attributo CLSCompliant di ogni interfaccia e membro dell'assembly Microsoft.Office.Interop.InfoPath.SemiTrust è impostato su false. Dal momento che la documentazione di riferimento viene generata in parte utilizzando System.Reflection, alla fine della descrizione di ogni interfaccia e membro compare una frase che informa che l'interfaccia/il metodo/la proprietà non è compatibile con CLS. Tuttavia, la maggior parte delle interfacce e dei membri dello spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust in realtà è compatibile con CLS.

Vedere anche

Concetti

Attività comuni per lo sviluppo di modelli di modulo tramite il modello a oggetti di InfoPath 2003
Informazioni sul modello di protezione per i modelli di modulo con codice gestito

Altre risorse

Creazione di modelli di modulo con codice gestito tramite il modello a oggetti di InfoPath 2003
Informazioni sul modello a oggetti di InfoPath 2003