<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>MOSS 2007</title>
        <link>http://blogs.ugidotnet.org/dsantarelli/category/MOSS 2007.aspx</link>
        <description>MOSS 2007</description>
        <language>it-IT</language>
        <copyright>Dario Santarelli</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>BDC via ODBC: Un solo parametro '?' per le query SQL ?!?!</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2007/04/25/76520.aspx</link>
            <description>Come sicuramente molti di voi sapranno, il Business Data Catalog costituisce una delle novit&amp;#224; pi&amp;#249; interessanti di MOSS 2007. Questo componente permette&amp;nbsp;infatti&amp;nbsp;di risolvere in maniera abbastanza elegante l'accesso a sorgenti dati esterne (di tipo Database o Web Service)&amp;nbsp;tramite la definizione di&amp;nbsp;un Application Metadata Model, un&amp;nbsp;documento XML che funge da wrapper. Al suo interno, infatti, vengono definiti&amp;nbsp;oltre al meccanismo di autenticazione verso la sorgenti dati stessa,&amp;nbsp;anche&amp;nbsp;gli oggetti di business (definibili come Entit&amp;#224;)&amp;nbsp;con i relativi metodi, azioni ed associazioni che MOSS 2007 pu&amp;#242; utilizzare per l'interazione con la&amp;nbsp;sorgente dati. Molti sono gli scenari applicativi ottenibili tramite questo strumento: si va dall' uso delle&amp;nbsp;Web Part bult-in della famiglia Business Data fino all'integrazione con il servizio Enterprise Search che permette di sfruttare il Metadata Application Model registrato nel BDC per indicizzare i contenuti della sorgente dati esterna... sicuramente potente come feature!!!Sfiga ha voluto che il mio primo lavoro che coinvolgesse il BDC, prevedesse l'integrazione di una sorgente dati Microsoft Access 97 (!!!!). Bene, considerando che Microsoft fornisce ufficialmente due esempi e mezzo per la creazione di un Application Metadata Model (Sql Server 2005, Web Service...e Oracle)&amp;nbsp;e che&amp;nbsp;in rete non&amp;nbsp;sembri un argomento molto gettonato&amp;nbsp;(e quando trovi qualcuno che ne parla grazie alla legge di&amp;nbsp;Murphy non fa al caso tuo), la prima cosa&amp;nbsp;ho provato a fare&amp;nbsp;preliminarmente &amp;#232; stata ricercare un tool in grado di automatizzare il pi&amp;#249; possibile il processo di creazione dell' Application Metadata Model... OK&amp;nbsp;... search search search... trovato! BDC Metaman! Vediamo: ... bla bla bla bla .... sorgenti dati supportate per ora: Sql Server 2000/2005. Sigh! Bene,&amp;nbsp;rimbocchiamoci le maniche e creiamoci&amp;nbsp;a manina&amp;nbsp;l'Application Metadata Model!!!Le cose&amp;nbsp;sono andate&amp;nbsp;liscie, anche perch&amp;#233; l' Administration Object Model di MOSS 2007 permette di testare la connessione alla sorgente dati e l'effettivo funzionamento dei metodi definiti per l'accesso in lettura (maggiori info). Tuttavia, due sono gli ostacoli che ho incontrato (in realt&amp;#224; uno&amp;nbsp;conseguenza dell'altro):
