Arxius de la categoria: Desenvolupament de SharePoint

Bambú calendari interactuant amb SharePoint provoca "An acudit"

Avui, He estat treballant en un entorn que utilitza un element web de bambú calendari per alguns col·laboració millorada. Aquesta granja un petit/mitjà estàndard amb dos equilibren WFEs, un "servidor d'aplicacions" per a la indexació i InfoPath i un agrupat SQL nou final.

El client instal lat algun programari de recuperació de desastre cap a una de les WFEs i que va resultar en un WFE trencat per un lloc específic en la col·lecció de llocs. Sempre que l'equilibri de càrrega assenyalat a l'afectat WFE i aquest lloc, usuaris veure una pantalla blanca en blanc en gran mesura amb la frase "un error inesperat acudit". Cap altre informació mostrava, només aquesta frase.

Em de mirar-ho demanaven. Que fàcilment es reprodueix el problema i després va afegir un ?contingut = 1 a la final de la URL. Això és com he après que estaven utilitzant l'element web bambú. Vaig tornar a la pàgina i ara, de sobte, em va mostrar un missatge d'error de ordenada bonic:

image

No sé el que estava succeint o què feia per aconseguir el missatge d'error controlada per mostrar diferent que afegeix la ?contingut = 1 bit de la cadena de consulta.

Això és probablement un cas molt rar edge però si aconsegueix aquest missatge, "Un error inesperat ocorria" seguir endavant i afegir ?contingut = 1 a la corda de pregunta i veure on que condueix.

</final>

Subscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Etiquetas de Technorati: ,

Utilitzant Reflector en Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal ha posat un article sobre alertes i vistes ("Punts de vista es pot utilitzar quan es crea una alerta ?"), que és interessant mèrits propis. No obstant això, Estava més interessat en veure com metòdicament camina a través del procés de l'ús .NET Reflector de Redgate. Pas a pas, Ell mostra com utilitzar aquesta eina pista avall com SharePoint determina si una vista sobre una llista hauria de ser "subscribable" per falta d'una paraula millor (he explains this much better than I do 🙂 ).

En aquest punt en l'època del SharePoint, gairebé hauria de ser sorda i cega per no té sentit o llegit sobre l'ús que l'eina. S'ha avançat coses i el meu propi sentit és que és en molts sentits una eina d'últim recurs. No obstant això, Si pensa que ho necessiten, però realment no sé com, Reportatge de Michael sembla una gran classe sobre aquest tema.

</final>

Subscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Ordenar els elements de calendari a la visualització de calendari

Estic utilitzant un calendari per a rastrejar rodones en un dia determinat. Tinc dues sessions: matí i tarda. Vull crear una visualització que Mostra els matins només ordenats alfabèticament mitjançant una sessió ID. Això és una mica difícil d'aconseguir (llevat que em vaig perdre alguna cosa real obvi).

Pot crear fàcilment un visualització filtrada mostrant només esdeveniments de de aquell dia. El calendari es mostrarà totes aquelles manifestacions i si tots ells tenir lloc a la mateixa hora, llista-los de costat a la ranura d'hora. Això és genial. La part delicada és que, per defecte, vol a la llista en format d'identificador. Així, si afegeixo "sessió 02" i llavors "sessió 01" al calendari, demostra en aquest ordre (i. e, Sessió 02 i llavors sessió 01). A la llista en ordre de sessió ID, He pensat per tractar aquestes coses:

  1. Configurar la vista mitjançant la interfície d'usuari de web. Gens de sort. No hi ha cap opció d'ordenar elements d'aquesta manera.

    Ja que no va funcionar, Estic ara esperant allà és una consulta CAML en algun lloc en allà que em invalidar la classe permetrà. Em assegurar que el tipus de canvi deixa CQWP, Potser calendari serà així?

  2. Editar l'element web, buscar una exportació"" funció i … BZZZT! Jo no pot exportar l'XML. No hi ha cap opció d'exportació.

    Encara estic sostenint l'esperança que puc trobar i modificar alguns consulta CAML. Ja que no pot exportar l'element web, que deixa el SharePoint Designer.

  3. Vaig afegir l'element web calendari a un lloc de sorrera i obrir aquest lloc mitjançant el SharePoint Designer. Miro l'etiquetatge de l'element web i trobar què estic buscant. Això ha codificat bogeria, però és allà: "<ListViewXml …. >bogeria codificada</ListViewXml>". Específicament, hi ha aquesta joia:

