వ్యాపారం దృశ్య:
తయారీ సంస్థ కోసం 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 లో కస్టమ్ డేటా రకం రూపొందించడానికి పలు వివిక్త అనుసరిస్తుంది. అవి:
- 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
- బేస్ రంగంలో నియంత్రణ నుండి పొందుతాయని మరొక తరగతి నిర్వచించండి, లో:
ప్రజా తరగతి 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 ఉంచారు (అవసరమైన బలమైన, కోర్సు యొక్క).
-
ఒక నియంత్రణ టెంప్లేట్ అమలు (.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.
- చివరకు, మేము ..... 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 మరియు అన్ని చక్కగా పని మొదలు ఉండాలి.
System.Web.UI ఉపయోగించి;
System.Web.UI.WebControls ఉపయోగించి;
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 ఉపయోగిస్తున్నారు 2007 SP1 మరియు విజువల్ స్టూడియో 2005 SP1.