פרסמתי מודעה על מכירת המכונית שלי במחוז. ברגן, NJ ביום ראשון בערב. קיבל מספר פניות בדוא ל זמן קצר לאחר מכן וסגרו את העסקה עם מישהו ביום שלישי בלילה.
כמעט יותר מדי טוב מכדי להיות אמיתי …
פרסמתי מודעה על מכירת המכונית שלי במחוז. ברגן, NJ ביום ראשון בערב. קיבל מספר פניות בדוא ל זמן קצר לאחר מכן וסגרו את העסקה עם מישהו ביום שלישי בלילה.
כמעט יותר מדי טוב מכדי להיות אמיתי …
לא לשנות החיפוש המתקדם 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. הם:
. הנה הקוד בשביל זה:
הציבור מחלקה 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
הציבור מחלקה 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 (חזק חובה, בטח).
<%@ שליטה שפה= "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.
<?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 על השרת והוא צריך להתחיל כל עובד יפה.
קטגוריה נוספת: CAML
כאן הוא הצבה נהדרת. על-ידי בחור בשם "קרייג" על טכניקה למציאת הגדרות CAML עבור שדות מסוגי תוכן מבוסס על הגדרות אמיתי מאתר.
רישום שלו אומר הכל. בקצרה:
קטגוריות נוספות: Visual Studio 2005
כדי לאפשר intellisense שימושי עבור תכונות, אלמנטים, ועוד ב- visual studio 2005:
Intellisense זמין כעת עבור אותו מסמך XML.
ראה כאן לקבלת מידע נוסף בנושא זה, לקבלת הוראות כיצד באופן אוטומטי לשייך WSS intellisense כל קובץ XML.
אני לקחתי, עבר את. מבחן שהוזכרו לעיל, הבוקר. . מצאתי את הבחינה להיות קשה ולא הוגן.
קיים מחסור יחסי של מידע על המבחן הזה באינטרנט. אני לא בטוח למה.
אני כמובן לא אכנס כל פרט לגבי הבחינה שלקחתי, אבל אני חושב שאני יכול לומר בביטחון הבאות:
זה מראה מה שאתה צריך לדעת כדי לעבור את הבחינה של זה, IMO, מאוד מדויק.
</קצה>מנוי על הבלוג שלי!
קטגוריה נוספת: InfoPath
סיכום: InfoPath 2007 טופס פריסת לשרת מוס מספקת רשימה נפתחת של ספקים קשור רשימה מותאמת אישית של מוס. בחירת ספק, כללים להקצות ערכי שדה קומץ של שדות טקסט כגון שם נציג מכירות, כתובת, העיר, המדינה, מיקוד וטלפון. הביצועים הוא נורא. אנו מבחינים כי הביצועים מחמיר (באופן ליניארי) עבור כל שדה נוסף אנו מעדכנים בכיוון הזה. קרי, אם רק לעדכן את שם נציג מכירות, זה לוקח [x] כמות הזמן. אם אנו מעדכנים נציג מכירות, כתובת1, address2, העיר, המדינה, zip, זה לוקח 10 פעמים יותר.
פתרון: לכתוב שירות אינטרנט (ניתן למצוא דוגמאות קוד כאן) זה מועבר בשם ספק ומחזירה אותו בחזרה את פרטי הספק. לאחר מכן, להקצות את השדות בכיוון הזה. למרות שזה גם נראה איטי, לא היה ניכרת הבדל בביצועים כאשר אנחנו מוקצה 1 שדה לעומת 8 שדות. כבונוס נוסף, המשתמשים מקבלים מגניב "פנייה אל השרת" הסילונים אפקט בזמן שהם מחכים הטופס כדי להפעיל ולצרוך את התוצאות שירות.
עדכון: קבענו מעולם לא שורש הבעיה וזה לעולם השטח שוב.
אנו מבחינים כי פתאום במהלך היישום של אתר פיתוח, שני משתמשים אינם יכולים לגשת אוסף אתרים. חשבונות אלה יוכל לבצע אימות האתר הראשי, אך כאשר מנסים לגשת אוסף אתר מסוים, הם פשוט מקבלים מסך ריק. אין שגיאות המוצגות, רק דף ריק לבן.
אנו להיכנס בתור מנהל מערכת של אוסף אתרים, מנסה להוסיף את אחד מאותם משתמשים מנהל האתר, הפעם, לחיצה על "אישור", אנחנו מקבלים הודעה זו:
אירעה חריגה. (חריגה מ- HRESULT: 0x 80020009 (DISP_E_EXCEPTION))
בילינו זמן במחקר זה, למרבה הצער, לא לבוא עם משהו מועיל. היו כמה הודעות יומן דיגאנוסטי, אבל זה היה קשה לתאם להם בדיוק לנושא הזה.
בסופו של דבר, מחיקת אוסף האתרים ונוצרת לפיה פתרנו את זה.
אם לגלות מה גרם לזה בעתיד, אני אעדכן את הפוסט הזה.