Senario Busnes:
Gweithredu menter-eang o MOSS i gwmni gweithgynhyrchu gyda 30+ safleoedd ac ychydig o adrannau corfforaethol dwsin.
Amcan Busnes:
Er gwaethaf nifer fawr o grwpiau busnes (adrannau, lleoliadau, ac ati), Dylai data penodol yn cael ei gynnal ar lefel fyd-eang. Er enghraifft,, rhestr meistr awdurdodol o'r holl leoliadau ffisegol y cwmni (e.e.. gyfleusterau gweithgynhyrchu, lleoliadau warws, swyddfeydd gwerthu) Dylid cadw mewn lleoliad canolog.
Broblem dechnegol:
Gweithredwyd tacsonomeg menter defnyddio casgliadau lluosog y safle. Byddem wedi hoffi i greu rhestr awdurdodol o leoliadau ffisegol yn rhestr WSS bersonol. Yna, pan y mae angen inni gael colofn mewn math o gynnwys (neu ychwanegu colofn i Lyfrgell rhestr neu doc) yr oedd hwnnw'n cynnwys lleoliadau corfforaethol, Byddem yn creu Colofn gan ddefnyddio y "chwilio am" ffurf data a pwynt at y rhestr Meistr.
Yn anffodus, Rhaid chwilio am datatypes weld rhestr ffynhonnell "lleol" ystyr bod ni all ein rhestr awdurdodol yn rhychwantu casgliadau safle.
Ateb technegol:
Gweithredu Mae math newydd o ddata personol yn ei weithredu yn seiliedig ar SPField ac yn cynrychioli fel cwymprestr yn UI y mae eu ListItems yn poblogi o'r rhestr WSS Meistr.
Rydym wedi creu casgliad safle newydd o'r enw "http://localhost/EnterpriseData". Mae, Rydym wedi creu rhestr bersonol a enwir "Lleoliadau corfforaethol". Mae'r rhestr hon yn unig yn defnyddio "teitl safon" maes cynnwys y rhestr o leoliadau corfforaethol gwirioneddol.
Mae un yn dilyn sawl cam ar wahân i greu'r math o ddata personol yn WSS. Maent yn:
- Ddiffinio dosbarth sy'n etifeddu oddi wrth SPField (Efallai y bydd un yn etifeddu o feysydd eraill os oes angen).
Yma yn y Cod ar gyfer hynny:
cyhoeddus dosbarth XYZZYCorporateLocationField : SPFieldText
{
cyhoeddus XYZZYCorporateLocationField
(SPFieldCollection meysydd, llinyn typeName, llinyn displayName)
: sylfaen(meysydd, typeName, displayName) { }
cyhoeddus XYZZYCorporateLocationField
(SPFieldCollection meysydd, llinyn displayName)
: sylfaen(meysydd, displayName) { }
cyhoeddus gor-redeg BaseFieldControl FieldRenderingControl
{
gael
{
BaseFieldControl rheoli = newydd XYZZYCorporateLocationFieldControl();
rheoli. FieldName = hwn.InternalName;
dychwelyd rheoli;
} //gael
} // fieldrenderingcontrol
cyhoeddus gor-redeg llinyn GetValidatedString(gwrthrych gwerth)
{
os (hwn.Ofynnol || gwerth. ToString().Equals(Llinyn.Gwag))
{
taflu newydd SPFieldValidationException ("Mae'r adran nid wedi'i neilltuo.");
}
dychwelyd sylfaen.GetValidatedString(gwerth);
} // getvalidatedstring
} // XYZZYCorporateLocation
- Ddiffinio dosbarth arall sy'n etifeddu'r oddi wrth reolaeth maes sylfaen, fel yn:
cyhoeddus dosbarth XYZZYCorporateLocationFieldControl : BaseFieldControl
{
diogelu Cwymprestr XYZZYCorporateLocationSelector;
diogelu gor-redeg llinyn DefaultTemplateName
{
gael
{
dychwelyd "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName
cyhoeddus gor-redeg gwrthrych Gwerth
{
gael
{
EnsureChildControls();
dychwelyd hwn.XYZZYCorporateLocationSelector.SelectedValue;
} // gael
gosod
{
EnsureChildControls();
hwn.XYZZYCorporateLocationSelector.SelectedValue = (llinyn)hwn.ItemFieldValue;
} // gosod
} // diystyru gwrthrych gwerth
diogelu gor-redeg gwag CreateChildControls()
{
os (hwn.Maes == sero || hwn.ControlMode == SPControlMode.Arddangos)
dychwelyd;
sylfaen.CreateChildControls();
hwn.XYZZYCorporateLocationSelector =
(Cwymprestr)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");
os (hwn.XYZZYCorporateLocationSelector == sero)
taflu newydd Eithriad("GWALL: Ni ellir llwytho. Ffeil ASCX!");
os (!hwn.Page.IsPostBack)
{
gan ddefnyddio (SPSite safle = newydd SPSite("http://localhost/enterprisedata"))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{
SPList currentList = we. Rhestrau["Corfforaethol lleoliadau"];
foreach (Poeri XYZZYCorporateLocation yn currentList.Items)
{
os (XYZZYCorporateLocation["Teitl"] == sero) parhau;
llinyn theTitle;
theTitle = XYZZYCorporateLocation["Teitl"].ToString();
hwn.XYZZYCorporateLocationSelector.Items.Add
(newydd ListItem(theTitle, theTitle));
} // foreach
} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/enterprisedata")
} // Os nad postback
} // CreateChildControls
} // XYZZYCorporateLocationFieldControl
Yn y bôn, mae'r cod uchod yn gweithredu y rhesymeg ar gyfer poblogi'r cwymprestr â gwerthoedd o'r rhestr personol WSS wedi'u lleoli ar http://localhost/enterprisedata ac a enwir "adrannau corfforaethol".
Diffinnir yr ddau dosbarthiadau mewn ffeil.cs sengl, ei llunio a'i roi ar y GAC (angen cryf, wrth gwrs).
-
Gweithredu templed rheoli (.ascx) fel y dangosir:
<%@ Rheoli Iaith= "C#" Etifeddu="Microsoft.SharePoint.portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.portal,Fersiwn = 12.0.0.0, diwylliant = niwtral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Bob amser" %>
<%@ Cofrestru Tagprefix"wssawc =" Bwlch enw="Microsoft.SharePoint.WebControls" Cynulliad="Microsoft.SharePoint, Fersiwn = 12.0.0.0, Diwylliant = niwtral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Cofrestru Tagprefix= "SharePoint" Bwlch enw="Microsoft.SharePoint.WebControls" Cynulliad="Microsoft.SharePoint, Fersiwn = 12.0.0.0, Diwylliant = niwtral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID"XYZZYCorporateLocationFieldControl =" runat= "gweinydd">
<Templed>
<asp:Cwymprestr ID"XYZZYCorporateLocationSelector =" runat= "gweinydd" />
</Templed>
</SharePoint:RenderingTemplate>
Mae yr uchod yn cadw ym c:\rhaglen filescommon filesmicrosoft sharedweb gweinydd extensions12controltemplates.
- Yn olaf, Rydym yn creu ffeil XML i arbed yn y... Cyfeiriadur 12XML. Mae hyn yn CAML sy'n diffinio ein math o ddata personol ac ar gyfer fy enghraifft, yn edrych fel hyn:
<?xml fersiwn="1.0" amgodio="utf-8" ?>
<FieldTypes>
<FieldType>
<Maes Enw="TypeName">CorporateLocations</Maes>
<Maes Enw="ParentType">Testun</Maes>
<Maes Enw="TypeDisplayName">Lleoliadau corfforaethol</Maes>
<Maes Enw="TypeShortDescription">Holl leoliadau XYZZY corfforaethol, gan gynnwys cyfleusterau gweithgynhyrchu neu eraill.</Maes>
<Maes Enw="UserCreatable">WIR</Maes>
<Maes Enw="ShowInListCreate">WIR</Maes>
<Maes Enw="ShowInDocumentLibraryCreate">WIR</Maes>
<Maes Enw="ShowInSurveyCreate">WIR</Maes>
<Maes Enw="ShowInColumnTemplateCreate">WIR</Maes>
<Maes Enw="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Fersiwn = 1.0.0.0, Diwylliant = niwtral, PublicKeyToken = b0b19e85410990c4</Maes>
<RenderPattern Enw="DisplayPattern">
<Switsh>
<Mynegiannol>
<Colofn />
</Mynegiannol>
<Achos Gwerth=""/>
<Default>
<HTML>
<![CDATA[<rhychwantu arddull = "lliw:Coch"><b>]]>
</HTML>
<Colofn SubColumnNumber="0" HTMLEncode="WIR"/>
<HTML><![CDATA[</b></span>]]></HTML>
</Default>
</Switsh>
</RenderPattern>
</FieldType>
</FieldTypes>
Mae'r ffeil XML hon yn ychwanegu y math o ddata personol i'r WSS "Llyfrgell" ac yn cyfateb iddo erbyn y GAC oedd Cynulliad.
Ar ôl symud holl ddarnau hyn ar waith, iisreset ar y gweinydd, a dylai ddechrau gweithio yn ddel.
defnyddio System.Web.UI;
defnyddio System.Web.UI.WebControls;
Yr wyf yn ceisio gweithredu eich ateb. Fodd bynnag rwyf yn hytrach na cwymprestr, Nid oes gennyf y dewis ar gyfer DropDownChoiceList. Nid ydych yn digwydd gwybod sut i ychwanegu eitemau at DropDownChoiceList? Yr ydym yn defnyddio SharePoint 2007 SP1 a stiwdio gweledol 2005 SP1.