MACHY: Funkčné príklad – vlastným typom údajov

Obchodné scenáre:

Podnik-široký plnenie Moss výrobná firma s 30+ stránky a pár desiatok firemné oddelenia.

Obchodný cieľ:

Napriek tomu veľké množstvo obchodných skupín (oddelenia, umiestnenie, atď), určité údaje zachovali na globálnej úrovni. Napríklad, autoritatívne hlavný zoznam všetky fyzické umiestnenie firmy (napr.. výrobné zariadenia, miesta skladu, predajných miest) treba zachovať v centre mesta.

Technický problém:

Podnik taxonómie bola vykonaná pomocou viacerých kolekcií lokalít. By sme si želali vytvoriť autoritatívnu zoznam fyzické umiestnenie vlastného zoznamu WSS. Potom, keď sme potrebovali mať stĺpec typu obsahu (alebo stĺpec pridať do knižnice, zoznam alebo doc) ktorý obsahoval firemné miesta, by sme vytvoriť stĺpec pomocou vyhľadávania"" údajový typ a prejdite na tento nadradený zoznam.

Bohužiaľ, dátové typy vyhľadávania musí pristupovať zdroj zoznamu "lokálne" čo znamená, že naše autoritatívne zoznamu nemôžu byť kolekcie lokalít.

Technické riešenie:

Implementovať nový vlastný typ údajov vykonávané na základe SPField a predstavoval ako DropDownList v UI ktorého ListItems naplnenie z hlavného zoznamu WSS.

Vytvorili sme novú kolekciu lokalít s názvom "http://localhost/EnterpriseData". Tam, sme vytvorili vlastný zoznam s názvom "Corporate umiestnenie". Tento zoznam len používa štandardný názov"" pole obsahuje zoznam skutočných miest, firemné.

Jeden nadväzuje niekoľko samostatných krokov vytvoriť vlastný typ údajov v WSS. Sú:

  1. Definovať trieda, ktorá dedí od SPField (jeden môže zdediť od iných oblastiach v prípade potreby).

Tu je kód, ktorý:

