MOSS: ఫంక్షనల్ ఉదాహరణ - కస్టమ్ డేటా రకం

వ్యాపారం దృశ్య:

తయారీ సంస్థ కోసం MOSS యొక్క Enterprise వ్యాప్తంగా అమలు తో 30+ సైట్లు మరియు కొన్ని డజన్ల కార్పొరేట్ విభాగాలు.

వ్యాపారం ఆబ్జెక్టివ్:

వ్యాపార వర్గాలు సమూహము ఉన్నప్పటికీ (విభాగాలు, స్థానాలు, మొదలైనవి), కొన్ని డేటా ప్రపంచ స్థాయి వద్ద నిర్వహించబడుతుంది ఉండాలి. ఉదాహరణకు, సంస్థ యొక్క అన్ని శారీరక స్థానాల అధికార మాస్టర్ జాబితా (ఉదాహరణకు. తయారీ సౌకర్యాలు, గిడ్డంగి స్థానాలు, విక్రయ కార్యాలయాలు) ఒక ప్రదేశంలో నిర్వహించబడుతుంది ఉండాలి.

సాంకేతిక సమస్య:

సంస్థ వర్గీకరణను బహుళ సైట్ సేకరణలు ఉపయోగించి అమలు. మేము కస్టమ్ WSS జాబితాలో భౌతిక స్థానాల అధికార జాబితా సృష్టించడానికి మెచ్చుకున్నారు ఉండేది. అప్పుడు, మేము ఒక కంటెంట్ రకాన్ని ఒక కాలమ్ కలిగి అవసరమైనప్పుడు (లేదా ఒక కాలమ్ జాబితా లేదా డిఓసి లైబ్రరీ జోడించబడింది) ఆ కలిగి కార్పొరేట్ స్థానాలు, we would create a column using the "lookup" ఈ మాస్టర్ జాబితాకు datatype మరియు స్థానం.

అకస్మాత్తుగా, lookup datatypes must access a source list "locally" మా అధీకృత జాబితా సైట్ సేకరణలు పరిధిలోకి కాదు అంటే.

సాంకేతిక పరిష్కారం:

SPField ఆధారంగా మరియు దీని ListItems మాస్టర్ WSS జాబితా నుండి జనసాంద్రత UI లో ఒక DropDownList వంటి ప్రాతినిధ్యం అమలు ఒక కొత్త కస్టమ్ డేటా రకం అమలు.

మేము అని ఒక కొత్త సైట్ సేకరణ రూపొందించినవారు "http://localhost/EnterpriseData". అక్కడ, we created a custom list named "Corporate Locations". This list just uses the standard "Title" అసలు కార్పొరేట్ స్థానాల జాబితా కలిగి ఫీల్డ్.

ఒక WSS లో కస్టమ్ డేటా రకం రూపొందించడానికి పలు వివిక్త అనుసరిస్తుంది. అవి:

  1. SPField నుండి పొందుతాయని ఇది ఒక తరగతి నిర్వచించండి (అవసరమైతే మరో ఖాళీలను నుండి వారసత్వంగా ఉండవచ్చు).

ఇక్కడ కోసం కోడ్:

