ארכיון קטגוריה: פיתוח SharePoint

הסבר פשוט: “הערך אינו נמצא בטווח הצפוי.”

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

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

שגיאה בטעינת ופועלים אירוע מקלט Conchango.xyzzyEventReceiver xyzzy, גירסה = 1.0.0.0, תרבות = נייטרלי, PublicKeyToken = 0dc50a750396c3ac. פרטים נוספים הוא מתחת. : הערך לא נופל בתוך הטווח הצפוי.

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

מאפיינים.פריט הרשימה["תאריך יעד"]

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

מאפיינים.פריט הרשימה["תאריך יעד"]

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

מהירה & קל: צור תיקייה והקצאה של סוג תוכן (או, יש את מחווני ה-Kpi ולאכול אותם מדי)

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

זה זרמו יפה עם העבודה שאני עושה. . אני יוצר תיקיה עבור כל מסמך בו תועלה. הדבר נעשה באמצעות מקלט אירוע. כתוצאה מכך, . זה חתיכת עוגה כדי לשמור של תיקיית האב מטה נתונים מסונכרנים עם הנתונים מונחה-KPI meta מהקובץ עצמו מאז הצנרת נמצא כבר במקום. This allows me to have my KPI’s and eat them too 🙂

התאמתי את השפופרת אירוע כדי להוסיף את התיקיה ולאחר מכן הגדר את סוג התוכן של תיקיה חדשה זו לסוג התוכן שלי ה-KPI ידידותי מותאם אישית. זה מעט קוד עשה את העבודה:

 SPFolderCollection srcFolders = targetWeb.GetFolder("מסמכים").תיקיות משנה;
  SPFolder addedFolder = srcFolders.Add(מאפיינים.ListItem.ID.ToString());
  SPContentTypeId kpiCT = חדש SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["תוכן מזהה סוג"] = kpiCT;
  addedFolder.Item.Update();

כדי לאתר את מזהה סוג התוכן בפועל, אני לגשת סוג תוכן באמצעות הגדרות האתר, העתקה/הדבקה זה מכתובת ה-URL כמוצג:

התמונה

</קצה>

מנוי על הבלוג שלי!

תגיות טכנורטי: ,

מהיר וקל: לקבל את SPFolder של SPListItem מקלט אירוע

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

פרטי void UpdateParentFolder(SPItemEventProperties מאפיינים)
{

SPFolder thisItemFolder = מאפיינים.ListItem.File.ParentFolder;
thisItemFolder.Item["מצב אישור ZZ"] = "חדשות טובות, כולם!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

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

הטריק הוא שאין לך אפשרות לקבל את SPFolder של הפריט ישירות מתוך הפריט עצמו (כלומר. מאפיינים.ListItem.Folder הוא null). במקום זאת, לעבור על קובץ משויך של פריט הרשימה ולקבל בתיקיה הקובץ.

</קצה>

מנוי על הבלוג שלי!

תגיות טכנורטי:

עדיין מקלט אירוע אחר באגים בסיבוב

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

. אני עובד על מקלט האירוע החלו לייצר שגיאה זו 12 כוורת:

שגיאה בטעינת ופועלים אירוע מקלט Conchango.xyzzyEventReceiver xyzzy, גירסה = 1.0.0.0, תרבות = נייטרלי, PublicKeyToken = blahbalhbalh. פרטים נוספים הוא מתחת. : הפניה לאובייקט לא הוגדרה למופע של אובייקט.

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

. ניסיתי פתרון זה כדי לקבל pdb שלי שם עם התקוות של SharePoint הזה 12 כוורת יראה את מעקב המחסנית, אבל ללא מזל. אני לא יודע אם זה אפשרי, אם מישהו עושה, אנא הודע לי 🙂

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

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

  נסה {
    UpdateEditionDate(מאפיינים);
  }
  לתפוס (יוצא מן הכלל e)
  {
    לזרוק חדש יוצא מן הכלל("משגר, UpdateEditionDate(): יוצא מן הכלל: [" + e.ToString() + "].");
  }

זה הופיע בה 12 כוורת נוהג כך:

שגיאה בטעינת ופועלים אירוע מקלט Conchango.xyzzyEventReceiver xyzzy, גירסה = 1.0.0.0, תרבות = נייטרלי, PublicKeyToken = blahblahblah. פרטים נוספים הוא מתחת. : משגר, UpdateEditionDate(): יוצא מן הכלל: [NullReferenceException.: הפניה לאובייקט לא הוגדרה למופע של אובייקט. ב- Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties נכסים) ב- Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties נכסים, מחרוזת eventDescription)].

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

