Obchodní scénář:
Zadejte metodu, která umožňuje uživatelům rychle zadat přesné nákupních.
Obchodní problém:
Klient obchoduje s několika stovek dodavatelů.
Dodavatelé jsou "typ" konkrétní. To znamená, že dodavatel prodává počítačové vybavení (např.. Společnost Dell) nebo kancelářské potřeby (např.. Svorky).
Jak jsme mohli koncoví uživatelé, kteří vytvořit nákupní žádanky vybrat platný dodavatele?
Obchodní řešení:
Rozlišovat dodavatele v systému přes "type".
Umožnit uživatelům vybrat typ"" výrobku a pak poskytují filtrovanou sadu vhodných dodavatelů.
Technické řešení:
Formulář aplikace InfoPath je navrženo, že umožňuje uživatelům zadávat on-line nákupní žádanky.
Dva seznamy výběru aplikace InfoPath kontrolovat výběr dodavatele. První, uživatel vybere "typ nákupu". To omezuje druhý výběrový seznam obsahovat pouze prodejců, kteří prodávají za tento typ nákupu. To je klasický CSS drop-down.
Dodavatelé jsou uloženy v seznamu vlastní MOSS s vlastní sloupce pro dodavatele atributy jako například jméno, adresa a zejména "typ".
Implementace webové služby pro klienta InfoPath konzumovat, který projde seznam vlastních dodavatelů, vrací pouze dodavatele odpovídající zadané "typ".
Vyvolání webové služby prostřednictvím formuláře aplikace InfoPath.
Poučení:
- První, Zdá se, že je třeba jít touto cestou. Já bych si raději udělat filtrování výhradně v rámci aplikace InfoPath a nelze vytvořit žádné funkce webové služby zde. Avšak, formy server neposkytuje požadované funkce pro filtrování. Můžeme dát pravidlo na typ"" výběrový seznam v podobě jakési znovu otevřít dotaz dodavatele, ale nemůžeme si to fungovat správně. Proto, bylo třeba zavést webovou službu.
- To je klasický "kaskádové výběrový seznam" problém v aplikace InfoPath formuláře serveru svět a existuje mnoho dobrých příkladů, které vysvětlují, jak na to.
- Prázdná hodnota pro sloupec v seznamu dodavatelů se nevrací prázdný řetězec při odkazování na takhle: initItem["Název dodavatele"]. Místo toho, Vrátí hodnotu null.
Některé další poznámky:
- Jsem vrátit matici[] dodavatelů, protože jsem měl nějaké potíže vracejí ArrayList. Aplikace InfoPath stěžoval a neměla jsem čas ani chuť to bojem. Toto, Samozřejmě, Vloží umělá omezení celkového počtu dodavatelů. To také mě přimělo k provedení čalounění() metodu na poli, protože nesnáším myšlenku na návrat zpět 100 null dodavatelů. Aplikace InfoPath se nestará, naléhala na mě, ale. (Znovu, to bylo jednodušší, než bojovat InfoPath nad ArrayLists).
- Jsem implementoval GetSpecificVendorByName() funkce také, což může být poučné.
Kód:
použití Systém;
použití System.Web;
použití System.Web.Services;
použití System.Web.Services.Protocols;
použití Microsoft.SharePoint;
použití System.Configuration;
/// <Shrnutí>
/// Služba dodavatele: Poskytuje dodavatele související služby, které dnes spotřebuje klientské formuláře aplikace infopath.
///
/// Historie:
/// ——–
/// 07/24/07: Výchozí kódování, Paul J. Gavin Conchango.
///
/// </Shrnutí>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
veřejné Třída VendorService : System.Web.Services.WebService
{
/// <Shrnutí>
/// Představuje dodavatele ze seznamu vlastní sharepoint udržovaný MSUSA.
/// </Shrnutí>
veřejné Třída Dodavatel
{
veřejné Dodavatel() { }
veřejné Dodavatel(SPItem initItem)
{
Pokud (! (initItem["Název dodavatele"] == null)) Poznámky: = initItem["Název dodavatele"].ToString();
Pokud (! (initItem["Adresa 1"] == null)) VendorAddress1 = initItem["Adresa 1"].ToString();
Pokud (! (initItem["Adresa 2"] == null)) VendorAddress2 = initItem["Adresa 2"].ToString();
Pokud (! (initItem["Město"] == null)) VendorCity = initItem["Město"].ToString();
Pokud (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Pokud (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Pokud (! (initItem["Stát"] == null)) VendorState = initItem["Stát"].ToString();
Pokud (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Pokud (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
Pokud (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Jedinečné ID maintained přes MOSS.
}
veřejné int VendorItemId;
veřejné řetězec Poznámky:;
veřejné řetězec VendorAddress1;
veřejné řetězec VendorAddress2;
veřejné řetězec VendorCity;
veřejné řetězec VendorState;
veřejné řetězec VendorZip;
veřejné řetězec VendorPhone;
veřejné řetězec VendorType;
veřejné řetězec VendorSalesRepName;
veřejné řetězec VendorFax;
}
veřejné VendorService () {
//Odkomentujte následující řádek, pokud používáte určené součásti
//InitializeComponent();
}
soukromé Dodavatel[] GenerateTestVendors()
{
Dodavatel[] resultList;
resultList = nové Dodavatel[100];
Dodavatel v;
v = nové Dodavatel();
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 = nové Dodavatel();
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 = nové Dodavatel();
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;
návrat resultList;
}
[WebMethod]
veřejné Dodavatel GetSpecificVendorById(int vendorId)
{
řetězec SpVendorSiteName; // Název skutečné webu MOSS, který hostí vlastní seznam dodavatelů.
řetězec SpVendorListName; // Název skutečné MOSS seznam obsahující dodavatelů.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
použití (SPSite místo = nové SPSite(SpVendorSiteName))
{
použití (SPWeb webové stránky =. OpenWeb())
{
SPList.Update() currentList = www. Seznamy[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
návrat nové Dodavatel(specificItem);
} // použití webu spweb = site.openweb()
} // pomocí webů spsite = nové spsite("http://localhost/mizuho")
}
[WebMethod]
// Předpokládá, že název dodavatele je jedinečný, z obchodního hlediska
veřejné Dodavatel GetSpecificVendorByVendorName(řetězec být)
{
řetězec SpVendorSiteName; // Název skutečné webu MOSS, který hostí vlastní seznam dodavatelů.
řetězec SpVendorListName; // Název skutečné MOSS seznam obsahující dodavatelů.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
použití (SPSite místo = nové SPSite(SpVendorSiteName))
{
použití (SPWeb webové stránky =. OpenWeb())
{
SPList.Update() currentList = www. Seznamy[SpVendorListName];
foreach (SPItem vendorItem v currentList.Items)
{
Pokud (vendorItem["Název dodavatele"] == null) «««;
Pokud (vendorItem["Název dodavatele"].ToString().Rovná se(být))
návrat nové Dodavatel(vendorItem);
}
Dodavatel v = nové Dodavatel();
v.VendorPhone = "nebyl nalezen.: " + být;
návrat v;
návrat null;
} // použití webu spweb = site.openweb()
} // pomocí webů spsite = nové spsite("http://localhost/mizuho")
} // Metoda
[WebMethod]
veřejné Dodavatel[] GetVendorsOfType (řetězec filterType)
{
řetězec SpVendorSiteName; // Název skutečné MOSS webu, který hostuje t
On vlastní seznam dodavatelů.
řetězec SpVendorListName; // Název skutečné MOSS seznam obsahující dodavatelů.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Dodavatel[] resultList;
int vendorIndex = 0;
resultList = nové Dodavatel[1000];
// Inicializace seznamu s výchozí přátelský vzkaz.
Dodavatel v = nové Dodavatel();
v.VendorName = "Vyberte typ dodavatele k naplnění tohoto seznamu.";
resultList[0] = v;
// Převést na malá písmena pro snazší porovnání řetězců později filtr.
filterType = filterType.ToLower();
// Je-li typ filtru je "test", některé jednoduché údaje.
#region Typ filtru = "test"
Pokud (filterType. rovná se("test"))
návrat GenerateTestVendors();
#endregion
Pokud (pravda)
{
použití (SPSite místo = nové SPSite(SpVendorSiteName))
{
použití (SPWeb webové stránky =. OpenWeb())
{
v = null;
SPList.Update() currentList = www. Seznamy[SpVendorListName];
// Iterovat všechny položky v seznamu dodavatelů.
foreach (SPItem vendorItem v currentList.Items)
{
řetězec lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
Pokud (rovná se lowerVendorType.(filterType))
{
resultList[vendorIndex ] = nové Dodavatel(vendorItem);
}
} // Iterace přes všechny dodavatele v seznamu
návrat TrimVendorArray(vendorIndex, resultList);
// návrat resultList;
} // použití webu spweb = site.openweb()
} // pomocí webů spsite = nové spsite("http://localhost/mizuho")
} // je-li to pravda,
návrat null;
}
soukromé Dodavatel[] TrimVendorArray(int newSize, Dodavatel[] originalVendorArray)
{
Dodavatel[] trimmedArray;
Pokud (newSize == 0) newSize = 1;
trimmedArray = nové Dodavatel[newSize];
int currentCounter = 0;
pro (currentCounter = 0; currentCounter < newSize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
návrat trimmedArray;
}
}