MOSS / InfoPath Forms Server (Az InfoPath 2007) legördülő lista teljesítmény

További kategória: Az InfoPath

Összefoglaló: Az InfoPath 2007 MOSS kiszolgálóra formában biztosítja a szállítók kötött egyéni MOSS lista legördülő listáját. Ha a szállító, szabályok mező értékek hozzárendelése egy maroknyi szöveges mezők, például az értékesítési munkatárs neve, Cím, város, állami, zip, és a telefon. Borzalmas a teljesítménye. Mi észre, hogy a teljesítmény rosszabb (a nem-lineáris) az egyes kiegészítő mezők frissítjük, így. Azaz, Ha most frissíteni az értékesítési munkatárs neve, tart [x] idő. Ha frissítjük értékesítési rep, cím 1, cím 2, város, állami, zip, tart 10 szer hosszabb.

Megoldás: Írjon egy webes szolgáltatás (minta kód megtalálható itt) hogy telt el, a szállító nevét és vissza vissza a eladó részlet. Majd, rendelje hozzá a mezőket ily módon. Bár ez túl lassú, nincs észrevehető különbség a teljesítmény volt, amikor már kiosztott 1 mező szemben 8 mezők. Mint egy hozzáadott bónusz, használók kap egy jó "felveszi a kapcsolatot a szerver" Cylon effektus, miközben várja a forma-hoz esdekel és fogyasztani a szolgáltatás.

MOSS: Kivétel történt. (Kivétel HRESULT: 0x-80020009 (DISP_E_EXCEPTION))

FRISSÍTÉS: Mi soha nem meghatározni, ezt a problémát, és ez soha nem felszíni gyökerét újra.

Mi észrevesz egy fejlesztési site végrehajtása során hogy hirtelen, két felhasználók nem férnek hozzá a webhelycsoport. E számlák hitelesítheti a fő webhely, de ha megpróbál hozzáférni egy adott webhelycsoportra, ők csak kap egy üres képernyő. Nem látható hibák, csak egy fehér üres oldal.

Mi jelentkezzen be webhely adminisztrátorrá és próbál hozzáadni egyik azoknak a felhasználóknak, ez az idő, valamint az a telek admin, után szorongató "OK", mi kap ez üzenet:

Kivétel történt. (Kivétel HRESULT: 0x-80020009 (DISP_E_EXCEPTION))

Mi töltött egy kis időt kutató, ez sajnos, és, nem jön fel semmit hasznos. A diagnosztikai naplófájl volt néhány üzenet, de volt nehéz pontosan korrelációba állításához a problémával.

A végén, Mi a helycsoport törlése, és ismét létrehozza azt, és hogy oldani, hogy.

Ha én kiszámít mi okozta ezt a jövőben, I update this post.

MOSS: Léptetés keresztül egyéni listákat és InfoPath szűrt adatvisszaadás

Ü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;

}
}

MOSS: Észrevételek az InfoPath hibakeresés

Az InfoPath form server hibaüzenetei félrevezető.

Fejlesztés során az InfoPath-űrlap, Kíván post MOSS-kiszolgálóra, és a képernyőt. Az űrlap betöltése, és ezután létrehoz egy félrevezető hiba üzenet mutatott nekem, hogy a részleteket a windows eseménynaplójában kezdene. valójában, közlemény nem volt írva, hogy a rendszer eseményt ír a windows eseménynaplójába. Inkább, az üzenetet küldték be az MOSS ascii diagnosztikai. Nyomon követhető, le via központi szolgáltatások igazgatása.

Akkor kell gyorsan a lábad. MOSS szeret írni, hogy a naplófájl, gyakran, és verbosely. Ez is kell faragni, de az alapértelmezett napló írás viselkedés "mindent, amilyen gyorsan csak lehet".

MOSS: Egyéni lista frissítése

Számos jó példa az SDK via Egyéni listák frissítése. Itt van még egy.

Üzleti probléma: InfoPath-űrlap úgy lett kialakítva, hogy lehetővé teszi a felhasználók számára, hogy adja meg online beszerzési igénylések. PO igénylési számokat kell hagyományos sorozat alapján egészszám-értékeket, és automatikusan.

Üzleti megoldás: Két oszlopot tartalmazó egyéni MOSS lista létrehozása: "ControlField" és "ControlValue". Az érték oszlopban tartalmazza a következő beszerzési igénylési szám. Vegye figyelembe, hogy a generikus "ellenőrzés" elnevezési biztosít a jövőbeli ellenőrzési területeken, szükség esetén felhasználható.

Műszaki megoldás: Létrehozása a webszolgáltatás az InfoPath ügyfél által. A webszolgáltatás adja vissza a következő beszerzési igénylés számát, és frissíti az értéket a listához.

Tanulságok:

  • Ha adatforrásként ezt pókháló szolgáltatás hozzáadása az InfoPath-űrlap, Azt találták, hogy kell átalakítani, hogy a udc és készlet ez-ba egy adatkapcsolattár.
  • Azt is megállapították, hogy szükséges, hogy a tartományok közötti keresztül központi felügyeleti parancsfájlok // alkalmazások kezelése // űrlap kiszolgálókonfiguráció.
  • Először az űrlapot próbált-hoz belépés a pókháló szolgáltatás, eltart egy ideig, és alkalmanként, volna idő. Én fiddled bővíteni az időtúllépési beállítások űrlap szerver konfigurációs beállítások, és úgy látszik, hogy segítsen.

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;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
nyilvános osztály PoService : System.Web.Services.WebService
{
nyilvános PoService () {

//Vedd ki a megjegyzésből az alábbi sort, ha használ tervezett alkatrészek
//InitializeComponent();
}

/// <Összefoglaló>
/// A következő PO-szám megszerzése sharepoint-listából a po szám ellenőrzése.
/// Növekmény a PO szám a listán.
/// </Összefoglaló>
/// <adja vissza></adja vissza>
[WebMethod]
nyilvános karakterlánc GetNextPoNumber()
{
karakterlánc SpPoControlSiteName; // Ad otthont a PO-szabálygyűjtemény tényleges MOSS-hely nevét.
karakterlánc SpPoControlListName; // A tényleges MOSS lista a Po-vezérlőt tartalmazó.

SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();

karakterlánc nextPoReqNumber = "xyzzy";

használatával (SPSite telek = új SPSite(SpPoControlSiteName))
{
használatával (SPWeb Web = site. OpenWeb())
{

Meg az SPList.Update() currentList = webes. Listák[SpPoControlListName];

foreach (SPItem controlItem a currentList.Items)
{

Ha (((karakterlánc)controlItem["ControlField"]).Egyenlő("NextPoNumber"))
{
nextPoReqNumber = (karakterlánc)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Konvertálás.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

controlItem["ControlValue"] int_nextPoReqNumber =;
controlItem.Update();
}

} // Megkeresése, olvasás és a PO szám, a lista frissítése.


} // spweb weben = site.openweb()
} // spsite webhely használatával új spsite =("http://localhost/mizuho")

vissza nextPoReqNumber;

}
}