</קצה>

מנוי על הבלוג שלי!

פתרון: SPQuery לא לחפש בתיקיות

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

את התסריט שלי:

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

השירות חזית BDC הסופי משתמש בשאילתה ככה לעשות בדיקת המידע:

 // להשתמש בכלי U2U כדי לסייע ליצירת שאילתה זו CAML.
      oQuery.Query =
        "<היכן>";

      אם (titleFilter.Length > 0)
        oQuery.Query   =
          "  <ו>";

      oQuery.Query   =
        "    <ו>" +
        "      <Geq>" +
        "        <שם FieldRef =  "DocumentId" />" +
        "        <ערך סוג =  "Text">" + minId + "</ערך>" +
        "      </Geq>" +
        "      <Leq>" +
        "        <שם FieldRef =  "DocumentId" />" +
        "        <ערך סוג =  "Text">" + maxId + "</ערך>" +
        "      </Leq>" +
        "    </ו>";

      אם (titleFilter.Length > 0)
        oQuery.Query   =
          "    <מכיל>" +
          "      <שם FieldRef =  "Title" />" +
          "      <ערך סוג =  "Text">" + titleFilter + "</ערך>" +
          "    </מכיל>" +
          "  </ו>";
      oQuery.Query   =
        "</היכן>";

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

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

Splist.update() oList = אינטרנט.רשימות["מסמכים"];

SPQuery oQuery = חדש SPQuery();

. הייתי במקום בנאי שצוינו תצוגה:

Splist.update() oList = אינטרנט.רשימות["מסמכים"];

SPQuery oQuery = חדש SPQuery(oList.Views["כל המסמכים"]);

זה פתר את הבעיה ואני התחלתי לקבל את התוצאות שלי.

הוספתי את האופרטור מכיל לתערובת והוא נשבר שוב. מתברר כי המפעיל מכיל, עד כמה שאני יכול לומר, לא עובד עם הנוף באותו אופן כמו GEQ פשוטים יותר / LEQ אופרטורים. עשיתי כמה חיפושים ונודע כי יש להגדיר הצג תכונות של השאילתה "רקורסיבית", כמו ב-:

oQuery.ViewAttributes = "היקף = "Recursive"";

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

העובדה SPQuery המבוסס על תצוגה עובד עבור כמה מפעילים (GEQ/LEQ) ולא אחרים (מכיל), בשילוב עם העובדה כי Kpi לא נראה לעבוד עם תיקיות המכילות הפניות ספריות מסמכים ממני להאמין כי SPQuery יש כמה בעיות אורתוגונליות.

תודה מיוחדת:

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

</קצה>

מנוי על הבלוג שלי!

תגיות טכנורטי: ,

מוס KPI באג? מחוון הרשימה קשור ספריית מסמכים עם תיקיות

עדכון 02/29/08: . פתרתי את הבעיה על-ידי יצירת תיקיה ולאחר מכן הקצאת סוג תוכן אל התיקייה הכוללת את נתוני meta שאני צריכה עבור ה-Kpi. תיארתי את זה בפירוט רב קצת יותר כאן.

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

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

זה בדרך כלל פשוט לעשות ותיארתי משהו מאוד מאוד דומה לזה-הציד של SharePoint עם הרבה צילומי מסך אם אתה מעוניין.

על קצה המזלג, . עשיתי את הדברים הבאים:

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

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

התמונה

