Arhive de categorii: SharePoint

Cum se depanează erorile de SharePoint misterios.

Privire de ansamblu:

Depanare este dificil atunci când dezvolta funcţionalitate particularizate pentru Windows SharePoint Services 3.0 (WSS) sau Microsoft Office SharePoint Server (MOSS). Vinovatul principal este că SharePoint suprafeţe în mod normal, foarte puţine informaţii de diagnosticare pe browser-ul atunci când apare o eroare. Această intrare de blog descrie modul de a localiza suplimentare generate de sistemul de informaţii de diagnostic care adesea poate oferi suplimentar că pic de detaliu, că unul are nevoie pentru a identifica cauzele profunde. Acest lucru poate duce apoi la rezolvarea problemei.

Am folosit aceasta tehnica cu mare succes de a rezolva altfel misterioase erori.

Abordare:

SharePoint salvează o mare cantitate de informaţii într-un jurnal diagnostic într-un fişier jurnal în 12 stup.

"Stupul 12" este, de obicei, situat la "C:\Programul FilesCommon FilesMicrosoft SharedWeb Server Extensions12 ". (Nu sunt sigur în cazul în care este posibil pentru 12 stup să trăiască oriunde altundeva, de fapt).

Ideea este de a localiza fişierul de log curent, forţa de eroare şi apoi deschide rapid fişierul jurnal. Aceste fişiere de jurnal sunt caracterizate de:

  • Cantităţi mari de informaţii. SharePoint genereaza o cantitate foarte mare de informaţii de diagnostic şi scrie-l ca fişier jurnal foarte repede. Trebuie sa fii rapid cu degetele pentru a capta.
  • Multiplicitate. SharePoint nu se scrie într-un singur fişier jurnal, dar mai degrabă generează mai multe fişiere de jurnal în ordine.
  • Copiaţi şi lipiţi frumos în MS Excel.

Metoda mea preferată:

  1. Deschidere sus un ferestre explorer arătând spre 12 hivelogs.
  2. Sortează vizualizarea pentru a arăta de data modificării (cele mai recente primul).
  3. Evidenţiaţi fişierul jurnal cele mai actuale.
  4. Într-o fereastră de browser-ul web, forţa de eroare să apară.
  5. Deschideţi fişierul de log curent rapid şi copiaţi conţinutul său la MS Excel.
  6. Sari la final şi să analizeze înregistrările.

Alte note:

În mod implicit, jurnal diagnostic este situat în 12 hiveLOGS Director.

MS Best practices (ca pe Mike T. de la Microsoft) de stat care fişierele jurnal ar trebui să fie salvat de un hard disk separat. O face acest lucru prin intermediul admin centrală. Administratorul de sistem să fi făcut acest lucru, în acest caz, evident, trebuie să găsiţi fişierul jurnal acolo în loc de implicit 12 stup locaţie).

Acest articol abordează probleme cum ar fi:

  • Flux de lucru SharePoint nu a pornit datorită unei erori interne.
  • (mai mult pentru a fi adăugat în timp)
  • Această intrare a fost util diagnosticarea erori de flux de lucru (ex. "Fluxului de lucru nu a pornit datorită unei erori interne").

MOSS: Introducerea efectivă la o organizaţie

