Business skenaario:
Yrityksen laajuinen toteuttamisesta MOSS valmistajayritys, jolla 30+ sivustojen ja muutamia kymmeniä yrityksen yksiköt.
Liiketoiminnan tavoite:
Huolimatta monenlaisia yritysten ryhmille (osastot, sijainnit, jne), tietyt tiedot olisi säilytettävä maailmanlaajuisella tasolla. Esimerkiksi, Kaikki fyysinen sijainti yrityksen arvovaltainen pääluettelo (virrankatkaisu. tuotantolaitokset, varastosijainteja, myyntikonttorit) olisi säilytettävä keskeisellä paikalla.
Tekninen ongelma:
Yrityksen taksonomia on toteutettu useita sivustokokoelmia. Olisimme halunneet luoda arvovaltainen luettelo sijainneissa WSS luettelon. Sitten, kun tarvitsimme sarakkeen sisällön tyyppi (tai sarake lisätään luettelon tai doc) joka sisälsi yritysten tiloissa, Haluamme luoda sarakkeen "valinta" tietotyypin ja kohta siihen.
Valitettavasti, haku tietotyypit on pääsy lähdeluettelon "paikallisesti" eli arvovaltainen listalta ei voi ulottua sivustokokoelmat.
Tekninen ratkaisu:
Toteuttaa uuden mukautetun tietotyypin täytäntöön perustuu SPField ja edustettuina DropDownList UI joiden ListItems täyttää WSS pääluettelo.
Olemme luoneet uuden sivustokokoelman kutsutaan "http://localhost/EnterpriseData". Siellä, Olemme luoneet luettelon nimeltään "Paikoissa". Tässä luettelossa käytetään vain standardi "otsikko" kenttä sisältää luettelon yritysten sijainnit.
Yksi seuraa useita erillisiä vaiheita voit luoda mukautetulle tietotyypille WSS. Ne ovat:
- Määritä luokka, joka perii SPField (Yksi voi periä muiden kenttien tarvittaessa).
Tässä on koodi, että:
yleiset luokan XYZZYCorporateLocationField : SPFieldText
{
yleiset XYZZYCorporateLocationField
(SPFieldCollection-asetus kentät, merkkijono typeName, merkkijono displayName)
: Base(kentät, typeName, displayName) { }
yleiset XYZZYCorporateLocationField
(SPFieldCollection-asetus kentät, merkkijono displayName)
: Base(kentät, displayName) { }
yleiset Ohita BaseFieldControl FieldRenderingControl
{
saada
{
BaseFieldControl ohjaus = Uusi XYZZYCorporateLocationFieldControl();
ohjausobjekti. Kentän nimi = Tämä.InternalName;
paluu valvonta;
} //saada
} // fieldrenderingcontrol
yleiset Ohita merkkijono GetValidatedString(objekti arvo)
{
Jos (Tämä.Tarvitaan || arvo. Ominaisuuden ToString().Vastaa(Merkkijono.Tyhjä))
{
heittää Uusi SPFieldValidationException ("Osasto ei ole määritetty.");
}
paluu Base.GetValidatedString(arvo);
} // getvalidatedstring
} // XYZZYCorporateLocation
- Määritä toinen luokka, joka perii peruskentän valvonta, kuten:
yleiset luokan XYZZYCorporateLocationFieldControl : BaseFieldControl
{
suojattu DropDownList XYZZYCorporateLocationSelector;
suojattu Ohita merkkijono DefaultTemplateName
{
saada
{
paluu "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName
yleiset Ohita objekti Arvo
{
saada
{
EnsureChildControls();
paluu Tämä.XYZZYCorporateLocationSelector.SelectedValue;
} // saada
Määritä
{
EnsureChildControls();
Tämä.XYZZYCorporateLocationSelector.SelectedValue = (merkkijono)Tämä.ItemFieldValue;
} // Määritä
} // ohittaa objektin arvo
suojattu Ohita mitättömäksi Kohdetta CreateChildControls()
{
Jos (Tämä.Kentän == Null || Tämä.ControlMode == SPControlMode.Näyttö)
paluu;
Base.Kohdetta CreateChildControls();
Tämä.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer. FindControl("XYZZYCorporateLocationSelector");
Jos (Tämä.XYZZYCorporateLocationSelector == Null)
heittää Uusi Poikkeus("VIRHE: Ei voi ladata. ASCX-tiedostossa!");
Jos (!Tämä.IsPostBack sivu.)
{
käyttäminen (SPSite sivusto = Uusi SPSite("http://localhost/enterprisedata"))
{
käyttäminen (SPWeb Web = sivusto. OpenWeb())
{
SPList currentList = web. Luettelot["Yritysten tiloissa"];
foreach (SPItem XYZZYCorporateLocation Tässä currentList.Items)
{
Jos (XYZZYCorporateLocation["Otsikko"] == Null) Jatka;
merkkijono Asiasana;
Asiasana = XYZZYCorporateLocation["Otsikko"].Ominaisuuden ToString();
Tämä.XYZZYCorporateLocationSelector.Items.Add
(Uusi Luettelokohde(Asiasana, Asiasana));
} // foreach
} // käyttämällä spweb web = site.openweb()
} // spsite-sivuston = uusi spsite("http://localhost/enterprisedata")
} // Jos ei takaisinlähetys
} // Kohdetta CreateChildControls
} // XYZZYCorporateLocationFieldControl
Edellä koodi periaatteessa toteuttaa logiikan asuttavat DropDownList arvoilla WSS mukautetun luettelon osoitteessa http://localhost/enterprisedata ja nimetty "yrityksen yksiköt".
Molempien luokkien määriteltyjen yhden .cs tiedosto, kootaan se ja laita se GAC (vahva tarvitaan, Tietysti).
-
Toteuttaa valvonnan malli (.ascx) kuten:
<%@ Valvonta Kieli= C#" Perii="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, kulttuuri = neutraali,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Aina" %>
<%@ Rekisteröidy TagPrefix-määritettä= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Kokoonpano="Microsoft.SharePoint, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Rekisteröidy TagPrefix-määritettä= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Kokoonpano="Microsoft.SharePoint, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:Ohjausobjektimallin TUNNUS= "XYZZYCorporateLocationFieldControl" RUNAT= "palvelin">
<Malli>
<ASP:DropDownList TUNNUS= "XYZZYCorporateLocationSelector" RUNAT= "palvelin" />
</Malli>
</SharePoint:Ohjausobjektimallin>
Edellä on tallennettu c:\ohjelma filescommon filesmicrosoft sharedweb server extensions12controltemplates.
- Lopuksi, voimme luoda XML-tiedoston tallentaa... 12XML hakemisto. Tämä on CAML, joka määrittää mukautetulle tietotyypille ja esimerkiksi, näyttää tältä:
<?XML versio="1.0" koodaus="UTF-8" ?>
<FieldTypes>
<FieldType>
<Kenttä Nimi="TypeName">CorporateLocations</Kenttä>
<Kenttä Nimi="ParentType">Teksti</Kenttä>
<Kenttä Nimi="TypeDisplayName">Yritysten tiloissa</Kenttä>
<Kenttä Nimi="TypeShortDescription">Kaikki XYZZY paikoissa kuten valmistus- tai.</Kenttä>
<Kenttä Nimi="UserCreatable">TOTTA</Kenttä>
<Kenttä Nimi="ShowInListCreate">TOTTA</Kenttä>
<Kenttä Nimi="ShowInDocumentLibraryCreate">TOTTA</Kenttä>
<Kenttä Nimi="ShowInSurveyCreate">TOTTA</Kenttä>
<Kenttä Nimi="ShowInColumnTemplateCreate">TOTTA</Kenttä>
<Kenttä Nimi="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versio = tulee ilmoittaa yleisessä muodossa, Culture = neutral, PublicKeyToken = b0b19e85410990c4</Kenttä>
<RenderPattern Nimi="DisplayPattern">
<Kytkin>
<Lauseke>
<Sarake />
</Lauseke>
<Tapauksessa Arvo=""/>
<Oletus>
<HTML>
<![CDATA[<span style = "color:Punainen"><b>]]>
</HTML>
<Sarake SubColumnNumber="0" HTMLEncode="TOTTA"/>
<HTML><![CDATA[</b></span>]]></HTML>
</Oletus>
</Kytkin>
</RenderPattern>
</FieldType>
</FieldTypes>
Tämä XML-tiedosto lisää mukautetulle tietotyypille WSS "Kirjasto" ja vastaa sen vastaan GAC oli kokoonpano.
Muutettuaan Nämä bitit paikalleen, iisreset palvelimella ja se pitäisi aluksi toimi hienosti.
käyttäen System.Web.UI;
käyttäen System.Web.UI.WebControls;
Yritän toteuttaa oman ratkaisun. Kuitenkin olen sen sijaan DropDownList, Minulla on vain vaihtoehto DropDownChoiceList. Satutko tietää, miten lisätä kohteita DropDownChoiceList? SharePointin avulla 2007 SP1: n ja Visual Studio 2005 SP1.