Poslovni Scenarij:
Enterprise-wide provedba Moss za proizvodne tvrtke s 30+ mjesta i nekoliko desetaka korporativni odjeli.
Poslovni cilj:
Unatoč mnoštvu poslovnih grupa (odjeli, mjesta, itd.), određene podatke treba održavati na globalnoj razini. Na primjer, autoritativni glavni popis svih fizičkih lokacija tvrtke (e.g. proizvodni pogoni, skladišnim mjestima, prodajnih ureda) treba održavati na središnjem mjestu.
Tehnički problem:
Poduzeće taksonomija je provedena pomoću više zbirki web-mjesta. Mi bismo voljeli stvarati autoritativni popis fizičkih lokacija u prilagođenom popisu WSS. Tada, kada smo trebali imati stupac u vrstu sadržaja (ili stupac dodali na popis ili biblioteku doc) koji je sadržavao korporativne mjestima, we would create a column using the "lookup" datatype i ukazuju na ovom glavnom popisu.
Nažalost, lookup datatypes must access a source list "locally" što znači da je naš autoritativni popis ne može obuhvatiti web zbirke.
Tehničko rješenje:
Provesti novu prilagođenu vrstu podataka odvijaju se na temelju SPField, a predstavljeni kao DropDownList u UI čiji ListItems popuniti s popisa master WSS.
Stvorili smo novu stranicu kolekciju pod nazivom "http://localhost/EnterpriseData". Tamo, we created a custom list named "Corporate Locations". This list just uses the standard "Title" Polje se nalazi i popis aktualnih korporativnih mjestima.
Jedan slijedi nekoliko diskretnih koraka za stvaranje prilagođeni vrstu podataka u WSS. Oni su:
- Definirajte klase koja nasljeđuje od SPField (jedan može naslijediti od drugih područja ako je potrebno).
Ovdje je broj za koji:
javni klasa XYZZYCorporateLocationField : SPFieldText
{
javni XYZZYCorporateLocationField
(SPFieldCollection Polja, niz typeName, niz displayName)
: baza(Polja, typeName, displayName) { }
javni XYZZYCorporateLocationField
(SPFieldCollection Polja, niz displayName)
: baza(Polja, displayName) { }
javni nadjačati BaseFieldControl FieldRenderingControl
{
dobiti
{
BaseFieldControl control = novi XYZZYCorporateLocationFieldControl();
control.FieldName = to.InternalName;
povratak control;
} //dobiti
} // fieldrenderingcontrol
javni nadjačati niz GetValidatedString(objekt vrijednost)
{
ako (to.Required || value.ToString().Jednako(Gudački.Prazan))
{
baciti novi SPFieldValidationException ("Department is not assigned.");
}
povratak baza.GetValidatedString(vrijednost);
} // getvalidatedstring
} // XYZZYCorporateLocation
- Odredite drugu klasu koja nasljeđuje iz baze kontrole na terenu, kao u:
javni klasa XYZZYCorporateLocationFieldControl : BaseFieldControl
{
zaštićen DropDownList XYZZYCorporateLocationSelector;
zaštićen nadjačati niz DefaultTemplateName
{
dobiti
{
povratak "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName
javni nadjačati objekt Vrijednost
{
dobiti
{
EnsureChildControls();
povratak to.XYZZYCorporateLocationSelector.SelectedValue;
} // dobiti
postaviti
{
EnsureChildControls();
to.XYZZYCorporateLocationSelector.SelectedValue = (niz)to.ItemFieldValue;
} // postaviti
} // override object Value
zaštićen nadjačati poništiti CreateChildControls()
{
ako (to.Field == nula || to.ControlMode == SPControlMode.Prikaz)
povratak;
baza.CreateChildControls();
to.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");
ako (to.XYZZYCorporateLocationSelector == nula)
baciti novi Izuzetak("ERROR: Cannot load .ASCX file!");
ako (!to.Page.IsPostBack)
{
pomoću (SPSite site = novi SPSite("http://localhost / enterprisedata"))
{
pomoću (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists["Corporate Locations"];
foreach (SPItem XYZZYCorporateLocation u currentList.Items)
{
ako (XYZZYCorporateLocation["Title"] == nula) nastaviti;
niz theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();
to.XYZZYCorporateLocationSelector.Items.Add
(novi ListItem(theTitle, theTitle));
} // foreach
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/enterprisedata")
} // if not a postback
} // CreateChildControls
} // XYZZYCorporateLocationFieldControl
Gore kod osnovi provodi logiku za naseljavanja DropDownList s vrijednostima iz WSS prilagođenom popisu se nalazi na http://localhost/enterprisedata and named "Corporate Departments".
Ja definirana obje klase u jednu datoteku. Cs, ga sastaviti i staviti ga u GAC (jaka required, naravno).
-
Provesti predložak kontrole (.ascx) kao što je prikazano:
<%@ Kontrolirajte Jezik="C#" Nasljeđuje="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Inačica = 12.0.0.0, Culture = neutralan,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%@ Registar Tagprefix="wssawc" Prostor="Microsoft.SharePoint.WebControls" Montaža="Microsoft.SharePoint, Version=12.0.0.0, Kultura = neutralni, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registar Tagprefix="SharePoint" Prostor="Microsoft.SharePoint.WebControls" Montaža="Microsoft.SharePoint, Version=12.0.0.0, Kultura = neutralni, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID="XYZZYCorporateLocationFieldControl" runat="server">
<Predložak>
<trepetljika:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Predložak>
</SharePoint:RenderingTemplate>
Gore navedeni sprema u C:\Program Files Common Files Microsoft Shared web server ekstenzije 12 controltemplates.
- Konačno, možemo stvoriti XML datoteke za spremanje u ..... 12 XML imenik. Ovo je CAML koja definira naš običaj vrstu podataka i za moj primjer, izgleda ovako:
<?xml verzija="1.0" kodiranje="UTF-8" ?>
<Fieldtypes>
<FieldType>
<Polje Ime="TypeName">CorporateLocations</Polje>
<Polje Ime="ParentType">Tekst</Polje>
<Polje Ime="TypeDisplayName">Corporate Locations</Polje>
<Polje Ime="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Polje>
<Polje Ime="UserCreatable">TRUE</Polje>
<Polje Ime="ShowInListCreate">TRUE</Polje>
<Polje Ime="ShowInDocumentLibraryCreate">TRUE</Polje>
<Polje Ime="ShowInSurveyCreate">TRUE</Polje>
<Polje Ime="ShowInColumnTemplateCreate">TRUE</Polje>
<Polje Ime="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Verzija = 1.0.0.0, Kultura = neutralni, PublicKeyToken=b0b19e85410990c4</Polje>
<RenderPattern Ime="DisplayPattern">
<Prebaciti>
<Expr>
<Kolona />
</Expr>
<Slučaj Vrijednost=""/>
<Default>
<HTML>
<![CDATA[<span style="color:Red"><b>]]>
</HTML>
<Kolona SubColumnNumber="0" HTMLEncode="TRUE"/>
<HTML><![CDATA[</b></raspon>]]></HTML>
</Default>
</Prebaciti>
</RenderPattern>
</FieldType>
</Fieldtypes>
This XML file adds the custom data type to the WSS "library" i utakmice se protiv GAC'd skupštine.
Nakon premještanja svih tih bitova u mjestu, iisreset na poslužitelju, a sve to treba početi raditi lijepo.
korištenjem System.Web.UI;
korištenjem System.Web.UI.WebControls;
I am attempting to implement your solution. However I instead of DropDownList, I only have the option for a DropDownChoiceList. Do you happen to know how to add items to a DropDownChoiceList? Mi se koriste SharePoint 2007 SP1 i Visual Studio 2005 SP1.