MUSKO: Praktika Ekzemplo – Laŭmenda Datuma Tipo

Komerca Scenaro:

Entrepreno-#lar?a efektivigo de MUSKO por fabrikanta firmaon kun 30+ Ejoj kaj iu dekduo kompaniaj departementoj.

Komerca Objektivo:

#Malgra? homamaso de komercaj grupoj (Departementoj, Lokoj, Ktp), Certa datumo devus esti #da?rigi #?e tutmonda nivelo. Ekzemple, #A?toritata mastra listo de #?iuj fizikaj lokoj de la firmao (Ekz. Fabrikanta servojn, Staplaj lokoj, Vendaj oficejoj) Devus esti #da?rigi en centra loko.

Teknika Problemo:

La entreprena taksonomio estis efektivigita uzanta multoblajn ejajn kolektojn. Ni estus #?ati krei la #a?toritata liston de fizikaj lokoj en #la?menda WSSa listo. Tiam, Kiam ni devis havi kolumnon en kontenta tipo (#A? kolumno aldonis liston #a? doc biblioteko) Kiu enhavis kompaniajn lokojn, Ni kreus kolumnon uzanta la "lookup" datatype kaj punkto al #?i tiu mastra listo.

#Beda?rinde, Lookup datatypes devas aliri fontan liston "loke" Signifanta ke nia #a?toritata listo ne povas #da?ri ejajn kolektojn.

Teknika Solvo:

Efektivigi novan #la?menda datuman tipon efektivigis bazita sur SPField kaj reprezentita kiel DropDownList en la UI kies ListItems #lo?i de la mastra WSSa listo.

Ni kreis novan ejan kolekton vokis "http://localhost/EnterpriseData". Tie, Ni kreis #la?menda liston nomis "Kompaniajn Lokojn". #Tio ?i enlistigas nur uzas la norman "Titolon" Kapti enhavi la liston de realaj kompaniaj lokoj.

Unu sekvas pluraj discrete #pa?o krei #la?menda datumon entajpas WSS. Ili estas:

  1. Difini klason kiu heredas de SPField (Unu povas heredi de aliaj kampoj se postulita).

#?I tie estas la kodo por tio:

