Moss: Adibidea funtzionala - pertsonalizatua Datu-mota

Mailako eszenatokia:

Enterprise-zabal MOSS ezartzeko fabrikazio enpresa batekin 30+ guneak eta pare bat dozena korporazio sail.

Helburua enpresa:

Enpresa-talde ugari izan arren (sailen, kokapenak, etc), zenbait datu maila globalean mantendu behar. Adibidez, bat enpresaren fisikoak toki guztietan maisu autoritario zerrenda (e.g. fabrikazio-instalazioak, biltegi kokapenak, salmenta-bulego) kokapen zentrala batean mantendu behar.

Arazo teknikoak:

Enpresa taxonomia ezarri zen anitz gune bildumak erabiliz. Dute gustuko genuke kokapenak fisiko zerrenda autoritario sortzeko bat WSS zerrenda pertsonalizatu batean. Gero, eduki mota bateko zutabe bat izan behar dugu (edo zutabe bat edo zerrenda bat pdf liburutegia gehitu) duten jasotako korporatiboa kokapenak, we would create a column using the "lookup" datatype eta puntu master zerrenda honetan.

Zoritxarrez, lookup datatypes must access a source list "locally" gure autoritario zerrenda hori ezin Hedatu gune Bildumak zentzua.

Irtenbide teknikoa:

Inplementatu pertsonalizatu berri bat datu-mota inplementatu SPField oinarritzen da, eta IU, zeinen ListItems maisuak WSS zerrendatik populatu batean DropDownList gisa irudikatzen.

Gune berri bat izeneko bilduma sortu genuen "http://localhost/EnterpriseData". Ez dago, we created a custom list named "Corporate Locations". This list just uses the standard "Title" Eremu korporatiboaren benetako kokalekuen zerrenda bat du.

Hainbat urrats diskretuak Ohiko datu-mota sortzeko WSS honakoa bat. Dira:

  1. Klase bat definitzen duen SPField tik inherits (eremu batzuetako daiteke oinordetzan behar bada).

Hemen kodea da:

publikoak klasean XYZZYCorporateLocationField : SPFieldText
{
publikoak XYZZYCorporateLocationField
(SPFieldCollection eremu, katea typeName, katea displayName)
: oinarri(eremu, typeName, displayName) { }

publikoak XYZZYCorporateLocationField
(SPFieldCollection eremu, katea displayName)
: oinarri(eremu, displayName) { }

publikoak baliogabetzeko BaseFieldControl FieldRenderingControl
{
lortu
{
BaseFieldControl control = berria XYZZYCorporateLocationFieldControl();
control.FieldName = honetan.Barne-izena;
itzultzeko control;
} //lortu
} // fieldrenderingcontrol

publikoak baliogabetzeko katea GetValidatedString(objektu balioa)
{
bada (honetan.Required || value.ToString().Berdin(Katea.Hustu))
{
bota berria SPFieldValidationException ("Department is not assigned.");
}
itzultzeko oinarri.GetValidatedString(balioa);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Define klasea beste oinarri eremuan kontroletik inherits, bezala:

publikoak klasean XYZZYCorporateLocationFieldControl : BaseFieldControl
{
babesa DropDownList XYZZYCorporateLocationSelector;

babesa baliogabetzeko katea DefaultTemplateName
{
lortu
{
itzultzeko "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

publikoak baliogabetzeko objektu Balio
{
lortu
{
EnsureChildControls();
itzultzeko honetan.XYZZYCorporateLocationSelector.SelectedValue;
} // lortu
ezarri
{
EnsureChildControls();
honetan.XYZZYCorporateLocationSelector.SelectedValue = (katea)honetan.ItemFieldValue;
} // ezarri
} // override object Value

babesa baliogabetzeko gal CreateChildControls()
{

bada (honetan.Field == zero || honetan.ControlMode == SPControlMode.Erakutsi)
itzultzeko;

oinarri.CreateChildControls();

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

bada (honetan.XYZZYCorporateLocationSelector == zero)
bota berria Salbuespen("ERROR: Cannot load .ASCX file!");

bada (!honetan.Page.IsPostBack)
{

erabiliz (SPSite site = berria SPSite("http://localhost / enterprisedata"))
{
erabiliz (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists["Corporate Locations"];

foreach (Txu XYZZYCorporateLocation urtean currentList.Items)
{
bada (XYZZYCorporateLocation["Title"] == zero) jarraitu;

katea theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

honetan.XYZZYCorporateLocationSelector.Items.Add
(berria Listitem(theTitle, theTitle));

} // foreach

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/enterprisedata")

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Goiko kodea da, funtsean, logika ezartzen du DropDownList populating pertsonalizatua WSS zerrenda dago at balioak dituzten http://localhost/enterprisedata and named "Corporate Departments".

Klaseak bai definitu dut bakar bat. Cs fitxategi batean, konpilatu da eta jarri GAC sartu (sendoa beharrezkoa, jakina).

  1. Ezartzea, kontrol-eredu bat (.ascx) ikus daitekeen bezala:

<%@ Kontrolatzeko Hizkuntza="C#" Inherits="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Bertsioa = 12.0.0.0, Kultura = neutrala,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ Izena eman Tagprefix="wssawc" Izen-tartea="Microsoft.SharePoint.WebControls" Batzar="Microsoft.SharePoint, Bertsioa = 12.0.0.0, Kultura = neutrala, PublicKeyToken = 71e9bce111e9429c" %> <%@ Izena eman Tagprefix="SharePoint" Izen-tartea="Microsoft.SharePoint.WebControls" Batzar="Microsoft.SharePoint, Bertsioa = 12.0.0.0, Kultura = neutrala, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:Txantiloi errendatzea ID="XYZZYCorporateLocationFieldControl" runat="server">
<Txantiloi>
<ASP:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Txantiloi>
</
SharePoint:Txantiloi errendatzea>

Gainetik dago, c gordetzen:\programa fitxategiak komun fitxategiak Microsoft Elkarbanatutako web zerbitzari hedapenak 12 controltemplates.

  1. Azkenik, XML fitxategi bat sortuko dugu ..... 12 XML direktorioan gorde. Hau da, hori da gure CAML Ohiko datu-mota definitzen du eta nire adibidez, itxura hau:

<?xml bertsioa="1.0" kodeketa="utf-8" ?>
<
FieldTypes>
<
FieldType>
<
Eremu Izena="TYPENAME">CorporateLocations</Eremu>
<
Eremu Izena="ParentType">Testua</Eremu>
<
Eremu Izena="TypeDisplayName">Corporate Locations</Eremu>
<
Eremu Izena="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Eremu>
<
Eremu Izena="UserCreatable">TRUE</Eremu>
<
Eremu Izena="ShowInListCreate">TRUE</Eremu>
<
Eremu Izena="ShowInDocumentLibraryCreate">TRUE</Eremu>
<
Eremu Izena="ShowInSurveyCreate">TRUE</Eremu>
<
Eremu Izena="ShowInColumnTemplateCreate">TRUE</Eremu>
<
Eremu Izena="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, 1.0.0.0 bertsioa =, Kultura = neutrala, PublicKeyToken=b0b19e85410990c4</Eremu>
<
RenderPattern Izena="DisplayPattern">
<
Aldatu>
<
Expr>
<
Zutabea />
</
Expr>

<Case Balio=""/>

<Lehenetsi>
<
HTML>
<![CDATA[
<span style="color:Red"><b>]]>
</
HTML>

<
Zutabea SubcolumnNumber="0" HTMLEncode="TRUE"/>

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

</
Lehenetsi>
</
Aldatu>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" eta datorrenean sortu GAC'd muntaia aurka.

Bit horiek guztiak mugitzen lugar sartu ondoren, zerbitzarian iisreset eta guztiak behar ditu lanean hasteko nicely.

3 buruzko gogoeta "Moss: Adibidea funtzionala - pertsonalizatua Datu-mota

  1. Alexander
    Hi Paul,
    Lehenik eta behin, Artikulu esker, oso interesgarria delako. Galdera bat besterik ez;
    Ez da posible bada behar bezala Ohiko Eremu mota errendatzeko zerrenda bat Fitxa ikuspegian badakizu?
    Behin Eremu pertsonalizatu mota sortu dut irakurtzeko-soilik gisa delako orokorrak Fitxa ikuspegian (eta MSDN du, adibidez, laguntzen ez askoz Oso me :-S).
    Eskerrik asko
    Erantzun
  2. Lyndsay

    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? SharePoint ari gara erabiliz 2007 SP1 eta Visual Studio 2005 SP1.

    Erantzun

Utzi iruzkin bat

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak markatu dira *