MOSS / InfoPath Forms Server (InfoPath 2007) ripploendi tulemuslikkuse

Täiendav kategooria: InfoPath

Kokkuvõte: InfoPathi 2007 MOSS serveri kasutusele võtta vorm pakub seotud kohandatud MOSS loend hankijate loendist. Pärast hankijat, Reeglid määrata väljaväärtused käputäis tekstiväljad nagu müügiesindaja nimi, aadress, City, riik, ZIP ja telefoni. Jõudlus on jube. Märkame tulemuslikkuse süveneb (mittelineaarsete viisil) iga täiendav välja uuendame sel viisil. St, Kui me lihtsalt uuendatud müügiesindaja nimi, See võtab [x] aeg. Kui me update müügiesindaja, address1, aadress 2, City, riik, ZIP, See võtab 10 korda pikem.

Lahus: Kirjutage veebiteenusele (proovi kood võib leida Siin) hankija nime vastu ning tagastab tagasi müüja andmed. Seejärel, määrata väljad nii. Kuigi see tundub liiga aeglane, puudus tajutavatest erinevus tulemuslikkuse kui oleme määratud 1 väli versus 8 väljad. Lisaboonusena, Kasutajad saavad "ühendust server lahe" Cylon mõju kui nad oodata vormi kasutada ja tarbida teenuse tulemusi.

MOSS: Ilmnes erand. (HRESULT Erandina: 0x 80020009 (DISP_E_EXCEPTION))

VÄRSKENDUS: Me kunagi kindlaks algpõhjus see probleem ja see kunagi pind uuesti.

Märkame, et äkki rakendamisel arengu veebilehte, kaks kasutajat ei saa saidikogumi juurdepääsu. Need kontod saab autentimiseks, main Site, Aga kui proovin avada mõne kindla saidikogumi, nad lihtsalt saada tühi ekraan. Tõrkeid ei kuvata, vaid tühi valge leht.

Me saidikogumi administraator sisse logida ja proovida lisada üks neist kasutajatest saidi admin ja seekord, pärast pressimist "OK", Me saame seda teadet:

Ilmnes erand. (HRESULT Erandina: 0x 80020009 (DISP_E_EXCEPTION))

Veetsime aega uurides seda ja kahjuks, ei tulla midagi kasulikku. Seal olid mõned sõnumid diagnostikalogi, Aga see oli raske täpselt neid korrelatsioonis probleemi.

Aasta lõpus, Me saidikogumi kustutada ja uuesti luua ning et lahendada see.

Kui ma aru saada, mis põhjustas selle tulevikus, Ma ajakohastavad seda postitust.

MOSS: Iterating läbi kohandatud loendite ja filtreeritud andmeid tulles InfoPath

Äri stsenaariumi:

Meetodit, mis võimaldab kasutajatel kiiresti sisestada täpne ostu ostutellimused.

Äriprobleemi:

Kliendi ärisuhetes mitu sada hankijatega.

Müüjad on "tüüp" konkreetsete. See tähendab, et müüja müüb arvutiseadmed (näiteks. Dell) või kontoritarbed (näiteks. Klambrid).

Kuidas lubada lõppkasutajatele, kes loomine ost ostutellimused Vali sobiv hankija?

Majandustarkvaraga:

Eristada hankijate süsteemi kaudu "tüüp".

Kasutajatele võimaluse valida tüüp"" toote andmete filtreeritud komplekti sobiv müüjad.

Tehniline lahendus:

InfoPathi vorm on mõeldud võimaldab kasutajatel sisestada online osta ostutellimused.

Kaks InfoPathi valikute kontrollida hankija valik. Esimese, Kui kasutaja valib "ostu tüüp". See piirab teise valiku loendi sisaldavad ainult müüjad, kes müüvad selle ostu jaoks. See on klassikaline kuhjuvate rippmenüü.

Hankijate salvestatakse MOSS kohandatud loendi kohandatud veerud hankija atribuute nagu nimi, aadress ja eriti "tüüp".

Rakendada InfoPathi kliendiga tarbida mis veebiteenuse itereerib kohandatud loendi kaudu, tagasi ainult müüjad sobitamine esitatud "tüüp".

Kasuta web teenust InfoPath vormi kaudu.

Õppetunnid:

  • Esimese, vaja minna seda teed. Ma oleksin eelistanud teha täiesti InfoPathist filtreerimine ja ei tekita mingeid web service funktsionaalsust siin. Aga, Forms server ei esita nõutud filtreerimise võimalus. Panime peale reegel on "tüüp" valikuloend omamoodi uuesti avada hankija päringu vorm, kuid me ei saa seda tööd korralikult. Seetõttu, tuli rakendada web service.
  • See on klassikaline "kuhjuvate valiku loend" probleem InfoPathi vormid server maailma ja on palju häid näiteid seal, mis selgitavad, kuidas seda probleemi lahendada.
  • Hankijate loendis veeru tühiväärtus tagastada tühja stringi kui sellist, millele viitab: initItem["Hankija nimi"]. Selle asemel, See annab vastuseks väärtust null.

Mõned muud märkused:

  • Tagastab massiivi[] müüjad, sest mul oli raskusi, tagastades oma loendit ArrayList. InfoPathi oli kurtnud seda ja mul ei olnud aega või kalduvus võidelda üle. See, Muidugi, paneb kunstlikku piiri kokku mitu hankijat. See ka sundida mind rakendada trimmi() massiivi meetodiga, sest ma vihkan idee tagasi tagasi 100 nullväärtusega hankijate. InfoPath ei hooli, kuid see nagged mind. (Uuesti, See oli lihtsam kui InfoPath όle ArrayLists).
  • Rakendatud on GetSpecificVendorByName() Samuti funktsioon, mis võib olla õpetlik.

Kood:

kasutades Süsteemi;
kasutades System.Web mitu;
kasutades System.Web.Services;
kasutades System.Web.Services.Protocols;
kasutades Microsoft.SharePoint;
kasutades System.Configuration;

/// <Kokkuvõte>
///
Hankija teenus: Pakub hankija seotud teenused, mis täna tarbib InfoPathi kliendiga vormi.
///
/// Ajalugu:
/// ——–
/// 07/24/07: Esialgse kodeerimine, Paul J. Gavin Conchango.
///
/// </Kokkuvõte>
[Veebiteenuse(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
avalik klass VendorService : System.Web.Services.Veebiteenuse
{

/// <Kokkuvõte>
/// Esindab hankija poolt MSUSA kohandatud SharePointi loendist.
/// </Kokkuvõte>
avalik klass Hankija
{
avalik Hankija() { }

avalik Hankija(SPItem initItem)
{
Kui (! (initItem["Hankija nimi"] == null)) VendorName = initItem["Hankija nimi"].ToString();
Kui (! (initItem["Aadress 1"] == null)) VendorAddress1 = initItem["Aadress 1"].ToString();
Kui (! (initItem["Aadress 2"] == null)) VendorAddress2 = initItem["Aadress 2"].ToString();
Kui (! (initItem["City"] == null)) VendorCity = initItem["City"].ToString();
Kui (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Kui (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Kui (! (initItem["Riik"] == null)) VendorState = initItem["Riik"].ToString();
Kui (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Kui (!(initItem["Faks"] == null)) VendorFax = initItem["Faks"].ToString();
Kui (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Via MOSS säilitada ainu-ID.
}

avalik int VendorItemId;
avalik stringi VendorName;
avalik stringi VendorAddress1;
avalik stringi VendorAddress2;
avalik stringi VendorCity;
avalik stringi VendorState;
avalik stringi VendorZip;
avalik stringi VendorPhone;
avalik stringi VendorType;
avalik stringi VendorSalesRepName;
avalik stringi VendorFax;
}

avalik VendorService () {

//Eemalda kommentaar rea kui kasutades loodud komponendid
//InitializeComponent();
}

erasektori Hankija[] GenerateTestVendors()
{
Hankija[] resultList;
resultList = Uus Hankija[100];

Hankija v;
v = Uus Hankija();
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 = Uus Hankija();

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 = Uus Hankija();
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;

edasi-tagasi resultList;

}

[WebMethod]
avalik Hankija GetSpecificVendorById(int vendorId)
{
stringi SpVendorSiteName; // Tegelik MOSS veebilehekülg, mis majutab kohandatud loendi nimi.
stringi SpVendorListName; // Tegelik MOSS loend, mis sisaldab müüjate nimi.

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

kasutades (SPSite'i Site = Uus SPSite'i(SpVendorSiteName))
{

kasutades (SPWebi Web = site. OpenWeb())
{

SPList currentList = web. Nimekirjad[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

edasi-tagasi Uus Hankija(specificItem);

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

}

[WebMethod]
// Eeldab, et müüja nimi on ainulaadne, vaatenurgast
avalik Hankija GetSpecificVendorByVendorName(stringi tuleb)
{
stringi SpVendorSiteName; // Tegelik MOSS veebilehekülg, mis majutab kohandatud loendi nimi.
stringi SpVendorListName; // Tegelik MOSS loend, mis sisaldab müüjate nimi.

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

kasutades (SPSite'i Site = Uus SPSite'i(SpVendorSiteName))
{
kasutades (SPWebi Web = site. OpenWeb())
{

SPList currentList = web. Nimekirjad[SpVendorListName];

foreach (SPItem vendorItem aastal currentList.Items)
{
Kui (vendorItem["Hankija nimi"] == null) jätkata;

Kui (vendorItem["Hankija nimi"].ToString().Võrdub(tuleb))
edasi-tagasi Uus Hankija(vendorItem);
}

Hankija v = Uus Hankija();
v.VendorPhone = "ei leitud: " + tuleb;

edasi-tagasi v;

edasi-tagasi null;

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

} // meetod

[WebMethod]
avalik Hankija[] GetVendorsOfType (stringi filterType)
{

stringi SpVendorSiteName; // Nime tegelik MOSS veebilehekülg, mis majutab t
He hankija kohandatud loend.
stringi SpVendorListName; // Tegelik MOSS loend, mis sisaldab müüjate nimi.

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

Hankija[] resultList;
int vendorIndex = 0;
resultList = Uus Hankija[1000];

// Lähtesta loend koos vaikesõnumiga sõbralik.
Hankija v = Uus Hankija();
v.VendorName = "Valige hankija tüüpi selle loendi asustamiseks.";
resultList[0] = v;

// Teisenda filter väiketäheliseks lihtsam hiljem string võrdlus.
filterType = filterType.ToLower();

// Kui filtritüüpi edasi on "test", mõned lihtsad andmete loomiseks.
#piirkond Filtreerida type = "testi"
Kui (filterType. võrdub("katse"))
edasi-tagasi GenerateTestVendors();
#endregion

Kui (True)
{
kasutades (SPSite'i Site = Uus SPSite'i(SpVendorSiteName))
{
kasutades (SPWebi Web = site. OpenWeb())
{

v = null;

SPList currentList = web. Nimekirjad[SpVendorListName];

// Itereerima läbi kõigi kaupade hankijate loend.
foreach (SPItem vendorItem aastal currentList.Items)
{

stringi lowerVendorType;

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

Kui (lowerVendorType. võrdub(filterType))
{
resultList[vendorIndex ] = Uus Hankija(vendorItem);
}
} // iterating läbi kõigi hankijate loendis


edasi-tagasi TrimVendorArray(vendorIndex, resultList);
// tagasi resultList;

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

} // kui tõene

edasi-tagasi null;
}

erasektori Hankija[] TrimVendorArray(int newsize, Hankija[] originalVendorArray)
{
Hankija[] trimmedArray;

Kui (newsize == 0) newsize = 1;
trimmedArray = Uus Hankija[newsize];

int currentCounter = 0;

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

edasi-tagasi trimmedArray;

}
}

MOSS: Tähelepanekuid InfoPathi silumine

InfoPathi vormi server veateated on eksitav.

InfoPathi vormi väljatöötamise käigus, Ma postitamiseks MOSS serveri ja vormi. Vormi hakkaks laadida ja seejärel luua eksitav viga sõnumi juhtides mind Windowsi sündmustelogist. Tegelikult, ilma sõnumita kirjutati Windowsi sündmustelogi. Pigem, sõnum saadeti MOSS ascii diagnostikalogi. Saate jälgida mis maha kesksete talituste haldamise kaudu.

Sa pead olema kiire oma jalgu. MOSS meeldib kirjutada log faili, sageli ja verbosely. See saab trimmida, kuid vaikimisi Logi kirjutamise käitumine on "kõike võimalikult kiiresti".

MOSS: Kohandatud loendi värskendamine

Seal on palju häid näiteid ajakohastamine kohandatud loendite kaudu SDK. Siin on veel üks.

Äriprobleemi: InfoPathi vorm on mõeldud võimaldab kasutajatel sisestada online osta ostutellimused. PO nõudelehe numbrid peaksid olema traditsiooniline järjestus põhineb täisarvulised väärtused ja arvutatakse automaatselt.

Majandustarkvaraga: Looge kohandatud MOSS loend sisaldab kahte veergu: "ControlField" ja "ControlValue". Väärtuse veerg sisaldab järgmise ostu ostutellimuse kood. Pange tähele, et liiginimi "ülevaade" nimetamistava nähakse ette tulevasi kontrolli väljad, mida võib kasutada vastavalt vajadusele.

Tehniline lahendus: Luua InfoPathi kliendi juurde veebiteenusele. Veebiteenus tagastab tagasi Järgmise ostu ostutellimuse kood ja värskendab loendis väärtus.

Õppetunnid:

  • See veebiteenus lisamisel andmeallikana InfoPathi vorm, Olen pidanud vajalikuks teisendamine on udc ja talletada selle andmeühendusteegi.
  • Olen ka leidsin selle domeenidevahelist skriptimise kaudu kesksete talituste haldamise võimaldamiseks // rakenduse haldamine // serveri konfiguratsiooni.
  • Esimest korda vormi proovis pääseda juurde veebiteenusele, See võtab aega ja mõnikord, See oleks aja maha. Ma fiddled seadetega serveri konfiguratsiooni ajalõpu sätteid laiendada ja see tundus, et aidata.

Kood:

kasutades Süsteemi;
kasutades System.Web mitu;
kasutades System.Web.Services;
kasutades System.Web.Services.Protocols;
kasutades Microsoft.SharePoint;
kasutades System.Configuration;

[Veebiteenuse(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
avalik klass PoService : System.Web.Services.Veebiteenuse
{
avalik PoService () {

//Eemalda kommentaar rea kui kasutades loodud komponendid
//InitializeComponent();
}

/// <Kokkuvõte>
/// Saada järgmise PO number SharePointi loendist po arv kontroll.
/// Juurdekasvu PO number selles nimekirjas.
/// </Kokkuvõte>
/// <Tagastab></Tagastab>
[WebMethod]
avalik stringi GetNextPoNumber()
{
stringi SpPoControlSiteName; // Nime tegelik MOSS veebilehekülg, mis majutab PO Control list.
stringi SpPoControlListName; // Tegelik MOSS loendi Po juhtelementi sisaldavat nime.

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

stringi nextPoReqNumber = "xyzzy";

kasutades (SPSite'i Site = Uus SPSite'i(SpPoControlSiteName))
{
kasutades (SPWebi Web = site. OpenWeb())
{

SPList currentList = web. Nimekirjad[SpPoControlListName];

foreach (SPItem controlItem aastal currentList.Items)
{

Kui (((stringi)controlItem["ControlField"]).Võrdub("NextPoNumber"))
{
nextPoReqNumber = (stringi)controlItem["ControlValue"];

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

int_nextPoReqNumber ;

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

} // Asukoha kindlaksmääramine, lugemine ja PO number loendi värskendamine.


} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

edasi-tagasi nextPoReqNumber;

}
}