ప్రజా తరగతి XYZZYCorporateLocationField : SPFieldText
{
ప్రజా XYZZYCorporateLocationField
(SPFieldCollection ఖాళీలను, తీగ typeName, తీగ displayName)
: బేస్(ఖాళీలను, typeName, displayName) { }

ప్రజా XYZZYCorporateLocationField
(SPFieldCollection ఖాళీలను, తీగ displayName)
: బేస్(ఖాళీలను, displayName) { }

ప్రజా భర్తీ BaseFieldControl FieldRenderingControl
{
పొందండి
{
BaseFieldControl control = కొత్త XYZZYCorporateLocationFieldControl();
control.FieldName = .అంతర్గత పేరు;
తిరిగి control;
} //పొందండి
} // fieldrenderingcontrol

ప్రజా భర్తీ తీగ GetValidatedString(వస్తువు విలువ)
{
అయితే (.Required || value.ToString().సమానం(తీగ.ఖాళీ))
{
రువ్వు కొత్త SPFieldValidationException ("Department is not assigned.");
}
తిరిగి బేస్.GetValidatedString(విలువ);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. బేస్ రంగంలో నియంత్రణ నుండి పొందుతాయని మరొక తరగతి నిర్వచించండి, లో:

ప్రజా తరగతి XYZZYCorporateLocationFieldControl : BaseFieldControl
{
రక్షణ DropDownList XYZZYCorporateLocationSelector;

రక్షణ భర్తీ తీగ DefaultTemplateName
{
పొందండి
{
తిరిగి "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

ప్రజా భర్తీ వస్తువు విలువ
{
పొందండి
{
EnsureChildControls();
తిరిగి .XYZZYCorporateLocationSelector.SelectedValue;
} // పొందండి
సెట్
{
EnsureChildControls();
.XYZZYCorporateLocationSelector.SelectedValue = (తీగ).ItemFieldValue;
} // సెట్
} // override object Value

రక్షణ భర్తీ రద్దు CreateChildControls()
{

అయితే (.Field == సున్న || .ControlMode == SPControlMode.ప్రదర్శించు)
తిరిగి;

బేస్.CreateChildControls();

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

అయితే (.XYZZYCorporateLocationSelector == సున్న)
రువ్వు కొత్త మినహాయింపు("ERROR: Cannot load .ASCX file!");

అయితే (!.Page.IsPostBack)
{

ఉపయోగించి (SPSite site = కొత్త SPSite("http://localhost / enterprisedata"))
{
ఉపయోగించి (SPWeb web = site.OpenWeb())
{

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

foreach (ఉమ్మి XYZZYCorporateLocation లో currentList.Items)
{
అయితే (XYZZYCorporateLocation["Title"] == సున్న) కొనసాగించు;

తీగ theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

.XYZZYCorporateLocationSelector.Items.Add
(కొత్త ListItem(theTitle, theTitle));

} // foreach

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

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

పైన కోడ్ ప్రధానంగా వద్ద ఉన్న WSS కస్టమ్ జాబితా నుండి విలువలతో DropDownList populating కోసం తర్కం అమలు http://localhost/enterprisedata and named "Corporate Departments".

నేను ఒక. Cs ఫైలు లో రెండు వర్గాలు నిర్వచింపబడ్డాయి, ఇది కంపైల్ మరియు GAC ఉంచారు (అవసరమైన బలమైన, కోర్సు యొక్క).

  1. ఒక నియంత్రణ టెంప్లేట్ అమలు (.ascx) చూపిన విధంగా:

<%@ నియంత్రించండి భాష="C#" పొందినట్లయితే="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,వెర్షన్ = 12.0.0.0, సంస్కృతి = తటస్థ,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ నమోదు Tagprefix="wssawc" నేంస్పేసు="Microsoft.SharePoint.WebControls" సభ="Microsoft.SharePoint, వెర్షన్ = 12.0.0.0, సంస్కృతి = తటస్థ, PublicKeyToken = 71e9bce111e9429c" %> <%@ నమోదు Tagprefix="SharePoint" నేంస్పేసు="Microsoft.SharePoint.WebControls" సభ="Microsoft.SharePoint, వెర్షన్ = 12.0.0.0, సంస్కృతి = తటస్థ, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:రెండరింగ్ మూస ID="XYZZYCorporateLocationFieldControl" runat="server">
<మూస>
<కాలసర్పం:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</మూస>
</
SharePoint:రెండరింగ్ మూస>

పైన సి లోకి సేవ్ ఉంది:\కార్యక్రమ ఫైళ్ళు సాధారణ ఫైళ్ళు మైక్రోసాఫ్ట్ షేర్డ్ వెబ్ సర్వర్ పొడిగింపులు 12 controltemplates.

  1. చివరకు, మేము ..... 12 XML డైరెక్టరీలో సేవ్ ఒక XML ఫైలు సృష్టించవచ్చు. ఈ మా అనుకూల డేటా రకం నిర్వచిస్తుంది Caml మరియు నా ఉదాహరణ కోసం, ఈ అనిపిస్తోంది:

<?xml వెర్షన్="1.0" ఎన్కోడింగ్="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
ఫీల్డ్ పేరు="TypeName">CorporateLocations</ఫీల్డ్>
<
ఫీల్డ్ పేరు="ParentType">టెక్స్ట్</ఫీల్డ్>
<
ఫీల్డ్ పేరు="TypeDisplayName">Corporate Locations</ఫీల్డ్>
<
ఫీల్డ్ పేరు="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</ఫీల్డ్>
<
ఫీల్డ్ పేరు="UserCreatable">TRUE</ఫీల్డ్>
<
ఫీల్డ్ పేరు="ShowInListCreate">TRUE</ఫీల్డ్>
<
ఫీల్డ్ పేరు="ShowInDocumentLibraryCreate">TRUE</ఫీల్డ్>
<
ఫీల్డ్ పేరు="ShowInSurveyCreate">TRUE</ఫీల్డ్>
<
ఫీల్డ్ పేరు="ShowInColumnTemplateCreate">TRUE</ఫీల్డ్>
<
ఫీల్డ్ పేరు="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, సంచిక = మాత్రం దానిని 1.0.0.0, సంస్కృతి = తటస్థ, PublicKeyToken=b0b19e85410990c4</ఫీల్డ్>
<
RenderPattern పేరు="DisplayPattern">
<
చిన్నకమ్మి>
<
Expr>
<
కాలమ్ />
</
Expr>

<కేస్ విలువ=""/>

<డిఫాల్ట్>
<
HTML>
<![CDATA[
<span style="color:Red"><బి>]]>
</
HTML>

<
కాలమ్ SubcolumnNumber="0" HTMLEncode="TRUE"/>

<HTML><![CDATA[</బి></వ్యవధి>]]></HTML>

</
డిఫాల్ట్>
</
చిన్నకమ్మి>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" మరియు GAC'd అసెంబ్లీ నుంచి సరిసమానుడు.

స్థలం లోకి ఈ బిట్స్ వెళ్లిన తర్వాత, సర్వర్ పై iisreset మరియు అన్ని చక్కగా పని మొదలు ఉండాలి.

3 "న ఆలోచనలుMOSS: ఫంక్షనల్ ఉదాహరణ - కస్టమ్ డేటా రకం

  1. అలెగ్జాండర్
    ఎక్కువ పాల్,
    అన్ని మొదటి, వ్యాసం ధన్యవాదాలు, ఇది చాలా ఆసక్తికరమైన ఎందుకంటే. మాత్రమే ఒక ప్రశ్నను;
    అది ఒక జాబితా డేటాషీట్ వీక్షణ లో సరిగ్గా కస్టమ్ రంగంలో రకం అవరోధం posible ఉంటే మీరు తెలుసు?
    నేను దీన్ని సృష్టించడానికి ప్రతి కస్టమ్ రంగంలో రకం డేటాషీట్ వీక్షణ లో చదవడానికి మాత్రమే చూపించారు ఎందుకంటే (మరియు MSDN, ఉదాహరణకు, నాకు చాలా సహాయం లేదు :-S).
    ధన్యవాదాలు

ఒక Reply వదిలి

మీ ఇమెయిల్ చిరునామా ప్రచురితమైన కాదు. లు గుర్తించబడతాయి *