1) Non sono riuscito a far funzionare la connessione al DB Access utilizzando&amp;nbsp;'Oledb' come DatabaseAccessProvider&amp;nbsp;(frustrante questa cosa... se qualcuno di voi ci riesce NON lo voglio sapere.. ;)). Quindi, mi sono dovuto creare un DSN di sistema ed utilizzare Odbc.
...
&amp;lt;LobSystemInstance Name="xxxInstance"&amp;gt;&amp;lt;Properties&amp;gt;&amp;nbsp;&amp;lt;Property Name="AuthenticationMode"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAuthenticationMode"&amp;gt;PassThrough&amp;nbsp;&amp;lt;/Property&amp;gt; &amp;nbsp;&amp;lt;Property Name="DatabaseAccessProvider"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider"&amp;gt;Odbc&amp;nbsp;&amp;lt;/Property&amp;gt; &amp;nbsp;&amp;lt;Property Name="RdbConnection Data Source" Type="System.String"&amp;gt;'Driver={Microsoft Access Driver&amp;nbsp;&amp;nbsp;&amp;nbsp;(*.mdb)};DSN=xxxDB;Trusted_Connection=True;'&amp;nbsp;&amp;lt;/Property&amp;gt;&amp;nbsp;&amp;lt;Property Name="RdbConnection Integrated Security" Type="System.String"&amp;gt;SSPI&amp;lt;/Property&amp;gt;&amp;nbsp;&amp;lt;Property Name="RdbConnection Pooling" Type="System.String"&amp;gt;false&amp;lt;/Property&amp;gt;&amp;lt;/Properties&amp;gt;&amp;lt;/LobSystemInstance&amp;gt;
...2) Adesso arriva il bello!!!&amp;nbsp;In uno sharepointblog leggo:&amp;nbsp;"When the BDC connects to the ODBC driver, ... very strange thing: It is not possible to use more than one parameter in the SQL query! ... " Ovvero, se utilizziamo ODBC come provider per l'accesso ai dati, possiamo specificare al massimo UN SOLO PARAMETRO di input alla nostra query SQL.&amp;nbsp;Quindi, come mostrato nel seguente listato, la clausola WHERE dello statement SQL per selezionare i dati&amp;nbsp;dal mio&amp;nbsp;DB Access pu&amp;#242; prevedere al pi&amp;#249; un solo valore di input per filtrare i dati.... SONO SVENUTO!!!! Fortunatamente mi &amp;#232; andata bene: avevo a disposizione un unico campo chiave primaria per le tabelle che mi interessavano e quindi non ho avuto problemi. Ad ogni modo,&amp;nbsp;non voglio immaginare il caso in cui&amp;nbsp;si necessiti di due paramteri per identificare univocamente un record!!!
...
&amp;lt;Method Name="GetSchedaxxx"&amp;gt;&amp;nbsp;&amp;lt;Properties&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Property Name="RdbCommandText" Type="System.String"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT ... FROM ... WHERE Schede.ID_Scheda = ?&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Property&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Property Name="RdbCommandType" Type="System.Data.CommandType"&amp;gt;Text&amp;lt;/Property&amp;gt;&amp;nbsp;&amp;lt;/Properties&amp;gt; &amp;nbsp;&amp;lt;Parameters&amp;gt;&amp;nbsp;&amp;nbsp; &amp;lt;Parameter Direction="In" Name="@Scheda_ID"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TypeDescriptor TypeName="System.Int32" IdentifierName="ID_Scheda" Name="SchedaID" /&amp;gt;&amp;nbsp;&amp;nbsp; &amp;lt;/Parameter&amp;gt;&amp;nbsp;&amp;nbsp; &amp;lt;Parameter Direction="Return" Name="Schedexxx"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&amp;nbsp;&amp;nbsp; &amp;lt;/Parameter&amp;gt;&amp;nbsp; &amp;lt;/Parameters&amp;gt;&amp;nbsp; &amp;lt;MethodInstances&amp;gt; &amp;nbsp;&amp;nbsp; &amp;lt;MethodInstance Name="SchedaxxxSpecificFinderInstance"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type="SpecificFinder" ReturnParameterName="Schedexxx" /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;lt;/MethodInstances&amp;gt;&amp;lt;/Method&amp;gt;
...&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/76520.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2007/04/25/76520.aspx</guid>
            <pubDate>Wed, 25 Apr 2007 14:41:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2007/04/25/76520.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/76520.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/76520.aspx</trackback:ping>
        </item>
        <item>
            <title>Creare un Search Scope in uno Shared Service Provider</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2007/04/24/76376.aspx</link>
            <description>Nel seguente esempio C# &amp;#232; mostrato una soluzione che ho concepito per creare da codice un Search Scope all'interno di uno Shared Service Provider di MOSS 2007 (Enterprise Edition) utilizzando l'Administration Object Model. Una volta creato tale Search Scope, &amp;#232; possibile chiaramente includervi delle Content Sources gi&amp;#224; presenti tramite delle regole di inclusione, specificabili tramite il metodo CreatePropertyQueryRule. using Microsoft.Office.Server.Search.Administration;using Microsoft.SharePoint;
...SearchContext context;using (SPSite site = new SPSite("http://")) { context = SearchContext.GetContext(site); }Schema sspSchema = new Schema(context); ManagedPropertyCollection properties = sspSchema.AllManagedProperties;Scopes scopes = new Scopes(context);ScopeCollection sspScopes = scopes.AllScopes;Scope newScope = sspScopes.Create("Nome", "Descrizione",                                   null, // System.Uri object rappresentante l'URL del sito di appartenenza                                  true, // True per visualizzare lo Scope nello SSP Administrator UI                                  null, // Stringa che specifica la pagina alternativa dei risultati                                  ScopeCompilationType.AlwaysCompile); // Inclusione di Content Sources nel Search Scope (Creazione delle regole di inclusione)foreach (string ContentSourceName in YourContentSourcesNames){  newScope.Rules.CreatePropertyQueryRule(ScopeRuleFilterBehavior.Include,                                          properties["ContentSource"], // Ebbene s&amp;#236;... la Managed Property "ContentSource"                                         ContentSourceName);}// Update Scopesscopes.StartCompilation();
...&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/76376.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2007/04/24/76376.aspx</guid>
            <pubDate>Tue, 24 Apr 2007 00:06:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2007/04/24/76376.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/76376.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/76376.aspx</trackback:ping>
        </item>
    </channel>
</rss>