verejné trieda XYZZYCorporateLocationField : SPFieldText
{
verejné XYZZYCorporateLocationField
(SPFieldCollection polia, reťazec atribút typeName, reťazec displayName)
: base(polia, atribút typeName, displayName) { }

verejné XYZZYCorporateLocationField
(SPFieldCollection polia, reťazec displayName)
: base(polia, displayName) { }

verejné override BaseFieldControl FieldRenderingControl
{
get
{
BaseFieldControl Kontrola = nové XYZZYCorporateLocationFieldControl();
Ovládací prvok. NázovPoľa = this.InternalName;
return ovládanie;
} //get
} // fieldrenderingcontrol

verejné override reťazec GetValidatedString(object hodnota)
{
Ak (this.Požadované || hodnota. ToString().Equals(String.Empty))
{
throw nové SPFieldValidationException ("Oddelenie nie je priradený.");
}
return base.GetValidatedString(hodnota);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Define another class that inherits from the base field control, rovnako ako v:

verejné trieda XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protected DropDownList XYZZYCorporateLocationSelector;

protected override reťazec DefaultTemplateName
{
get
{
return "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

verejné override object Hodnota
{
get
{
EnsureChildControls();
return this.XYZZYCorporateLocationSelector.SelectedValue;
} // get
set
{
EnsureChildControls();
this.XYZZYCorporateLocationSelector.SelectedValue = (reťazec)this.ItemFieldValue;
} // set
} // prepísať hodnotu objektu

protected override neplatné CreateChildControls()
{

Ak (this.Pole == null || this.ControlMode == SPControlMode.Display)
return;

base.CreateChildControls();

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

Ak (this.XYZZYCorporateLocationSelector == null)
throw nové Exception("ERROR: Nedá sa načítať. Súbore ASCX!");

Ak (!this.Page.IsPostBack)
{

pomocou (SPSite stránky = nové SPSite("http://localhost/enterprisedata"))
{
pomocou (SPWeb webové stránky =. OpenWeb())
{

SPList currentList = web. Zoznamy["Firemné miesta"];

foreach (SPItem XYZZYCorporateLocation v currentList.Items)
{
Ak (XYZZYCorporateLocation[„Hlava"] == null) pokračovať;

reťazec theTitle;
theTitle = XYZZYCorporateLocation[„Hlava"].ToString();

this.XYZZYCorporateLocationSelector.Items.Add
(nové ListItem(theTitle, theTitle));

} // foreach

} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/enterprisedata")

} // Ak nie spätného odosielania

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Vyššie uvedený kód podstate implementuje logika pre naplnenie DropDownList s hodnotami zo zoznamu vlastných WSS nachádza v http://localhost/enterprisedata a s názvom "firemné oddelenia".

I definovaný oboch tried v súbore .cs jednotného, zostavené a dať ju do GAC (silné požadované, samozrejme).

  1. Vykonávať kontrolu šablóny (.ascx) ako je uvedené:

<%@ Ovládanie Jazyk= "C#" Dedí="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Verzia = 12.0.0.0, kultúra = neutrálny,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Vždy" %>
<%
@ Zaregistrovať sa TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Montáž="Microsoft.SharePoint, Verzia = 12.0.0.0, Kultúra = neutrálne, PublicKeyToken = 71e9bce111e9429c" %> <%@ Zaregistrovať sa TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Montáž="Microsoft.SharePoint, Verzia = 12.0.0.0, Kultúra = neutrálne, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:Šablónu vykresľovania ID= "XYZZYCorporateLocationFieldControl" HTML runat= "server">
<Šablóny>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" HTML runat= "server" />
</Šablóny>
</
SharePoint:Šablónu vykresľovania>

Vyššie uvedené je uložený do c:\Program filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. Nakoniec, sme vytvoriť XML súbor uložiť do... 12XML adresár. Toto je CAML, ktorá definuje naše vlastné údaje typu a pre môj príklad, Vyzerá to:

<?XML verzia="1.0" kódovanie="UTF-8" ?>
<
Typy polí>
<
FieldType>
<
Pole meno="Atribút TypeName">CorporateLocations</Pole>
<
Pole meno="Nadradený typ">Text</Pole>
<
Pole meno="TypeDisplayName">Firemné miesta</Pole>
<
Pole meno="TypeShortDescription">Všetky firemné xyzzy MINOVÉHO miestach vrátane výrobných a iných zariadení.</Pole>
<
Pole meno="UserCreatable">PRAVDA</Pole>
<
Pole meno="ShowInListCreate">PRAVDA</Pole>
<
Pole meno="ShowInDocumentLibraryCreate">PRAVDA</Pole>
<
Pole meno="ShowInSurveyCreate">PRAVDA</Pole>
<
Pole meno="ShowInColumnTemplateCreate">PRAVDA</Pole>
<
Pole meno="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Verzia = 1.0.0.0, Kultúra = neutrálne, PublicKeyToken = b0b19e85410990c4</Pole>
<
RenderPattern meno="DisplayPattern">
<
Prepínač>
<
Expr>
<
Stĺpec />
</
Expr>

<Prípad Hodnota=""/>

<Predvolené>
<
HTML>
<![CDATA[
<rozpätie štýl = "Farba:Red"><b>]]>
</
HTML>

<
Stĺpec SubColumnNumber="0" HTMLEncode="PRAVDA"/>

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

</
Predvolené>
</
Prepínač>

</
RenderPattern>
</
FieldType>
</
Typy polí>
Tento XML súbor pridá aktuálny typ údajov WSS "Knižnica" a to sa zápasy proti GAC mal zhromaždenia.

Po presťahovaní všetky tieto kúsky na miesto, iisreset na serveri a to mali všetci začať práca pekne.

3 myšlienky na "MACHY: Funkčné príklad – vlastným typom údajov

  1. Alejandro
    Ahoj Pavla,
    predovšetkým, Vďaka za článok, pretože je to veľmi zaujímavé. Len jednu otázku;
    Viete, ak je to posible vykresliť správne typ vlastného poľa v údajovom zobrazení zoznamu?
    Pretože každý ju vytvoriť typ vlastného poľa sa zobrazuje iba na čítanie v údajovom zobrazení (a MSDN, napríklad, nepomôže mi moc :-S).
    vďaka
    Odpoveď
  2. Lyndsay

    Som sa snaží implementovať svoje riešenie. Avšak som namiesto DropDownList, Mám len možnosť pre DropDownChoiceList. Neviete náhodou vedieť, ako pridať položky do DropDownChoiceList? Sme pomocou služby SharePoint 2007 SP1 a Visual Studio 2005 SP1.

    Odpoveď

nechať odpoveď

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *