ארכיון קטגוריה: מוס

מוס חיפוש התאמה אישית מתקדמת — התיק משנה בחיפוש מתקדם 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>


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

מוס / 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))

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

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

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

מוס: איטראציה באמצעות רשימות מותאמות אישית והחזרת נתונים מסוננים ל- InfoPath

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

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

הבעיה העסקית:

הלקוח עושה עסקים עם מספר ספקי מאות.

ספקים הם מסוג"" ספציפי. משמעות הדבר היא כי ספק מוכר ציוד מחשבים (המסופקים. Dell) או ציוד משרדי (המסופקים. סיכות).

איך אנו מאפשרים למשתמשי קצה שיוצרים בחר דרישות רכש ספק בתוקף?

הפתרון העסקי:

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

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

פתרון טכני:

טופס InfoPath תוכנן מאפשר למשתמשים להזין באינטרנט רכש.

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

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

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

הפעל את שירות האינטרנט באמצעות טופס InfoPath.

לקחים:

  • הראשונה, נראה שצריך. ללכת בדרך הזאת. הייתי מעדיף לעשות סינון לחלוטין בתוך InfoPath, אינם יוצרים כל פונקציונליות שירות האינטרנט כאן. עם זאת, שרת הטפסים אינו מספק יכולת הסינון הנדרשת. אנחנו יכולים לשים כלל על גבי הסוג"" רשימה עם אפשרויות בחירה בטופס סוג של פתח מחדש את השאילתה הספק, אבל אנחנו לא מצליחים שזה יעבוד כמו שצריך. לכן, היה צורך ליישם שירות האינטרנט.
  • . זה קלאסי "מדורגים הבחירה ברשימה" בעיה של InfoPath יוצר העולם שרת ויש דוגמאות רבות שם בחוץ המסבירים כיצד לפתור את זה.
  • ערך ריק עבור עמודה ברשימה הספק אינו מחזיר מחרוזת ריקה בעת הפניה ככה: initItem["שם הספק"]. במקום זאת, היא תחזיר null.

כמה הערות נוספות:

  • אני להחזיר מערך[] הספקים כי היה קושי חוזרים של ArrayList. InfoPath התלונן על זה ולא היה לי הזמן או רצון להילחם על זה. זה, בטח, מציב גבול מלאכותי על המספר הכולל של ספקים. זה גם גרם לי ליישם לתספורת() שיטת במערך כי אני שונאת את הרעיון לחזור חזרה 100 הספקים null. InfoPath לא אכפת, . אבל זה נדנדה.. (שוב, זה היה קל יותר לריב InfoPath על ArrayLists).
  • הובלתי את GetSpecificVendorByName() הפונקציה גם כן, אשר עשוי להיות מאלף.

הקוד:

שימוש מערכת;
שימוש System. web;
שימוש System.Web.Services;
שימוש System.Web.Services.Protocols;
שימוש Microsoft.SharePoint;
שימוש System.Configuration;

