Scenariu de afaceri:
Oferă o metodă care permite utilizatorilor să introducă exacte cumpărare rechiziţiile rapid.
Problema de afaceri:
Clientul face afaceri cu vânzătorii câteva sute.
Vânzătorii sunt de tip"" specifice. Acest lucru înseamnă că un furnizor vinde echipamente informatice (ex. Dell) sau materiale de birou (ex. Capse).
Cum putem activa utilizatori finali care creează cumpărare rechiziţiile selectaţi un furnizor de valabil?
Soluţie de afaceri:
Diferenţia furnizori în sistem prin intermediul "tip".
Permite utilizatorilor să selectaţi tipul"" produsului şi apoi oferă un set filtrate de furnizori corespunzătoare.
Soluţii tehnice:
Un formular InfoPath a fost conceput, care permite utilizatorilor să intre online cumpăraţi rechiziţiile.
Două liste de selecţie InfoPath controla furnizor de selecţie. Prima, utilizatorul selectează un tip de"cumpărare". Aceasta limitează o a doua listă de selectare pentru a conţine numai vânzătorii care vând pentru acel tip de cumpărare. Acesta este un clasic cascading drop-down.
Vânzătorii sunt stocate într-o listă particularizată de MOSS cu coloane particularizate pentru furnizor atribute precum numele, Adresa şi mai ales de tip"".
Pună în aplicare un serviciu web pentru un client de InfoPath să consume care iterează prin listă particularizată furnizor, Revenind numai furnizori de potrivire un furnizat "tip".
Invoca serviciu web prin intermediul formularului InfoPath.
Lecţiile învăţate:
- Prima, se pare că este necesar pentru a merge acest traseu. Aş fi preferat să faci filtrarea în întregime în InfoPath şi nu crea orice funcţionalitatea serviciu web aici. Cu toate acestea, forme server nu furnizează capacitatea de filtrare necesare. Putem pune o regulă pe un tip"" listă de selectare sub forma la fel de re-deschide interogarea de furnizor, dar nu putem ajunge să funcţioneze în mod corespunzător. Prin urmare, a fost necesar pentru implementarea de servicii web.
- Acesta este un clasic "cascadă listă de selectare" problema în InfoPath formează server lume şi există multe exemple bune acolo care să explice cum să rezolve această.
- O valoare necompletată pentru o coloană din listă furnizor nu se întoarce un şir gol, atunci când se face referire ca aceasta: initItem["Furnizor de nume"]. În schimb, Returnează un null.
Unele alte note:
- Mă întorc o matrice[] de furnizori pentru că am avut unele dificultăţi revenind un ArrayList. InfoPath a fost plângându-se despre el şi nu am avut timp sau înclinaţia de a lupta peste ea. Acest lucru, desigur, pune o limită artificiale pe numărul total de furnizori. Ea, de asemenea, obligaţi să pună în aplicare un trim() metoda matricei pentru ca urasc ideea de a reveni înapoi 100 de furnizori de nul. InfoPath nu-i pasă, dar ea nagged la mine. (Din nou, Acest lucru a fost mai uşor decât lupta InfoPath peste ArrayLists).
- Am implementat o GetSpecificVendorByName() funcţie, precum şi, care poate fi instructiv.
Codul:
folosind Sistem;
folosind System.Web;
folosind System.Web.Services;
folosind System.Web.Services.Protocols;
folosind Microsoft.SharePoint;
folosind System.Configuration;
/// <Rezumat>
/// Furnizor de servicii: Oferă furnizor legate de servicii care astăzi sunt consumate de un formular infopath cu un client.
///
/// Istorie:
/// ——–
/// 07/24/07: Iniţială de codificare, Paul J. Gavin a Conchango.
///
/// </Rezumat>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publice Clasa VendorService : System.Web.Services.WebService
{
/// <Rezumat>
/// Reprezintă un furnizor dintr-o listă sharepoint personalizat de MSUSA.
/// </Rezumat>
publice Clasa Furnizor
{
publice Furnizor() { }
publice Furnizor(SPItem initItem)
{
Dacă (! (initItem["Furnizor de nume"] == nul)) VendorName = initItem["Furnizor de nume"].ToString();
Dacă (! (initItem["Adresa 1"] == nul)) VendorAddress1 = initItem["Adresa 1"].ToString();
Dacă (! (initItem["Adresa 2"] == nul)) VendorAddress2 = initItem["Adresa 2"].ToString();
Dacă (! (initItem["City"] == nul)) VendorCity = initItem["City"].ToString();
Dacă (! (initItem["VendorPhone"] == nul)) VendorPhone = initItem["VendorPhone"].ToString();
Dacă (! (initItem["PurchaseType"] == nul)) VendorType = initItem["PurchaseType"].ToString();
Dacă (! (initItem["Stat"] == nul)) VendorState = initItem["Stat"].ToString();
Dacă (! (initItem["Zip"] == nul)) VendorZip = initItem["Zip"].ToString();
Dacă (!(initItem["Fax"] == nul)) VendorFax = initItem["Fax"].ToString();
Dacă (!(initItem["SalesRepName"] == nul)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // ID unic menţinută prin intermediul MOSS.
}
publice int VendorItemId;
publice şir VendorName;
publice şir VendorAddress1;
publice şir VendorAddress2;
publice şir VendorCity;
publice şir VendorState;
publice şir VendorZip;
publice şir VendorPhone;
publice şir VendorType;
publice şir VendorSalesRepName;
publice şir VendorFax;
}
publice VendorService () {
//Decomentaţi următoarea linie dacă utilizaţi componentele proiectate
//InitializeComponent();
}
privat Furnizor[] GenerateTestVendors()
{
Furnizor[] resultList;
resultList = noi Furnizor[100];
Furnizor v;
v = noi Furnizor();
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 = noi Furnizor();
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 = noi Furnizor();
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;
reveni resultList;
}
[WebMethod]
publice Furnizor GetSpecificVendorById(int vendorId)
{
şir SpVendorSiteName; // Numele site-ului MOSS reale care găzduieşte listă particularizată de furnizor.
şir SpVendorListName; // Numele din lista de MOSS actuale conținând furnizori.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
folosind (SPSite site-ul = noi SPSite(SpVendorSiteName))
{
folosind (SPWeb web = site-ul. OpenWeb())
{
SPList.Update() currentList = web. Liste[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
reveni noi Furnizor(specificItem);
} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")
}
[WebMethod]
// Presupune că numele de furnizor este unic, dintr-o perspectivă de afaceri
publice Furnizor GetSpecificVendorByVendorName(şir fi)
{
şir SpVendorSiteName; // Numele site-ului MOSS reale care găzduieşte listă particularizată de furnizor.
şir SpVendorListName; // Numele din lista de MOSS actuale conținând furnizori.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
folosind (SPSite site-ul = noi SPSite(SpVendorSiteName))
{
folosind (SPWeb web = site-ul. OpenWeb())
{
SPList.Update() currentList = web. Liste[SpVendorListName];
foreach (SPItem vendorItem în currentList.Items)
{
Dacă (vendorItem["Furnizor de nume"] == nul) «««;
Dacă (vendorItem["Furnizor de nume"].ToString().Este egal cu(fi))
reveni noi Furnizor(vendorItem);
}
Furnizor v = noi Furnizor();
v.VendorPhone = "nu a fost găsit: " + fi;
reveni v;
reveni nul;
} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")
} // metoda
[WebMethod]
publice Furnizor[] GetVendorsOfType (şir filterType)
{
şir SpVendorSiteName; // Numele site-ului MOSS reale care găzduieşte t
El furnizor listă particularizată.
şir SpVendorListName; // Numele din lista de MOSS actuale conținând furnizori.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Furnizor[] resultList;
int vendorIndex = 0;
resultList = noi Furnizor[1000];
// Inițializarea listei cu un mesaj implicit prietenos.
Furnizor v = noi Furnizor();
v.VendorName = "Selectaţi un tip de furnizor pentru a popula această listă.";
resultList[0] = v;
// Converti filtrul la caz mai mici pentru comparaţie şir mai uşor mai târziu.
filterType = filterType.ToLower();
// În cazul în care tipul de filtru trecut este "test", genera unele date simple.
#regiune Filtru tip = "test"
Dacă (filterType. egal("test"))
reveni GenerateTestVendors();
#endregion
Dacă (adevărat)
{
folosind (SPSite site-ul = noi SPSite(SpVendorSiteName))
{
folosind (SPWeb web = site-ul. OpenWeb())
{
v = nul;
SPList.Update() currentList = web. Liste[SpVendorListName];
// Repeta prin toate elementele din lista de furnizori.
foreach (SPItem vendorItem în currentList.Items)
{
şir lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().String.tolower();
lowerVendorType = lowerVendorType.Substring(3);
Dacă (Egal lowerVendorType.(filterType))
{
resultList[vendorIndex ] = noi Furnizor(vendorItem);
}
} // iterarea prin toate furnizori în lista
reveni TrimVendorArray(vendorIndex, resultList);
// reveni resultList;
} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")
} // dacă este adevărat
reveni nul;
}
privat Furnizor[] TrimVendorArray(int newsize, Furnizor[] originalVendorArray)
{
Furnizor[] trimmedArray;
Dacă (newsize == 0) newsize = 1;
trimmedArray = noi Furnizor[newsize];
int currentCounter = 0;
pentru (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
reveni trimmedArray;
}
}