MOSS: Funktsionaalne näide – kohandatud andmetüübi

Äri stsenaariumi:

Ettevõtte-tasandil rakendamise MOSS tootev ettevõte koos 30+ saidid ja paar tosinat ettevõtte osakonnad.

Äri eesmärgi:

Kuigi ärirühmad hulgaliselt (osakonnad, asukohad, jne), teatavate andmete säilitamise ülemaailmsel tasandil. Näiteks, kõik füüsilised asukohad ettevõtte autoriteetne juhtloendi (näiteks. tootmisüksused, lao asukohad, harukontorid) säilitamise keskses asukohas.

Tehnilise probleemi:

Ettevõtte taksonoomia rakendati, kasutades mitut saidikogumit. Me oleksime soovinud füüsilist asukohta autoriteetne loendit luua kohandatud WSS loend. Seejärel, Kuna meil oli vaja on veeru sisu tüüp (või veeru lisada nimekirja või doc Raamatukogu) mis sisaldas ettevõtte asukohtades, Loome veeru abil otsing"" andmetüübi ja sellega punkti.

Kahjuks, otsing andmetüübid peavad pääseda "kohaliku allikas loendi" Meie autoriteetse nimekirja ei saa jaotada saidikogumite tähendus.

Tehniline lahendus:

Rakendada uue kohandatud andmetüübi rakendamine põhineb SPField ja DropDownList, kelle ListItems asustamiseks alates WSS juhtloendi UI esindatud.

Oleme loonud uue saidikogumi nimega "http://localhost/EnterpriseData". Seal, oleme loonud kohandatud loend nimega "Ettevõtte asukohta". See loend kasutab lihtsalt standard "tiitel" väli sisaldab tegeliku ettevõtte asukohtade nimekiri.

Üks tuleneb mitme diskreetse samme, et luua kohandatud andmetüübi WSS. Nad on:

  1. Määrata klassi, mis pärib SPField (üks võib pärivad muid välju kui vaja).

Siin on kood, et:

avalik klass XYZZYCorporateLocationField : SPFieldText
{
avalik XYZZYCorporateLocationField
(Atribuuti SPFieldCollection väljad, stringi typeName, stringi displayName)
: baasi(väljad, typeName, displayName) { }

avalik XYZZYCorporateLocationField
(Atribuuti SPFieldCollection väljad, stringi displayName)
: baasi(väljad, displayName) { }

avalik alistada BaseFieldControl FieldRenderingControl
{
Saada
{
BaseFieldControl kontrolli = Uus XYZZYCorporateLocationFieldControl();
kontrolli. Väljanimi = See.InternalName;
edasi-tagasi kontrolli;
} //Saada
} // fieldrenderingcontrol

avalik alistada stringi GetValidatedString(objekti väärtus)
{
Kui (See.Nõutav || väärtus. ToString().Võrdub(String.Tühi))
{
viska Uus SPFieldValidationException ("Osakond on määratud.");
}
edasi-tagasi baasi.GetValidatedString(väärtus);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Määratleda baasvälja juhtelement pärib teise klassi, nagu ka:

avalik klass XYZZYCorporateLocationFieldControl : BaseFieldControl
{
kaitstud DropDownList XYZZYCorporateLocationSelector;

kaitstud alistada stringi DefaultTemplateName
{
Saada
{
edasi-tagasi "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

avalik alistada objekti Väärtus
{
Saada
{
EnsureChildControls();
edasi-tagasi See.XYZZYCorporateLocationSelector. SelectedValue;
} // Saada
komplekt
{
EnsureChildControls();
See.XYZZYCorporateLocationSelector.SelectedValue = (stringi)See.ItemFieldValue;
} // komplekt
} // alistada objekti väärtus

kaitstud alistada tühine CreateChildControls()
{

Kui (See.Väli == null || See.Atribuuti ControlMode == SPControlMode.Kuva)
edasi-tagasi;

baasi.CreateChildControls();

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

Kui (See.XYZZYCorporateLocationSelector == null)
viska Uus Erand("VIGA: Ei saa laadida. ASCX-faili!");

Kui (!See.IsPostBack leht.)
{

kasutades (SPSite'i Site = Uus SPSite'i("http://localhost/enterprisedata"))
{
kasutades (SPWebi Web = site. OpenWeb())
{

SPList currentList = web. Nimekirjad["Ettevõtte asukohad"];

foreach (SPItem XYZZYCorporateLocation aastal currentList.Items)
{
Kui (XYZZYCorporateLocation["Tiitel"] == null) jätkata;

stringi theTitle;
theTitle = XYZZYCorporateLocation["Tiitel"].ToString();

See.XYZZYCorporateLocationSelector.Items.Add
(Uus Sisendparameeter(theTitle, theTitle));

} // foreach

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/enterprisedata")

} // kui mitte tagasipostitamine

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Eespool kood põhiliselt rakendab logic populating väärtustega WSS kohandatud loend asub aadressil DropDownList http://localhost/enterprisedata ja nimega "ettevõtte osakonnad".

Mõlema klassi määratletud ühtse .cs faili, See koostatakse ja seda ellu GAC-s (tugev nõutav, Muidugi).

  1. Elluviimiseks juhtelement Mall (.ascx) nagu on näidatud:

<%@ Kontrolli Keel= "C#" Pärib="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Versioon = 12.0.0.0, kultuuri = Arvamus puudub,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Alati" %>
<%
@ Registreeru TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Assamblee="Microsoft.SharePoint, Versioon = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registreeru TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assamblee="Microsoft.SharePoint, Versioon = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePointi:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" runat= "server">
<Mall>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" runat= "server" />
</Mall>
</
SharePointi:RenderingTemplate>

Eespool on säästetud c:\programm filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. Lõpuks, me luua XML-faili, et salvestada selle... 12XML kataloog. See on meie kohandatud andmetüüpi määratleva CAML ja minu näide, näeb välja selline:

<?XML-i versioon="1.0" kodeering="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Väli Nimi="TypeName">CorporateLocations</Väli>
<
Väli Nimi="ParentType">Teksti</Väli>
<
Väli Nimi="TypeDisplayName">Ettevõtte asukohtades</Väli>
<
Väli Nimi="TypeShortDescription">Kõik XYZZY ettevõtte kohtades, sealhulgas tootmis- või muud vahendid.</Väli>
<
Väli Nimi="UserCreatable">TÕSI</Väli>
<
Väli Nimi="ShowInListCreate">TÕSI</Väli>
<
Väli Nimi="ShowInDocumentLibraryCreate">TÕSI</Väli>
<
Väli Nimi="ShowInSurveyCreate">TÕSI</Väli>
<
Väli Nimi="ShowInColumnTemplateCreate">TÕSI</Väli>
<
Väli Nimi="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versiooni = 1.0.0.0, Culture = neutral, PublicKeyToken = b0b19e85410990c4</Väli>
<
RenderPattern Nimi="DisplayPattern">
<
Lüliti>
<
Avaldis>
<
Veerg />
</
Avaldis>

<Juhtum Väärtus=""/>

<Vaikimisi>
<
HTML>
<![CDATA[
<span style = "värv:Punane"><b>]]>
</
HTML>

<
Veerg SubColumnNumber="0" HTMLEncode="TÕSI"/>

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

</
Vaikimisi>
</
Lüliti>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
See XML-fail lisatakse kohandatud andmetüübi WSS "Raamatukogu" ja sobitab vastu GAC-s oli assamblee.

Pärast nende bittide siirdunud koht, iisreset server ja see peaks kõik Alustame kenasti.

3 mõtteid "MOSS: Funktsionaalne näide – kohandatud andmetüübi

  1. Alejandro
    Tere Paul,
    Esiteks, Täname artikkel, sest see on väga huvitav. Ainult üks küsimus;
    Kas sa tead, kui on võimalikud õigesti renderdada kohandatud väljatüübi loend andmelehevaates?
    Sest iga ma luua kohandatud väljatüübi näidatakse ainult-andmelehevaates (ja MSDN, näiteks, ei aita mind väga palju :-S).
    Tänud
    Vastus
  2. Lyndsay

    Ma kavatsen oma lahenduse rakendamine. Aga ma DropDownList asemel, Mul on ainult valik on DropDownChoiceList. Kas juhtuda teada üksuste lisamine on DropDownChoiceList? Me kasutame SharePointi 2007 SP1 ja Visual Studio 2005 SP1.

    Vastus

Jäta vastus

Teie e-posti aadressi ei avaldata. Kohustuslikud väljad on tähistatud *