بایگانی ماهانه: اوت 2007

MOSS پیشرفته سفارشی سازی جستجو — مورد مهم در XSLT جست و جوی پیشرفته

I don’t modify advanced search XSLT very often, so it seems like I’m climbing small hills every time.

My newest lesson is this: Case matters when referencing a column. In my advanced search, I have columns defined as this:

<root xmlns:XSI="HTTP://www.w3.org/2001/XMLSchema-instance">
<
Columns>
<
ستون نام="GafTrainingInvoiceNumber" />
<
ستون نام="GafTrainingInvoiceLocation" />
<
ستون نام="WorkId"/>
<
ستون نام="رتبه"/>
<
ستون نام="عنوان"/>
<
ستون نام="نویسنده"/>
<
ستون نام="اندازه"/>
<
ستون نام="مسیر"/>
<
ستون نام="شرح"/>
<
ستون نام="نوشتن"/>
<
ستون نام="جامعه دانشجویان"/>
<
ستون نام="CollapsingStatus"/>
<
ستون نام="HitHighlightedSummary"/>
<
ستون نام="HitHighlightedProperties"/>
<
ستون نام="ContentClass"/>
<
ستون نام="IsDocument"/>
<
ستون نام="PictureThumbnailURL"/>
</
Columns>
</
root>

The XLST that displays the invoice number and invoice location had been:

<p>
Training Invoice Number: <XSL:ارزش را انتخاب کنید="GafTrainingInvoiceNumber"/>
<
برزیلی></برزیلی>
Training Invoice Location: <XSL:ارزش را انتخاب کنید="GafTrainingInvoiceLocation"/>
</
p>

اما, the select has to reference the property in all lower case, همانطور که در:

<p>
Training Invoice Number: <XSL:ارزش را انتخاب کنید="gaftraininginvoicenumber"/>
<
برزیلی></برزیلی>
Training Invoice Location: <XSL:ارزش را انتخاب کنید="gaftraininginvoicelocation"/>
</
p>


Until I corrected that, search results showed the labels (i.e. "Training Invoice Number") but no data.

خزه: به عنوان مثال تابعی - نوع داده های سفارشی

سناریوی کسب و کار:

اجرای سرمایه گذاری گسترده ای از خزه برای تولید شرکت با 30+ سایت و چند ده بخش های شرکت.

هدف کسب و کار:

با وجود بسیاری از گروه های کسب و کار (گروه ها, مکان, غیره), داده های خاص باید در سطح جهانی حفظ. مثلا, لیست کارشناسی ارشد معتبر از تمام مکان های فیزیکی شرکت (e.g. امکانات تولید, مکان های انبار, دفاتر فروش) باید در یک محل مرکزی نگهداری.

مشکل فنی:

طبقه بندی سازمانی با استفاده از مجموعه سایت های مختلف اجرا شد. ما می خواهیم دوست دارم برای ایجاد لیست معتبر از مکان های فیزیکی در یک لیست WSS سفارشی. سپس, زمانی که ما نیاز به یک ستون در یک نوع محتوا (و یا یک ستون به یک لیست یا کتابخانه توضیحات اضافه:) که محل شرکت موجود, we would create a column using the "lookup" نوع داده و نقطه به این لیست کارشناسی ارشد.

متاسفانه, lookup datatypes must access a source list "locally" این معنی که لیست معتبر ما می توانید مجموعه های سایت را بگستراند.

راه حل های فنی:

پیاده سازی یک نوع جدید داده های سفارشی اجرا بر اساس SPField و به عنوان نماینده یک DropDownList را در رابط کاربر که ListItems پر از کارشناسی ارشد لیست 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) { }

