תרחישים עסקיים:
מספקות שיטה המאפשרת למשתמשים להזין רכש מדויק במהירות.
הבעיה העסקית:
הלקוח עושה עסקים עם מספר ספקי מאות.
ספקים הם מסוג"" ספציפי. משמעות הדבר היא כי ספק מוכר ציוד מחשבים (המסופקים. 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 =
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;
}
}