<Consulta>
<On>
<DateRangesOverlap>
<FieldRef nom = "EventDate" />
<FieldRef nom = "EndDate" />
<FieldRef nom = "RecurrenceID" />
<Tipus de valor = "DateTime">
<Mes />
</Valor>
</DateRangesOverlap>
</On>
<OrderBy><FieldRef nom = "Session_x0020_ID" /></OrderBy>
</Consulta>

(Jo he a descodificada la &lt;del i &del gt i dividir-los a múltiples línies pel bé de claredat).

Afegir la <OrderBy> mica i ara es classifica segons sessió ID, no la ID d'element de llista interna.

Punta GEGANTÍ o’ el barret per Becky Isserman pel seu comentari al bloc de Isha Sagi: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. No han posat la <OrderBy> en el lloc correcte sense el seu comentari.

Espero que escriure això cap amunt de més clarament amb captures de pantalla poc, però en cas que mai faig, com a mínim em feia tant.

</final>

Etiquetas de Technorati: , , ,

Trets de SharePoint & Gestió de solucions — No us oblideu l'U de porqueria (o la d per a aquella matèria)

Col·lectivament gastem una gran quantitat de temps pensant en solucions del SharePoint — com crear-los, quina eina utilitzar, Què passa quan fracassen a desplegar, feines del temporitzador, àmbits, etc. Vam passar tant temps pensant en els bits inicial que és fàcil oblidar que cal retirar-los, així. Retracció solucions és probablement més difícil, des del disseny conceptual, que utilitzin. Desplegament bàsicament és un assumpte de llibre de cuina. Típicament, instal·lar un tret, potser té un receptor tret carregar algunes dades a una llista, Aquest tipus de coses. No obstant això, retràctil és potencialment més complex.

Una solució determinada pot crear artefactes com aquests:

  • Tipus de contingut
  • Llista de definició
  • Definició del lloc
  • Dades en una llista
  • Fins i tot receptors
  • Formes d'InfoPath

La llista segueix.

Si bé és evidentment important dissenyar una solució que instantiates aquells artefactes correctament, és tan important considerar l'actualització i suprimir casos. Si la seva solució de crea una llista nova i emplena la llista amb les dades, Què passa quan la solució és retràctil? En alguns casos, la llista hauria de ser suprimit. En altres casos, Això hauria de ser esquerra intacte per motius històrics. Seves necessitats de negoci us guiarà a la decisió correcta.

Per ajudar amb això, crear una matriu que llista cada artefacte que desplega la seva solució al SharePoint. Llista de tres columnes per artefacte, un per a crear, actualitzar i suprimeix. Per a cada cas, determinar el resultat correcte per a aquesta operació.

Aquest tipus d'anàlisi es fa evidentment millor abans que la solució és desplegat mai a una granja SharePoint. No obstant això, com fumar, és mai massa tard per començar a fer les coses correctament. Aquesta matriu de crear i desenvolupar un pla per abordar els escenaris d'actualització/supressió desapareguts. Pot ser un problema difícil de resoldre, però almenys li ha posat un quadre al voltant del problema.

</final>

Subscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Etiquetas de Technorati:

Solució ràpida: Web Services que interactuen amb SharePoint, InvalidOperationException

Un milió d'anys, Em va ajudar a desenvolupar un servei web que s'ha invocat mitjançant una acció personalitzada per a un flux de treball de SharePoint Designer. Aquesta setmana, el client volia moure'l a la producció (Finalment!) així ho vam fer.

L'acció de costum treballat bé, però el servei web que s'invoca feia no, que ens dóna aquest error:

System.InvalidOperationException: Aquesta operació es pot realitzar només en un ordinador que s'uneix a una granja de servidor per a usuaris que tenen permisos en SQL Server llegir de la base de dades de configuració. Per connectar-vos a aquest servidor a la granja de servidor, utilitzar els productes de SharePoint i tecnologies de Mag de configuració, situat en el menú de començament a Eines administratives.
a Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Resulta que I oblidava afegir el servei al conjunt d'aplicacions del SharePoint de l'IIS. Una vegada que ho vaig fer, funcionava bé.

Aquest anunci de fòrum MSDN em va donar la idea que necessitava: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</final>

Subscriure's al meu blog.

Follow me on twitter: http://twitter.com/pagalvin

Etiquetas de Technorati:

Ràpid i fàcil: Obtenir SPFolder de SPItemList

Jo segueixo corrent en aquest problema i el Google no sembla entendre el que vull fer, Així que vaig pensar que anava a escriure això.

He estat fent un munt de depuració en l'última setmana o dues auricular d'esdeveniment. Es defineix la ER contra una biblioteca de documents. Els elements individuals de la biblioteca de documents estan estretament relacionats amb les seves carpetes de pare. Així, Sóc sempre geting la carpeta del tema per diverses manipulacions. Durant la depuració, Necessitava actualitzar les metadades d'una carpeta per a un element específic amb identificador sé.

