Moss: Functional Dæmi - Custom Data Type

Viðskipti Atburðarás:

Framtak-breiður framkvæmd mosa fyrir fyrirtæki framleiðslu með 30+ staður og nokkrum tugum sameiginlegur deildir.

Viðskipti Markmið:

Þrátt fjölmörgum hópum fyrirtækja (deildir, stöðum, o.fl.), ákveðnar upplýsingar skal haldið á heimsvísu. Til dæmis, viðurkennd aðallista öllum staði félagsins (e.g. verksmiðjur, vörugeymsla stöðum, söluskrifstofur) ætti að vera haldið í miðlægum stað.

Tæknileg vandamál:

The fyrirtæki Tegundaröðun var framkvæmd með mörgum söfn síða. Við hefðum viljað að búa til opinber listi yfir staði í sérsniðnum WSS lista. Þá, þegar við þurftum að hafa dálk í gerð efnis (eða dálk bætt út í lista eða læknir bókasafn) sem innihélt sameiginlegur stöðum, we would create a column using the "lookup" datatype og benda á þetta aðallista.

Því miður, lookup datatypes must access a source list "locally" sem þýðir að opinber listi okkar getur ekki span síða söfn.

Tæknilegar Lausn:

Innleiða nýja sérsniðna gögn tegund framkvæmda á grundvelli SPField og fulltrúa sem DropDownList í HÍ sem ListItems byggja frá skipstjóra WSS lista.

Við bjuggum til nýja síðu safn sem heitir "http://localhost/EnterpriseData". Þar, we created a custom list named "Corporate Locations". This list just uses the standard "Title" sviði að innihalda lista yfir raunverulegum fyrirtækja stöðum.

Einn segir nokkur stakur skref til að búa til sérsniðna gögn tegund í WSS. Þau eru:

  1. Skilgreina klasa sem erfir frá SPField (einn getur erfa frá öðrum sviðum ef þörf).

Hér er kóðinn fyrir það:

