Moss: ფუნქციური მაგალითი - საბაჟო მონაცემთა გაცნობის

ბიზნეს სცენარი:

საწარმო მასშტაბით განხორციელებას MOSS წარმოების კომპანიას 30+ ადგილები და რამდენიმე ათეული კორპორატიული დეპარტამენტები.

ბიზნეს მიზანი:

მიუხედავად უამრავი ბიზნეს ჯგუფები (დეპარტამენტები, ადგილას, და ა.შ.), გარკვეული მონაცემები უნდა ინახებოდას გლობალურ დონეზე. მაგალითად, ავტორიტეტული სამაგისტრო სიაში ყველა ფიზიკური ადგილმდებარეობა კომპანია (e.g. საწარმოო ობიექტების, საწყობი ადგილას, გაყიდვების ოფისები) უნდა დარჩეს ცენტრალურ ადგილას.

ტექნიკური პრობლემა:

საწარმოს ტაქსონომიის განხორციელდა გამოყენებით მრავლობითი საიტი კოლექციების. ჩვენ არ მომეწონა, რომ შეიქმნას ავტორიტეტული ჩამონათვალი ფიზიკური ადგილებში საბაჟო WSS სია. მაშინ, როცა ჩვენ გვჭირდებოდა სვეტი ინფორმაციის ტიპი (ან სვეტი დაემატა სიას ან doc ბიბლიოთეკა) რომელიც შეიცავდა კორპორატიული ადგილას, we would create a column using the "lookup" თემები და წერტილი ამ სამაგისტრო სია.

სამწუხაროდ, lookup datatypes must access a source list "locally" რაც იმას ნიშნავს, რომ ჩვენი ავტორიტეტული სიაში ვერ საქმე საიტი კოლექციების.

ტექნიკური გადაწყვეტა:

განახორციელოს ახალი საბაჟო მონაცემთა ტიპის განხორციელებული საფუძველზე SPField და წარმოდგენილია როგორც DropDownList in UI რომლის ListItems populate ეხლა სამაგისტრო WSS სია.

ჩვენ შევქმენით ახალი საიტი კოლექციის მოუწოდა "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) { }

საჯარო override BaseFieldControl FieldRenderingControl
{
მიიღეთ
{
BaseFieldControl control = ახალი XYZZYCorporateLocationFieldControl();
control.FieldName = ამ.შინაგან სახელი;
დაბრუნდნენ control;
} //მიიღეთ
} // fieldrenderingcontrol

საჯარო override სიმებიანი GetValidatedString(ობიექტი ღირებულება)
{
თუ (ამ.Required || value.ToString().შეადგენს(სიმებიანი.ცარიელი))
{
სახიფათოა ახალი SPFieldValidationException ("Department is not assigned.");
}
დაბრუნდნენ ბაზა.GetValidatedString(ღირებულება);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. განსაზღვრა კიდევ ერთი კლასი, რომელიც მემკვიდრეობით ბაზიდან სფეროში კონტროლი, , როგორც in:

საჯარო კლასი XYZZYCorporateLocationFieldControl : BaseFieldControl
{
დაცული DropDownList XYZZYCorporateLocationSelector;

დაცული override სიმებიანი DefaultTemplateName
{
მიიღეთ
{
დაბრუნდნენ "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

საჯარო override ობიექტი ფასი
{
მიიღეთ
{
EnsureChildControls();
დაბრუნდნენ ამ.XYZZYCorporateLocationSelector.SelectedValue;
} // მიიღეთ
მითითებული
{
EnsureChildControls();
ამ.XYZZYCorporateLocationSelector.SelectedValue = (სიმებიანი)ამ.ItemFieldValue;
} // მითითებული
} // override object Value

დაცული override ცნოს 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 (Spit XYZZYCorporateLocation in 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

ზემოთ კოდი ძირითადად ახორციელებს ლოგიკა მცხოვრებ DropDownList ერთად ფასეულობათა WSS საბაჟო სიაში მდებარეობს http://localhost/enterprisedata and named "Corporate Departments".

მე განვმარტე, როგორც გაკვეთილებს ერთი. Cs ფაილი, შედგენილი და დააყენა მას GAC (ძლიერი საჭირო, რა თქმა უნდა).

  1. განახორციელოს კონტროლი template (.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:გაწევა თარგის>

ზემოთ ინახება შევიდა გ:\პროგრამის ფაილი საერთო ფაილი Microsoft საერთო სერვერზე გაგრძელება 12 controltemplates.

  1. და ბოლოს, ჩვენ ვქმნით ფაილში გადარჩენა შევიდა ..... 12 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[</ბ></span>]]></HTML>

</
სტანდარტული>
</
შეცვლა>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" და შეესაბამება მას წინააღმდეგ GAC'd ასამბლეის.

მას შემდეგ, რაც მოძრაობს ყველა ამ bits შევიდა ადგილი, iisreset სერვერზე და ეს უნდა დაიწყოს მუშაობა ლამაზად.

3 thoughts on "Moss: ფუნქციური მაგალითი - საბაჟო მონაცემთა გაცნობის

  1. ალექსანდრე
    Hi პოლ,
    პირველ რიგში, მადლობა სტატიის, იმიტომ, რომ ეს ძალიან საინტერესო. მხოლოდ ერთი კითხვა;
    იცით თუ არა, თუ ეს posible გაწევა სწორად საბაჟო სფეროში ტიპის datasheet ხედი სია?
    იმის გამო, რომ ყველა საბაჟო სფეროში ტიპის შევქმნა ეს ნაჩვენებია როგორც წაკითხული-მხოლოდ datasheet ხედვა (და MSDN, მაგალითად, არ უწყობს ძალიან ბევრი :-S).
    მადლობა
  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 2007 SP1 და ვიზუალური სტუდია 2005 SP1.

დატოვე პასუხი

თქვენი ელ-ფოსტა არ გამოქვეყნდება. აუცილებელი ველები მონიშნულია *