צילום מסך לעיל מראה בבירור ישנם שני מסמכים מהנוף, אבל הערך"" הוא אחד. CamlSchema"" עם מסמך ריק מזהה הוא בתיקיית השורש, והשני הוא בתיקייה בשם "84".

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

אם אני טועה, נא להתקשר. אליי או השאירו תגובה.

</קצה>

מנוי על הבלוג שלי!

תגיות טכנורטי:

פתרון בעיה: “FileNotFoundException” עם אזור מקלט תכונה.

עבדתי על תכונה בשבוע שעבר היה מוסיף כמה מקלטים האירוע מופע ספציפי ברשימה. (אני blogged קצת את המקלט הרשימה כאן).

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

זו השגיאה מוס הראה לי בדפדפן אינטרנט:

התכונה ' b2cb42e3-4f0a-4380-אודי לוין-1ef9cd526f20’ שלא הייתה אפשרות להתקין כי הטעינה של אירוע מקלט הרכבה "xyzzyFeatureReceiver_0" נכשל: System.IO.FileNotFoundException: אין אפשרות לטעון קובץ או הרכבה ' xyzzyFeatureReceiver_0’ או אחת מהתלויות שלו. אין למערכת אפשרות למצוא את הקובץ שצוין.
שם קובץ: ' xyzzyFeatureReceiver_0’
ב- System.Reflection.Assembly.nLoad(שם קובץ AssemblyName, מחרוזת בסיס קוד, AssemblySecurity הראיות, הרכבה locationHint, StackCrawlMark& stackMark, ThrowOnFileNotFound בוליאנית, ForIntrospection בוליאנית)
ב- System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, AssemblySecurity הראיות, StackCrawlMark& stackMark, ForIntrospection בוליאנית)
ב- System.Reflection.Assembly.InternalLoad(מחרוזת assemblyString, AssemblySecurity הראיות, StackCrawlMark& stackMark, ForIntrospection בוליאנית)
ב- System.Reflection.Assembly.Load(מחרוזת assemblyString)
ב- Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: רישום איגוד הרכבה פעילה OFF.
כדי לאפשר רישום כשל איגוד הרכבה, הגדר את ערך הרישום [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) כדי 1.
הערה: יש איזה עונש הביצועים המשויכים רישום כשל איגוד הרכבה.
כדי לבטל תכונה זו, הסר את ערך הרישום [HKLMSoftwareMicrosoftFusion!EnableLog].

פתרון בעיות עם Windows SharePoint Services.

אני יודע כיצד בכוונה לגרום לשגיאה הזאת: לא התקנת ההרכבה ב- GAC. אבל, זה היה ב- GAC. אני בדרך כלל התקן הרכבות GAC על ידי גרירתם לתוך הארובות:\windowsassembly תיקיה באמצעות סייר windows. אף פעם לא הרגשתי 100% נוח לעשות את זה. כי תמיד חשבתי ש-gacutil זה קיים מסיבה מסוימת … אז ניסיתי את זה. זה לא משנה.

חיפשתי את Internets ומצאתי פוסט זה: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

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

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

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

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

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

יצירת האובייקט המקבל תכונה מהרכבה "xyzzyFeatureReceiver_0" נכשלה, הקלד "Conchango.xyzzyFeatureReceiver" עבור תכונה b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: ערך אינו יכול להיות null.
שם פרמטר: סוג
ב- System.Activator.CreateInstance(סוג, NonPublic בוליאנית)
ב- System.Activator.CreateInstance(סוג)
ב- Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

פתרון בעיות עם Windows SharePoint Services.

זמן לעוד נסיעה אחת אחרונה האינטרנט במלואו!

הפעם אני אגלה, כצפוי מספיק, מוס בעיות שגיאה זו, כי מכלול זה לא ב- GAC.

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

סוף סוף החלטתי פונט. ליצור פרוייקט חדש לגמרי, ואני העתק/הדבק הקוד מהפרוייקט שאינו עבודה incredible-cloaked-from-the-GAC-assembly על הפרוייקט החדש הזה. (אני מחפש דגל לבנות סינדרום "הסתר מהרכבה מחייב אם מותקן ב- GAC" אבל לא יכול למצוא אחד).