almennings flokki XYZZYCorporateLocationField : SPFieldText
{
almennings XYZZYCorporateLocationField
(SPFieldCollection sviðum, band typeName, band displayName)
: stöð(sviðum, typeName, displayName) { }

almennings XYZZYCorporateLocationField
(SPFieldCollection sviðum, band displayName)
: stöð(sviðum, displayName) { }

almennings forgang BaseFieldControl FieldRenderingControl
{

{
BaseFieldControl control = XYZZYCorporateLocationFieldControl();
control.FieldName = þetta.Innri Name;
aftur control;
} //fá
} // fieldrenderingcontrol

almennings forgang band GetValidatedString(mótmæla gildi)
{
ef (þetta.Required || value.ToString().Jafngildir(Band.Tómur))
{
kasta SPFieldValidationException ("Department is not assigned.");
}
aftur stöð.GetValidatedString(gildi);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Skilgreina aðra klasa sem erfir frá sviði stöð stjórn, eins og í:

almennings flokki XYZZYCorporateLocationFieldControl : BaseFieldControl
{
vernda DropDownList XYZZYCorporateLocationSelector;

vernda forgang band DefaultTemplateName
{

{
aftur "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

almennings forgang mótmæla Gildi
{

{
EnsureChildControls();
aftur þetta.XYZZYCorporateLocationSelector.SelectedValue;
} // fá
setja
{
EnsureChildControls();
þetta.XYZZYCorporateLocationSelector.SelectedValue = (band)þetta.ItemFieldValue;
} // setja
} // override object Value

vernda forgang ógilt CreateChildControls()
{

ef (þetta.Field == núll || þetta.ControlMode == SPControlMode.Sýna)
aftur;

stöð.CreateChildControls();

þetta.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

ef (þetta.XYZZYCorporateLocationSelector == núll)
kasta Undantekning("ERROR: Cannot load .ASCX file!");

ef (!þetta.Page.IsPostBack)
{

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

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

framhandleggur (Spýta XYZZYCorporateLocation í currentList.Items)
{
ef (XYZZYCorporateLocation["Title"] == núll) áfram;

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

þetta.XYZZYCorporateLocationSelector.Items.Add
( ListItem(theTitle, theTitle));

} // framhandleggur

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

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Ofangreind kóði útfærir grundvallaratriðum rökfræði fyrir populating DropDownList við gildi frá WSS sérsniðnum lista staðsett á http://localhost/enterprisedata and named "Corporate Departments".

Ég skilgreint bæði námskeið í einn. Cs skrá, saman það og setja það inn í GAC (sterk krafist, auðvitað).

  1. Innleiða stjórna sniðmát (.ascx) eins og sýnt:

<%@ Stjórna Tungumál="C#" Erfir="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Útgáfa = 12.0.0.0, Menning = hlutlaus,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ Nýskráning Tagprefix="wssawc" Namespace="Microsoft.SharePoint.WebControls" Þingið="Microsoft.SharePoint, Version=12.0.0.0, Menning = hlutlaus, PublicKeyToken = 71e9bce111e9429c" %> <%@ Nýskráning Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Þingið="Microsoft.SharePoint, Version=12.0.0.0, Menning = hlutlaus, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:Flutningur Snið ID="XYZZYCorporateLocationFieldControl" runat="server">
<Snið>
<ASP:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Snið>
</
SharePoint:Flutningur Snið>

Ofangreind er vistuð í c:\Program Files Common Files Microsoft deildir vefur framreiðslumaður eftirnafn 12 controltemplates.

  1. Lokum, við að búa til XML-skrá til að vista inn í ..... 12 XML skrá. Þetta er CAML sem skilgreinir sérsniðnar gögn tegund okkar og til dæmis minn, lítur svona út:

<?XML útgáfa="1.0" Kóðun="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Field Nafn="TypeName">CorporateLocations</Field>
<
Field Nafn="ParentType">Texti</Field>
<
Field Nafn="TypeDisplayName">Corporate Locations</Field>
<
Field Nafn="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Field>
<
Field Nafn="UserCreatable">SATT</Field>
<
Field Nafn="ShowInListCreate">SATT</Field>
<
Field Nafn="ShowInDocumentLibraryCreate">SATT</Field>
<
Field Nafn="ShowInSurveyCreate">SATT</Field>
<
Field Nafn="ShowInColumnTemplateCreate">SATT</Field>
<
Field Nafn="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Útgáfa = 1.0.0.0, Menning = hlutlaus, PublicKeyToken=b0b19e85410990c4</Field>
<
RenderPattern Nafn="DisplayPattern">
<
Skipta>
<
Expr>
<
Dálki />
</
Expr>

<Case Gildi=""/>

<Default>
<
HTML>
<![CDATA[
<span style="color:Red"><B>]]>
</
HTML>

<
Dálki SubcolumnNumber="0" HTMLEncode="SATT"/>

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

</
Default>
</
Skipta>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" og passar það upp á móti GAC'd samkoma.

Eftir að færa öll þessi Bits á sinn stað, iisreset á þjóninum og það ættu allir að byrja að vinna vel.

3 hugsanir á "Moss: Functional Dæmi - Custom Data Type

  1. Alexander
    Hæ Paul,
    Fyrst af öllu, takk fyrir greinina, því það er mjög áhugavert. Aðeins ein spurning;
    Veistu hvort það er posible að gera rétt sérsniðna sviði tegund í datasheet útsýni á lista?
    Þar sem sérhver Sérsniðin svæðisskilgreining gerð I búa það er sýnt sem lesa-eini í datasheet skoða (og MSDN, til dæmis, ekki hjálpa mér mjög mikið :-S).
    Takk
    Svara
  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? Við erum að nota SharePoint 2007 SP1 og Visual Studio 2005 SP1.

    Svara

Eftir svar

Netfangið þitt verður ekki birt. Nauðsynlegir reitir eru merktir *