Kategori Arkiv: SharePoint

Sådan foretages fejlfinding af mystiske SharePoint fejl.

Oversigt:

Debugging er vanskeligt, når udvikle brugerdefineret funktionalitet til Windows SharePoint Services 3.0 (WSS) eller Microsoft Office SharePoint Server (MOSS). Den største synder er, at SharePoint normalt overflader meget lidt diagnostiske oplysninger på webbrowseren, når der opstår en fejl. Dette blogindlæg beskriver, hvordan du finde yderligere systemgenererede diagnostiske oplysninger, som ofte kan give ekstra detaljer, at man har brug for at identificere årsagerne. Dette kan så føre til at løse problemet.

Jeg har brugt denne teknik med stor succes for at løse ellers mystisk fejl.

Tilgang:

SharePoint sparer en hel del oplysninger til en diagnosticeringslogfil i en logfil i den 12 hive.

"12-bikuben" er normalt placeret i "C:\Programmere fælles filer FilesMicrosoft SharedWeb Server Extensions12 ". (Jeg er ikke sikker på om det er muligt for den 12 bikuben for at bo hvor som helst ellers, Faktisk).

Ideen er at finde den aktuelle logfil, tvinge fejlen og derefter hurtigt åbne logfilen. Disse logfiler er karakteriseret ved:

  • Rigelige mængder af oplysninger. SharePoint genererer en meget stor mængde af diagnosticeringsoplysninger og skriver det til denne logfil meget hurtigt. Du skal være hurtig med fingrene til at fange det.
  • Mangfoldighed. SharePoint kan ikke skrive til en enkelt logfil, men snarere genererer flere logfiler i rækkefølge.
  • Kopiere og indsætte pænt i MS Excel.

Min foretrukne metode:

  1. Åbn et windows explorer peger på den 12 hivelogs.
  2. Sortere visningen til at vise efter ændringsdato (Seneste første).
  3. Fremhæve den mest aktuelle logfil.
  4. I et webbrowservindue, tvinge fejlen at forekomme.
  5. Hurtigt åbne den aktuelle logfil og kopiere dens indhold til MS Excel.
  6. Springe til slutningen og analysere de relevante poster.

Andre noter:

Som standard, den diagnosticeringslogfil ligger i den 12 hiveLOGS bibliotek.

MS Best practices (Ifølge Mike T. af Microsoft) stat, log-filer skal gemmes på en separat harddisk. Man gør dette via central administration. Systemadministratoren kan have gjort det, i så fald skal du naturligvis finde logfil der i stedet for standarden 12 hive placering).

Denne post omhandler spørgsmål som:

  • SharePoint-arbejdsproces undladt at starte på grund af en intern fejl.
  • (mere tilføjes over tid)
  • Denne løsning har været hjælpsom diagnosticering arbejdsproces fejl (strømsparetilstand. "Arbejdsprocessen kunne ikke starte på grund af en intern fejl").

MOSS: Effektiv Introduktion til en organisation