عمومی نادیده گرفتن BaseFieldControl FieldRenderingControl
{
رسیدن
{
BaseFieldControl control = جدید XYZZYCorporateLocationFieldControl();
control.FieldName = این.InternalName;
برگشت 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 (SPItem 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

کد بالا در واقع پیاده سازی منطق برای پر DropDownList را با ارزش از لیست های سفارشی WSS واقع در http://localhost/enterprisedata and named "Corporate Departments".

من هر دو کلاس در یک فایل cs یا vb تک تعریف, وارد و آن را در 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" %>
<شیرپوینت:RenderingTemplate شناسایی="XYZZYCorporateLocationFieldControl" runat="server">
<قالب>
<افعی:DropDownList را شناسایی="XYZZYCorporateLocationSelector" runat="server" />
</قالب>
</
شیرپوینت:RenderingTemplate>

بالا به ج نجات داد:\فایل برنامه فایل های مشترک MICROSOFT مشترک الحاقات وب سرور 12 controltemplates.

  1. سرانجام, ما یک فایل XML برای صرفه جویی به ..... 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">
<
تعویض>
<
اصطلاح>
<
ستون />
</
اصطلاح>

<مورد ارزش=""/>

<قصور>
<
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 بر روی سرور و همه آن را باید شروع به کار به سادگی.

WSS: تکنیک برای ایجاد تعاریف میدان CAML.

طبقه اضافی: CAML

Here is a great posting by a fellow named "craig" در یک روش برای پیدا کردن تعاریف CAML برای انواع محتوا میدان بر مبنای تعاریف های واقعی زندگی می کنند از یک سایت.

ارسال او می گوید که تمام. به طور خلاصه:

  1. ایجاد یک نوع محتوا.
  2. آن را مرتبط با لیست.
  3. باز کردن لیست با شیرپوینت طراح.
  4. Export to a "personal web package".
  5. Rename to a .cab.
  6. Extract the manifest.
  7. Find your content type and associated CAML.

WSS: خلاصه مراحل را قادر می سازد از ویژگی های مفید / المان ها / و غیره. IntelliSense در VS 2005

دسته های اضافی: ویژوال استودیو 2005

برای فعال کردن INTELLISENSE مفید برای امکانات, عناصر, و غیره در ویژوال استودیو 2005:

  1. دسترسی به یک سرور WSS.
  2. Navigate to "c:\فایل برنامه فایل های مشترک MICROSOFT مشترک الحاقات وب سرور 12 TEMPLATE XML"
  3. باز یکی دیگر از ویندوز اکسپلورر با اشاره به: "C:\برنامه فایلها مایکروسافت ویژوال استودیو 8 XML طرحواره"
  4. کپی کردن فایل های زیر را از سرور WSS به VS شما 2005 دایرکتوری طرحواره:
    1. Wss.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. راه اندازی مجدد VS 2005
  6. Add a new XML file to a project.
  7. Click in the body of the XML file.
  8. In the properties pane, click on "Schemas" and pick "wss.xsd" from the choices. (It’s not necessary to select other xsd’s since they are referenced from wss.xsd).

Intellisense is now enabled for that XML document.

دیدن اینجا for more information on this subject and for instructions on how to automatically associate WSS intellisense with any XML file.

امتحان WSS 70-541, مایکروسافت ویندوز خدمات شیرپوینت 3.0 – برنامه توسعه

من در زمان و سرانجام آزمون ذکر شده در بالا این روز صبح. که من پیدا کردم امتحان دشوار و عادلانه.

کمبود نسبی از اطلاعات در این آزمون بر روی وب وجود دارد. من مطمئن هستم که چرا نیستم.

من به وضوح نمی خواهد به هر جزئیات در مورد امتحان من در زمان دریافت کنید, اما من فکر می کنم من با خیال راحت می توانید موارد زیر می گویند:

  1. اعتماد این لینک: http://www.microsoft.com/learning/exams/70-541.mspx.

    این لیست آنچه شما باید بدانید که به تصویب امتحان و آن را, IMO, بسیار دقیق.

  2. لینک همچنین توصیه در داخل مایکروسافت ویندوز خدمات شیرپوینت 3.0 توسط تد Pattison & دانیل لارسون. این کتاب را پوشش می دهد تقریبا تمام مطالب که در آزمون. که من پیدا کردم آن را به صورت بزرگ به خودی خود فراتر از آمادگی برای آزمون ساده. نمونه های بزرگ را فراهم می کند و واقعا من رو به فکر کردن در مورد برخی چیزهای جدید و جالب را امتحان کنید. اگر می خواهید به جست و خیز چند بیت در کتاب, فقط ارجاع متقابل TOC کتاب با اقلام در لینک از بالا.
  3. هیچ چیز ضربان واقعی تجربه عملی. اگر شما وقت و علاقه, همراه با مثال های کتاب و سپس آزمایش با آنها. شما یک زمان ساده تر در آزمون و همچنین واقعا یادگیری برنامه نویسی نرم افزار WSS.

</پایان>مشترک شدن در وبلاگ من!

خزه / InfoPath و سرور اشکال (InfoPath و 2007) عملکرد کشویی فهرست

طبقه اضافی: InfoPath و

Summary: An InfoPath 2007 form deployed to a MOSS server provides a drop-down list of vendors tied to a custom MOSS list. Upon selecting a vendor, rules assign field values to a handful of text fields such as sales rep name, address, city, state, zip and phone. Performance is horrible. We notice that performance gets worse (in a non-linear fashion) for each additional field we update this way. I.e., if we just update the sales rep name, it takes [X] amount of time. If we update sales rep, address1, address2, city, state, zip, it takes 10 times longer.

راه حل: Write a web service (sample code can be found اینجا) that is passed in the name of a vendor and it returns back the vendor details. سپس, assign the fields this way. Although this too seems slow, there was no discernable difference in performance when we assigned 1 field versus 8 زمینه. As an added bonus, users get a cool "contacting the server" Cylon effect while they wait for the form to invoke and consume the service results.

خزه: استثنا رخ داده است. (جز از داستان: 0x80020009 (DISP_E_EXCEPTION))

تکمیلی: علت ریشه ای این مشکل مشخص و هرگز به آن سطح دیگر هرگز.

ما در طول اجرای سایت توسعه است که به طور ناگهانی متوجه, دو کاربران قادر به دسترسی به مجموعه سایت. این حساب ها می توانید به سایت اصلی تصدیق, اما زمانی که در تلاش برای دسترسی به مجموعه سایت خاص, آنها فقط یک صفحه خالی. اشتباه نمایش داده می شود, فقط یک صفحه سفید خالی.

ما به عنوان یک مدیر مجموعه سایت وارد شوید و سعی کنید برای اضافه کردن یکی از آن دسته از کاربران به عنوان یک مدیر سایت مدیر سایت و این زمان, upon pressing "OK", ما این پیام را دریافت:

استثنا رخ داده است. (جز از داستان: 0x80020009 (DISP_E_EXCEPTION))

ما صرف برخی از زمان تحقیق و متاسفانه, نمی آمد تا با هر چیزی مفید. برخی از پیام ها در ورود تشخیصی وجود دارد, اما سخت بود دقیقا آنها را مرتبط با این موضوع.

در پایان, ما حذف مجموعه سایت و آن را دوباره ایجاد شده و آن را حل.

اگر من کشف کردن آنچه این کار را در آینده ایجاد می شود, من این پست را به روز رسانی کنید.