MOSS: Enghraifft swyddogaethol - Custom Math Data

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:

  1. 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

  1. 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).

  1. 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.

  1. 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.

3 meddyliau ar "MOSS: Enghraifft swyddogaethol - Custom Math Data

  1. Alejandro
    Hi Paul,
    yn gyntaf oll, Diolch am yr erthygl, oherwydd y mae'n ddiddorol iawn. Dim ond un cwestiwn;
    Ydych chi'n gwybod os yw'n ddigwydd rendr math maes personol yn y gwedd rhestr gywir?
    Oherwydd y dangosir pob math maes personol ei greu darllen-yn-unig yn gwedd (ac y MSDN, er enghraifft,, Nid yw yn helpu fi fawr iawn :-S).
    Diolch
    Ateb
  2. Lyndsay
    Mae'n penderfynu! Dim ond angen i ychwanegu

    defnyddio System.Web.UI;
    defnyddio System.Web.UI.WebControls;

    Ateb
  3. Lyndsay

    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.

    Ateb

Ad a Ateb

Ni fydd eich cyfeiriad e-bost yn cael ei gyhoeddi. Meysydd gofynnol yn cael eu marcio *