MOSS / InfoPath Forms Server (InfoPath 2007) spustni seznam uspešnosti

Dodatno kategorijo: InfoPath

Povzetek: InfoPathov 2007 obliki razporejeno MOSS strežnik zagotavlja spustni seznam prodajalcev, ki so vezane na seznam po meri MOSS. Ob izbiri dobavitelja, pravila dodelite vrednosti polja peščica polj z besedilom kot prodajni zastopnik ime, naslov, mesto, država, zip in telefon. Predstava je grozno. Opazimo, da se poslabša učinkovitost (v ne-linearno) za posamezno dodatno polje posodobimo tako. Tj, Če smo samo posodobiti ime rep prodaje, je potrebno [x] čas. Če smo posodobili prodajni zastopnik, address1, Naslov2, mesto, država, zip, je potrebno 10 krat dlje.

Raztopina: Pisanje spletne storitve (vzorčno kodo najdete tukaj) ki je opravil v imenu prodajalca in vrne nazaj podrobnosti o prodajalcu. Nato, dodelite polja ta način. Čeprav se zdi preveč počasi, ni bilo opaznimi razlike v uspešnosti, ko smo 1 področju v primerjavi z 8 polja. Kot doda bonus, Uporabniki dobili kul "vzpostavljanje povezave s strežnikom" Cylon učinek, medtem ko so čakati za obrazec sklicevala in uživajo rezultate storitev.

MOSS: Prišlo je do izjeme. (Izjema od HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

POSODOBITEV: Smo nikoli ugotovili vzrok za težavo in jo nikoli površinske spet.

Smo opazili med izvajanjem razvoj mesta, kar nenadoma, dve uporabniki ne morejo dostopati do zbirke mest. Te račune lahko prijavljajo v glavno mesto, vendar pri poskusu dostopa do posebno spletno stran zbirka, šele zaslužiti obrazec zaslon. Brez napak, prikazana, samo belo prazno stran.

Smo se prijavite kot skrbnik zbirke mest in poskusite dodati enega od teh uporabnikov kot mesto admin in tokrat, ko pritisnete "OK", smo dobili to sporočilo:

Prišlo je do izjeme. (Izjema od HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Smo preživeli nekaj časa raziskujejo to in na žalost, nisem prišel z nič uporabnega. Bilo je nekaj sporočil v diagnostični dnevnik, vendar je bilo težko povezati točno jih s težavo.

Na koncu, Brisanje zbirke mest in ponovno ustvarjena in da rešili to.

Če sem ugotoviti, kaj je povzročilo to v prihodnosti, Bom posodobiti to post.

MOSS: Iterating skozi seznamih po meri in filtrirane podatke vrnete InfoPath

Poslovni scenarij:

Priskrbeti se metoda, ki omogoča uporabnikom, da vnesejo točne nakup Zasegi hitro.

Business problem:

Stranka posluje z več sto prodajalci.

Prodajalci so "tip" posebne. To pomeni, da prodajalec prodaja računalniške opreme (npr.. Dell) ali pisarniškega materiala (npr.. Sponke).

Kako smo omogočijo končnim uporabnikom, ki ustvarjajo nakup Zasegi Izberite veljavno dobavitelja?

Poslovnih rešitev:

Razlikovanje med prodajalci v sistemu preko "tip".

Omogoči uporabnikom, da izberete vrsto"" izdelka, in nato nabor filtrirane ustrezne dobavitelje.

Tehnično rešitev:

InfoPathov obrazec je bil oblikovan, da omogoča uporabnikom, da vnesejo online nakup zasegi.

Dva seznama za izbor InfoPath nadzor izbor dobavitelja. Prvi, uporabnik izbere "nakup tip". To omejuje drugi izbirni seznam vsebuje le prodajalci, ki prodajajo za to vrsto nabave. To je klasična kaskadne spustnem.

Prodajalci so shranjene v seznam po meri MOSS s stolpci po meri za dobavitelja atribute, kot so ime, naslov in še posebej "tip".

Izvaja spletna storitev za InfoPath stranko uživati ki poudarjeno po seznamu po meri dobavitelja, vračajo samo prodajalci ujemanje podane "vrste".

Priklicati spletne storitve preko InfoPathov obrazec.

Spoznanja:

  • Prvi, zdi potrebno iti to pot. Jaz raje ne filtriranje povsem InfoPatha in ne povzročajo vse funkcionalnosti spletnih storitev tukaj. Vendar, oblike strežnik ne zagotavljajo zahtevane zmogljivosti filtriranja. Lahko postavimo pravilo na a "tip" seznam za izbiro v obliki neke vrste ponovno odpreti poizvedbo dobavitelja, vendar smo vekanje zaslužiti to obdelovati primerno. Zato, je bilo treba izvajati spletne storitve.
  • To je klasična "kaskadne izbor seznam" problem v InfoPatha tvori server svetu in obstaja veliko dobrih primerov tam zunaj to razložiti, kako rešiti to.
  • Prazna vrednost za stolpec v seznamu dobaviteljev ne vrne prazen niz dodeljuje takole: initItem["Ime dobavitelja"]. Namesto tega, Vrne ničelno vrednost.

Nekatere druge opombe:

  • Sem vrneta matriko[] prodajalcev, ker sem imel nekaj težav, ki se vračajo na predmeta ArrayList. InfoPath je bil pritožuje o tem in nisem imel časa ali volje za boj nad njim. To, seveda, postavlja umetnih omejitev na skupno število dobaviteljev. To tudi me prisiliti, da izvajanje trim() metoda na matriki, ker sovražim idejo o vrnitvi nazaj 100 nič prodajalcev. InfoPath ne skrbi, ampak to nagged vame. (Znova, To je lažje kot InfoPath prepirala ArrayLists).
  • Sem izvajal v GetSpecificVendorByName() funkcije, kot tudi, ki je lahko poučen.

Šifra:

z uporabo Sistem;
z uporabo System.Web;
z uporabo System.Web.Services;
z uporabo System.Web.Services.Protocols;
z uporabo Microsoft.SharePoint;
z uporabo System.Configuration;

/// <povzetek>
///
Dobavitelj storitev: Zagotavlja dobavitelja, povezanih storitev, ki je danes použijeta odjemalca InfoPathov obrazec.
///
/// Zgodovina:
/// ——–
/// 07/24/07: Začetno kodiranje, Paul J. Gavin Conchango.
///
/// </povzetek>
[Spletna storitev(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
javnih razred VendorService : System.Web.Services.Spletna storitev
{

/// <povzetek>
/// Predstavlja prodajalec s po meri SharePointovega seznama vzdržuje MSUSA.
/// </povzetek>
javnih razred Dobavitelja
{
javnih Dobavitelja() { }

javnih Dobavitelja(SPItem initItem)
{
Če (! (initItem["Ime dobavitelja"] == NULL)) Ime_prodajalca = initItem["Ime dobavitelja"].ToString();
Če (! (initItem["Naslov 1"] == NULL)) VendorAddress1 = initItem["Naslov 1"].ToString();
Če (! (initItem["Naslov 2"] == NULL)) VendorAddress2 = initItem["Naslov 2"].ToString();
Če (! (initItem["Mesto"] == NULL)) VendorCity = initItem["Mesto"].ToString();
Če (! (initItem["VendorPhone"] == NULL)) VendorPhone = initItem["VendorPhone"].ToString();
Če (! (initItem["PurchaseType"] == NULL)) VendorType = initItem["PurchaseType"].ToString();
Če (! (initItem["Država"] == NULL)) VendorState = initItem["Država"].ToString();
Če (! (initItem["Zip"] == NULL)) VendorZip = initItem["Zip"].ToString();
Če (!(initItem["Faks"] == NULL)) VendorFax = initItem["Faks"].ToString();
Če (!(initItem["SalesRepName"] == NULL)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Enolični ID, vzdrževati prek MOSS.
}

javnih int VendorItemId;
javnih niz Ime_prodajalca;
javnih niz VendorAddress1;
javnih niz VendorAddress2;
javnih niz VendorCity;
javnih niz VendorState;
javnih niz VendorZip;
javnih niz VendorPhone;
javnih niz VendorType;
javnih niz VendorSalesRepName;
javnih niz VendorFax;
}

javnih VendorService () {

//Odkomentirate vrstico če using izdelane komponente
//InitializeComponent();
}

zasebno Dobavitelja[] GenerateTestVendors()
{
Dobavitelja[] resultList;
resultList = nove Dobavitelja[100];

Dobavitelja v;
v = nove Dobavitelja();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = "v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";

resultList[0] = v;

v = nove Dobavitelja();

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 = nove Dobavitelja();
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;

vrnitev resultList;

}

[WebMethod]
javnih Dobavitelja GetSpecificVendorById(int ID prodajalca)
{
niz SpVendorSiteName; // Ime dejansko MOSS mesto, ki gosti seznam po meri dobavitelja.
niz SpVendorListName; // Ime dejansko MOSS seznam, ki vsebuje prodajalci.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

z uporabo (»SPSite « stran = nove »SPSite «(SpVendorSiteName))
{

z uporabo (SPWeb Spletna stran =. OpenWeb())
{

SPList.Update() currentList = spletni. Seznami[SpVendorListName];

SPItem specificItem = currentList.Items[ID prodajalca];

vrnitev nove Dobavitelja(specificItem);

} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")

}

[WebMethod]
// Domneva, da ime dobavitelja je edinstveno, s poslovnega vidika
javnih Dobavitelja GetSpecificVendorByVendorName(niz biti)
{
niz SpVendorSiteName; // Ime dejansko MOSS mesto, ki gosti seznam po meri dobavitelja.
niz SpVendorListName; // Ime dejansko MOSS seznam, ki vsebuje prodajalci.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

z uporabo (»SPSite « stran = nove »SPSite «(SpVendorSiteName))
{
z uporabo (SPWeb Spletna stran =. OpenWeb())
{

SPList.Update() currentList = spletni. Seznami[SpVendorListName];

foreach (SPItem vendorItem v currentList.Items)
{
Če (vendorItem["Ime dobavitelja"] == NULL) «««;

Če (vendorItem["Ime dobavitelja"].ToString().Je enako(biti))
vrnitev nove Dobavitelja(vendorItem);
}

Dobavitelja v = nove Dobavitelja();
v.VendorPhone = "ni mogoče najti: " + biti;

vrnitev v;

vrnitev NULL;

} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")

} // metoda

[WebMethod]
javnih Dobavitelja[] GetVendorsOfType (niz filterType)
{

niz SpVendorSiteName; // Ime dejansko MOSS mesto, ki gosti t
je prodajalec seznam po meri.
niz SpVendorListName; // Ime dejansko MOSS seznam, ki vsebuje prodajalci.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

Dobavitelja[] resultList;
int vendorIndex = 0;
resultList = nove Dobavitelja[1000];

// Inicializacija seznama s privzetim sporočilom, prijazno.
Dobavitelja v = nove Dobavitelja();
v.VendorName = "Izberite vrsto dobavitelja izpolnite ta seznam.";
resultList[0] = v;

// Pretvori filter v spodnji primer za lažje primerjava nizov kasneje.
filterType = filterType.ToLower();

// Če vrsta filtra je "test", ustvariti nekaj preprostih podatkov.
#regija Vrsta filtra = "preskus"
Če (Enako filterType.("test"))
vrnitev GenerateTestVendors();
#endregion

Če (True)
{
z uporabo (»SPSite « stran = nove »SPSite «(SpVendorSiteName))
{
z uporabo (SPWeb Spletna stran =. OpenWeb())
{

v = NULL;

SPList.Update() currentList = spletni. Seznami[SpVendorListName];

// Ponovi vse elemente v seznamu dobaviteljev.
foreach (SPItem vendorItem v currentList.Items)
{

niz lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().String.tolower();
lowerVendorType = lowerVendorType.Substring(3);

Če (Enako lowerVendorType.(filterType))
{
resultList[vendorIndex ] = nove Dobavitelja(vendorItem);
}
} // iterating skozi vse dobavitelje v seznamu


vrnitev TrimVendorArray(vendorIndex, resultList);
// vrnitev resultList;

} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")

} // Če je to res

vrnitev NULL;
}

zasebno Dobavitelja[] TrimVendorArray(int newsize, Dobavitelja[] originalVendorArray)
{
Dobavitelja[] trimmedArray;

Če (newsize == 0) newsize = 1;
trimmedArray = nove Dobavitelja[newsize];

int currentCounter = 0;

za (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

vrnitev trimmedArray;

}
}

MOSS: Opažanja o InfoPathu debugging

InfoPath obrazec pomočnik zmota vest so zavajajoče.

Med razvojem InfoPathovega obrazca, Bi to post MOSS strežnik in dostop do obrazca. Obliki bi začetek otovoriti ter nato ustvarjajo zavajajoče sporočilo Napaka kaže mi okno pripetljaj poleno zakaj podrobnost. v bistvu, ne vest je bila napisana v dnevniku dogodkov windows. Precej, je bilo sporočilo poslano v MOSS ascii diagnostični dnevnik. Lahko da izslediti preko centralne službe uprave.

Morate biti hitro na nogah. MAH všeč pisati v dnevniško datoteko, pogosto in verbosely. To moči obstati urejevalec, vendar je privzeta dnevnik pisanje vedenje "vse čim prej".

MOSS: Posodabljanje seznam po meri

Obstaja veliko dobrih primerov posodabljanje seznamov po meri prek SDK. Tukaj je še en.

Business problem: InfoPathov obrazec je bil oblikovan, da omogoča uporabnikom, da vnesejo online nakup zasegi. PO zahtevnice številke je treba tradicionalne zaporedje temelji celoštevilske vrednosti in samodejno izračuna.

Poslovnih rešitev: Ustvarite seznam po meri MOSS, ki vsebuje dva stolpca: "ControlField" in "ControlValue". V stolpcu vrednost je naslednja številka zahtevka za nabavo. Upoštevajte, da je generično "nadzor" poimenovanja predvideva prihodnje kontrolnik polja, ki se lahko uporabijo kot je potrebno.

Tehnično rešitev: Ustvarite spletno storitev dostopal InfoPath odjemalca. Spletna storitev vrne nazaj na naslednja številka zahtevka za nabavo in posodobi vrednost seznama.

Spoznanja:

  • Pri dodajanju to spletno storitev kot vir podatkov InfoPathovega obrazca, Sem ugotovila, da je treba spremeniti to v a udc in shranjevanje v knjižnici podatkovnih povezav.
  • Mi je tudi zdelo potrebno omogočiti navzkrižne domeno skriptno izvajanje prek centralne službe uprave // upravljanje programa // obliki strežnika konfiguracije.
  • Prvič obliki poskušali dostopati do spletne storitve, To traja nekaj časa in včasih, To bi pavza. Sem fiddled s nastavitve v obliki konfiguracijo strežnika, da razširite nastavitve časovne omejitve in ki je zdelo, da pomaga.

Šifra:

z uporabo Sistem;
z uporabo System.Web;
z uporabo System.Web.Services;
z uporabo System.Web.Services.Protocols;
z uporabo Microsoft.SharePoint;
z uporabo System.Configuration;

[Spletna storitev(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
javnih razred PoService : System.Web.Services.Spletna storitev
{
javnih PoService () {

//Odkomentirate vrstico če using izdelane komponente
//InitializeComponent();
}

/// <povzetek>
/// Dobimo naslednjo številko PO seznamu sharepoint po število nadzor.
/// Prirastek številko PO tem seznamu.
/// </povzetek>
/// <Vrne></Vrne>
[WebMethod]
javnih niz GetNextPoNumber()
{
niz SpPoControlSiteName; // Ime dejansko MOSS mesto, ki gosti PO kontrolni seznam.
niz SpPoControlListName; // Ime dejansko MOSS seznam, ki vsebuje kontrolnik Po.

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

niz nextPoReqNumber = "xyzzy";

z uporabo (»SPSite « stran = nove »SPSite «(SpPoControlSiteName))
{
z uporabo (SPWeb Spletna stran =. OpenWeb())
{

SPList.Update() currentList = spletni. Seznami[SpPoControlListName];

foreach (SPItem controlItem v currentList.Items)
{

Če (((niz)controlItem["ControlField"]).Je enako("NextPoNumber"))
{
nextPoReqNumber = (niz)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Pretvori.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

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

} // Iskanje, branje in posodabljanje številko PO seznamu.


} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")

vrnitev nextPoReqNumber;

}
}