Üzleti forgatókönyv:
Beszerez egy módszer, amely lehetővé teszi a felhasználók számára, hogy adja meg pontos beszerzési igénylések gyorsan.
Üzleti probléma:
Az ügyfél nem üzleti több száz eladó.
Eladó a "típus" különleges. Ez azt jelenti, hogy a szállító eladja számítástechnikai berendezések (pl. Dell) vagy irodaszerek (pl. Összekapcsol).
Hogyan engedélyezi a végfelhasználók számára, akik létre beszerzési igénylések kiválasztása egy érvényes eladó?
Üzleti megoldás:
Eladó különbséget a rendszer keresztül "típus".
Engedélyezi a felhasználók számára, hogy válassza ki a "" a termék, és adja meg a szűrt megfelelő szállítók.
Műszaki megoldás:
Az InfoPath-űrlapok úgy alakították ki, hogy lehetővé teszi a felhasználók számára, hogy adja meg online beszerzési igénylések.
Két InfoPath kiválasztási listák ellenőrzés értékesítők kiválasztása. Első, a felhasználó kiválasztja a "beszerzés típus". Ez korlátozza a második lista tartalmazza csak a gyártók, hogy eladja az adott beszerzési. Ez egy klasszikus zuhogó csepp-legyőz.
Eladó tárolódnak MOSS Egyéni listák egyéni oszlopok a szállító attribútumai, például a név, cím és különösen a "típus".
Végre a webszolgáltatás az InfoPath ügyfelek fogyasztani, hogy a telepítéseket az egyéni szállító-lista, visszatérő kizárólag azok a szállítók megfelelő egy mellékelt "típus".
A webes szolgáltatás keresztül az InfoPath-űrlap.
Tanulságok:
- Első, szükségesnek tűnik, hogy ezt az utat. Azt szerette volna, teljesen az InfoPath alkalmazásból szűrést, és nem hozhat létre bármely web szolgáltatás működési. Azonban, Forms server nem rendelkezik a szükséges szűrési képességgel. Tudunk rakni egy szabály-ra egy "típus" kiválasztás lista formájában egyfajta újra megnyitni a szállító lekérdezés, de mi vidám kap ez-hoz dolgozik illően. Ezért, Ez volt a web szolgáltatás végrehajtásához szükséges.
- Ez a klasszikus "lépcsőzetes kiválasztós lista" probléma-ban az InfoPath űrlapok világ, és vannak sok jó példát odakinn, hogy elmagyarázzák, hogyan kell megoldani ezt.
- A szállítói lista egy oszlopának üres érték nem tér vissza az üres karakterláncra, ha a hivatkozott, mint ez: initItem[Szállító neve""]. Ehelyett, a null értéket ad vissza.
Néhány egyéb megjegyzések:
- Én vissza egy tömbben[] eladó, mert volt néhány nehézség, visszatérő ArrayList. Az InfoPath volt panaszkodott, és nem volt, az idő vagy a hajlandóság, hogy küzdj ellene. Ez, természetesen, hozza egy mesterséges korlátot szállítók száma. Ez is kénytelen nekem, hogy végre egy berendezés() módszer a tömb, mert utálom az elképzelést, visszatérő vissza 100 null-gyártók. Az InfoPath nem érdekel, de ez rám zaklatott. (Újra, ez könnyebb volt, mint harcok InfoPath alatt ArrayLists).
- Én végre egy GetSpecificVendorByName() funkciót is, tanulságos lehet.
A kód:
használatával Rendszer;
használatával System.Web;
használatával System.Web.Services;
használatával System.Web.Services.Protocols;
használatával Microsoft.SharePoint;
használatával System.Configuration;
/// <Összefoglaló>
/// Szállító szolgálat: Rendelkezik, szállítói kapcsolatos szolgáltatások, amely ma fogyasztja az infopath-űrlapok ügyfél.
///
/// Történelem:
/// ——–
/// 07/24/07: Kezdeti kódolás, Paul J. Gavin a Conchango.
///
/// </Összefoglaló>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
nyilvános osztály VendorService : System.Web.Services.WebService
{
/// <Összefoglaló>
/// Képviseli a szállító MSUSA által fenntartott egyéni sharepoint-listából.
/// </Összefoglaló>
nyilvános osztály Eladó
{
nyilvános Eladó() { }
nyilvános Eladó(SPItem initItem)
{
Ha (! (initItem[Szállító neve""] == NULL értékű)) ForgalmazóNév = initItem[Szállító neve""].ToString();
Ha (! (initItem["Cím 1"] == NULL értékű)) VendorAddress1 = initItem["Cím 1"].ToString();
Ha (! (initItem["Cím 2"] == NULL értékű)) VendorAddress2 = initItem["Cím 2"].ToString();
Ha (! (initItem["A város"] == NULL értékű)) VendorCity = initItem["A város"].ToString();
Ha (! (initItem["VendorPhone"] == NULL értékű)) VendorPhone = initItem["VendorPhone"].ToString();
Ha (! (initItem["PurchaseType"] == NULL értékű)) VendorType = initItem["PurchaseType"].ToString();
Ha (! (initItem["Az állam"] == NULL értékű)) VendorState = initItem["Az állam"].ToString();
Ha (! (initItem["Zip"] == NULL értékű)) VendorZip = initItem["Zip"].ToString();
Ha (!(initItem["Fax"] == NULL értékű)) VendorFax = initItem["Fax"].ToString();
Ha (!(initItem["SalesRepName"] == NULL értékű)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // MOSS keresztül fenn egyedi azonosítója.
}
nyilvános int VendorItemId;
nyilvános karakterlánc ForgalmazóNév;
nyilvános karakterlánc VendorAddress1;
nyilvános karakterlánc VendorAddress2;
nyilvános karakterlánc VendorCity;
nyilvános karakterlánc VendorState;
nyilvános karakterlánc VendorZip;
nyilvános karakterlánc VendorPhone;
nyilvános karakterlánc VendorType;
nyilvános karakterlánc VendorSalesRepName;
nyilvános karakterlánc VendorFax;
}
nyilvános VendorService () {
//Vedd ki a megjegyzésből az alábbi sort, ha használ tervezett alkatrészek
//InitializeComponent();
}
privát Eladó[] GenerateTestVendors()
{
Eladó[] resultList;
resultList = új Eladó[100];
Eladó v;
v = új Eladó();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = "a v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";
resultList[0] = v;
v = új Eladó();
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 = új Eladó();
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;
vissza resultList;
}
[WebMethod]
nyilvános Eladó GetSpecificVendorById(int vendorId)
{
karakterlánc SpVendorSiteName; // Az aktuális MOSS oldalon, hogy a házigazdák a szállító egyéni lista neve.
karakterlánc SpVendorListName; // A tényleges MOSS listát tartalmazó szállítók neve.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
használatával (SPSite telek = új SPSite(SpVendorSiteName))
{
használatával (SPWeb Web = site. OpenWeb())
{
Meg az SPList.Update() currentList = webes. Listák[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
vissza új Eladó(specificItem);
} // spweb weben = site.openweb()
} // spsite webhely használatával új spsite =("http://localhost/mizuho")
}
[WebMethod]
// Azt feltételezi, hogy a szállító neve egyedi, üzleti szempontból
nyilvános Eladó GetSpecificVendorByVendorName(karakterlánc kell)
{
karakterlánc SpVendorSiteName; // Az aktuális MOSS oldalon, hogy a házigazdák a szállító egyéni lista neve.
karakterlánc SpVendorListName; // A tényleges MOSS listát tartalmazó szállítók neve.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
használatával (SPSite telek = új SPSite(SpVendorSiteName))
{
használatával (SPWeb Web = site. OpenWeb())
{
Meg az SPList.Update() currentList = webes. Listák[SpVendorListName];
foreach (SPItem vendorItem a currentList.Items)
{
Ha (vendorItem[Szállító neve""] == NULL értékű) «««;
Ha (vendorItem[Szállító neve""].ToString().Egyenlő(kell))
vissza új Eladó(vendorItem);
}
Eladó v = új Eladó();
v.VendorPhone = "nem található: " + kell;
vissza v;
vissza NULL értékű;
} // spweb weben = site.openweb()
} // spsite webhely használatával új spsite =("http://localhost/mizuho")
} // a módszer
[WebMethod]
nyilvános Eladó[] GetVendorsOfType (karakterlánc filterType)
{
karakterlánc SpVendorSiteName; // A tényleges MOSS webhely, t tároló neve
ő szállító egyéni lista.
karakterlánc SpVendorListName; // A tényleges MOSS listát tartalmazó szállítók neve.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Eladó[] resultList;
int vendorIndex = 0;
resultList = új Eladó[1000];
// A listában az alapértelmezett barátságos üzenetet inicializálása.
Eladó v = új Eladó();
v.VendorName = "Válasszon ki egy szállítói lista feltöltéséhez.";
resultList[0] = v;
// A szűrő átalakítása kisbetűssé a könnyebb karakterlánc-összehasonlítás később.
filterType = filterType.ToLower();
// Ha a szűrő típusa van a "teszt", néhány egyszerű adatok létrehozása.
#régió Szűrőtípus = "teszt"
Ha (filterType. egyenlő("teszt"))
vissza GenerateTestVendors();
#endregion
Ha (igaz)
{
használatával (SPSite telek = új SPSite(SpVendorSiteName))
{
használatával (SPWeb Web = site. OpenWeb())
{
v = NULL értékű;
Meg az SPList.Update() currentList = webes. Listák[SpVendorListName];
// Navigálhat az összes elemet a szállító lista.
foreach (SPItem vendorItem a currentList.Items)
{
karakterlánc lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().String.ToLower();
lowerVendorType = lowerVendorType.Substring(3);
Ha (Egyenlő lowerVendorType.(filterType))
{
resultList[vendorIndex ] = új Eladó(vendorItem);
}
} // iterációjával keresztül a szállítók, a lista
vissza TrimVendorArray(vendorIndex, resultList);
// vissza a resultList;
} // spweb weben = site.openweb()
} // spsite webhely használatával új spsite =("http://localhost/mizuho")
} // Ha ez igaz
vissza NULL értékű;
}
privát Eladó[] TrimVendorArray(int Hírek, Eladó[] originalVendorArray)
{
Eladó[] trimmedArray;
Ha (Hírek == 0) Hírek = 1;
trimmedArray = új Eladó[Hírek];
int currentCounter = 0;
a (currentCounter = 0; currentCounter < Hírek; currentCounter )
{
trimmedArray[currentCounter] originalVendorArray =[currentCounter];
}
vissza trimmedArray;
}
}