(Această intrare Crucea postat între http://paulgalvin.spaces.live.com/blog/ şi http://blogs.conchango.com)

Postarile pe acest site sunt propriul meu şi nu reprezintă neapărat Conchango pe poziţii, strategii sau opinii.

Privire de ansamblu:

Acest articol descrie câteva informaţii de fond pe o mare (3,000 utilizatorii) Microsoft Office SharePoint Server (MOSS) dezvoltarea internetului şi ceea ce am făcut pentru a obţine proiect de rulare astfel că clientul este fericit şi ferm în jos pe o cale care se termină cu adoptarea completa setul MOSS. Aşa cum a scris de intrare, Suntem aproximativ 50% complet cu prima fază a proiectului. Ca lucruri progresul, I voi actualiza această intrare şi/sau scrie noi intrări.

În acest caz special, Compania a instalat deja SharePoint Portal Server 2003. Grupul IT instalat produsul într-un fel de "să vedem dacă cineva îi pasă" moda. Acesta a fost rapid adoptat de multe utilizatorii de afaceri şi a devenit destul de popular în întreprindere la mare. După cum vă puteţi imagina, Acest lucru nu a fost cea mai bună strategie de rollout (care clientul recunoaşte uşor) şi când MOSS a ajuns pe scena, Clientul a hotărât să "Fă-o chiar" si noi le-a angajat.

Una dintre întrebările centrale cu care ne confruntăm atunci când am început implementarea acestui proiect a fost: Cum vom introduce MOSS la acest client? Având în vedere că clientul a avut deja experienţă cu SharePoint, ne-am întrebat — avem nevoie de a face "diferenţial" formare sau nu pornim de la sol până? După ce a lucrat cu utilizatorii cheie, am stabilit că tratează acest lucru ca un proiect de câmp verde a făcut mai mult sens.

Decizia a dat un punct de plecare, dar încă ne-a lăsat cu cerinţă majoră de imaginind o strategie bună pentru rulare MOSS a întreprinderii. MOSS este un astfel de animal mare … Aceasta include de management al conţinutului, managementul documentelor, căutare, securitate, publicul de orientare, management de proiect, "fabulos patruzeci" template-uri, flux de lucru, conectorul de date de afaceri, etc. Cuplul acest lucru cu faptul că este o mare organizaţie care poate face cu adevărat uz de aproape fiecare muşchi majore caracteristică şi au makings de un proiect de mare cu o întreprindere ajunge si multe lucruri bune se întâmplă.

Noi suntem confruntaţi cu această problemă ori … MOSS are o întreprindere ajunge cu enterprise său set de funcţionalităţi, încă chiar oarecum sofisticate clientii au un timp de greu mental absorbind aceste caracteristici, lasa singur încorporează o fracţie semnificativă dintre ele în rutina lor de zi cu zi.

Nu am o soluţie magică a problemei. Am în schimb adresa doar foarte primii pasi care ne-am luat cu clientul pentru a le duce în jos calea adoptarea de succes pe termen lung.

Domeniul de aplicare:

Cât de mult am vrut echipa la ambarcaţiunile de un plan de proiect, care a inclus aceste puncte de reper ca "PoepleSoft de integrare prin intermediul BDC completat", "Noi produse eco-departamentale lansarea flux de lucru complet" şi "Management executiv KPI acceptat", A trebuit să se stabilească pentru ceva mai puţin. Acest lucru nu este să spun că "mai puţin" este rău. de fapt, "mai puţin" că ne-am decis pentru lansarea iniţială a fost de mile înainte de unde au fost înainte de a am inceput. În cazul nostru, "mai puţin" transformat în:

  • Managementul documentelor simplu folosind biblioteci de documente, versiunea de control şi conţinutul tipuri.
  • Eficiente de căutare bazate pe tipuri de conţinut şi personalizate avans de căutare (Via proprietăți gestionate, XSLT pentru a produce destul de rezultate, etc).

Pe lângă caracteristicile de mai sus nivel de întreprindere (ceea ce înseamnă că au fost de a fi laminate la toate departamentele şi utilizatori), am adăugat următoarele singleton în aplicare mini-proiecte:

  • Dovada de concept BDC integrare.
  • Procesul de flux de lucru multi-pas şi multi-filiala create prin intermediul SPD.
  • Complexul formular InfoPath.
  • Suprafaţă KPI's pentru unele proces de afaceri (probabil HR talent achiziţie în cazul nostru, Deşi care pot schimba).

Domeniul de aplicare aici nu este 100% exacte, dar reprezentative pentru abordarea noastră şi suficiente pentru scopul meu aici, care este de a explica ceea ce eu consider a fi un efectiv"" introducerea de muşchi care va stabili client ferm în jos calea aur plin MOSS adoptarea.

Nu va scrie mult mai mult despre singleton în această intrare. Vreau să subliniez faptul că acestea fac parte din strategia noastră de supra-arching. Ideea este de a pune în aplicare document management şi căutaţi caracteristicile de bază pentru toţi utilizatorii încă oferi extrem de funcţional, mare vizibile şi foarte reprezentative exemple de alte caracteristici de muşchi de bază, care sunt pur şi simplu dincolo de capacitatea de majoritatea utilizatorilor de a absorbi la acest stadiu incipient. Cu toate acestea, ei vor fi "acolo" şi unul speră că alte unităţi de afaceri va cunosc sau aflaţi mai multe despre ei şi doresc aceste caracteristici pentru ei înşişi, care să conducă la adoptarea mai mare. Aceste poveşti de succes singleton servesc, de asemenea, să furnizeze "muniţie, echipa noastra de vanzari" pentru câştigarea cu succes a doua, treia şi n-faza proiecte.

Ceea ce vom Introduce şi de ce?

Au stabilit pe document management şi de căutare ca o cerinţă de bază la nivel de Intreprindere, avem nevoie pentru a începe colectarea de detalii. Ca o chestiune practică, Aceasta se învârte în jurul înţelegerea lor documente şi care în cele din urmă mapate la înţelegerea tipuri de conținut.

L-am găsit este dificil să explice tipurile de conținut fără ajutoare vizuale. Mai tehnică populară poate mers o discuţie despre tipurile de conținut CT sunt descrise în termeni de baze de date. "O CT este similar cu un tabel de baze de date, ea are coloane şi coloanele sunt definite în termeni de tipuri de date, dar tipurile de date CT includ mai mult decât simplu întreg/data, dar, de asemenea, "alegere" şi "căutare" şi altele." Putem vorbi despre "extinderea" tipuri de conținut, la fel ca unul Puteţi moşteni funcţionalitatea din clasa de baza în limbaje orientate obiect. Cu toate acestea acest lucru este evident nu util pentru transport Departamentul admin persoana care are nici o pregătire tehnică. Adică, aproape toată lumea care contează într-un rollout MOSS.

Folosind un alb bord este iffy. V-am prezentat ideea de un tip de conținut și trase genial (sau astfel încât acestea par) imagini de tipuri de conţinut şi de ceea ce fac ei pentru tine în termeni de căutare şi cum poate fi extins, etc. În cele din urmă, se simti ca unele becuri au pornit, dar imaginea alb bord rezultată este o mizerie.

Aceasta ne-a dus la locul nostru de aterizare curent şi atât de departe cele mai eficiente: un site de MOSS nisip configurate pentru a afişa aceste caracteristici.

Utilizarea acestui site de nisip, Vom demonstra:

  • Tipuri de conținut:
    • Crearea unui CT cu mai multe tipuri de date (textul, data, alegerea, Boolean, căutare, etc).
    • O CT de extindere prin crearea de un nou CT bazat pe un părinte.
    • Căutarea documentelor folosind CT metadate.
  • Biblioteci de documente:
    • Asocierea unui CT singur cu o bibliotecă.
    • Ce se întâmplă atunci când am încărcaţi un document la această bibliotecă?
    • Asocierea mai multor CT cu o bibliotecă de doc.
    • Ce se întâmplă atunci când am încărcaţi un document la această bibliotecă?
    • Filtrarea şi sortarea prin titlurile de coloană în un lib doc.
    • Documentul Biblioteca views:
      • Sortare
      • Gruparea
      • "Intrarea rapida" (Vizualizare foaie de date)
      • "Fără taguri date" (pentru a asista cu migrarea la MOSS la alte surse de conținut; mai mult pe acest de mai jos).

Site-ul Sandbox:

Am proiectat site-ul nostru de nisip pentru a fi o caracteristică permanentă în mediul de dezvoltare pentru a fi utilizate în scopuri de formare lung după ce am terminat de proiect şi a inclus mai multe artefacte descris:

Tipuri de conţinut:

Am definit următoarele tipuri de conținut: Factură, Comandă cumpărare, Factură de servicii.

Am selectat comanda factură şi achiziţionarea, deoarece acestea sunt mai mult sau mai puţin universal sub
Entitățile care a stat. Toată lumea în afaceri se înţelege că o factură este o cerere de plată pentru o client pentru o suma eliberat pe o anumită data să fie plătit ca pe unele condiţii de plată. Acest lucru duce la o definiţie naturale de o CT pe care am numit "factura de formare" (pentru a distinge de orice alt tip de factură). Comanda de cumpărare este definit în mod similar cu uşurinţă. Am creat, de asemenea, o "factura de servicii de formare" prin crearea de un nou CT pe baza facturii"formare" CT şi adaugă doar o singură coloană, "servicii prestate".

Cu cele de mai sus, ne pot demonstra acum câteva caracteristici cheie ale CT pe fără a obţine împotmolit de încercarea de a explica un concept abstract primul; deja toată lumea înţelege ceea ce înţelegem noi prin "factură" şi "comandă de cumpărare" şi în schimb sunt capabili să se concentreze pe mecanica de CT în sine.

Liste particularizate:

CT cu coloane de tipul căutare"" indicaţi spre o personalizate lista sau biblioteca de documente. Noi folosim acest extensiv şi pentru cutia cu nisip, am creat o listă personalizată care conţine clienţii de sprijin. Am ales clienţii pentru că este un concept simplu de înţeles şi uşor de a demonstra. CT de factură are o coloană, "client" care este definită de tip căutare"" care punctele de la această listă.

Am creat o listă particularizată similare pentru a gestiona "furnizori" pentru comanda de cumpărare"" CT.

Biblioteci de documente:

Am creat două biblioteci de documente: "Facturi" şi "Amestecat documentele".

Am configurat în biblioteca de documente facturile pentru a gestiona doar documente de tip CT "Factura".

Am configurat "documentele mixte" Biblioteca pentru a gestiona toate trei CT.

Creaţi mai multe opinii care arată de sortare, filtrare, foaie de date şi gruparea.

Căutare:

Am definit două noi proprietăți gestionate şi mapate-le la numărul facturii şi client.

Am creat un nou site de căutare personalizate avans şi modificate pentru a permite utilizatorilor să caute pentru facturi"" folosind aceste două proprietăți mapate.

Modifica XSLT astfel încât numărul facturii şi client, Când prezint, apar într-un tabel HTML într-o culoare stralucitoare. Scopul aici este pentru a demonstra că astfel de formatare, este posibil.

Comasarea informaţiilor:

Putem aranja pentru utilizatorii cheie să participe la un demo.

Am urmaţi acest script simplu:

  1. Descrie sensul şi scopul de un CT, folosind facturi şi ordine de cumpărare ca exemple.
  2. Arată factura CT definirea în timp ce simultan, asigurându-i că acestea nu trebuie să utilizaţi aceste ecrane ei înşişi, doar ridica conceptele.
  3. Du-te la biblioteca de documente facturile.
  4. Încărcaţi un document.
  5. Demonstra că clientul verticală este într-adevăr provin dintr-o listă particularizată.
  6. Adauga un client nou la lista de client şi apoi actualizaţi recent încărcat factura meta-date cu clientul nou create.
  7. Comutare la "documentele mixte" Biblioteca şi încărcaţi un document. Explica cum sistemul solicită un tip de document.
  8. Du-te înapoi la biblioteca de documente facturi şi arată modul în care faceţi clic pe un nume de coloană se schimbă ordinea de sortare.
  9. Demonstra coloana-nivel de filtrare.
  10. Arată diferite puncte de vedere care să demonstreze sortare multi-nivel, filtrarea şi gruparea.
  11. Arată vizualizarea foaie de date.
  12. Explica scopul "documente neetichetate" Vezi.
  13. Trece la cautarea avansata personalizate.
  14. Până acum, documentul recent încărcate ar trebui să au fost accesate cu crawlere şi indexate, Deci să efectuaţi o căutare care demonstrează capacitatea de a localiza factura respectivă prin proprietatea mapate.
  15. Vom demonstra diferenţa dintre căutarea prin proprietățile mapate vs. doar o cautare text.

La acest punct, Suntem mai mult sau mai puţin făcut cu demo. Se pare să ia despre 30 pentru a 45 minute, în funcţie de cât de multe întrebări cere oamenilor.

Noi apoi le trimite inapoi la birourile lor cu "temele". Aceasta constă într-un simplu excel foaie de calcul în cazul în care vom cere-le să definească pentru noi ceea ce ei cred că au nevoie în termeni de CT pe, atât la nivel înalt (scopul doar de numele şi de afaceri) precum şi coloane şi tipul datelor ei ar stoca în coloana. Nu cerem pentru a defini tipurile de date coloană în termeni de MOSS, Dar termenii de afaceri.

În rezumat:

Am creat un mediu de nisip pe care le putem folosi pentru a demonstra unele caracteristici de bază MOSS a căror recurs sunt la nivel de Intreprindere.

Am au modelat uşor de înţeles şi comune de afaceri entităţi, astfel încât utilizatorii pot concentra pe MOSS şi nu obţine împotmolit entităţile / exemple se.

Utilizatorii de afaceri de mers pe jos de sesiunile de teze cu "temele" sub formă de documente excel care acum sunt competente pentru a completa şi de a folosi pentru proiectarea propriile tipuri de conținut primul-cut.

În cele din urmă, vom efectua demo-uri în timp, membrii echipei clientului, ele devin mai capabil să ducă mai departe, nu demo ei înşişi şi, în general, elibera sus restul dintre noi pentru a lucra la probleme mai complexe, cum ar fi global taxonomie, fluxuri de lucru complexe, BDC şi ca.

MOSS: Exemplu funcţional-tip de date particularizat

Scenariu de afaceri:

Implementarea la nivel de Intreprindere MOSS pentru companie de producţie cu 30+ site-uri şi câteva zeci de departamentele corporative.

Obiectivul de afaceri:

În ciuda o multitudine de grupuri de afaceri (departamente, Locatii, etc), anumite date trebuie menținute la un nivel global. De exemplu, o autoritate lista master toate locaţiile fizice ale companiei (ex. facilităţi de producţie, locaţii de depozit, birouri de vânzări) ar trebui să fie menţinute într-o locaţie centrală.

Probleme tehnice:

Taxonomia Intreprindere a fost implementat folosind mai multe colecții de site-ul. Ne-ar fi plăcut să creeze autoritate lista de locaţii fizice într-o listă particularizată de AAC. Apoi, Când am nevoie pentru a avea o coloană într-un tip de conținut (sau o coloană de adăugat la o lista sau doc bibliotecă) care conţinea locatiile corporate, ne-ar crea o coloană utilizând "căutare" tip de date şi punct la această listă de maestru.

Din păcate, tipurile de date de căutare trebuie să accesa o listă de sursa "la nivel local" însemnând că lista noastră de autoritate nu cuprind colecţii de site-ul.

Soluţii tehnice:

Implementarea unui nou tip de date personalizate puse în aplicare pe baza SPField şi reprezentat ca un DropDownList în interfaţa utilizator a cărui ListItems popula din lista AAC maestru.

Am creat o colecţie de site-ul nou numit "http://localhost/EnterpriseData". Acolo, am creat o listă particularizată numit "Locatiile Corporate". Această listă utilizează doar standard "titlul" câmp să conţină lista de locaţii reale corporative.

Unul urmează mai multe etape discret pentru a crea un tip de date predefinite în AAC. Ele sunt:

  1. Definiţi o clasă care moștenește de la SPField (unul poate moşteni din alte domenii, dacă este necesar).

Aici este codul pentru că:

publice Clasa XYZZYCorporateLocationField : SPFieldText
{
publice XYZZYCorporateLocationField
(SPFieldCollection câmpuri, şir typeName, şir displayName)
: baza(câmpuri, typeName, displayName) { }

publice XYZZYCorporateLocationField
(SPFieldCollection câmpuri, şir displayName)
: baza(câmpuri, displayName) { }

publice suprascrie BaseFieldControl FieldRenderingControl
{
obţine
{
BaseFieldControl controlul = noi XYZZYCorporateLocationFieldControl();
controlul. Denumirea câmpului = Acest lucru.InternalName;
reveni controlul;
} //obţine
} // fieldrenderingcontrol

publice suprascrie şir GetValidatedString(obiect valoarea)
{
Dacă (Acest lucru.Necesare || valoare. ToString().Este egal cu(Şir.Gol))
{
arunca noi SPFieldValidationException ("Departamentul nu este alocat.");
}
reveni baza.GetValidatedString(valoarea);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Defini o altă clasă care moștenește de la controlul bazei câmp, ca şi în:

publice Clasa XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protejate DropDownList XYZZYCorporateLocationSelector;

protejate suprascrie şir DefaultTemplateName
{
obţine
{
reveni "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

publice suprascrie obiect Valoarea
{
obţine
{
EnsureChildControls();
reveni Acest lucru.XYZZYCorporateLocationSelector.SelectedValue;
} // obţine
set
{
EnsureChildControls();
Acest lucru.XYZZYCorporateLocationSelector.SelectedValue = (şir)Acest lucru.ItemFieldValue;
} // set
} // suprascrie obiect valoare

protejate suprascrie nule CreateChildControls()
{

Dacă (Acest lucru.Domeniul == nul || Acest lucru.ControlMode == SPControlMode.Afişare)
reveni;

baza.CreateChildControls();

Acest lucru.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer. FindControl("XYZZYCorporateLocationSelector");

Dacă (Acest lucru.XYZZYCorporateLocationSelector == nul)
arunca noi Excepţie("EROARE: Imposibil de încărcat. Fișierul ASCX!");

Dacă (!Acest lucru.Pagina de IsPostBack.)
{

folosind (SPSite site-ul = noi SPSite("http://localhost/enterprisedata"))
{
folosind (SPWeb web = site-ul. OpenWeb())
{

SPList.Update() currentList = web. Liste["Locatii corporativă"];

foreach (SPItem XYZZYCorporateLocation în currentList.Items)
{
Dacă (XYZZYCorporateLocation["Titlul"] == nul) «««;

şir theTitle;
theTitle = XYZZYCorporateLocation["Titlul"].ToString();

Acest lucru.XYZZYCorporateLocationSelector.Items.Add
(noi ListItem(theTitle, theTitle));

} // foreach

} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/enterprisedata")

} // Dacă nu o postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Codul de mai sus practic implementează logica pentru popularea DropDownList cu valori din listă particularizată AAC situat la http://localhost/enterprisedata şi numit "departamentele companiei".

Am definit ambele clase într-un fişier unic .cs, compilat-o şi pune-l în GAC (puternic solicitate, desigur).

  1. Aplicarea unui şablon de control (.ascx) ca:

<%@ Controlul Limba= "C#" Moștenește="Microsoft.SharePoint.portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.portal,Versiune = 12.0.0.0, Cultură = neutră,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Întotdeauna" %>
<%
@ Înregistrează-te TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Asamblare="Microsoft.SharePoint, Versiune = 12.0.0.0, Cultură = neutră, PublicKeyToken = 71e9bce111e9429c" %> <%@ Înregistrează-te TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Asamblare="Microsoft.SharePoint, Versiune = 12.0.0.0, Cultură = neutră, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID-UL= "XYZZYCorporateLocationFieldControl" Runat= "server">
<Şablon>
<ASP:DropDownList ID-UL= "XYZZYCorporateLocationSelector" Runat= "serverul" />
</Şablon>
</
SharePoint:RenderingTemplate>

Cele de mai sus este stocat în c:\Programul filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. În cele din urmă, vom crea un fişier XML pentru a salva în... 12XML Director. Acest lucru este florin care defineşte tipul nostru de date personalizate şi exemplu meu, se pare ca acest lucru:

<?XML versiunea="1.0" codificarea="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Câmp nume="TypeName">CorporateLocations</Câmp>
<
Câmp nume="ParentType">Textul</Câmp>
<
Câmp nume="TypeDisplayName">Locatiile corporate</Câmp>
<
Câmp nume="TypeShortDescription">Toate locaţiile XYZZY corporative, inclusiv facilităţi de fabricație sau alte.</Câmp>
<
Câmp nume="UserCreatable">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInListCreate">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInDocumentLibraryCreate">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInSurveyCreate">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInColumnTemplateCreate">ADEVĂRAT</Câmp>
<
Câmp nume="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versiunea = 1.0.0.0, Cultură = neutră, PublicKeyToken = b0b19e85410990c4</Câmp>
<
RenderPattern nume="DisplayPattern">
<
Comutator>
<
Expr>
<
Coloană />
</
Expr>

<Caz Valoarea=""/>

<În mod implicit>
<
HTML>
<![CDATA[
<stil de control = "culoare:Roşu"><b>]]>
</
HTML>

<
Coloană SubColumnNumber="0" HTMLEncode="ADEVĂRAT"/>

<HTML><![CDATA[</b></durata de>]]></HTML>

</
În mod implicit>
</
Comutator>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Acest fişier XML adaugă tipul de date particularizate pentru a AAC "Biblioteca" şi se potriveşte împotriva GAC au avut Adunarea.

După toate aceste biţi, se deplasează în locul, iisreset pe server şi acesta ar trebui să toate începe să lucreze frumos.

MOSS: Actualizarea o listă particularizată

Există multe exemple bune liste particularizate prin intermediul SDK-ul de actualizare. Aici este încă un alt.

Problema de afaceri: Formular InfoPath a fost conceput, care permite utilizatorilor să intre online cumpăraţi rechiziţiile. PO aprovizionare numere ar trebui să fie secvenţă tradiţionale bazate pe valori şi calculează automat.

Soluţie de afaceri: Crea o listă personalizată de muşchi care conţine două coloane: "ControlField" şi "ControlValue". Coloana valoare conţine următorul număr de aprovizionare cumpărare. Reţineţi că generic "control" Convenţia prevede controlul viitoare câmpuri care pot fi utilizate după cum este necesar.

Soluţii tehnice: Creaţi un serviciu web accesate de catre client de InfoPath. Serviciul web se întoarce înapoi la următorul număr de aprovizionare de cumpărare şi actualizează valoarea de listă.

Lecţiile învăţate:

  • Când adăugaţi acest serviciu web ca o sursă de date formular InfoPath, L-am găsit necesar să convertizor it la spre un CZU şi stocaţi-o într-o bibliotecă de conexiuni de date.
  • Am găsit-o, de asemenea, necesare pentru a permite transdomeniu scripting prin intermediul serviciilor centrale administraţiei // management aplicație // formular de configurare a serverului.
  • Prima data încercat forma pentru a accesa serviciul web, este nevoie de o perioada de timp şi cu ocazia, ar fi timpul. Am gadila cu setările în formă de server de configurare pentru a extinde setările de expirare şi care părea să ajute.

Codul:

folosind Sistem;
folosind System.Web;
folosind System.Web.Services;
folosind System.Web.Services.Protocols;
folosind Microsoft.SharePoint;
folosind System.Configuration;

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

//Decomentaţi următoarea linie dacă utilizaţi componentele proiectate
//InitializeComponent();
}

/// <Rezumat>
/// Obţine următorul număr PO la po numărul de control listă sharepoint.
/// Incrementului PO numărul în listă.
/// </Rezumat>
/// <întoarce></întoarce>
[WebMethod]
publice şir GetNextPoNumber()
{
şir SpPoControlSiteName; // Numele site-ului MOSS reale care găzduieşte lista de PO Control.
şir SpPoControlListName; // Numele din lista de MOSS reale care conţine controlul Po.

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

şir nextPoReqNumber = "xyzzy";

folosind (SPSite site-ul = noi SPSite(SpPoControlSiteName))
{
folosind (SPWeb web = site-ul. OpenWeb())
{

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

foreach (SPItem controlItem în currentList.Items)
{

Dacă (((şir)controlItem["ControlField"]).Este egal cu("NextPoNumber"))
{
nextPoReqNumber = (şir)controlItem["ControlValue"];

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

int_nextPoReqNumber ;

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

} // Localizarea, lectură şi actualizarea PO numărul din lista.


} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")

reveni nextPoReqNumber;

}
}