/// <סיכום>
///
ספק שירות: מספקת הספק הקשורים שירותים אשר כיום שנצרכים על ידי טופס לקוח infopath.
///
/// היסטוריה:
/// ——–
/// 07/24/07: הראשונית קידוד, Paul J. גאווין של Conchango.
///
/// </סיכום>
[WebService(Namespace = ב- "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
הציבור מחלקה VendorService : System.Web.Services.WebService
{

/// <סיכום>
/// מייצג ספק מרשימת sharepoint מותאמות אישית המתוחזקים על-ידי MSUSA.
/// </סיכום>
הציבור מחלקה הספק
{
הציבור הספק() { }

הציבור הספק(SPItem initItem)
{
אם (! (initItem["שם הספק"] == null)) VendorName = initItem["שם הספק"].ToString();
אם (! (initItem["כתובת 1"] == null)) VendorAddress1 = initItem["כתובת 1"].ToString();
אם (! (initItem["כתובת 2"] == null)) VendorAddress2 = initItem["כתובת 2"].ToString();
אם (! (initItem["עיר"] == null)) VendorCity = initItem["עיר"].ToString();
אם (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
אם (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
אם (! (initItem["המדינה"] == null)) VendorState = initItem["המדינה"].ToString();
אם (! (initItem["זיפ"] == null)) VendorZip = initItem["זיפ"].ToString();
אם (!(initItem["פקס"] == null)) VendorFax = initItem["פקס"].ToString();
אם (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // מזהה ייחודי מתוחזקים באמצעות מוס.
}

הציבור int VendorItemId;
הציבור מחרוזת VendorName;
הציבור מחרוזת VendorAddress1;
הציבור מחרוזת VendorAddress2;
הציבור מחרוזת VendorCity;
הציבור מחרוזת VendorState;
הציבור מחרוזת VendorZip;
הציבור מחרוזת VendorPhone;
הציבור מחרוזת VendorType;
הציבור מחרוזת VendorSalesRepName;
הציבור מחרוזת VendorFax;
}

הציבור VendorService () {

//ההערה השורה הבאה, אם באמצעות רכיבים המיועדים
//InitializeComponent();
}

פרטי הספק[] GenerateTestVendors()
{
הספק[] resultList;
resultList = חדש הספק[100];

הספק v;
v = חדש הספק();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = "v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";

resultList[0] = v;

v = חדש הספק();

v.VendorAddress1 = "v2_address1";
v.VendorAddress2 = "v2_address2";
v.VendorCity = "v2_city";
v.VendorName = "v2_vendorname";
v.VendorPhone = "v2_vendorphone";
v.VendorState = "v2_st";
v.VendorType = "v2_type";
v.VendorZip = "v2_zip";

resultList[1] = v;

v = חדש הספק();
v.VendorAddress1 = "v3_address1";
v.VendorAddress2 = "v3_address2";
v.VendorCity = "v3_city";
v.VendorName = "v3_vendorname";
v.VendorPhone = "v3_vendorphone";
v.VendorState = "v3_st";
v.VendorType = "v3_type";
v.VendorZip = "v3_zip";

resultList[2] = v;

החזרה resultList;

}

[WebMethod]
הציבור הספק GetSpecificVendorById(int מזהה ספק)
{
מחרוזת SpVendorSiteName; // שם האתר מוס בפועל שמארח את הרשימה המותאמת אישית של הספק.
מחרוזת SpVendorListName; // שם רשימת מוס בפועל המכיל ספקים.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

שימוש (SPSite האתר = חדש SPSite(SpVendorSiteName))
{

שימוש (SPWeb אינטרנט = האתר. OpenWeb())
{

Splist.update() currentList = אינטרנט. רשימות[SpVendorListName];

SPItem specificItem = currentList.Items[מזהה ספק];

החזרה חדש הספק(specificItem);

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

}

[WebMethod]
// ההנחה היא כי שם הספק הוא ייחודי, מנקודת מבט עסקית
הציבור הספק GetSpecificVendorByVendorName(מחרוזת להיות)
{
מחרוזת SpVendorSiteName; // שם האתר מוס בפועל שמארח את הרשימה המותאמת אישית של הספק.
מחרוזת SpVendorListName; // שם רשימת מוס בפועל המכיל ספקים.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

שימוש (SPSite האתר = חדש SPSite(SpVendorSiteName))
{
שימוש (SPWeb אינטרנט = האתר. OpenWeb())
{

Splist.update() currentList = אינטרנט. רשימות[SpVendorListName];

foreach (SPItem vendorItem ב currentList.Items)
{
אם (vendorItem["שם הספק"] == null) «««;

אם (vendorItem["שם הספק"].ToString().שווה ל-(להיות))
החזרה חדש הספק(vendorItem);
}

הספק v = חדש הספק();
v.VendorPhone = "לא נמצא: " + להיות;

החזרה v;

החזרה null;

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

} // שיטה

[WebMethod]
הציבור הספק[] GetVendorsOfType (מחרוזת filterType)
{

מחרוזת SpVendorSiteName; // שמו של האתר מוס בפועל המארח t
הוא ספק רשימה מותאמת אישית.
מחרוזת SpVendorListName; // שם רשימת מוס בפועל המכיל ספקים.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

הספק[] resultList;
int vendorIndex = 0;
resultList = חדש הספק[1000];

// אתחל את הרשימה עם הודעה ידידותית ברירת מחדל.
הספק v = חדש הספק();
v.VendorName = "בחר סוג הספק כדי לאכלס רשימה זו.";
resultList[0] = v;

// להמיר את המסנן נמוכה יותר במקרה של השוואת מחרוזות קל יותר מאוחר.
filterType = filterType.ToLower();

// אם סוג המסנן שהועבר הוא "מבחן", ליצור כמה נתונים פשוטים.
#האזור לסנן סוג = "מבחן"
אם (שווה filterType.("מבחן"))
החזרה GenerateTestVendors();
#endregion

אם (נכון)
{
שימוש (SPSite האתר = חדש SPSite(SpVendorSiteName))
{
שימוש (SPWeb אינטרנט = האתר. OpenWeb())
{

v = null;

Splist.update() currentList = אינטרנט. רשימות[SpVendorListName];

// סוב בין כל הפריטים ברשימה הספק.
foreach (SPItem vendorItem ב currentList.Items)
{

מחרוזת lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);

אם (שווה lowerVendorType.(filterType))
{
resultList[vendorIndex ] = חדש הספק(vendorItem);
}
} // איטראציה thru כל הספקים ברשימה


החזרה TrimVendorArray(vendorIndex, resultList);
// להחזיר את resultList;

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

} // אם זה נכון

החזרה null;
}

פרטי הספק[] TrimVendorArray(int newsize, הספק[] originalVendorArray)
{
הספק[] trimmedArray;

אם (newsize = = 0) newsize = 1;
trimmedArray = חדש הספק[newsize];

int currentCounter = 0;

עבור (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

החזרה trimmedArray;

}
}