SAMANŲ: Funkcinis pavyzdys-vartotojo duomenų tipas

Verslo scenarijus:

Visos įmonės įgyvendinimas MOSS gamybos įmonė 30+ svetaines ir keletą dešimčių įmonių padalinių.

Verslo tikslas:

Nepaisant daugybės verslo grupių (departamentai, vietose, ir tt), tam tikrus duomenis, turėtų būti išlaikytos pasauliniu mastu. Pvz., autoritetingų meistras sąrašas visų fizines vietoves bendrovės (pvz.. gamybiniai pajėgumai, sandėlių išsidėstymo vietose, pardavimo agentūrose) turėtų būti išlaikyta centre.

Techninių problemų:

Įmonės taksonomijos buvo įgyvendinama naudojant kelis svetainių rinkinius. Būtų norėję sukurti patikimą sąrašą fizines vietoves pasirinktinį WSS sąrašą. Tada, Kada mums reikia, kad stulpelio turinio tipe (ar stulpelį prie sąrašo ar doc biblioteka) kad esančių įmonių ir vietų, Mes būtų naudojant "peržvalgos stulpelio kūrimas" duomenų tipo ir taškas į šį pagrindinį sąrašą.

Deja, peržvalgos duomenų tipai turi pasiekti šaltinio sąrašą "vietoje" tai reiškia, kad mūsų autoritetingų sąrašas gali kirsti svetainių rinkiniai.

Techninis sprendimas:

Įgyvendinti naują pasirinktiniam duomenų tipui įgyvendinama remiantis SPField ir atstovavo DropDownList kurių ListItems užpildyti iš meistras WSS sąrašo vartotojo sąsaja.

Mes sukūrėme naują svetainę kolekcija "http://localhost/EnterpriseData". Ten, Mes sukūrėme pasirinktinį sąrašą pavadino "Verslo vietos". Šis sąrašas tik naudoja standartinę "pavadinimas" srityje turi būti tikrasis įmonių vietų sąrašą ir.

Vienas toks kelių atskirų veiksmų sukurti vartotojo duomenų tipo WSS. Jie yra:

  1. Nustatyti klasės, kuri paveldi iš SPField (vienas gali paveldėti iš kitose srityse, jei reikia).

Čia yra kodas, kad:

visuomenės klasės XYZZYCorporateLocationField : SPFieldText
{
visuomenės XYZZYCorporateLocationField
(SPFieldCollection, esantį laukai, eilutė typeName, eilutė displayName)
: bazė(laukai, typeName, displayName) { }

visuomenės XYZZYCorporateLocationField
(SPFieldCollection, esantį laukai, eilutė displayName)
: bazė(laukai, displayName) { }

visuomenės Nepaisyti BaseFieldControl FieldRenderingControl
{
gauti
{
BaseFieldControl kontrolės = naujas XYZZYCorporateLocationFieldControl();
kontrolės. Lauko pavadinimas = tai.InternalName;
grįžti kontrolės;
} //gauti
} // fieldrenderingcontrol

visuomenės Nepaisyti eilutė GetValidatedString(objekto vertė)
{
Jei (tai.Reikia || vertė. ToString().Yra lygi(Eilutė.Tuščias))
{
mesti naujas SPFieldValidationException ("Departamentas nėra priskirtas.");
}
grįžti bazė.GetValidatedString(vertė);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Apibrėžti kita klasė, kuri paveldi iš pagrindinio lauko valdiklis, kaip ir:

visuomenės klasės XYZZYCorporateLocationFieldControl : BaseFieldControl
{
apsaugoti DropDownList XYZZYCorporateLocationSelector;

apsaugoti Nepaisyti eilutė DefaultTemplateName
{
gauti
{
grįžti "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

visuomenės Nepaisyti objekto Vertė
{
gauti
{
EnsureChildControls();
grįžti tai.XYZZYCorporateLocationSelector. SelectedValue;
} // gauti
rinkinys
{
EnsureChildControls();
tai.XYZZYCorporateLocationSelector.SelectedValue = (eilutė)tai.ItemFieldValue;
} // rinkinys
} // Nepaisyti objekto vertės

apsaugoti Nepaisyti negalioja CreateChildControls()
{

Jei (tai.Lauko == neapibrėžtas || tai.ControlMode == SPControlMode.Ekranas)
grįžti;

bazė.CreateChildControls();

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

Jei (tai.XYZZYCorporateLocationSelector == neapibrėžtas)
mesti naujas Išimtis("KLAIDA: Negalima įkelti. ASCX failą!");

Jei (!tai.IsPostBIsPostBackırmalıyız puslapis.)
{

naudojant (SPSite svetainės = naujas SPSite("http://localhost/enterprisedata"))
{
naudojant (SPWeb interneto = svetainėje. OpenWeb())
{

SPList currentList = interneto. Sąrašai["Įmonių ir vietų"];

foreach (SPItem XYZZYCorporateLocation į currentList.Items)
{
Jei (XYZZYCorporateLocation["Pavadinimas"] == neapibrėžtas) toliau;

eilutė theTitle;
theTitle = XYZZYCorporateLocation["Pavadinimas"].ToString();

tai.XYZZYCorporateLocationSelector.Items.Add
(naujas ListItem(theTitle, theTitle));

} // foreach

} // naudojant spweb interneto = site.openweb()
} // naudojant spsite svetainės = naujas spsite("http://localhost/enterprisedata")

} // Jei ne visiškai nenaudingai

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Šį kodą iš esmės įgyvendina logika galima įvesti DropDownList su WSS pasirinktinio sąrašo esančių reikšmių http://localhost/enterprisedata ir pavadintas "įmonių padalinių".

Aš apibrėžta abiem klasėms vieną .cs failą, rengiami jį ir įdėti jį į GAC (stiprus reikia, žinoma).

  1. Įgyvendinti kontrolės šabloną (.ascx) kaip parodyta:

<%@ Kontrolės Kalba= "#" Kad paveldi= "Microsoft SharePoint Portal ServerAdmin..., CreateSiteCollectionPanel1 Microsoft.SharePoint.Portal,Versija 12.0.0.0, kultūros = neutral =,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Visada" %>
<%
@ Užsiregistruok TagPrefix= "wssawc" Namespace= "Microsoft.SharePoint.WebControls" Asamblėja="Microsoft.SharePoint, Versija = 12.0.0.0, Kultūros = neutrali, PublicKeyToken = 71e9bce111e9429c" %> <%@ Užsiregistruok TagPrefix= "SharePoint" Namespace= "Microsoft.SharePoint.WebControls" Asamblėja="Microsoft.SharePoint, Versija = 12.0.0.0, Kultūros = neutrali, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" būti runat= "serveris">
<Šablonas>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" būti runat= "serveris" />
</Šablonas>
</
SharePoint:RenderingTemplate>

Pirmiau įrašomas į c:\programa filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. Pagaliau, mes sukurti XML failą išsaugoti į į... 12XML katalogas. Tai CAML, kuris apibrėžia mūsų pasirinktiniam duomenų tipui ir mano pvz., atrodo taip::

<?XML versija="1.0" kodavimas="UTF-8" ?>
<
Lauko>
<
Lauko tipas>
<
Lauko vardas, pavadinimas="TypeName">CorporateLocations</Lauko>
<
Lauko vardas, pavadinimas="ParentType">Tekstas</Lauko>
<
Lauko vardas, pavadinimas="TypeDisplayName">Įmonių ir vietų</Lauko>
<
Lauko vardas, pavadinimas="TypeShortDescription">Visos XYZZY įmonės vietos gamybos arba kiti įrengimai.</Lauko>
<
Lauko vardas, pavadinimas="UserCreatable">TIESA</Lauko>
<
Lauko vardas, pavadinimas="ShowInListCreate">TIESA</Lauko>
<
Lauko vardas, pavadinimas="ShowInDocumentLibraryCreate">TIESA</Lauko>
<
Lauko vardas, pavadinimas="ShowInSurveyCreate">TIESA</Lauko>
<
Lauko vardas, pavadinimas="ShowInColumnTemplateCreate">TIESA</Lauko>
<
Lauko vardas, pavadinimas="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versija = 1.0.0.0, Kultūros = neutrali, PublicKeyToken = b0b19e85410990c4</Lauko>
<
RenderPattern vardas, pavadinimas="DisplayPattern">
<
Jungiklis>
<
Išraiška>
<
Stulpelio />
</
Išraiška>

<Atveju Vertė=""/>

<Numatytasis>
<
HTML>
<![CDATA[
<span style = "color:Raudona"><b>]]>
</
HTML>

<
Stulpelio SubColumnNumber="0" HTMLEncode="TIESA"/>

<HTML><![CDATA[</b></tarpą>]]></HTML>

</
Numatytasis>
</
Jungiklis>

</
RenderPattern>
</
Lauko tipas>
</
Lauko>
Šio XML failo prideda pasirinktinių duomenų tipo WSS "biblioteka" ir dera jame prieš GAC turėjo Asamblėja.

Perkėlę visus šiuos bitus į vietą, iisreset serveris ir jis turėtų pradėti darbo gražiai.

3 mintys apie "SAMANŲ: Funkcinis pavyzdys-vartotojo duomenų tipas

  1. Alejandro
    Max Paul,
    visų pirma, Ačiū už straipsnį, nes tai labai įdomu. Tik vienas klausimas;
    Ar žinote, jei tai posible daro teisingai tokį pasirinktinį lauką duomenų lapo rodinyje sąrašo?
    Nes kiekvieną lauką tipas kuriu jis rodomas kaip tik skaityti duomenų lapo rodinyje (ir MSDN, pvz., nepadeda man labai :-S).
    ačiū
    Atsakyti
  2. Česlava

    I esu bando įgyvendinti savo sprendimą. Tačiau aš vietoj DropDownList, Tik turiu galimybe, DropDownChoiceList. Ar jums atsitikti žinoti, kaip pridėti elementus į DropDownChoiceList? Mes naudojame SharePoint 2007 SP1 ir Visual Studio 2005 SP1.

    Atsakyti

palik atsakymą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *