Scenariusza biznesowego:
Zapewnia metodę, która umożliwia użytkownikom szybkie wpisywanie zapotrzebowań dokładne zakupu.
Problem w biznesie:
Klient prowadzi działalność w kilku dostawców kilkuset.
Dostawcy są "typ" szczególne. Oznacza to, że dostawca sprzedaje sprzęt komputerowy (np.. Firma Dell) lub materiały biurowe (np.. Zszywki).
Jak włączyć użytkowników końcowych, którzy tworzą zakupu zapotrzebowań Wybierz prawidłowy dostawcy możemy?
Rozwiązanie dla firm:
Rozróżnienie dostawców w systemie poprzez "typ".
Umożliwić użytkownikom wybieranie typu"" produktu i następnie odfiltrowany zestaw odpowiednich dostawców.
Rozwiązanie techniczne:
Formularz programu InfoPath został zaprojektowany pozwala użytkownikom wprowadzać w trybie online kupić zapotrzebowań.
Dwie listy wyboru program InfoPath kontroli wybór dostawcy. Pierwszy, użytkownik wybierze opcję „typu zakupu". Ogranicza to drugi list wyboru zawiera tylko dostawców, które sprzedają tego typu zakupu. Jest to klasyczny kaskadowych drop niedziałający.
Dostawców są przechowywane w MOSS niestandardową listę z kolumn niestandardowych dla dostawcy atrybutów, takich jak nazwa, adres i szczególnie "typ".
Wdrożenie usługi sieci web dla klienta programu InfoPath do spożywania że iterację na liście niestandardowe dostawcy, zwracanie tylko dostawców dopasowania dostarczony "typ".
Wywołania usługi sieci web za pośrednictwem formularza programu InfoPath.
Wyciągnięte wnioski:
- Pierwszy, wydaje się konieczne do tej trasy. I wolałaby filtrowanie całkowicie programu InfoPath i nie stwarzają żadnych sieci web usługi funkcji tutaj. Jednakże, Forms server nie dostarcza wymaganych zdolności filtrowania. Możemy zjednoczyć regułę na typ"" listy wyboru w formularzu sort of ponowne otwarcie kwerendy dostawcy, ale nie otrzymujemy by działał poprawnie. W związku z tym, był wdrożenia usługi sieci web.
- Jest to klasyczna "kaskadowych listy wyboru" problem w programie InfoPath formularzy serwera świata i istnieje wiele dobrych przykładów tam które wyjaśniają, jak rozwiązać ten.
- Wartość pustej kolumny na liście dostawcy nie zwraca ciąg pusty, gdy odwołanie do tak: initItem["Nazwa dostawcy"]. Zamiast tego, Zwraca wartość null.
Niektóre inne uwagi:
- I zwracają tablicę[] dostawców ponieważ miałem trudności zwracanie obiektu ArrayList. Program InfoPath był skarżą go i nie mam czasu lub nachylenie do walki nad nim. To, Oczywiście, umieszcza sztucznego ograniczenia całkowitej liczby dostawców. On także zmuszony mnie do wdrożenia trim() Metoda na tablicy bo nienawidzę pomysł powrotu powrót 100 dostawców wartości null. Program InfoPath nie opieki, ale nagged na mnie. (Ponownie, to było łatwiejsze niż zwalczanie InfoPath nad ArrayLists).
- I wdrożone GetSpecificVendorByName() Funkcja także, który może być pouczający.
Kod:
przy użyciu Systemu;
przy użyciu System.Web;
przy użyciu System.Web.Services;
przy użyciu System.Web.Services.Protocols;
przy użyciu Microsoft.SharePoint;
przy użyciu System.Configuration;
/// <Podsumowanie>
/// Dostawcy usług: Zapewnia, że dostawcy związane z usług, które dziś są spożywane przez klienta formularza programu infopath.
///
/// Historia:
/// ——–
/// 07/24/07: Początkowe kodowania, Paul J. Gavin Conchango.
///
/// </Podsumowanie>
[Usługi WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publiczne Klasa VendorService : System.Web.Services.Usługi WebService
{
/// <Podsumowanie>
/// Reprezentuje dostawcy z listy programu sharepoint niestandardowych utrzymywana przez MSUSA.
/// </Podsumowanie>
publiczne Klasa Dostawcy
{
publiczne Dostawcy() { }
publiczne Dostawcy(SPItem initItem)
{
Jeśli (! (initItem["Nazwa dostawcy"] == pusty)) VendorName = initItem["Nazwa dostawcy"].ToString();
Jeśli (! (initItem["Adres 1"] == pusty)) VendorAddress1 = initItem["Adres 1"].ToString();
Jeśli (! (initItem["Adres 2"] == pusty)) VendorAddress2 = initItem["Adres 2"].ToString();
Jeśli (! (initItem["City"] == pusty)) VendorCity = initItem["City"].ToString();
Jeśli (! (initItem["VendorPhone"] == pusty)) VendorPhone = initItem["VendorPhone"].ToString();
Jeśli (! (initItem["PurchaseType"] == pusty)) VendorType = initItem["PurchaseType"].ToString();
Jeśli (! (initItem["Państwo"] == pusty)) VendorState = initItem["Państwo"].ToString();
Jeśli (! (initItem["Zip"] == pusty)) VendorZip = initItem["Zip"].ToString();
Jeśli (!(initItem["Faksu"] == pusty)) VendorFax = initItem["Faksu"].ToString();
Jeśli (!(initItem["SalesRepName"] == pusty)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Unikatowy identyfikator utrzymywane przez MOSS.
}
publiczne int VendorItemId;
publiczne ciąg VendorName;
publiczne ciąg VendorAddress1;
publiczne ciąg VendorAddress2;
publiczne ciąg VendorCity;
publiczne ciąg VendorState;
publiczne ciąg VendorZip;
publiczne ciąg VendorPhone;
publiczne ciąg VendorType;
publiczne ciąg VendorSalesRepName;
publiczne ciąg VendorFax;
}
publiczne VendorService () {
//Usuń oznaczenie komentarza że następujący wiersz, jeśli za pomocą zaprojektowane komponenty
//InitializeComponent();
}
prywatne Dostawcy[] GenerateTestVendors()
{
Dostawcy[] Rankingu;
Rankingu = Nowy Dostawcy[100];
Dostawcy v;
v = Nowy Dostawcy();
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";
Rankingu[0] = v;
v = Nowy Dostawcy();
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";
Rankingu[1] = v;
v = Nowy Dostawcy();
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";
Rankingu[2] = v;
Powrót Rankingu;
}
[WebMethod]
publiczne Dostawcy GetSpecificVendorById(int Identyfikator dostawcy)
{
ciąg SpVendorSiteName; // Nazwa rzeczywistej witryny MOSS, obsługującym listy niestandardowych dostawców.
ciąg SpVendorListName; // Nazwa aktualnej liście mech zawierające dostawców.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
przy użyciu (SPSite Strona = Nowy SPSite(SpVendorSiteName))
{
przy użyciu (Sieci Web programu SharePoint Web = site. OpenWeb())
{
SPList currentList = www. Wyświetla listę[SpVendorListName];
SPItem specificItem = currentList.Items[Identyfikator dostawcy];
Powrót Nowy Dostawcy(specificItem);
} // za pomocą spweb web = site.openweb()
} // za pomocą Strona spsite = new spsite("http://localhost/mizuho")
}
[WebMethod]
// Zakłada się, że nazwa dostawcy jest niepowtarzalny, z punktu widzenia przedsiębiorców
publiczne Dostawcy GetSpecificVendorByVendorName(ciąg NazwaDostawcy)
{
ciąg SpVendorSiteName; // Nazwa rzeczywistej witryny MOSS, obsługującym listy niestandardowych dostawców.
ciąg SpVendorListName; // Nazwa aktualnej liście mech zawierające dostawców.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
przy użyciu (SPSite Strona = Nowy SPSite(SpVendorSiteName))
{
przy użyciu (Sieci Web programu SharePoint Web = site. OpenWeb())
{
SPList currentList = www. Wyświetla listę[SpVendorListName];
foreach (SPItem vendorItem w currentList.Items)
{
Jeśli (vendorItem["Nazwa dostawcy"] == pusty) w dalszym ciągu;
Jeśli (vendorItem["Nazwa dostawcy"].ToString().Równa się(NazwaDostawcy))
Powrót Nowy Dostawcy(vendorItem);
}
Dostawcy v = Nowy Dostawcy();
v.VendorPhone = "nie znaleziono: " + NazwaDostawcy;
Powrót v;
Powrót pusty;
} // za pomocą spweb web = site.openweb()
} // za pomocą Strona spsite = new spsite("http://localhost/mizuho")
} // Metoda
[WebMethod]
publiczne Dostawcy[] GetVendorsOfType (ciąg filterType)
{
ciąg SpVendorSiteName; // Nazwa rzeczywistej witryny MOSS, obsługującego t
sam sprzedawca listy niestandardowej.
ciąg SpVendorListName; // Nazwa aktualnej liście mech zawierające dostawców.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Dostawcy[] Rankingu;
int vendorIndex = 0;
Rankingu = Nowy Dostawcy[1000];
// Zainicjować listy z domyślną przyjacielski przekaz.
Dostawcy v = Nowy Dostawcy();
v.VendorName = "Wybierz typ dostawcy do wypełnienia tej listy.";
Rankingu[0] = v;
// Przekonwertować filtr litery na łatwiejsze porównanie string później.
filterType = filterType.ToLower();
// Jeśli typ filtru przekazywana jest "test", generować kilka prostych danych.
#w regionie Filtr typu = "test"
Jeśli (równa się filterType.("badanie"))
Powrót GenerateTestVendors();
#endregion
Jeśli (PRAWDA)
{
przy użyciu (SPSite Strona = Nowy SPSite(SpVendorSiteName))
{
przy użyciu (Sieci Web programu SharePoint Web = site. OpenWeb())
{
v = pusty;
SPList currentList = www. Wyświetla listę[SpVendorListName];
// Iterację wszystkich elementów na liście dostawców.
foreach (SPItem vendorItem w currentList.Items)
{
ciąg lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().String.tolower();
lowerVendorType = lowerVendorType.Substring(3);
Jeśli (Równa się lowerVendorType.(filterType))
{
Rankingu[vendorIndex ] = Nowy Dostawcy(vendorItem);
}
} // Iterowanie poprzez wszystkie dostawcy na liście
Powrót TrimVendorArray(vendorIndex, Rankingu);
// powrót rankingu;
} // za pomocą spweb web = site.openweb()
} // za pomocą Strona spsite = new spsite("http://localhost/mizuho")
} // Jeśli to prawda
Powrót pusty;
}
prywatne Dostawcy[] TrimVendorArray(int newsize, Dostawcy[] originalVendorArray)
{
Dostawcy[] trimmedArray;
Jeśli (NewSize == 0) NewSize = 1;
trimmedArray = Nowy Dostawcy[newsize];
int currentCounter = 0;
dla (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
Powrót trimmedArray;
}
}