Publika Klaso XYZZYCorporateLocationField : SPFieldText
{
Publika XYZZYCorporateLocationField
(SPFieldCollection Kampoj, Ŝnuro TypeName, Ŝnuro DisplayName)
: Bazo(Kampoj, TypeName, DisplayName) { }

Publika XYZZYCorporateLocationField
(SPFieldCollection Kampoj, Ŝnuro DisplayName)
: Bazo(Kampoj, DisplayName) { }

Publika Superregi BaseFieldControl FieldRenderingControl
{
Akiri
{
BaseFieldControl Kontrolo = Nova XYZZYCorporateLocationFieldControl();
Kontrolo.FieldName = Tio ĉi.InternalName;
Reveno Kontrolo;
} //Akiri
} // Fieldrenderingcontrol

Publika Superregi Ŝnuro GetValidatedString(Objekto Valoro)
{
Se (Tio ĉi.Postulita || Valoro.ToString().Egaluloj(#?Nuro.Senhoma))
{
Ĵeti Nova SPFieldValidationException ("Departemento ne estas asignita.");
}
Reveno Bazo.GetValidatedString(Valoro);
} // Getvalidatedstring

} // XYZZYCorporateLocation

  1. Difini alian klason kiu heredas de la baza kampa kontrolo, Kiel je:

Publika Klaso XYZZYCorporateLocationFieldControl : BaseFieldControl
{
Protektita DropDownList XYZZYCorporateLocationSelector;

Protektita Superregi Ŝnuro DefaultTemplateName
{
Akiri
{
Reveno "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

Publika Superregi Objekto Valoro
{
Akiri
{
EnsureChildControls();
Reveno Tio ĉi.XYZZYCorporateLocationSelector.SelectedValue;
} // Akiri
Fiksita
{
EnsureChildControls();
Tio ĉi.XYZZYCorporateLocationSelector.SelectedValue = (Ŝnuro)Tio ĉi.ItemFieldValue;
} // Fiksita
} // Superregi objektan Valoron

Protektita Superregi Malplena CreateChildControls()
{

Se (Tio ĉi.Kampo == Null || Tio ĉi.ControlMode == SPControlMode.#Montri?o)
Reveno;

Bazo.CreateChildControls();

Tio ĉi.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

Se (Tio ĉi.XYZZYCorporateLocationSelector == Null)
Ĵeti Nova Escepto("ERARO: Ne povas ŝarĝi .ASCXa dosiero!");

Se (!Tio ĉi.#Pa?o.IsPostBack)
{

Uzanta (SPSite Ejo = Nova SPSite("Http://Localhost/enterprisedata"))
{
Uzanta (SPWeb Araneaĵa = ejo.OpenWeb())
{

SPList CurrentList = araneaĵo.Listoj["Kompaniaj Lokoj"];

Foreach (SPItem XYZZYCorporateLocation Je CurrentList.Eroj)
{
Se (XYZZYCorporateLocation["Titolo"] == Null) #Da?ri;

Ŝnuro TheTitle;
TheTitle = XYZZYCorporateLocation["Titolo"].ToString();

Tio ĉi.XYZZYCorporateLocationSelector.Eroj.Aldonas
(Nova ListItem(TheTitle, TheTitle));

} // Foreach

} // Uzanta spweb araneaĵa = ejo.Openweb()
} // Uzanta spsite ejo = nova spsite("Http://Localhost/enterprisedata")

} // Se ne postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

La supra kodo resume efektivigas la logikon por #lo?i la DropDownList kun valoroj de la WSS #la?menda listo #trovi?i #?e http://localhost/enterprisedata Kaj nomis "Kompaniajn Departementojn".

Mi difinis #amba? klasojn en ununura .Cs dosiero, Kompilis ?in kaj metita ?in en la GAC (Forta postulata, Nature).

  1. Efektivigi kontrolan #?ablono (.Ascx) Kiel montrita:

<%@ Kontrolo Lingvo="C#" Heredas="Microsoft.SharePoint.Portalo.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portalo,Versio=12.0.0.0,Kulturo=#ne?trala,PublicKeyToken=71e9bce111e9429c" CompilationMode="#?Iam" %>
<%
@ Registro Tagprefix="Wssawc" Namespace="Microsoft.SharePoint.WebControls" Asembleo="Microsoft.SharePoint, Versio=12.0.0.0, Kulturo=neŭtrala, PublicKeyToken=71e9bce111e9429c" %> <%@ Registro Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Asembleo="Microsoft.SharePoint, Versio=12.0.0.0, Kulturo=neŭtrala, PublicKeyToken=71e9bce111e9429c" %>
<SharePoint:RenderingTemplate IDENTIGAĴO="XYZZYCorporateLocationFieldControl" Runat="Servilo">
<Ŝablono>
<Aspido:DropDownList IDENTIGAĴO="XYZZYCorporateLocationSelector" Runat="Servilo" />
</Ŝablono>
</
SharePoint:RenderingTemplate>

La sur estas savita en c:\Programo registrasoftajn dosierojnmicrosoft dividitaretservilajn etendaĵojn12controltemplates.

  1. Fine, Ni kreas XMLan dosieron savi en la …..12XMLa adresaro. Tio ĉi estas CAML kiu difinas nian laŭmendan datuman tipon kaj por mia ekzemplo, Similas tion ĉi:

<?Xml Versio="1.0" Kodanta="Utf-8" ?>
<
FieldTypes>
<
FieldType>
<
Kampo Nomo="TypeName">CorporateLocations</Kampo>
<
Kampo Nomo="ParentType">Teksto</Kampo>
<
Kampo Nomo="TypeDisplayName">Kompaniaj Lokoj</Kampo>
<
Kampo Nomo="TypeShortDescription">Ĉiuj XYZZY Kompaniaj lokoj inkluzivanta fabrikadon aŭ aliaj servoj.</Kampo>
<
Kampo Nomo="UserCreatable">VERA</Kampo>
<
Kampo Nomo="ShowInListCreate">VERA</Kampo>
<
Kampo Nomo="ShowInDocumentLibraryCreate">VERA</Kampo>
<
Kampo Nomo="ShowInSurveyCreate">VERA</Kampo>
<
Kampo Nomo="ShowInColumnTemplateCreate">VERA</Kampo>
<
Kampo Nomo="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versio=1.0.0.0, Kulturo=neŭtrala, PublicKeyToken=b0b19e85410990c4</Kampo>
<
RenderPattern Nomo="DisplayPattern">
<
Ŝaltilo>
<
Expr>
<
Kolumno />
</
Expr>

<Kazo Valoro=""/>

<Defaŭlta>
<
HTML>
<![CDATA[
<Daŭri dum stilan="koloron:Ruĝa"><B>]]>
</
HTML>

<
Kolumno SubColumnNumber="0" HTMLEncode="VERA"/>

<HTML><![CDATA[</B></Daŭri dum>]]></HTML>

</
Defaŭlta>
</
Ŝaltilo>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Ĉi tiu XMLa dosiero aldonas la laŭmendan datuman tipon al la WSSa "biblioteko" Kaj egalas ĝin supre kontraŭ la GAC'd asembleo.

Post kiam movanta ĉiuj ĉi tiuj pecoj en loko, Iisreset sur la servilo kaj ĝi devus ĉiujn komencas laboranta agrable.

3 pensoj pri "MUSKO: Praktika Ekzemplo – Laŭmenda Datuma Tipo

  1. Alejandro
    Hi Paul,
    Unue, Dankonas por la artikolo, #?Ar ?i?? Tre interesa. Nur unu demando;
    #?u vi scias se ?i?? Posible fari #?uste #la?menda kampon entajpas la datasheet vido de listo?
    #?Ar #?iu #la?menda kampa tipo mi kreas ?in?? Montrita kiel legita-nur en datasheet vido (Kaj la MSDN, Ekzemple, Doesn?? Helpas min tre :-S).
    Dankonas
    Respondo
  2. Lyndsay

    Mi estas provanta efektivigi vian solvon. Tamen I anstataŭ DropDownList, Mi nur havas la elekton por DropDownChoiceList. Ĉu vi okazas scii kiel aldoni erojn al DropDownChoiceList? Ni estas uzantaj SharePoint 2007 SP1 kaj Vida Studio 2005 SP1.

    Respondo

Lasi Respondon

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita *