Categorie Archieven: SharePoint

Het mysterieuze SharePoint fouten oplossen.

Overzicht:

Foutopsporing is moeilijk bij het ontwikkelen van aangepaste functionaliteit voor Windows SharePoint Services 3.0 (WSS) of een Microsoft Office SharePoint Server (MOSS). De belangrijkste beklaagde is dat SharePoint normaal weinig diagnostische gegevens op de webbrowser oppervlakken wanneer een fout optreedt. Deze blog entry wordt beschreven hoe u extra systeem gegenereerde diagnostische om informatie te vinden die kan vaak dat extra beetje van detail dat men nodig heeft om te identificeren oorzaken. Dit kan vervolgens leiden tot het oplossen van het probleem.

Ik heb deze techniek met succes gebruikt om op te lossen anders mysterieuze fouten.

Aanpak:

SharePoint bespaart een heleboel informatie aan een diagnostische logboek in een logboekbestand in de 12 korf.

De "12-component" bevindt zich gewoonlijk in bij "C:\Program FilesCommon FilesMicrosoft SharedWeb Server Extensions12 ". (Ik ben niet zeker of het is mogelijk voor de 12 korf te leven ergens anders, Eigenlijk).

Het idee is om het huidige logboekbestand zoeken, dwingen de fout en opent u het logboekbestand snel. Deze logboekbestanden worden gekenmerkt door:

  • Overvloedige hoeveelheden van informatie. SharePoint genereert een zeer groot bedrag van diagnostische gegevens en schrijft het naar het logboekbestand zeer snel. Je moet snel met de vingers om het te vangen.
  • Veelheid. SharePoint wordt niet schrijven naar één logboekbestand maar eerder genereert meerdere logboekbestanden in volgorde.
  • Kopieer en plak mooi in MS Excel.

Mijn favoriete methode:

  1. Open een windows Verkenner naar de 12 hivelogs.
  2. De weergave te tonen door wijzigingsdatum sorteren (meest recente eerst).
  3. Markeer het meest recente logboekbestand.
  4. In een web browser-venster, dwingen de fout.
  5. Snel het huidige logboekbestand openen en de inhoud ervan kopiëren naar MS Excel.
  6. Springen naar het einde en de relevante posten analyseren.

Andere notities:

Standaard, het diagnoselogboek bevindt zich in de 12 hiveLOGS directory.

MS Best practices (Volgens Mike T. van Microsoft) staat dat de logboekbestanden moeten worden opgeslagen op een aparte harde schijf. Men doet dit via centrale admin. Uw systeembeheerder kan dit hebben gedaan, in dat geval zou u uiteraard moet het logboekbestand er in plaats van de standaard te vinden 12 korf locatie).

Deze ingang vraagstukken zoals:

  • SharePoint-werkstroom kan niet worden gestart wegens een interne fout.
  • (meer worden toegevoegd na verloop van tijd)
  • Dit bericht nuttig diagnose van werkstroomfouten geweest (bijvoorbeeld. "De werkstroom kan niet worden gestart wegens een interne fout").

MOSS: Effectieve Inleiding tot een organisatie

