ארכיון חודשי: באוגוסט 2007

הרשימה של קרייג עבד טוב בשבילי

פרסמתי מודעה על מכירת המכונית שלי במחוז. ברגן, NJ ביום ראשון בערב. קיבל מספר פניות בדוא ל זמן קצר לאחר מכן וסגרו את העסקה עם מישהו ביום שלישי בלילה.

כמעט יותר מדי טוב מכדי להיות אמיתי …

מוס חיפוש התאמה אישית מתקדמת — התיק משנה בחיפוש מתקדם XSLT

לא לשנות החיפוש המתקדם XSLT לעיתים קרובות, אז זה נראה כאילו אני מטפסת גבעות קטנות בכל פעם.

את השיעור החדש שלי זה: מקרה חשוב בעת הפניה לעמודה. בחיפוש מתקדם, יש לי העמודות המוגדרות כמו זה:

<שורש xmlns:xsi="http://www.w3.org/ 2001/סכימת Xml-מופע">
<
עמודות>
<
טור שם="GafTrainingInvoiceNumber" />
<
טור שם="GafTrainingInvoiceLocation" />
<
טור שם="מזהה"/>
<
טור שם="דרגה"/>
<
טור שם="כותרת"/>
<
טור שם="מחבר"/>
<
טור שם="גודל"/>
<
טור שם="נתיב"/>
<
טור שם="תיאור"/>
<
טור שם="כתיבה"/>
<
טור שם="SiteName"/>
<
טור שם="CollapsingStatus"/>
<
טור שם="HitHighlightedSummary"/>
<
טור שם="HitHighlightedProperties"/>
<
טור שם="ContentClass"/>
<
טור שם="IsDocument"/>
<
טור שם="PictureThumbnailURL"/>
</
עמודות>
</
שורש>

XLST המציג את המיקום של החשבונית ומספר חשבונית היה:

<p>
מספר החשבונית הכשרה: <xsl:הערך בחר="GafTrainingInvoiceNumber"/>
<
br></br>
הכשרה חשבונית מיקום: <xsl:הערך בחר="GafTrainingInvoiceLocation"/>
</
p>

עם זאת, בחר יש להפנות המאפיין כל באותיות קטנות, כמו ב-:

<p>
מספר החשבונית הכשרה: <xsl:הערך בחר="gaftraininginvoicenumber"/>
<
br></br>
הכשרה חשבונית מיקום: <xsl:הערך בחר="gaftraininginvoicelocation"/>
</
p>


עד תיקנתי את זה, תוצאות החיפוש הראו את התוויות (כלומר. "מספר החשבונית אימון") אבל אין נתונים.

מוס: דוגמה פונקציונלית – סוג נתונים מותאמים אישית

תרחישים עסקיים:

יישום כלל-ארגוני של מוס עבור ייצור החברה עם 30+ אתרים, כמה עשרות מחלקות החברה.

המטרה העסקית:

למרות מספר רב של קבוצות עסקיות (מחלקות, מיקומים, ועוד), נתונים מסוימים צריך להיות מתוחזק ברמה העולמית. לדוגמה, רשימת המאסטר הסמכותי של כל המיקומים הפיזיים של החברה (המסופקים. מתקני ייצור, מחסן מיקומים, משרדי מכירות) צריך להישמר במיקום מרכזי.

בעיה טכנית:

הטקסונומיה של הארגון בוצעה באמצעות אוספי אתרים מרובים. שרצינו ליצור רשימת מיקומים פיזיים סמכותי רשימה מותאמת אישית של WSS. לאחר מכן, כאשר היינו צריכים עמודה של סוג תוכן (או עמודה להוסיף ספרייה לרשימה או דוק) זה הכיל מיקומים של החברה, אנו ניצור עמודה באמצעות בדיקת מידע"" סוג נתונים ונקודת ברשימה הראשית.

למרבה הצער, נתונים מסוג בדיקת מידע עליך לגשת לרשימה מקור מקומי"" משמעות כי רשימת המוסמכים שלנו לא יכול להתפרס אוספי אתרים.

פתרון טכני:

יישום סוג נתונים מותאם אישית חדש מיושם על בסיס SPField, כמייצג DropDownList בממשק המשתמש של מי ListItems אכלס מתוך הרשימה הראשית של WSS.

יצרנו אוסף אתרים חדש שנקרא "http://localhost/EnterpriseData". שם, יצרנו רשימה מותאמת אישית בשם "מיקומים של החברה". רשימה זו משתמשת רק הכותרת"סטנדרטי" כדי להכיל את רשימת מיקומים של החברה בפועל.