התקנת התכונה ולהפעיל אותו, … זה עובד! כל כך, אחרי כל זה, נאלצתי בעיקרון ' אתחול מחדש’ הפרוייקט שלי. זוהי סיבה נוספת למה אני שונא מחשבים.

. למדתי משהו מועיל מזה. אני היה מתקין תכונות באמצעות שורת הפקודה stsadm כל היום כבר בשימוש "-כוח" אפשרות מתוך הרגל. מסיבה כלשהי, לא השתמשתי בכוח האפשרות - כאשר התקנתי את הפרוייקט החדש. הפעם, עשיתי למעשה, באמת לשכוח להעתיק ההרכבה של הפרוייקט החדש הזה לתוך GAC. כתוצאה מכך, קיבלתי את FielNotFoundException"" שגיאה. הפעם, קיבלתי אותה stsadm, לא כאשר ניסיתי להפעיל את תכונת באמצעות דפדפן האינטרנט. כל כך, -כוח למעשה ממלא שני תפקידים. זה מאפשר לך להתקין מחדש את תכונה הקיימת. זה גם מאפשר לך להתקין תכונה מרכבה זה לא יכול לעבוד בזמן ריצה על-ידי דיכוי השגיאה. זה כנראה אומר באותה מידה ב עזרה איפשהו אבל שלא הבחנתי בה.

</קצה>

תגיות טכנורטי: ,

מהירה & קל: שינוי שם הקובץ שנטען באמצעות מודל האובייקטים של SharePoint באמצעות מקלט אירוע

עדכון: זה עובד אבל יש מגבלות משמעותיות שיפורטו על דבריו. זה עדיין יכול להיות שימושי ב כמה כפויה.

עדכון 2: בפרוייקט הנוכחי שלי, משתמשים תמיד להעלות מסמכים. כתוצאה מכך, אני לא רץ לתוך בעיה בו MS-Word פועל וחושב כי הקובץ שונה שם על זה. נתקלתי בעיה, "הקובץ השתנה על-ידי מישהו אחר" פתרת את זה באמצעות דגל סוג פשוט סמפור. משתמשים צריכים לשנות שדה נתונים meta מערך ברירת המחדל שלה למשהו אחר. Itemupdated() מקלט נראה עבור ערך חוקי לפני למעשה ביצוע שינוי מאז, לא הייתה לי שום בעיות. המילים שלך עשוי להשתנות.