(denne post cross bogført mellem http://paulgalvin.spaces.live.com/blog/ og http://blogs.conchango.com)

Opslag på dette site er mine egne og repræsenterer ikke nødvendigvis Conchangos holdninger, strategier eller udtalelser.

Oversigt:

Dette indlæg beskriver nogle baggrundsoplysninger om en stor (3,000 brugere) Microsoft Office SharePoint Server (MOSS) udrulningen, og hvad vi gjorde for at få projektet rullende på en sådan måde, at kunden er tilfreds og fast ned en sti der slutter med fuld vedtagelsen af MOSS feature sæt. Som for skrivning af posten, Vi er ca. 50% komplet med første fase af projektet. Som tingene skrider frem, Jeg vil opdatere denne post og/eller skrive nye poster.

I dette specifikke tilfælde, virksomheden havde allerede installeret SharePoint Portal Server 2003. IT gruppen har installeret produktet i en slags "Lad os se, hvis nogen bekymrer sig" mode. Det blev hurtigt vedtaget af mange professionelle brugere og blev ganske populær i virksomheden som helhed. Som du kan forestille dig, Dette var ikke den bedste udrulning strategi (som klienten let indrømmer) og når MOSS ankom på scenen, klienten er besluttet på at "gøre det rigtigt" og hyret os til at hjælpe dem.

Et af de centrale spørgsmål står over for os, da vi begyndte at gennemføre dette projekt blev: Hvordan vi introducere MOSS til denne klient? Givet at klienten allerede havde erfaring med SharePoint, vi spekulerede på — skal vi gøre "differentieret" træning eller skal vi starte fra jorden op? Efter at have arbejdet med vigtige brugere, Vi har besluttet at behandle dette som et grønt felt projekt givet mere mening.

Denne beslutning gav et udgangspunkt, men stadig efterlod os med det store krav at finde ud af en god strategi for rullende MOSS ud til virksomheden. MOSS er sådan en stor dyr … Det omfatter indholdsstyring, dokumentstyring, Søg, sikkerhed, målgrupper, projektledelse, "fabelagtig fyrre" skabeloner, arbejdsproces, Business data connector, osv. Par dette med, at det er en stor organisation, kan virkelig gøre brug af stort set alle større MOSS funktion, og du har makings af et stort projekt med en enterprise reach og mange gode ting sker.

Vi er konfronteret med dette spørgsmål igen og igen … MOSS har en enterprise nå med dets enterprise feature-sæt, endnu har engang noget sofistikeret klienter svært ved at mentalt absorbere disse funktioner, Lad alene indarbejde en mærkbar brøkdel af dem i deres daglige rutine.

Jeg har ikke en magisk løsning på problemet. I stedet henvender jeg bare de første skridt, som vi har taget med klienten til at føre dem ned stien til vellykket langsigtet vedtagelse.

Anvendelsesområde:

Så meget som jeg ønskede holdet til at udforme en projektplan, der indeholdt sådanne milepæle som "PoepleSoft Integration via BDC afsluttet", "Nye Cross-departementets produkt lancering arbejdsproces komplet" og "Direktionen KPI accepteret", Jeg måtte nøjes med noget mindre. Dette er ikke til at sige, at "under" er dårlig. Faktisk, "mindre" at vi besluttede for den indledende udrulningen var miles foran hvor de var før vi begyndte. I vores tilfælde, "mindre" forvandlet til:

  • Enkle dokumenthåndtering bruge dokumentbiblioteker, version kontrol og indhold, typer.
  • Effektiv søgning baseret på indholdstyper og tilpasset advance søgning (via administrerede egenskaber, XSLT til at producere smukke resultater, osv).

Ud over de ovennævnte virksomhedsdækkende funktioner (hvilket betyder, at de skulle blive rullet ud til alle afdelinger og brugere), vi tilføjet følgende singleton i anvendelsesområdet mini-projekter:

  • Påvisning i id BDC-integration.
  • Flere trin og flergrenet arbejdsgangsprocessen skabt via SPD.
  • Komplekse InfoPath-formular.
  • Surfacing Nøgletallene for nogle business proces (sandsynligvis HR talent erhvervelse i vores tilfælde, selv om der kan ændre).

Mulighederne her er ikke 100% præcis men repræsentant for vores tilgang og tilstrækkelige for mit formål her, som er at forklare, hvad jeg anser for at være en "effektiv" indførelsen af mos, som indstiller klienten fast den gyldne vej til fuld MOSS vedtagelse.

Jeg vil ikke skrive meget mere om singleton i denne post. Jeg ønsker at påpege, at disse er en del af vores overordnede strategi. Ideen er at gennemføre core dokument management og Søg funktioner til alle brugere endnu giver yderst funktionelt, høj synlige og meget repræsentative eksempler på andre MOSS kernefunktioner, som er simpelthen ud over de fleste brugere evne til at absorbere på dette tidlige stadium. Dog, de vil være "derude" og man håber at andre afdelinger vil vide af eller lære om dem og ønsker disse funktioner for sig selv, fører til større vedtagelse. Disse singleton succeshistorier også tjene til at give vores salgsteam "ammunition" for med held at vinde det andet, tredje og n-fase projekter.

Hvad gjorde vi introducere og hvorfor?

At have afgjort på dokumenthåndtering og Søg som en baseline virksomhedsdækkende krav, Vi havde brug at starte indsamling af oplysninger. Som et praktisk spørgsmål, det drejede sig om forståelse af deres dokumenter og, i sidste ende knyttet til forståelse indholdstyper.

Jeg har fundet det vanskeligt at forklare indholdstyper uden visuelle hjælpere. Mere tekniske folk kan gå væk fra en diskussion om indholdstyper, når CTS er beskrevet i databaseterminologi kaldes. "En CT er svarende til en databasetabel, Det har kolonner og kolonner defineres i form af datatyper, men CT datatyper omfatter mere end simple heltal/dato, men også "choice" og "opslag" og lignende." Vi kan tale om "strækker sig" indholdstyper, ligesom man kan arve funktionalitet fra en basisklasse i objektorienteret sprog. Men det er naturligvis ikke nyttigt for transport department admin person, der har ingen teknisk baggrund. Dvs., næsten alle, der betyder noget i en Mos udrulningen.

Ved hjælp af et hvidt bord er usikker. Jeg har præsenteret tanken om en indholdstype og trukket strålende (eller så de synes) billeder af indholdstyper og hvad de gør for dig med hensyn til søgning og hvordan de kan udvides, osv. I sidste ende, det føles som om nogle pærer har slået, men den resulterende skrivetavle billede er en rod.

Dette førte os til vores nuværende og så langt mest effektive landingspladsen: en Mos sandkasse websted er konfigureret til at vise disse funktioner.

Ved hjælp af sandbox-webstedet, Vi demonstrere:

  • Indholdstyper:
    • At skabe en CT med flere datatyper (tekst, dato, valg, Boolesk værdi, opslag, osv).
    • Udvide en CT ved at oprette en ny CT baseret på en overordnet.
    • Søger efter dokumenter ved hjælp af CT metadata.
  • Dokumentbiblioteker:
    • Knytte en enkelt CT med et bibliotek.
    • Hvad sker der når vi overfører et dokument til biblioteket?
    • Knytte flere CT med en doc bibliotek.
    • Hvad sker der når vi overfører et dokument til biblioteket?
    • Filtrering og sortering via kolonneoverskrifter i en doc lib.
    • Dokument bibliotek visninger:
      • Sortering
      • Gruppering
      • "Hurtig løsning" (visning af data)
      • "Ukodet data" (at hjælpe med migrationen til mos fra andre indholdskilder; mere om dette nedenfor).

Sandbox-webstedet:

Vi designet vores sandkasse site at være en fast bestanddel i udviklingsmiljøet bruges til træningsformål lang, når vi er færdig med projektet og inkluderet adskillige artefakter som beskrevet:

Indholdstyper:

Vi defineret følgende indholdstyperne: Faktura, Indkøbsordre, Tjenester faktura.

Vi valgte faktura og Køb orden, fordi de er mere eller mindre universelt under
stod enheder. Alle i virksomheden forstår at en faktura er en anmodning om betaling for en kunde for en beløb udstedt på en bestemt dato der skal betales ifølge nogle betalingsbetingelser. Dette fører til en naturlig definition af en CT, som vi kaldte "uddannelse faktura" (at skelne den fra andre former for faktura). Indkøbsordren er ligeledes let defineret. Vi skabte også en "uddannelse tjenester faktura" ved at oprette en ny CT baseret på "uddannelse fakturaen" CT og tilføjede bare én kolonne, "tjenesteydelser".

Med ovenstående, Vi kan nu påvise nogle nøglefunktioner i CTS uden at blive kørt ned forsøger at forklare et abstrakt begreb først; alle forstår allerede, hvad vi forstår ved "faktura" og "indkøbsordre" og er i stedet at fokusere på mekanik af CT selv.

Brugerdefinerede lister:

CT med kolonner af typen "opslag" Peg på en brugerdefineret liste eller et dokumentbibliotek. Vi bruger dette flittigt og for sandkassen, Vi har oprettet en støtte brugerdefinerede liste, der indeholder kunder. Vi tog kunder, fordi det er en let koncept til at forstå og let at påvise. Faktura CT har en kolonne, "kunde" der er defineret af typen "opslag" der peger på denne liste.

Vi lavet en tilsvarende brugerdefinerede liste for at administrere "leverandører" for indkøbsordren"" CT.

Dokumentbiblioteker:

Vi lavet to dokumentbiblioteker: "Fakturaer" og "Blandet dokumenter".

Vi konfigureret fakturaer dokumentbibliotek for at styre kun dokumenter af CT type "Faktura".

Vi konfigureret "blandet-dokumenter" biblioteket til at administrere alle tre CT.

Oprette flere visninger, der viser sortering, filtrering, på data-ark og gruppering.

Søg:

Vi defineret to nye administrerede egenskaber og knyttet dem til fakturanummer og kunde.

Vi lavet en ny tilpasset advance søgning site og forandret sig for at give brugerne mulighed at søge efter "fakturaer" ved hjælp af disse to tilknyttede egenskaber.

Ændre XSLT så faktura og kunde antallet, Når præsenterer, vises i en HTML-tabel i en lys farve. Målet her er at vise, at sådanne formatering er muligt.

At sætte det hele sammen:

Vi arrangere nøglebrugere til at deltage i en demo.

Vi følger denne simple script:

  1. Beskrive formålet af en CT, ved hjælp af fakturaer og indkøbsordrer som eksempler.
  2. Vis faktura CT definitionen samtidig samtidig sikrer dem, at de ikke behøver at bruge disse skærme, selv, bare afhente begreberne.
  3. Gå til dokumentbiblioteket fakturaer.
  4. Uploade et dokument.
  5. Påvise, at den kunde drop-down virkelig stammer fra en brugerdefineret liste.
  6. Tilføje en ny kunde til kundeliste og derefter opdatere den nyligt uploadet faktura metadata med de nyoprettede kunde.
  7. Skift til "blandet-dokumenter" bibliotek og uploade et dokument. Forklare hvordan systemet beder om for en dokumenttype.
  8. Gå tilbage til fakturaer dokumentbibliotek og viser hvordan at klikke på et kolonnenavn ændrer sorteringsrækkefølgen.
  9. Vise kolonnen-niveau filtrering.
  10. Vise forskellige visninger, der viser multi-level sortering, filtrering og gruppering.
  11. Vis ark datavisning.
  12. Forklare formålet med et "ukodede dokumenter" Se.
  13. Skifte til den tilpassede avanceret søgning.
  14. Nu, de nyligt uploadet dokument skal have gennemgået og indekseret, så udføre en søgning, der viser evne til at lokalisere denne faktura via egenskaben tilknyttede.
  15. Vi demonstrere forskellen mellem søgning via tilknyttede egenskaber vs. bare en tekstsøgning.

På dette punkt, Vi er mere eller mindre færdig med demo. Det synes at tage om 30 til 45 minutter, afhængigt af hvor mange spørgsmål spørger.

Derefter sender vi dem tilbage til deres skriveborde med "hjemmearbejde". Denne består af en simpel excel-regneark hvor vi bede dem om at definere for os hvad de tror, de har brug for med hensyn til CT'S, både på et højt niveau (kun navn og forretningsadresse formål) kolonner og datatype ville de gemme i kolonnen. Vi bede ikke dem om at definere kolonnedatatyper i MOSS vilkår, men forretningsbetingelser.

I Resumé:

Vi har oprettet en sandkasse miljø, som vi kan bruge til at vise nogle kernefunktioner til MOSS Hvis appellen er hele virksomheden.

Vi har modelleret let forståelig og fælles forretningsenheder, således at brugerne kan fokusere på MOSS og ikke forsumpe på enhederne / eksempler, selv.

Business-brugere gå væk fra afhandlinger sessioner med "hjemmearbejde" i form af excel-dokumenter, som de nu er kompetente til at udfylde og bruge til at designe deres egen første-cut indholdstyper.

Endelig, Når vi udfører demoer over tid, klientens teammedlemmer, selv blive bedre i stand til at videreføre, demo's selv og generelt gratis op resten af os op til at arbejde på mere komplekse problemstillinger, som global taksonomi, komplekse arbejdsprocesser, BDC- og lignende.

MOSS: Funktionsdygtige eksempel – brugerdefineret datatype

Forretningsscenario:

Enterprise-wide gennemførelsen af mos for produktionsvirksomhed med 30+ websteder og et par dusin corporate afdelinger.

Business mål:

Trods et væld af erhvervslivet grupper (afdelinger, Steder, osv), visse data bør bevares på globalt plan. For eksempel, en autoritativ master liste over alle fysiske placeringer af virksomheden (strømsparetilstand. produktionsfaciliteter, lagerlokationer, salgskontorer) bør fastholdes i en central beliggenhed.

Teknisk Problem:

Enterprise taksonomien blev gennemført ved hjælp af flere grupper af websteder. Vi ville gerne oprette den autoritative liste over fysiske lokationer i en brugerdefineret WSS liste. Derefter, Når vi skulle have en kolonne i en indholdstype (eller en kolonne føjes til en liste eller doc bibliotek) der indeholdt corporate steder, Vi ville skabe en kolonne ved hjælp af "opslag" datatype og pege på denne hovedliste.

Desværre, opslag datatyper skal have adgang til en kildeliste "lokalt" hvilket betyder at vores autoritative liste ikke kan span websteder.

Tekniske løsning:

Implementer en ny brugerdefineret datatype implementeret baseret på SPField og repræsenteret som en DropDownList i UI hvis ListItems udfylde WSS-listen master.

Vi skabt en ny gruppe af websteder kaldes "http://localhost/EnterpriseData". Der, Vi har oprettet en brugerdefineret liste navngivne "Corporate placeringer". Denne liste bruger bare den standard "titel" Feltet indeholder en liste over faktiske corporate placeringer.

Man følger flere diskrete trin for at oprette en brugerdefineret datatype i WSS. De er:

  1. Definere en klasse som nedarver fra SPField (man kan arve fra andre områder, hvis det kræves).

Her er koden for at:

offentlige klasse XYZZYCorporateLocationField : SPFieldText
{
offentlige XYZZYCorporateLocationField
(Af SPFieldCollection felter, streng typeName, streng displayName)
: Base(felter, typeName, displayName) { }

offentlige XYZZYCorporateLocationField
(Af SPFieldCollection felter, streng displayName)
: Base(felter, displayName) { }

offentlige tilsidesætte BaseFieldControl FieldRenderingControl
{

{
BaseFieldControl kontrol = nye XYZZYCorporateLocationFieldControl();
kontrol. FieldName = Dette.InternalName;
tilbagevenden kontrol;
} //få
} // fieldrenderingcontrol

offentlige tilsidesætte streng GetValidatedString(objekt værdi)
{
Hvis (Dette.Kræves || værdi. ToString().Er lig med(Streng.Tom))
{
kaste nye SPFieldValidationException ("Afdeling er ikke tildelt.");
}
tilbagevenden Base.GetValidatedString(værdi);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Definere en anden klasse, der nedarver fra kontrolelementet Grundfelt, som i:

offentlige klasse XYZZYCorporateLocationFieldControl : BaseFieldControl
{
beskyttet DropDownList XYZZYCorporateLocationSelector;

beskyttet tilsidesætte streng DefaultTemplateName
{

{
tilbagevenden "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

offentlige tilsidesætte objekt Værdi
{

{
EnsureChildControls();
tilbagevenden Dette.XYZZYCorporateLocationSelector. SelectedValue;
} // få
sæt
{
EnsureChildControls();
Dette.XYZZYCorporateLocationSelector.SelectedValue = (streng)Dette.ItemFieldValue;
} // sæt
} // tilsidesætte objekt værdi

beskyttet tilsidesætte void CreateChildControls()
{

Hvis (Dette.Feltet == Null || Dette.ControlMode == SPControlMode.Display)
tilbagevenden;

Base.CreateChildControls();

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

Hvis (Dette.XYZZYCorporateLocationSelector == Null)
kaste nye Undtagelse("FEJL: Kan ikke indlæse. ASCX fil!");

Hvis (!Dette.IsPostBack side.)
{

ved hjælp af (SPSite site = nye SPSite("http://localhost/enterprisedata"))
{
ved hjælp af (SPWeb Web = site. OpenWeb())
{

SPList.Update() currentList = web. Lister["Corporate steder"];

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

streng theTitle;
theTitle = XYZZYCorporateLocation["Titel"].ToString();

Dette.XYZZYCorporateLocationSelector.Items.Add
(nye ListItem(theTitle, theTitle));

} // foreach

} // ved hjælp af spweb web = site.openweb()
} // ved hjælp af spsite site = ny spsite("http://localhost/enterprisedata")

} // Hvis ikke en tilbagesendelse

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Ovenstående kode dybest set implementerer logik til udfyldning af DropDownList med værdier fra den WSS brugerdefinerede liste findes på http://localhost/enterprisedata og navngivet "Corporate afdelinger".

Jeg defineret begge klasser i en enkelt .cs fil, kompileret det og sætte det ind i GAC (stærk kræves, Selvfølgelig).

  1. Gennemføre en kontrol skabelon (.ascx) som vist:

<%@ Kontrol Sprog= "C#" Arver="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, kultur = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Altid" %>
<%
@ Registrer TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.webControls" Forsamling="Microsoft.SharePoint, Version = 12.0.0.0, Kultur = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registrer TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.webControls" Forsamling="Microsoft.SharePoint, Version = 12.0.0.0, Kultur = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" RUNAT= "server">
<Skabelon>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" RUNAT= "serveren" />
</Skabelon>
</
SharePoint:RenderingTemplate>

Ovenstående er gemt i c:\programmet fælles filer filesmicrosoft sharedweb server extensions12controltemplates.

  1. Endelig, vi oprette en XML-fil til at gemme i det... 12XML Register. Dette er CAML, der definerer vores brugerdefineret datatype og for mit eksempel, ser sådan ud:

<?XML version="1.0" kodning="UTF-8" ?>
<
Felttyper>
<
FieldType>
<
Felt Navn="TypeName">CorporateLocations</Felt>
<
Felt Navn="Felttypen">Tekst</Felt>
<
Felt Navn="TypeDisplayName">Corporate steder</Felt>
<
Felt Navn="TypeShortDescription">Alle XYZZY Corporate steder herunder fremstillings- eller andre faciliteter.</Felt>
<
Felt Navn="UserCreatable">SANDT</Felt>
<
Felt Navn="ShowInListCreate">SANDT</Felt>
<
Felt Navn="ShowInDocumentLibraryCreate">SANDT</Felt>
<
Felt Navn="ShowInSurveyCreate">SANDT</Felt>
<
Felt Navn="ShowInColumnTemplateCreate">SANDT</Felt>
<
Felt Navn="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = b0b19e85410990c4</Felt>
<
RenderPattern Navn="DisplayPattern">
<
Switch>
<
Udtryk>
<
Kolonne />
</
Udtryk>

<Sag Værdi=""/>

<Standard>
<
HTML>
<![CDATA[
<span style = "color:Rød"><b>]]>
</
HTML>

<
Kolonne SubColumnNumber="0" HTMLEncode="SANDT"/>

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

</
Standard>
</
Switch>

</
RenderPattern>
</
FieldType>
</
Felttyper>
Denne XML-fil, tilføjer den brugerdefinerede datatype til WSS "bibliotek" og passer det ind i GAC havde forsamling.

Når du har flyttet alle disse bits på plads, iisreset på serveren, og det bør alle start arbejder pænt.

MOSS: Opdatering af en brugerdefineret liste

Der er mange gode eksempler på opdatere brugerdefinerede lister via SDK. Her er endnu en.

Business problem: InfoPath-formular er udformet, kan brugere angive online indkøbsrekvisitioner. PO rekvisition tal bør være traditionelle sekvens baseret heltalsværdier og beregnes automatisk.

Business løsning: Oprette en brugerdefineret MOSS liste med to kolonner: "ControlField" og "ControlValue". Kolonnen værdi indeholder den næste indkøb-rekvisitionsnummer. Bemærk, at generiske "kontrol" navngivningskonventionen giver for fremtidige kontrol felter, der kan anvendes efter behov.

Tekniske løsning: Oprette en webservice adgang til InfoPath-klienten. Webtjenesten returnerer tilbage den næste indkøb-rekvisitionsnummer og opdateres værdien for listen.

Indhøstede erfaringer:

  • Når du tilføjer denne webtjeneste som datakilde til InfoPath-formularen, Jeg fandt det nødvendigt at konvertere det til en udc og gemme det i et dataforbindelsesbibliotek.
  • Jeg har også fundet det nødvendigt at aktivere cross domain scripting via centrale services administration // programadministration // form serverkonfiguration.
  • Første gang formen forsøgt hen til adgang web service, det tager et stykke tid og lejlighed, Det ville timeout. Jeg pillede ved indstillingerne i form serverkonfiguration at udvide indstillingerne timeout og som syntes at hjælpe.

Koden:

ved hjælp af System;
ved hjælp af Sektionsgruppen;
ved hjælp af System.Web.Services;
ved hjælp af System.Web.Services.Protocols;
ved hjælp af Microsoft.SharePoint;
ved hjælp af System.Configuration;

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

//Ualmindelig den følgende linje hvis bruger designede komponenter
//InitializeComponent();
}

/// <Resumé>
/// Få den næste PO-nummer fra sharepoint po nummer kontrol liste.
/// Øg PO-nummer i denne liste.
/// </Resumé>
/// <Returnerer></Returnerer>
[WebMethod]
offentlige streng GetNextPoNumber()
{
streng SpPoControlSiteName; // Navnet på den faktiske MOSS websted, der hoster PO Control list.
streng SpPoControlListName; // Navnet på den faktiske MOSS liste der indeholder kontrolelementet Po.

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

streng nextPoReqNumber = "xyzzy";

ved hjælp af (SPSite site = nye SPSite(SpPoControlSiteName))
{
ved hjælp af (SPWeb Web = site. OpenWeb())
{

SPList.Update() currentList = web. Lister[SpPoControlListName];

foreach (SPItem controlItem i currentList.Items)
{

Hvis (((streng)controlItem["ControlField"]).Er lig med("NextPoNumber"))
{
nextPoReqNumber = (streng)controlItem["ControlValue"];

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

int_nextPoReqNumber ;

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

} // Lokalisering, læsning og ajourføring PO-nummer på listen.


} // ved hjælp af spweb web = site.openweb()
} // ved hjælp af spsite site = ny spsite("http://localhost/mizuho")

tilbagevenden nextPoReqNumber;

}
}