האחד נובע מספר שלבים נפרדים כדי ליצור סוג נתונים מותאמים אישית ב- WSS. הם:

  1. הגדרת מחלקה אשר יורש SPField (אחד עשוי לרשת מתחומים אחרים במידת הצורך).

. הנה הקוד בשביל זה:

הציבור מחלקה XYZZYCorporateLocationField : SPFieldText
{
הציבור XYZZYCorporateLocationField
(SPFieldCollection שדות, מחרוזת typeName, מחרוזת displayName)
: בסיס(שדות, typeName, displayName) { }

הציבור XYZZYCorporateLocationField
(SPFieldCollection שדות, מחרוזת displayName)
: בסיס(שדות, displayName) { }

הציבור עקיפה BaseFieldControl FieldRenderingControl
{
לקבל
{
BaseFieldControl שליטה = חדש XYZZYCorporateLocationFieldControl();
שליטה. FieldName = זה.InternalName;
החזרה שליטה;
} //לקבל
} // fieldrenderingcontrol

הציבור עקיפה מחרוזת GetValidatedString(אובייקט ערך)
{
אם (זה.נדרש || ערך. ToString().שווה ל-(מחרוזת.ריק))
{
לזרוק חדש SPFieldValidationException ("המחלקה אינה מוקצית.");
}
החזרה בסיס.GetValidatedString(ערך);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. הגדרת מחלקה אחרת תירש מהפקד שדה בסיס, כמו ב-:

הציבור מחלקה XYZZYCorporateLocationFieldControl : BaseFieldControl
{
מוגן DropDownList XYZZYCorporateLocationSelector;

מוגן עקיפה מחרוזת DefaultTemplateName
{
לקבל
{
החזרה "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

הציבור עקיפה אובייקט ערך
{
לקבל
{
EnsureChildControls();
החזרה זה.XYZZYCorporateLocationSelector.SelectedValue;
} // לקבל
סט
{
EnsureChildControls();
זה.XYZZYCorporateLocationSelector.SelectedValue = (מחרוזת)זה.ItemFieldValue;
} // סט
} // לעקוף את האובייקט ערך

מוגן עקיפה void CreateChildControls()
{

אם (זה.שדה = = null || זה.ControlMode = = SPControlMode.התצוגה)
החזרה;

בסיס.CreateChildControls();

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

אם (זה.XYZZYCorporateLocationSelector = = null)
לזרוק חדש יוצא מן הכלל("שגיאה: אין אפשרות לטעון. קובץ ASCX!");

אם (!זה.דף IsPostBack.)
{

שימוש (SPSite האתר = חדש SPSite(ב- "http://localhost/enterprisedata"))
{
שימוש (SPWeb אינטרנט = האתר. OpenWeb())
{

Splist.update() currentList = אינטרנט. רשימות["מיקומים של החברה"];

foreach (SPItem XYZZYCorporateLocation ב currentList.Items)
{
אם (XYZZYCorporateLocation["כותרת"] == null) «««;

מחרוזת theTitle;
theTitle = XYZZYCorporateLocation["כותרת"].ToString();

זה.XYZZYCorporateLocationSelector.Items.Add
(חדש פריט(theTitle, theTitle));

} // foreach

} // באמצעות האינטרנט spweb = site.openweb()
} // שימוש באתר spsite = spsite חדש(ב- "http://localhost/enterprisedata")

} // אם לא ל- postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

הקוד למעלה בעצם מיישמת את הלוגיקה לאכלוס של DropDownList עם ערכים מתוך הרשימה המותאמת אישית WSS הממוקם ב http://localhost/enterprisedata ומחלקות בשם "תאגידים".

אני חנומ שתי הכיתות קובץ. cs יחיד, להדר אותו ולשים אותו GAC (חזק חובה, בטח).

  1. ליישם את תבנית שליטה (.ascx) כפי שמוצג:

<%@ שליטה שפה= "C #" יורש="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,גירסה = 12.0.0.0, תרבות = נייטרלי,PublicKeyToken = 71e9bce111e9429c" compilationMode= "תמיד" %>
<%
@ הקופה Tagprefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" הרכבה="Microsoft.SharePoint, גירסה = 12.0.0.0, תרבות = נייטרלי, PublicKeyToken = 71e9bce111e9429c" %> <%@ הקופה Tagprefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" הרכבה="Microsoft.SharePoint, גירסה = 12.0.0.0, תרבות = נייטרלי, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate מזהה= "XYZZYCorporateLocationFieldControl" runat= "שרת">
<תבנית>
<asp:DropDownList מזהה= "XYZZYCorporateLocationSelector" runat= "שרת" />
</תבנית>
</
SharePoint:RenderingTemplate>

האמור לעיל הוא הציל את c:\תוכנית filescommon filesmicrosoft sharedweb שרת extensions12controltemplates.

  1. לבסוף, אנו יוצרים קובץ XML כדי לשמור. 12XML מדריך. . זה CAML זה מגדיר את סוג נתונים מותאמים אישית שלנו, לדוגמה שלי, נראה כמו זה:

<?xml גירסה="1.0" קידוד="utf-8" ?>
<
FieldTypes>
<
FieldType>
<
שדה שם="TypeName">CorporateLocations</שדה>
<
שדה שם="ParentType">טקסט</שדה>
<
שדה שם="TypeDisplayName">מיקומים של החברה</שדה>
<
שדה שם="TypeShortDescription">כל המיקומים של החברה xyzzy ב כולל מתקני ייצור או אחרים.</שדה>
<
שדה שם="UserCreatable">נכון</שדה>
<
שדה שם="ShowInListCreate">נכון</שדה>
<
שדה שם="ShowInDocumentLibraryCreate">נכון</שדה>
<
שדה שם="ShowInSurveyCreate">נכון</שדה>
<
שדה שם="ShowInColumnTemplateCreate">נכון</שדה>
<
שדה שם="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, גירסה = 1.0.0.0, תרבות = נייטרלי, PublicKeyToken = b0b19e85410990c4</שדה>
<
RenderPattern שם="DisplayPattern">
<
מתג>
<
Expr>
<
טור />
</
Expr>

<התיק ערך=""/>

<ברירת מחדל>
<
HTML>
<![CDATA[
<span סגנון = "צבע:אדום"><b>]]>
</
HTML>

<
טור SubColumnNumber="0" HTMLEncode="נכון"/>

<HTML><![CDATA[</b></טווח>]]></HTML>

</
ברירת מחדל>
</
מתג>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
קובץ XML זה מוסיף את סוג נתונים מותאמים אישית הקובץ WSS "ספריית" ומתאימה אותו מול GAC היה הרכבה.

לאחר כל סיביות אלה מתמקמים, iisreset על השרת והוא צריך להתחיל כל עובד יפה.

WSS: טכניקה ליצירת הגדרות שדה CAML.

קטגוריה נוספת: CAML

כאן הוא הצבה נהדרת. על-ידי בחור בשם "קרייג" על טכניקה למציאת הגדרות CAML עבור שדות מסוגי תוכן מבוסס על הגדרות אמיתי מאתר.

רישום שלו אומר הכל. בקצרה:

  1. יצירת סוג תוכן.
  2. לשייך אותו לרשימה.
  3. פתח את הרשימה עם SharePoint Designer.
  4. ייצוא ל- "חבילת אינטרנט אישי".
  5. שינוי שם ה-. cab.
  6. לחלץ את רשימת הנוסעים.
  7. למצוא את סוג התוכן המשויך CAML.

WSS: סיכום השלבים כדי לאפשר שימושי תכונות/רכיבים/ועוד. Intellisense נגד 2005

קטגוריות נוספות: Visual Studio 2005

כדי לאפשר intellisense שימושי עבור תכונות, אלמנטים, ועוד ב- visual studio 2005:

  1. לגשת לשרת WSS.
  2. נווט אל "c:\תוכנית filescommon filesmicrosoft sharedweb שרת extensions12TEMPLATEXML"
  3. פתח את סייר windows עוד הצבעה: "C:\תוכנית FilesMicrosoft Visual Studio 8XmlSchemas"
  4. להעתיק את הקבצים הבאים מהשרת WSS VS שלך 2005 ספריית הסכימות:
    1. Wss.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. הפעל מחדש VS 2005
  6. הוסף קובץ XML חדש לפרוייקט.
  7. לחץ בתוך הגוף של קובץ ה-XML.
  8. באזור properties, לחץ על "סכימות" ולבחור "wss.xsd" מתוך האפשרויות. (זה לא הכרחי לבחור של xsd אחרים מאז הם מוזכרים מ- wss.xsd).

Intellisense זמין כעת עבור אותו מסמך XML.

ראה כאן לקבלת מידע נוסף בנושא זה, לקבלת הוראות כיצד באופן אוטומטי לשייך WSS intellisense כל קובץ XML.

מבחן WSS 70-541, Microsoft Windows SharePoint Services 3.0 – פיתוח יישומים

אני לקחתי, עבר את. מבחן שהוזכרו לעיל, הבוקר. . מצאתי את הבחינה להיות קשה ולא הוגן.

קיים מחסור יחסי של מידע על המבחן הזה באינטרנט. אני לא בטוח למה.

אני כמובן לא אכנס כל פרט לגבי הבחינה שלקחתי, אבל אני חושב שאני יכול לומר בביטחון הבאות:

  1. סמוך לקישור זה: http://www.microsoft.com/learning/exams/70-541.mspx.

    זה מראה מה שאתה צריך לדעת כדי לעבור את הבחינה של זה, IMO, מאוד מדויק.

  2. הקישור גם ממליצה בתוך Microsoft Windows SharePoint Services 3.0 על ידי Ted פטיסון & דניאל לארסון. ספר זה מכסה כמעט כל הנושאים כי המבחן כתובות. מצאתי את זה. תהיי נהדרת כשלעצמה מעבר מבחן פשוט בהכנות. הוא מספק דוגמאות נהדר, ממש גרם לי לחשוב על כמה דברים חדשים ומעניינים לנסות. אם ברצונך לדלג על כמה חלקים בספר, פשוט להצליב את תוכן העניינים של הספר עם הפריטים שבקישור מלמעלה.
  3. אין כמו התנסות בפועל. אם יש לך זמן ועניין, בצע יחד עם הדוגמאות שבספר, ואז הניסוי עם אותם. אתה להיות קל יותר בבחינה וכן ללמוד תכנות WSS.

</קצה>מנוי על הבלוג שלי!

מוס / InfoPath Forms Server (InfoPath 2007) תיבת הרשימה הנפתחת ביצועים

קטגוריה נוספת: InfoPath

סיכום: InfoPath 2007 טופס פריסת לשרת מוס מספקת רשימה נפתחת של ספקים קשור רשימה מותאמת אישית של מוס. בחירת ספק, כללים להקצות ערכי שדה קומץ של שדות טקסט כגון שם נציג מכירות, כתובת, העיר, המדינה, מיקוד וטלפון. הביצועים הוא נורא. אנו מבחינים כי הביצועים מחמיר (באופן ליניארי) עבור כל שדה נוסף אנו מעדכנים בכיוון הזה. קרי, אם רק לעדכן את שם נציג מכירות, זה לוקח [x] כמות הזמן. אם אנו מעדכנים נציג מכירות, כתובת1, address2, העיר, המדינה, zip, זה לוקח 10 פעמים יותר.

פתרון: לכתוב שירות אינטרנט (ניתן למצוא דוגמאות קוד כאן) זה מועבר בשם ספק ומחזירה אותו בחזרה את פרטי הספק. לאחר מכן, להקצות את השדות בכיוון הזה. למרות שזה גם נראה איטי, לא היה ניכרת הבדל בביצועים כאשר אנחנו מוקצה 1 שדה לעומת 8 שדות. כבונוס נוסף, המשתמשים מקבלים מגניב "פנייה אל השרת" הסילונים אפקט בזמן שהם מחכים הטופס כדי להפעיל ולצרוך את התוצאות שירות.

מוס: אירעה חריגה. (חריגה מ- HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

עדכון: קבענו מעולם לא שורש הבעיה וזה לעולם השטח שוב.

אנו מבחינים כי פתאום במהלך היישום של אתר פיתוח, שני משתמשים אינם יכולים לגשת אוסף אתרים. חשבונות אלה יוכל לבצע אימות האתר הראשי, אך כאשר מנסים לגשת אוסף אתר מסוים, הם פשוט מקבלים מסך ריק. אין שגיאות המוצגות, רק דף ריק לבן.

אנו להיכנס בתור מנהל מערכת של אוסף אתרים, מנסה להוסיף את אחד מאותם משתמשים מנהל האתר, הפעם, לחיצה על "אישור", אנחנו מקבלים הודעה זו:

אירעה חריגה. (חריגה מ- HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

בילינו זמן במחקר זה, למרבה הצער, לא לבוא עם משהו מועיל. היו כמה הודעות יומן דיגאנוסטי, אבל זה היה קשה לתאם להם בדיוק לנושא הזה.

בסופו של דבר, מחיקת אוסף האתרים ונוצרת לפיה פתרנו את זה.

אם לגלות מה גרם לזה בעתיד, אני אעדכן את הפוסט הזה.