יש לי דרישה של הלקוח כדי לשנות את השם של הקבצים המועלים לספריית מסמכים ספציפיים כדי להתאים עם מוסכמה מסוימת. ה-API אינו מספק שינוי שם"()" שיטה. במקום זאת, אנו משתמשים "'Moveto '(…)". . הנה קצת מינימלי של קוד כדי להשיג את זה:

 הציבור עקיפה void ItemAdded(SPItemEventProperties מאפיינים)
        {
            SPFile f = נכסים.ListItem.File;

            f.MoveTo(מאפיינים.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

והחוצה היא "המאפיינים. ListItem.ParentList.RootFolder.Url". ' Moveto '() השיטה דורשת כתובת URL. זה פירה מחרוזת נקודות אותי אל תיקיית הבסיס של ספריית המסמך הנוכחי שלי. זה מאפשר לי להימנע כל קידוד קשיח בתוך השפופרת האירוע שלי.

זוהי גרסה יותר שימושי זה עושה את אותו הדבר, אבל מקצה את השם של הקובץ "Title":

 הציבור עקיפה void ItemAdded(SPItemEventProperties מאפיינים)
        {
            DisableEventFiring();

            // להקצות את הכותרת של פריט זה השם של הקובץ עצמו.
 // הערה: הקצאה זו חייב להתבצע לפני לנו לשנות את הקובץ עצמו.
 // מתקשר עדכון() על SPFile נראה לפסול את המאפיינים
 // קצת הגיון.  עדכונים "כותרת" נכשל עד זה ישתנה (עדכון() שיחה)
 // לפני השינוי הועברו על שם הקובץ.
            מאפיינים.פריט הרשימה["כותרת"] = נכסים.ListItem.File.Name;

            מאפיינים.ListItem.Update();

            SPFile f = נכסים.ListItem.File;

            // מקבל את הסיומת של הקובץ.  אנחנו צריכים את זה מאוחר יותר.
 מחרוזת spfileExt = חדש FileInfo(f.Name).סיומת;

            // שנה את שם הקובץ של פריט הרשימה מזהה ולהשתמש בסיומת הקובץ לשמור
 // את החלק הזה ללא פגע.
            f.MoveTo(מאפיינים.ListItem.ParentList.RootFolder.Url +
                "/" + מאפיינים.פריט הרשימה["מזהה"] + spfileExt);

            // לבצע את המהלך.
            f.Update();

            EnableEventFiring();
        }

עצה מהירה: Web Part של שאילתת תוכן, ערך עמודת בדיקת מידע ו- XSL

. יש לי שם עמודה של סוג תוכן בשם "מיקום נדל ן".

עמודה זו היא מסוג 'בדיקת מידע'.

אני צריך שינוי <CommonViewFields> ו- ItemStyle.xsl כדי להציג את העמודה.

פשוטה <xsl:הערך של בחר =…> מחזירה בחזרה ערך פנימי הכולל נתונים מיקום סודר, כמו למשל:

1;#מיאמי

כדי לקבל את הערך האנושי ידידותי, השתמש xsl מחרוזת משנה-אחרי, כפי שמוצג:

<xsl:( @Real_x005F_x0020_Estate_x005F_x0020_Location, "#") ">< / xsl:הערך >(@Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></xsl:הערך>

להשתמש בטכניקה זו, בכל פעם שאתה עובד עם ערכי בדיקת מידע בשינויי XSL צריך לקבל את הערך האנושי ידידותי.

<סיום />

תגיות טכנורטי: , ,

מהיר וקל: לקבוע את שם העמודה הפנימית של עמודת אתר

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

ניסיתי להשיג web part שאילתת תוכן כדי להציג תאריך יעד מהפעילות בגלל התווית מסך היא "תאריך יעד", הנחתי שם העמודה כדי להשתמש ב- <CommonViewFields> הוא "Due_x0020_Date".

הלא נכון!

שם העמודה האמיתי במקרה הזה היה "DueDate".

איך מצאת את המקום? קראתי שוב את הת'ר הבלוג של שלמה על שינוי CQWP כדי להציג עמודות נוספות של נתונים. היא מתארת את תהליך זה צעד #13. לסמוך על זה. . זה נכון. לפחות, היא היתה נכונה בשבילי. אני לא בטחה בו בהתחלה עבור עמודה נוספת עם שם עוד הרבה.

אני אומר ". סומך על זה" כי אני לא בטחה בו, קרוב לוודאי בזבז ליד שעתיים לנגוח את ראשי בקיר. לאחר החלטתי את DueDate"" שם, רציתי להוסיף שדה נוסף כדי <CommonViewFields>. בטכניקה שלמה, אני קיבלתי שם עמודה כמו "XYZ_x0020_Project_x0020_Due_x00".

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

טיפ הבונוס: כשעבדתי עם CQWP, אם הוספתי שם רע פנימי <CommonViewFields>, CQWP סיפר לי כי השאילתה חזרו ללא תוצאות. אבל, אם הוספתי סוג נתונים על שם שדה, זה יחזיר תוצאה. מוסיף את הנתונים סוג למעשה רעולי פנים בעיה מאז. לא שדה שאינו קיים. אני יכול להוסיף את זה, אבל כאשר ניסיתי להציג את הערך שלו, אני תמיד מקבל ריק.

זה לא להסוות את השגיאה:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

זה להסוות את השגיאה:

<CommonViewFields>Due_x0020_Date,תאריך ושעה;</CommonViewfields>

</קצה>