শৈবাল: প্রায়োগিক উদাহরণ - কাস্টম ডেটা প্রকার

ব্যবসা দৃশ্যকল্প:

শৈবাল এন্টারপ্রাইজ ব্যাপী উত্পাদন কোম্পানির জন্য বাস্তবায়ন সঙ্গে 30+ সাইট এবং কয়েক ডজন কর্পোরেট বিভাগ.

ব্যবসা লক্ষ্য:

সত্বেও ব্যবসা দলের নিকর (বিভাগ, অবস্থানগুলি, প্রভৃতি), নির্দিষ্ট তথ্য একটি আন্তর্জাতিক পর্যায়ে উচিত রক্ষণাবেক্ষণ. উদাহরণস্বরূপ, একটি প্রামাণিক সব কোম্পানির প্রকৃত অবস্থানকে মাস্টার তালিকা (e.g. উত্পাদন সুবিধা, পণ্যাগার অবস্থানগুলি, বিক্রয় অফিসে) একটি কেন্দ্রিয় অবস্থানে বজায় রাখা উচিত.

প্রযুক্তি সংক্রান্ত সমস্যা:

এন্টারপ্রাইজ শ্রেণীবিন্যাস একাধিক সাইট ব্যবহার করে স w বাস্তবায়িত হয়েছিল. আমরা পছন্দ একটি কাস্টম WSS তালিকায় শারীরিক অবস্থান প্রামাণিক তালিকা নির্মাণ করা হবে. তারপর, যখন আমরা একটি কনটেন্ট টাইপ একটি কলাম থাকা প্রয়োজন (অথবা একটি কলামের একটি তালিকা বা doc গ্রন্থাগারের যোগ) যে অন্তর্ভুক্ত কর্পোরেট অবস্থানগুলি, we would create a column using the "lookup" এই মাস্টার তালিকা থেকে ডাটাটাইপ এবং বিন্দু.

দুর্ভাগ্যবশত, lookup datatypes must access a source list "locally" অর্থাত আমাদের প্রামাণিক তালিকা সাইট স w না লাগে পারেন.

প্রযুক্তি সমাধান:

একটি নতুন কাস্টম ডাটা টাইপ বাস্তবায়ন ভিত্তি SPField উপর এবং UI যার ListItems মাস্টার WSS তালিকা থেকে পূর্ণ একটি DropDownList হিসাবে প্রতিনিধিত্ব বাস্তবায়ন.

আমরা একটা নতুন সাইট সংগ্রহ নামক নির্মিত "http://localhost/EnterpriseData". সেখানে, we created a custom list named "Corporate Locations". This list just uses the standard "Title" ক্ষেত্র থেকে যথার্থ কর্পোরেট অবস্থান তালিকা ধারণ করে.

এক কয়েকটি থেকে WSS মধ্যে একটি নিজস্ব ডাটা টাইপ তৈরি বিযুক্ত ধাপগুলি অনুসরণ. তারা:

  1. একটি বর্গ SPField থেকে যা inherits নির্ধারণ (অন্য একটি ক্ষেত্র থেকে যদি প্রয়োজন উত্তরাধিকারী হতে পারে).

এখানে যে জন্য কোড:

জনসাধারণের বর্গ XYZZYCorporateLocationField : SPFieldText
{
জনসাধারণের XYZZYCorporateLocationField
(SPFieldCollection ক্ষেত্র, স্ট্রিং typeName, স্ট্রিং displayName)
: তল(ক্ষেত্র, typeName, displayName) { }

জনসাধারণের XYZZYCorporateLocationField
(SPFieldCollection ক্ষেত্র, স্ট্রিং displayName)
: তল(ক্ষেত্র, displayName) { }

জনসাধারণের অগ্রাহ্য করা BaseFieldControl FieldRenderingControl
{
পাওয়া
{
BaseFieldControl control = নতুন XYZZYCorporateLocationFieldControl();
control.FieldName = এই.InternalName;
প্রত্যাবর্তন control;
} //পাওয়া
} // fieldrenderingcontrol

জনসাধারণের অগ্রাহ্য করা স্ট্রিং GetValidatedString(উদ্দেশ্য মান)
{
যদি (এই.Required || value.ToString().সমান(স্ট্রিং.খালি))
{
নিক্ষেপ নতুন SPFieldValidationException ("Department is not assigned.");
}
প্রত্যাবর্তন তল.GetValidatedString(মান);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. অন্য বর্গ তলের ক্ষেত্র নিয়ন্ত্রণ থেকে যে inherits নির্ধারণ, যেমন:

জনসাধারণের বর্গ 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 পূর্ণ জন্য যুক্তিবিজ্ঞান সরঁজাম http://localhost/enterprisedata and named "Corporate Departments".

আমি একটি একক. Cs ফাইল উভয় শ্রেণীর সংজ্ঞায়িত, এটা কম্পাইল এবং GAC সেটিকে করা (দৃঢ় আবশ্যক, স্বভাবত).

  1. একটি নিয়ন্ত্রণ ফর্মা বাস্তবায়ন (.ascx) চিত্রের:

<%@ নিয়ন্ত্রণ ভাষা="C#" Inherits="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:রেন্ডারিং টেমপ্লেট আইডি="XYZZYCorporateLocationFieldControl" runat="server">
<টেমপ্লেট>
<কস্পমান:DropDownList আইডি="XYZZYCorporateLocationSelector" runat="server" />
</টেমপ্লেট>
</
SharePoint:রেন্ডারিং টেমপ্লেট>

উপরোক্ত গ মধ্যে সংরক্ষিত হয়:\প্রোগ্রাম ফাইল সাধারণ ফাইল Microsoft দ্বারা যৌথরূপে ব্যবহৃত ওয়েব সার্ভার এক্সটেনশন 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">সত্য</ক্ষেত্র>
<
ক্ষেত্র নাম="ShowInListCreate">সত্য</ক্ষেত্র>
<
ক্ষেত্র নাম="ShowInDocumentLibraryCreate">সত্য</ক্ষেত্র>
<
ক্ষেত্র নাম="ShowInSurveyCreate">সত্য</ক্ষেত্র>
<
ক্ষেত্র নাম="ShowInColumnTemplateCreate">সত্য</ক্ষেত্র>
<
ক্ষেত্র নাম="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, সংস্করণ = 1.0.0.0, সংস্কৃতি = নিরপেক্ষ, PublicKeyToken=b0b19e85410990c4</ক্ষেত্র>
<
RenderPattern নাম="DisplayPattern">
<
সুইচ>
<
Expr>
<
স্তম্ভ />
</
Expr>

<কেস মান=""/>

<ডিফল্ট>
<
এইচটিএমএল>
<![CDATA[
<span style="color:Red"><বো>]]>
</
এইচটিএমএল>

<
স্তম্ভ SubColumnNumber="0" HTMLEncode="সত্য"/>

<এইচটিএমএল><![CDATA[</বো></বিঘত>]]></এইচটিএমএল>

</
ডিফল্ট>
</
সুইচ>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" এবং সাথে মেলানো GAC'd সমাবেশ বিরুদ্ধে এটি আপ.

পরে স্থান মধ্যে সমস্ত এই বিট গতিদায়ক, iisreset সার্ভারের উপর এবং এটি সমস্ত আরম্ভ কাজ সুন্দরভাবে উচিত.

3 চিন্তা "শৈবাল: প্রায়োগিক উদাহরণ - কাস্টম ডেটা প্রকার

  1. Alejandro
    উচ্চ পল,
    First of all, thanks for the article, because it’s very interesting. Only one question;
    Do you know if it’s posible to render correctly a custom field type in the datasheet view of a list?
    Because every custom field type I create it’s shown as read-only in datasheet view (and the MSDN, উদাহরণস্বরূপ, doesn’t help me very much :-এস).
    ধন্যবাদ

সাইফুল আলম চৌধুরী

আপনার ইমেইল ঠিকানা প্রচার করা হবে না. প্রয়োজনীয় ক্ষেত্রগুলি চিহ্নিত করা আছে *