Heus aquí una petita aplicació de consola (dissenyat córrer en servidor del conjunt) que rep dos arguments: l'ID d'un element i un valor d'assignar a un camp, "Estat d'aprovació". Difícil codifica un munt de coses i ha cap comprovació d'errors.

El codi sembla un lloc dur codificat, aconsegueix una biblioteca de documents dur codificat i llavors es troba l'element indicat. A continuació es troba la carpeta de pare d'aquest element i assigna el valor de l'estat.

La lliçó clau aquí per a mi és que SPItem no hi ha accés a la carpeta. Necessitareu usar SPListItem.File.

Si algú es preocupa oferir una crítica o suggerir una millor manera d'aconseguir la carpeta d'un element, Si us plau deixar un comentari.

<codi>
utilitzant Sistema;
utilitzant System.Collections.Generic;
utilitzant System.text;
utilitzant Microsoft.SharePoint;
utilitzant System.Collections;

espai de noms Conchango
{
    /// <resum>
 /// </resum>
 classe ManualFolderUpdate
    {
        estàtica buit Principal(corda[] args)
        {
            corda MSH = "ManualFolderUpdate (v 1.0): "; // MSH = "capçalera de missatge"

 Consola.WriteLine(MSH + "Posada en marxa.  Jo darrera modificació 08/04/08.");

            corda URL = http://localhost/xyzzy;

            utilitzant (SPSite oSPSite = nou SPSite(URL))
            {

                utilitzant (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documents"];

                    Consola.WriteLine(MSH + "Tinc la biblioteca de documents.");

                    Consola.WriteLine(MSH + "Doc lib element Comte: [" + docLib.ItemCount + "].");

                    Int FolderID = 0;
                    corda NewStatus = "xyzzy";

                    FolderID = sistema.Convertir.ToInt32(args[0].ToString());
                    Consola.WriteLine("Buscar carpeta d'element: [" + FolderID + "].");

                    SPListItem li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Consola.WriteLine(MSH + "Tinc la carpeta principal.");

                    NewStatus = args[1].ToString();
                    Consola.WriteLine("Configuració de l'estat [" + NewStatus + "].");

                    Consola.WriteLine("Premeu retorn per cometre l'actualització o CTRL-C per avortar.");

                    Consola.ReadLine();

                    thisItemFolder.Item["Estat d'aprovació"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Consola.WriteLine(MSH + "Acabava d'actualitzar la carpeta.  Sortint.");

                } // utilitzant SPWeb

            } // utilitzant SPSite

 Consola.WriteLine(MSH + "Acabat.");

        } // Principal

    } // classe foldersync
} // espai de noms
</codi>

</final>

Subscriure's al meu blog.

Etiquetas de Technorati:

Amagant accions personalitzades en SharePoint

Fa uns quants mesos, mentre treballava en un projecte per a un client, He creat un tret. Entre altres coses, Aquesta característica definida una acció personalitzada (apareixen sota configuració del lloc). Va ser l'únic propòsit per a aquesta acció personalitzada per demostrar-me que l'activació tret estava treballant com esperat. Bàsicament, L'utilitzava com una forma de cru de depuració.

Molt a la meva vergonya, Aquest artefacte depuració Apocrif de dev UAT i producció abans que algú va arribar a preguntar, "què és aquest enllaç xyzzy?"

Per ara, Estem en la producció i realment no vol ininstal·lar el tret, fixar elements.xml i després reinstal·leu.

Todd Càtedra va assenyalar una manera fàcil de manejar. En les seves paraules:

«CustomActions no és copiada en la base de dades, són llegir directament des de l'arxiu Elements.xml i copiat en estat d'aplicació en temps d'execució. Així, no cal desactivar, ininstal·lar, reinstal·lar, i reactivar el tret per treure la CustomAction. Només treure de l'arxiu Elements.xml i reciclar el conjunt d'aplicacions(s) efectuat. La propera vegada el tret és en l'àmbit, no veieu la CustomAction ja."

Seguia les seves instruccions i, clar, treballen.

En el meu cas, Aquesta és una instal·lació de nivell de Departament amb només un sol WFE. Si et trobes amb aquest problema en el futur i amb de múltiples WFE, Crec que hauré de fer el canvi en cada.

</final>

Subscriure's al meu blog.

Etiquetas de Technorati: ,

Solució ràpida: Accedir al lloc del SharePoint llança [HttpException (0x 80004005): Sol·licitud cronometrada fora.]

Un dels meus companys de desenvolupador estava treballant en un projecte d'aquesta setmana i es va trobar amb un problema de temps d'espera mentre treballava en la construcció d'algun lloc web boig. Seva part web estava bé, però "sobtadament" un lloc inconnex va molt lent i freqüentment cronometrada fora amb aquest error:

[HttpException (0x 80004005): Sol·licitud cronometrada fora.]

He connectat i va veure que uns quants altres llocs eren molt bé. Sospitava que hi havia alguns elements web ocult a la pàgina i l'ús la confiança ?contingut = 1 tècnica de depuració, De fet vaig trobar 11 elements web a la pàgina, només dues de les quals eren visibles. Fins i tot millor (des de la Perspectiva let's-hope-I-find-something-ugly-here-that-I-can-fix), tres d'aquests elements web tancats tenia un nom de "Error".

