Skenari Biznes:
Të sigurojë një metodë që mundëson përdoruesve për të hyrë shkresave të sakta blerjes shpejt.
Problemi Biznes:
Klienti bën biznes me qindra disa shitësit.
Vendors are "type" specifik. Kjo do të thotë që një shitës shet pajisje kompjuterike (e.g. Luginë) ose furnizimet e zyrës (e.g. Staples).
Si nuk kemi të mundësojë përdoruesit përfundimtarë të cilët krijojnë shkresave blerjes përzgjidhni një shitës të vlefshme?
Zgjidhja e Biznesit:
Differentiate vendors in the system via "type".
Enable users to select the "type" e produktit dhe pastaj të sigurojë një sërë filtruar nga shitësit të përshtatshme.
Zgjidhja teknike:
Një formë InfoPath ka qenë i dizajnuar që i mundëson përdoruesve për të hyrë shkresave blerje online.
Dy Zgjedhja InfoPath listat e kontrollit shitësi përzgjedhjes. I parë, the user selects a "purchase type". This limits a second selection list to contain only vendors that sell for that purchase type. This is a classic cascading drop-down.
Shitësit janë të ruajtura në një listë me porosi MOSS me kolona porosi për shitësi atributeve të tilla si emri, address and especially "type".
Zbatimi i një web shërbim për një klient InfoPath për të konsumuar që iterates nëpër lista shitësi porosi, returning only vendors matching a supplied "type".
Të thirret në shërbimin e internetit nëpërmjet formularit InfoPath.
Mësimet e mësuara:
- I parë, kjo duket e nevojshme të shkoni këtë rrugë. Unë do të kishte preferuar për të bërë filtrimin tërësisht brenda InfoPath dhe nuk krijojnë asnjë funksionalitet të shërbimit të internetit këtu. Megjithatë, forma server nuk siguron aftësinë e kërkuar filtrim. We can put a rule onto a the "type" Lista e përzgjedhjes në formë të lloj ri-hapur query shitësi, por ne nuk mund të merrni atë për të punuar si duhet. Prandaj, ajo ishte e nevojshme për të zbatuar shërbimin e internetit.
- This is a classic "cascading selection list" Problemi në botë forma InfoPath server dhe ka shumë shembuj të mirë atje që shpjegojnë se si për të zgjidhur këtë.
- Një vlerë bosh për një kolonë në listën shitësi nuk kthehet një varg të zbrazët kur referohen si kjo: initItem["Vendor Name"]. Në vend të kësaj, ajo kthen një nul.
Disa shënime të tjera:
- Unë kthehem një rrjet[] e shitësit, sepse kam pasur disa vështirësi kthimin e një ArrayList. InfoPath u ankuar në lidhje me të dhe unë nuk kanë kohë ose preferencë për të luftuar mbi të. Kjo, sigurisht, vendos një limit artificiale të numrit të përgjithshëm të shitësit. Ajo gjithashtu detyruar mua për të zbatuar një trim() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath nuk kujdeset, por ajo nagged në mua. (Përsëri, kjo ishte më e lehtë se sa duke luftuar InfoPath mbi ArrayLists).
- Unë zbatuar një GetSpecificVendorByName() funksionojnë si edhe, e cila mund të jetë udhëzuese.
Kodi:
përdorim Sistem;
përdorim System.Web;
përdorim System.Web.Services;
përdorim System.Web.Services.Protocols;
përdorim Microsoft.SharePoint;
përdorim System.Configuration;
/// <përmbledhje>
/// Vendor Service: Provides vendor related services which today are consumed by an infopath client form.
///
/// History:
/// ——–
/// 07/24/07: Initial coding, Paul J. Gavin of Conchango.
///
/// </përmbledhje>
[Webservice(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publik klasë VendorService : System.Web.Services.Webservice
{
/// <përmbledhje>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </përmbledhje>
publik klasë Shitës
{
publik Shitës() { }
publik Shitës(Pështyj initItem)
{
nëse (! (initItem["Vendor Name"] == zero)) VendorName = initItem["Vendor Name"].ToString();
nëse (! (initItem["Address 1"] == zero)) VendorAddress1 = initItem["Address 1"].ToString();
nëse (! (initItem["Address 2"] == zero)) VendorAddress2 = initItem["Address 2"].ToString();
nëse (! (initItem["City"] == zero)) VendorCity = initItem["City"].ToString();
nëse (! (initItem["VendorPhone"] == zero)) VendorPhone = initItem["VendorPhone"].ToString();
nëse (! (initItem["PurchaseType"] == zero)) VendorType = initItem["PurchaseType"].ToString();
nëse (! (initItem["State"] == zero)) VendorState = initItem["State"].ToString();
nëse (! (initItem["Zip"] == zero)) VendorZip = initItem["Zip"].ToString();
nëse (!(initItem["Fax"] == zero)) VendorFax = initItem["Fax"].ToString();
nëse (!(initItem["SalesRepName"] == zero)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}
publik int VendorItemId;
publik varg VendorName;
publik varg VendorAddress1;
publik varg VendorAddress2;
publik varg VendorCity;
publik varg VendorState;
publik varg VendorZip;
publik varg VendorPhone;
publik varg VendorType;
publik varg VendorSalesRepName;
publik varg VendorFax;
}
publik VendorService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
privat Shitës[] GenerateTestVendors()
{
Shitës[] resultList;
resultList = i ri Shitës[100];
Shitës v;
v = i ri Shitës();
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 = i ri Shitës();
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 = i ri Shitës();
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;
kthehem resultList;
}
[WebMethod]
publik Shitës GetSpecificVendorById(int vendorId)
{
varg SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
varg SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
përdorim (SPSite site = i ri SPSite(SpVendorSiteName))
{
përdorim (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
Pështyj specificItem = currentList.Items[vendorId];
kthehem i ri Shitës(specificItem);
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
}
[WebMethod]
// Assumes that the vendor name is unique, from a business perspective
publik Shitës GetSpecificVendorByVendorName(varg vendorName)
{
varg SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
varg SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
përdorim (SPSite site = i ri SPSite(SpVendorSiteName))
{
përdorim (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
foreach (Pështyj vendorItem në currentList.Items)
{
nëse (vendorItem["Vendor Name"] == zero) vazhdoj;
nëse (vendorItem["Vendor Name"].ToString().Është e barabartë me(vendorName))
kthehem i ri Shitës(vendorItem);
}
Shitës v = i ri Shitës();
v.VendorPhone = "not found: " + vendorName;
kthehem v;
kthehem zero;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // metodë
[WebMethod]
publik Shitës[] GetVendorsOfType (varg lloj filtri)
{
varg SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
varg SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Shitës[] resultList;
int vendorIndex = 0;
resultList = i ri Shitës[1000];
// Initialize the list with a default friendly message.
Shitës v = i ri Shitës();
v.VendorName = "Select a vendor type to populate this list.";
resultList[0] = v;
// Convert the filter to lower case for easier string comparison later.
filterType = filterType.ToLower();
// If the filter type passed is "test", generate some simple data.
#rajon Filter type = "test"
nëse (filterType.Equals("test"))
kthehem GenerateTestVendors();
#endregion
nëse (i vërtetë)
{
përdorim (SPSite site = i ri SPSite(SpVendorSiteName))
{
përdorim (SPWeb web = site.OpenWeb())
{
v = zero;
SPList currentList = web.Lists[SpVendorListName];
// Iterate through all the items in the vendor list.
foreach (Pështyj vendorItem në currentList.Items)
{
varg lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
nëse (lowerVendorType.Equals(lloj filtri))
{
resultList[vendorIndex ] = i ri Shitës(vendorItem);
}
} // iterating thru all the vendors in the list
kthehem TrimVendorArray(vendorIndex, resultList);
// return resultList;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // if true
kthehem zero;
}
privat Shitës[] TrimVendorArray(int newsize, Shitës[] originalVendorArray)
{
Shitës[] trimmedArray;
nëse (newsize == 0) newsize = 1;
trimmedArray = i ri Shitës[newsize];
int currentCounter = 0;
për (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
kthehem trimmedArray;
}
}