(Deze ingang kruis gepost tussen http://paulgalvin.spaces.live.com/blog/ en http://blogs.conchango.com)

De postings op deze site zijn mijn eigen en niet noodzakelijkerwijs Conchango van posities, strategieën of adviezen.

Overzicht:

Deze ingang wordt beschreven wat achtergrondinformatie over een grote (3,000 gebruikers) Microsoft Office SharePoint Server (MOSS) implementatie en wat we deden om het project rollend op zodanige wijze dat de klant blij is en stevig op een weg die eindigt met volledige goedkeuring van de eigenschapreeks MOSS. Zoals voor het schrijven van de post, We zijn ongeveer 50% compleet met de eerste fase van het project. Als dingen vooruitgang, Ik zal deze post bijwerken en/of schrijven nieuwe posten.

In dit specifieke geval, het bedrijf had al geïnstalleerd van SharePoint Portal Server 2003. De IT-groep het product in een soort van "laten we eens kijken als iemand cares geïnstalleerd" mode. Het was snel aangenomen door veel zakelijke gebruikers en werd erg populair in de onderneming in het algemeen. Zoals u zich kunt voorstellen, Dit was niet de beste uitrol-strategie (die de klant gemakkelijk toegeeft) en toen MOSS op het toneel aankwamen, de client herleid tot "do it recht" en huurde ons om hen te helpen.

Een van de centrale vragen geconfronteerd toen we begonnen met uitvoering van dit project was: Hoe we MOSS kennismaken met deze client? Gezien het feit dat de client had al ervaring met SharePoint, We vroegen ons af — we hebben nodig om te doen "differentiële" opleiding of doen die we vanaf de grond starten? Na het werken met key-users, wij vastgesteld dat dit te behandelen als een groene veld project meer zinvol.

Dat besluit gaf een uitgangspunt, maar nog steeds ons met de belangrijkste voorwaarde van het uitzoeken van een goede strategie voor MOSS uitrollen naar de onderneming. MOSS is een dergelijke grote dier … Het omvat inhoud beheer, documentbeheer, zoeken, veiligheid, doelgroepen, projectbeheer, "fabulous veertig" sjablonen, werkstroom, zakelijke gegevens verbindingslijn, etc. Koppel dit aan het feit dat er een grote organisatie die kan echt gebruikmaken van vrijwel elke grote MOSS functie en je hebt het zich om een groot project met een onderneming bereik en veel goede dingen gebeuren.

We zijn geconfronteerd met deze kwestie keer op keer … MOSS is een onderneming bereiken met de enterprise functieset, nog hebben zelfs enigszins geavanceerde clients een harde tijd het geestelijk opvangen die functies, Laat alleen het opnemen van een aanzienlijk deel van hen in hun dagelijkse routine.

Ik heb niet een magische oplossing voor het probleem. In plaats daarvan richt ik mij slechts de allereerste stappen die we hebben genomen met de cliënt om te hen leiden de weg naar succes op lange termijn goedkeuring.

Toepassingsgebied:

Zo veel als ik het team wilde om een projectplan dat dergelijke mijlpalen als 'PoepleSoft integratie via de voltooid BDC' opgenomen ambacht, "Nieuwe Cross-departementele Product lancering Workflow voltooid" en "Uitvoerend Management KPI geaccepteerd", Ik moest genoegen nemen met iets minder. Dit is niet te zeggen dat "minder" is slecht. Eigenlijk, de "less" dat hebben we voor de eerste uitrol besloten was mijlen voor waar zij waren voordat we begonnen. In ons geval, de "less" omgezet in:

  • Eenvoudig documentmanagement met behulp van documentbibliotheken, versie controle en inhoud typen.
  • Effectief zoeken op basis van inhoudstypen en aangepast voorschot zoeken (via beheerde eigenschappen, XSLT om mooie resultaten te produceren, etc).

Naast de bovenstaande ondernemingswijde functies (Wat betekent dat ze moesten worden uitgerold naar alle afdelingen en gebruikers), Wij toegevoegd de volgende singleton in-scope mini-projecten:

  • Bewijs van concept BDC integratie.
  • Meerdere stappen en multi tak workflowproces gemaakt via EPD.
  • Complexe InfoPath-formulier.
  • Bestrating KPI's voor sommige bedrijfsproces (waarschijnlijk HR talent acquisitie in ons geval, Hoewel dat kan veranderen).

De reikwijdte hier is niet 100% nauwkeurige maar vertegenwoordiger van onze aanpak en voldoende voor mijn doel hier, welke is om uit te leggen wat ik beschouw als een "doeltreffend" invoering van MOSS die zal de klant stevig naar beneden het gouden pad ingesteld op volledige MOSS aanneming.

Ik zal niet veel meer over de singleton schrijven in deze post. Ik wil erop wijzen dat deze deel van onze overkoepelende strategie uitmaken. Het idee is om de kern document beheer en zoek functies voor alle gebruikers implementeren maar bieden hoogfunktionele, hoge zichtbaar en zeer representatieve voorbeelden van andere MOSS kernfuncties die gewoon buiten het vermogen van de meeste gebruikers te vangen in dit vroege stadium. Echter, zij zullen "out there" en men hoopt dat andere business units zal weten of over hen leren en deze functies wilt gebruiken voor zichzelf, leidt tot grotere aanneming. Deze succesverhalen singleton ook dienen om ons verkoopteam "munitie" voor het met succes het winnen van tweede, derde en n-fase projecten.

Wat wij introduceren en waarom?

Hebben afgerekend op documentbeheer en zoek als een basislijn ondernemingswijde eis, we nodig om te starten met het verzamelen van details. Als een praktische kwestie, Dit draaide rond inzicht in hun documenten en die uiteindelijk toegewezen aan het begrip van inhoudstypen.

Ik heb gevonden is het moeilijk uit te leggen van inhoudstypen zonder visuele aides. Meer technische folk kan lopen van een discussie over inhoudstypen wanneer CT's worden beschreven in databasetermen. "A CT is soortgelijk aan een databasetabel, het heeft kolommen en kolommen worden gedefinieerd in termen van gegevenstypen, maar CT gegevenstypen bevatten meer dan eenvoudige geheel getal/datum, maar ook "keuze" en "lookup" en dergelijke." We kunnen praten over het "uitbreiden" inhoudstypen, net als een kan functionaliteit overnemen van een basisklasse in objectgeoriënteerde talen. Maar dit is uiteraard niet nuttig zijn voor het vervoer departement admin persoon die geen technische achtergrond heeft. H.D., bijna iedereen dat de zaken in een uitrol MOSS.

Met behulp van een wit bord is dubieus. Ik heb het idee van een inhoudstype en getekende briljant gepresenteerd (of zodat ze lijken) foto's van inhoudstypen en wat ze doen voor u in termen van zoek en hoe zij kunnen worden uitgebreid, etc. In het einde, het voelt alsof sommige lampen hebt ingeschakeld, maar het resulterende beeld wit bord is een puinhoop.

Dit leidde ons naar onze huidige en zo ver meest effectieve landing plaats: een MOSS sandbox-website is geconfigureerd om aan te tonen deze functies.

Met behulp van de sandbox-site, We laten zien:

  • Inhoudstypen:
    • Het creëren van een CT met meerdere gegevenstypen (tekst, datum, keuze, Boolean, opzoeken, etc).
    • Een CT uit te breiden door het creëren van een nieuwe CT op basis van een ouder.
    • Documenten zoeken via CT metagegevens.
  • Documentbibliotheken:
    • Een enkele CT koppelen aan een bibliotheek.
    • Wat gebeurt er als wij een document naar de bibliotheek uploaden?
    • Meerdere CT's koppelen aan een documentbibliotheek.
    • Wat gebeurt er als wij een document naar de bibliotheek uploaden?
    • Filteren en sorteren via kolomkoppen in een doc-lib.
    • Bibliotheek documentweergaven:
      • Sorteren
      • Groeperen
      • "Quick entry" (gegevens bladweergave)
      • "Niet-gecodeerde gegevens" (om te helpen met de migratie naar MOSS uit andere inhoudsbronnen; meer hierover hieronder).

De sandbox-Site:

We onze sandbox-site een permanente functie in de ontwikkelomgeving moet worden gebruikt voor opleidingsdoeleinden lang nadat wij het project ontworpen en opgenomen van verschillende artefacten, zoals wordt beschreven:

Inhoudstypen:

Hebben we de volgende inhoudstypen gedefinieerd: Factuur, Inkooporder, Servicefactuur.

Wij hebben gekozen factuur en aankoop volgorde omdat ze min of meer universeel onder
stond entiteiten. Iedereen in zaken begrijpt dat een factuur is een aanmaning tot betaling aan een klant voor een bedrag afgegeven op een bepaalde datum worden betaald volgens sommige Betalingscondities. Dit leidt tot een natuurlijke definitie van een CT die we genaamd 'opleiding factuur" (te onderscheiden van een ander soort factuur). De inkooporder is ook gemakkelijk gedefinieerd. Wij ook een 'Training Servicefactuur gemaakt" door het creëren van een nieuwe CT op basis van de "opleiding factuur" CT en toegevoegde slechts één kolom, "verleende diensten".

Met de bovenstaande, Wij kunnen nu laten zien van sommige zeer belangrijke eigenschappen van CT's zonder vast te lopen proberen uit te leggen van een abstract begrip eerst; iedereen begrijpt al wat we bedoelen met "factuur" en "inkooporder" en kunnen in plaats daarvan te concentreren op de mechanica van de CT zelf.

Aangepaste lijsten:

CT met kolommen van het type "lookup" Wijs een aangepaste lijst of documentbibliotheek. We gebruiken dit uitgebreid en voor de sandbox, we gemaakt een aangepaste lijst met klanten ondersteuning. We pakte klanten omdat het is een eenvoudig concept te begrijpen en gemakkelijk om aan te tonen. De factuur CT heeft een kolom, "klant" dat wordt gedefinieerd van het type "opzoeken" die punten op deze lijst.

We gemaakt een soortgelijke aangepaste lijst als u wilt "leveranciers beheren" voor de inkooporder"" CT.

Documentbibliotheken:

We twee documentbibliotheken gemaakt: "Facturen" en 'Gemengde documenten'.

We geconfigureerd de facturen documentbibliotheek beheren alleen documenten van CT type 'Factuur'.

We de gemengde documenten"geconfigureerd" bibliotheek voor het beheren van alle drie CT.

Verschillende weergaven maken die Toon sorteren, filteren, fiche en groeperen.

Zoek:

We twee nieuwe beheerde eigenschappen gedefinieerd en toegewezen hen aan factuurnummer en klant.

We een nieuwe aangepast voorschot zoekwebsite gemaakt en is gewijzigd zodat gebruikers om te zoeken naar "facturen" met behulp van deze twee toegewezen eigenschappen.

Het XSLT-bestand te wijzigen zodat het nummer van de factuur en klant, Wanneer presenteren, worden weergegeven in een HTML-tabel in een felle kleur. Het doel hier is om aan te tonen dat het mogelijk dergelijke opmaak is.

Alle samenstellen:

Wij regelen voor key-users om deel te nemen in een demo.

Wij volgen dit eenvoudige script:

  1. Beschrijven de betekenis en het doel van een CT, met behulp van facturen en inkooporders als voorbeelden.
  2. Toon de factuur CT definitie terwijl het tegelijkertijd verzekeren dat ze niet hoeft te gebruiken die schermen zelf, net pick-up de concepten.
  3. Ga naar de documentbibliotheek voor facturen.
  4. Een document uploaden.
  5. Aantonen dat de klant vervolgkeuzelijst echt is afkomstig uit een aangepaste lijst.
  6. Een nieuwe klant toevoegen aan de klantenlijst en vervolgens de recent geüploade factuur de meta-gegevens bijwerkt met de nieuwe klant.
  7. Schakel over naar de "gemengde documenten" bibliotheek en upload een document. Uitleggen hoe het systeem vraagt voor een documenttype.
  8. Ga terug naar de documentbibliotheek voor facturen en Toon hoe sorteervolgorde te klikken op de naam van een kolom wijzigt.
  9. Tonen kolomniveau filteren.
  10. Toon verschillende weergaven die blijk geven van meerdere niveaus sorteren, filteren en groeperen.
  11. De gegevens vel weergeven.
  12. Het doel van een "niet-gecodeerde documenten wordt uitgelegd" weergave.
  13. Overschakelen naar de aangepaste geavanceerde zoekopdracht.
  14. Door nu, het recent geüploade document moet zijn gecrawld en geïndexeerd, dus uit te voeren een zoekopdracht die aantoont kunnen vinden die factuur via de toegewezen eigenschap.
  15. Wij laten zien dat het verschil tussen zoeken via toegewezen eigenschappen vs. gewoon een tekst zoeken.

Op dit punt, We zijn min of meer gedaan met de demo. Het schijnt om te nemen over 30 Aan 45 minuten, afhankelijk van hoeveel vragen mensen vragen.

We sturen ze vervolgens terug naar hun bureaus met "huiswerk". Dit bestaat uit een eenvoudige excel-spreadsheet waar wij vragen hen om te definiëren voor ons wat ze denken dat ze nodig hebben in termen van CT's, beide op een hoog niveau (alleen naam en doel) Naast kolommen en het soort gegevens zou zij slaan in de kolom. Niet vragen wij hen naar kolomgegevenstypen definiëren in termen van MOSS, maar zakelijke termen.

In samenvatting:

We hebben een sandbox-omgeving die we gebruiken kunnen om aan te tonen enkele kernfuncties MOSS waarvan beroep zijn ondernemingswijde gemaakt.

Wij zijn gemakkelijk te begrijpen en gemeenschappelijke bedrijfseenheden gemodelleerd zodat gebruikers zich op MOSS concentreren kunnen en niet op de entiteiten verzanden / voorbeelden zelf.

Zakelijke gebruikers lopen van scripties sessies met "huiswerk" in de vorm van excel-documenten die ze nu bevoegd zijn om te vullen en gebruiken voor het ontwerpen van hun eigen eerste-cut inhoudstypen.

Tot slot, Als we uit te demo's na verloop van tijd voeren, leden van het team van de cliënt zelf worden beter in staat om uit te voeren, Ken de demo's zelf en over het algemeen vrijmaken van de rest van ons omhoog werken aan meer complexe thema 's, zoals global taxonomie, complexe workflows, BDC en dergelijke.

MOSS: Functioneel voorbeeld – aangepast gegevenstype

Bedrijfsscenario:

Ondernemingswijde uitvoering van MOSS voor productiebedrijf met 30+ sites en een paar dozijn stafafdelingen.

Zakelijke doel:

Ondanks een veelheid van business groups (afdelingen, locaties, etc), bepaalde gegevens moeten worden gehandhaafd op een mondiaal niveau. Bijvoorbeeld, een gezaghebbende hoofdlijst van alle fysieke locaties van het bedrijf (bijvoorbeeld. productiefaciliteiten, magazijn locaties, verkoopkantoren) moet worden gehandhaafd op een centrale locatie.

Technisch probleem:

De taxonomie van de onderneming werd uitgevoerd met behulp van meerdere siteverzamelingen. Wij hadden gewild de gezaghebbende lijst van fysieke locaties maken in een aangepaste WSS-lijst. Vervolgens, Wanneer we die nodig is om een kolom in een inhoudstype (of een kolom toegevoegd aan een lijst of doc bibliotheek) die opgenomen corporate locaties, We zouden een kolom met behulp van de "lookup maken" datatype en punt aan dit master lijst.

Helaas, opzoeken datatypes moet toegang hebben tot een bronlijst 'lokaal" Wat betekent dat onze gezaghebbende lijst niet meerdere siteverzamelingen kunnen omvatten.

Technische oplossing:

Uitvoering van een nieuwe aangepaste gegevenstype ten uitvoer gelegd op basis van SPField en vertegenwoordigd als een DropDownList in de UI waarvan ListItems vanuit de hoofdlijst WSS vullen.

We hebben een nieuwe siteverzameling genoemd gemaakt "http://localhost/EnterpriseData". Er, we gemaakt een aangepaste lijst met de naam 'Corporate locaties'. Deze lijst gebruikt enkel de standaard "titel" veld bevatten de lijst van werkelijke corporate locaties.

Een volgt verschillende discrete stappen voor het maken van een aangepast gegevenstype in WSS. Ze zijn:

  1. Een klasse die van SPField overerft definiëren (Men kan erven van andere velden indien nodig).

Hier is de code voor dat:

openbare klasse XYZZYCorporateLocationField : SPFieldText
{
openbare XYZZYCorporateLocationField
(SPFieldCollection velden, tekenreeks typeName, tekenreeks displayName)
: Base(velden, typeName, displayName) { }

openbare XYZZYCorporateLocationField
(SPFieldCollection velden, tekenreeks displayName)
: Base(velden, displayName) { }

openbare overschrijven BaseFieldControl FieldRenderingControl
{
Toevoegen
{
BaseFieldControl controle = Nieuw XYZZYCorporateLocationFieldControl();
controle. FieldName = Dit.InternalName;
terugkeer controle;
} //Toevoegen
} // fieldrenderingcontrol

openbare overschrijven tekenreeks GetValidatedString(object waarde)
{
Als (Dit.Vereist || waarde. ToString().Is gelijk aan(Tekenreeks.Leeg))
{
gooien Nieuw SPFieldValidationException ("Departement is niet toegewezen.");
}
terugkeer Base.GetValidatedString(waarde);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Een andere klasse die van het basisveld besturingselement overerft definiëren, Als in:

openbare klasse XYZZYCorporateLocationFieldControl : BaseFieldControl
{
beschermd DropDownList XYZZYCorporateLocationSelector;

beschermd overschrijven tekenreeks DefaultTemplateName
{
Toevoegen
{
terugkeer "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

openbare overschrijven object Waarde
{
Toevoegen
{
EnsureChildControls();
terugkeer Dit.XYZZYCorporateLocationSelector.SelectedValue;
} // Toevoegen
instellen
{
EnsureChildControls();
Dit.XYZZYCorporateLocationSelector.SelectedValue = (tekenreeks)Dit.ItemFieldValue;
} // instellen
} // object waarde overschrijven

beschermd overschrijven VOID CreateChildControls()
{

Als (Dit.Veld == Null || Dit.ControlMode == SPControlMode.Weergave)
terugkeer;

Base.CreateChildControls();

Dit.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

Als (Dit.XYZZYCorporateLocationSelector == Null)
gooien Nieuw Uitzondering("FOUT: Kan niet laden. ASCX bestand!");

Als (!Dit.IsPostBack de pagina.)
{

met behulp van (SPSite site = Nieuw SPSite('http://localhost/enterprisedata"))
{
met behulp van (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Lijsten['Corporate locaties"];

foreach (SPItem XYZZYCorporateLocation in currentList.Items)
{
Als (XYZZYCorporateLocation["Titel"] == Null) «««;

tekenreeks Krijgt;
Krijgt = XYZZYCorporateLocation["Titel"].ToString();

Dit.XYZZYCorporateLocationSelector.Items.Add
(Nieuw ListItem(Krijgt, Krijgt));

} // foreach

} // met behulp van spweb web = site.openweb()
} // gebruik van spsite site = nieuwe spsite('http://localhost/enterprisedata")

} // Als niet een terugsturen

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

De bovenstaande code implementeert in principe de logica voor het vullen van de DropDownList met waarden uit de WSS aangepaste lijst attractiepark http://localhost/enterprisedata en met de naam "Corporate afdelingen".

Ik heb beide klassen gedefinieerd in een enkele .cs-bestand, gecompileerd het en zet het in de GAC (sterke vereist, Natuurlijk).

  1. Uitvoering van een besturingselement sjabloon (.AScX) zoals:

<%@ Controle Taal= "C#" Erft="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Versie = 12.0.0.0, Culture = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Always" %>
<%
@ Registreren Tagprefix"wssawc =" Namespace="Microsoft.SharePoint.WebControls" Vergadering="Microsoft.SharePoint, Versie = 12.0.0.0, Cultuur = neutraal, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registreren Tagprefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Vergadering="Microsoft.SharePoint, Versie = 12.0.0.0, Cultuur = neutraal, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID"XYZZYCorporateLocationFieldControl =" RUNAT= "server">
<Sjabloon>
<ASP:DropDownList ID"XYZZYCorporateLocationSelector =" RUNAT= "server" />
</Sjabloon>
</
SharePoint:RenderingTemplate>

Het bovenstaande wordt opgeslagen in c:\Program filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. Tot slot, We creëren een XML-bestand op te slaan in de... 12XML directory. Dit is CAML waarin onze aangepaste gegevenstype en voor mijn voorbeeld, ziet er als volgt:

<?XML Versie="1.0" codering="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Veld Naam="TypeName">CorporateLocations</Veld>
<
Veld Naam="ParentType">Tekst</Veld>
<
Veld Naam="TypeDisplayName">Corporate locaties</Veld>
<
Veld Naam="TypeShortDescription">Alle Corporate XYZZY locaties met inbegrip van de productie- of andere voorzieningen.</Veld>
<
Veld Naam="UserCreatable">WAAR</Veld>
<
Veld Naam="ShowInListCreate">WAAR</Veld>
<
Veld Naam="ShowInDocumentLibraryCreate">WAAR</Veld>
<
Veld Naam="ShowInSurveyCreate">WAAR</Veld>
<
Veld Naam="ShowInColumnTemplateCreate">WAAR</Veld>
<
Veld Naam="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versie = 1.0.0.0, Cultuur = neutraal, PublicKeyToken = b0b19e85410990c4</Veld>
<
RenderPattern Naam="DisplayPattern">
<
Schakelaar>
<
Expr>
<
Kolom />
</
Expr>

<Geval Waarde=""/>

<Standaard>
<
HTML>
<![CDATA[
<span stijl = "kleur:Red"><b>]]>
</
HTML>

<
Kolom SubColumnNumber="0" HTMLEncode="WAAR"/>

<HTML><![CDATA[</b></span>]]></HTML>

</
Standaard>
</
Schakelaar>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Dit XML-bestand wordt het aangepaste gegevenstype toegevoegd aan de WSS "bibliotheek" en komt overeen met het op tegen de GAC hadden vergadering.

Na het verplaatsen van al deze stukjes op zijn plaats, iisreset op de server en het moet alle gaan werken mooi.

MOSS: Een aangepaste lijst bijwerken

Er zijn vele goede voorbeelden van aangepaste lijsten via de SDK bijwerken. Hier is nog een andere.

Bedrijfsprobleem: InfoPath-formulier is ontworpen dat stelt gebruikers in staat om online vorderingen kopen. PO inkoopvoorstel getallen moet bestaan uit traditionele reeks gebaseerd integerwaarden en automatisch berekend.

Zakelijke oplossing: Een aangepaste MOSS lijst met twee kolommen maken: "ControlField" en "ControlValue". De kolom waarde bevat de volgende aankoop inkoopvoorstel nummer. Merk op dat het algemene "control" naamgevingsconventie voorziet in toekomstige controle velden die kunnen worden gebruikt als nodig.

Technische oplossing: Een webservice toegankelijk door de InfoPath-client maken. De webservice retourneert terug de volgende aankoop inkoopvoorstel nummer en de waarde van de lijst bijgewerkt.

Geleerde lessen:

  • Wanneer deze webservice als gegevensbron toevoegen aan de InfoPath-formulier, Ik vond het nodig om te converteren naar een udc en opslaan in een bibliotheek met gegevensverbindingen.
  • Ik vond het ook nodig om te schakelen tussen domeinen scripts via centrale diensten administratie // Toepassingsbeheer // de configuratie van de server van het formulier.
  • De eerste keer het formulier probeert te openen van de webservice, het duurt een tijdje en bij gelegenheid, het zou tijd out. Rommelde ik met instellingen in de configuratie van de server van het formulier uit te breiden van de time-outinstellingen en welk toelijken voor steun.

De code:

met behulp van Systeem;
met behulp van System.Web;
met behulp van System.Web.Services;
met behulp van System.Web.Services.Protocols;
met behulp van Microsoft.SharePoint;
met behulp van System.Configuration;

[WebService(Namespace = 'http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
openbare klasse PoService : System.Web.Services.WebService
{
openbare PoService () {

//Uncomment de volgende regel als gebruikt ontworpen onderdelen
//InitializeComponent();
}

/// <Samenvatting>
/// De volgende PO-nummer te verkrijgen door de sharepoint po nummer control list.
/// _ / / Verhogen de PO-nummer in die lijst.
/// </Samenvatting>
/// <geeft als resultaat></geeft als resultaat>
[WebMethod]
openbare tekenreeks GetNextPoNumber()
{
tekenreeks SpPoControlSiteName; // Naam van de werkelijke MOSS-site die als host optreedt van de PO Control list.
tekenreeks SpPoControlListName; // Naam van de werkelijke MOSS lijst waarin het besturingselement Po.

SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();

tekenreeks nextPoReqNumber = "xyzzy";

met behulp van (SPSite site = Nieuw SPSite(SpPoControlSiteName))
{
met behulp van (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Lijsten[SpPoControlListName];

foreach (SPItem controlItem in currentList.Items)
{

Als (((tekenreeks)controlItem["ControlField"]).Is gelijk aan("NextPoNumber"))
{
nextPoReqNumber = (tekenreeks)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Converteren.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}

} // Zoeken, lezen en bijwerken van de PO-nummer in de lijst.


} // met behulp van spweb web = site.openweb()
} // gebruik van spsite site = nieuwe spsite('http://localhost/mizuho")

terugkeer nextPoReqNumber;

}
}