Бизнис сценарио:
Обезбеди метод кој им овозможува на корисниците да влезат точни купување требувањата брзо.
Бизнис проблем:
На клиентот прави бизнис со неколку стотици продавачи.
Vendors are "type" специфични. Ова значи дека продавачот продава компјутерска опрема (e.g. Dell) или канцелариски материјали (e.g. Стејплс).
Како ние да им овозможи на крајните корисници кои создаваат купување требувањата изберете валидна продавач?
Бизнис решенија:
Differentiate vendors in the system via "type".
Enable users to select the "type" на производот, а потоа се обезбеди филтрирана сет на соодветни добавувачи.
Техничко решение:
На InfoPath формулар е дизајниран која им овозможува на корисниците да влезат во онлајн купување требувањата.
Две InfoPath селекција листи за контрола продавач избор. Прва, 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.
Продавачите се чуваат во Мос обичај листа со сопствени колони за продавачот атрибути како што се името, address and especially "type".
Имплементира веб сервис за InfoPath клиентот да консумираат дека iterates преку сопствени продавач листа, returning only vendors matching a supplied "type".
Повика на веб сервис преку InfoPath формулар.
Научени лекции:
- Прва, се чини неопходно да одат овој пат. Јас би преферирал да го стори филтрирање целосно во рамките InfoPath и не се создаде било кој веб-сервис функционалност овде. Сепак, форми серверот не ги обезбеди потребните филтрирање способност. We can put a rule onto a the "type" избор листа во форма за сортирање на повторно отворање на продавачот пребарување, но не можеме да се добие тоа да работи правилно. Затоа, тоа беше неопходно за спроведување на веб сервис.
- This is a classic "cascading selection list" проблем во InfoPath формуларите сервер светот и има многу добри примери од таму, кои се објасни како да се реши овој.
- А празно вредност за колона во продавач на листата не се врати празен стринг, кога референцирани вака: initItem["Vendor Name"]. Наместо, го враќа е нулти.
Некои други белешки:
- Јас се врати низа[] на продавачите, бидејќи имав некои потешкотии враќање на ArrayList. InfoPath беше жалат за тоа и јас не имаат време или склоност да се борат над неа. Овој, се разбира, става вештачка граница на вкупниот број на продавачи. Таа, исто така ме принуди да се спроведе трим() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath не се грижи, но тоа гушен во мене. (Повторно, ова беше полесно отколку борат InfoPath над ArrayLists).
- Јас спроведува GetSpecificVendorByName() функција, како и, која може да биде поучно.
Го кодот:
користење на Систем;
користење на System.Web;
користење на System.Web.Services;
користење на System.Web.Services.Protocols;
користење на Microsoft.SharePoint;
користење на System.Configuration;
/// <резиме>
/// 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.
///
/// </резиме>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
јавноста класа VendorService : System.Web.Services.WebService
{
/// <резиме>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </резиме>
јавноста класа Продавач
{
јавноста Продавач() { }
јавноста Продавач(Плукаат initItem)
{
ако (! (initItem["Vendor Name"] == нула)) VendorName = initItem["Vendor Name"].ToString();
ако (! (initItem["Address 1"] == нула)) VendorAddress1 = initItem["Address 1"].ToString();
ако (! (initItem["Address 2"] == нула)) VendorAddress2 = initItem["Address 2"].ToString();
ако (! (initItem["City"] == нула)) VendorCity = initItem["City"].ToString();
ако (! (initItem["VendorPhone"] == нула)) VendorPhone = initItem["VendorPhone"].ToString();
ако (! (initItem["PurchaseType"] == нула)) VendorType = initItem["PurchaseType"].ToString();
ако (! (initItem["State"] == нула)) VendorState = initItem["State"].ToString();
ако (! (initItem["Zip"] == нула)) VendorZip = initItem["Zip"].ToString();
ако (!(initItem["Fax"] == нула)) VendorFax = initItem["Fax"].ToString();
ако (!(initItem["SalesRepName"] == нула)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}
јавноста int VendorItemId;
јавноста низа VendorName;
јавноста низа VendorAddress1;
јавноста низа VendorAddress2;
јавноста низа VendorCity;
јавноста низа VendorState;
јавноста низа VendorZip;
јавноста низа VendorPhone;
јавноста низа VendorType;
јавноста низа VendorSalesRepName;
јавноста низа VendorFax;
}
јавноста VendorService () {
//Uncomment the following line if using designed components
//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 vendorId)
{
низа SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
низа SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
користење на (SPSite site = нови SPSite(SpVendorSiteName))
{
користење на (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
Плукаат specificItem = currentList.Items[vendorId];
се врати нови Продавач(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
јавноста Продавач GetSpecificVendorByVendorName(низа vendorName)
{
низа SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
низа SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
користење на (SPSite site = нови SPSite(SpVendorSiteName))
{
користење на (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
foreach (Плукаат vendorItem во currentList.Items)
{
ако (vendorItem["Vendor Name"] == нула) продолжи;
ако (vendorItem["Vendor Name"].ToString().Еднакво(vendorName))
се врати нови Продавач(vendorItem);
}
Продавач v = нови Продавач();
v.VendorPhone = "not found: " + vendorName;
се врати v;
се врати нула;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // метод
[WebMethod]
јавноста Продавач[] GetVendorsOfType (низа FilterType)
{
низа SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
низа SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Продавач[] resultList;
int vendorIndex = 0;
resultList = нови Продавач[1000];
// Initialize the list with a default friendly message.
Продавач v = нови Продавач();
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.
#регионот Filter type = "test"
ако (filterType.Equals("test"))
се врати GenerateTestVendors();
#endregion
ако (вистина)
{
користење на (SPSite site = нови SPSite(SpVendorSiteName))
{
користење на (SPWeb web = site.OpenWeb())
{
v = нула;
SPList currentList = web.Lists[SpVendorListName];
// Iterate through all the items in the vendor list.
foreach (Плукаат vendorItem во currentList.Items)
{
низа lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
ако (lowerVendorType.Equals(FilterType))
{
resultList[vendorIndex ] = нови Продавач(vendorItem);
}
} // iterating thru all the vendors in the list
се врати TrimVendorArray(vendorIndex, resultList);
// return resultList;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // if true
се врати нула;
}
приватни Продавач[] TrimVendorArray(int newsize, Продавач[] originalVendorArray)
{
Продавач[] trimmedArray;
ако (newsize == 0) newsize = 1;
trimmedArray = нови Продавач[newsize];
int currentCounter = 0;
за (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
се врати trimmedArray;
}
}