Suprimia els elements web (que això mateix va prendre un temps sorprenentment llarg) i que resolia el problema. For today 🙂

</final>

Subscriure's al meu blog.

Etiquetas de Technorati:

Invocant SSRS Web serveis de WSS / MOLSA en FBA entorn

Que necessitàvem invocar el CreateSubscription"" mètode a un servei web SSRS que està allotjat en un FBA aconseguit entorn de molsa d'un element web personalitzades. Seguim rebent variacions de:

  • 401: No autoritzats
  • Objecte mogut

eL "objecte mogut" missatge era més interessant perquè estava dient que l'objecte"" (el nostre servei SSRS) creixia"" a login.aspx. Clarament això significava que tenia algun tipus de problema d'autenticació.

Finalment em vaig adonar que jo tenia marcat una entrada de blog per Robert Garret que descrivia com invocar un servei web WSS/molsa de propòsit general viure dins un entorn FBA. Tingueu en compte que jo no puc enllaçar directament a l'article (com de 06/09/08) perquè vol autenticar. Facilito l'enllaç porta a un "tots els missatges" vista i vostè pot localitzar l'article específic per buscar "Accessing MOSS Web Services utilitzant l'autenticació basat en formularis".

Aquí és el codi que treballava per a nosaltres:

ReportingService2006 rs = nul·la; 
// Autenticar L'autenticació auth = nou L'autenticació(); 
autorURL = "http://URL/_vti_bin/Authentication.asmx";
autorCookieContainer =
nou CookieContainer();
LoginResult resultat = nConnecti's(«userid», "contrasenya");
Si (resultat.Codi d'error = = LoginErrorCode.NoError) 
{
// Cap error, Així aconsegueixi les galetes.
Galetes CookieCollection = nCookieContainer.GetCookies(nou URI(autorURL));
Galeta authCookie = galetes[resultat.CookieName];
RS =
nou ReportingService2006();
RS.URL =
"http://Server/_vti_bin/ReportServer/ReportService2006.asmx";
RS.CookieContainer =
nou CookieContainer();
RS.CookieContainer.Add(authCookie);
}
Provi
{
  RS.CreateSubscription(informe, extSettings, desc, eventType, matchData, parameters1);
}
trampa (Excepció ex)
{
  Console.WriteLine(ex.Message.ToString());
}

Jo interpreto les coses funcionin com aquest:

  • Part nostra web necessita marcar el servei d'autenticació i dir, "Hey, Tony, Jo!".
  • Servei d'autenticació respon dient, "Hey, Et conec. Com són els nens? Aquí és un testimoni."
  • Vam trucar al servei d'SSRS i dir, "Tony m'enviava, Aquí és el testimoni."

</final>

Subscriure's al meu blog.

Ràpid i senzill: La provisió d'un lloc Web utilitzant el Model d'objectes de SharePoint en c#

He intentat buscar un petit codi fragment que mostra com es crea un nou SPWeb en una col·lecció de llocs. No trobo com ràpidament o fàcilment com jo esperava així pensava que vols bufetada junts una petita entrada sobre el tema.

Aquest codi crea un nou lloc Wiki:

 SPSite siteCollection;

    siteCollection = nou SPSite("http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy títol",
        "xyzzy Descripció", 1033, SPWebTemplate.WebTemplateWIKI, fals, fals);

Les meves cerques inicials ha fallat perquè jo estava buscant frases com "provisió d'un lloc web utilitzant el model d'objectes de sharepoint" i similars.

Si vostè Cerca per a "Webs.Add()", hi trobareu una sèrie d'entrades de blog molt útils, Articles MSDN i documentació SDK que entraré en profunditat sobre aquest tema. Definitivament recomano aquest lloc.

</final>

Subscriure's al meu blog.

Etiquetas de Technorati: