MOSS / InfoPath Forms Server (InfoPath 2007) avattavasta luettelosta suorituskyky

Lisää luokka: InfoPath

Yhteenveto: InfoPath 2007 MOSS-palvelimen käyttöön lomakkeen sisältää mukautetun MOSS-luetteloon sidottua toimittajien avattavasta. Kun valitset Toimittaja, sääntöjen määrittäminen kenttien arvot kourallinen tekstikentät, kuten myyjä nimi, osoite, Kaupunki, valtio, zip- ja puhelin. Suorituskyky on hirvittävä. Me huomaamme, että suorituskyky huononee (luettavaksi jΣrjestyksessΣ) Lisää kenttien päivitämme tällä tavoin. Eli, Jos olemme juuri päivittää myyjä-nimi, se kestää [x] aika. Jos päivitämme myyjä, osoite1, Osoite2, Kaupunki, valtio, zip, se kestää 10 kertaa pidempään.

Ratkaisu: Kirjoita web-palveluun (mallikoodia löydät Täällä) jotka on välitetty nimissä toimittaja ja se palauttaa takaisin toimittajan tiedot. Sitten, Määritä kentät tällä tavalla. Vaikka tämä vaikuttaa liian hidas, ei ollut discernable eroa suorituskyvyn, kun olemme määritetty 1 kentän funktiona 8 kentät. Tallennusvälineinä, käyttäjät saavat jäähdytetään "yhteyttä palvelimeen" Cylon vaikutus odottaessaan kutsua ja kuluttaa palvelun lomakkeen tulokset.

MOSS: Poikkeus. (HRESULT poikkeus: 0x 80020009 (DISP_E_EXCEPTION))

PÄIVITYS: Emme koskaan päättänyt perussyy ongelman ja se koskaan pinta jälleen.

Huomaamme täytäntöönpanon edistyminen asema aikana että yhtäkkiä, kaksi käyttäjät eivät voi käyttää sivustokokoelman. Nämä tilit voi tarkistaa sivuston tärkeimmät, mutta kun yrität käyttää tietyn sivustokokoelman, he kohtuullinen panna ilmeetön irtoseinä. Virheitä ei näy, valkoinen tyhjä sivu.

Kirjaudu sisään sivustokokoelman järjestelmänvalvoja ja yrittää lisätä yksi niistä Siteadmin ja tällä kertaa, Kun painat "OK", Tämä sanoma:

Poikkeus. (HRESULT poikkeus: 0x 80020009 (DISP_E_EXCEPTION))

Vietimme jonkin aikaa tutkia tätä ja valitettavasti, ei keksiä mitään hyötyä. Tarkasteltava oli joitakin viestejä, mutta se oli vaikea tarkalleen korreloivan asiaa.

Lopulta, sivustokokoelman poistamista ja luodaan uudelleen ja että ratkaisimme sen.

Jos voin selvittää, mikä aiheutti tämän tulevaisuudessa, I päivittää tämän postitse.

MOSS: Läpikäyminen mukautettuja luetteloita ja InfoPath suodatetun tiedon palauttaminen

Business skenaario:

Tarjoavat tapa, jonka avulla käyttäjät voivat antaa tarkkoja ostoehdotuksia nopeasti.

Liiketoimintaan liittyvästä ongelmasta:

Asiakas toimii useita satoja myyjien.

Myyjät ovat "tyyppi" erityisiä. Tämä tarkoittaa sitä, että toimittaja myy atk-laitteet (virrankatkaisu. Dell) tai toimistotarvikkeet (virrankatkaisu. Staples).

Miten annamme häntäpää käyttäjä joka luo Ostotilauksen pakkolunastuksia Valitse kelvollinen toimittaja?

Yritysratkaisujen:

Erottaa toimittajien järjestelmän kautta "tyyppi".

Käyttäjät voivat valita "tyyppi" tuotteen ja anna suodatettavien sopiva toimittajat.

Tekninen ratkaisu:

InfoPath-lomake on suunniteltu avulla käyttäjät voivat syöttää verkossa ostoehdotukset.

InfoPath valinta luettelot hallita toimittajan valinta. Ensimmäinen, käyttäjä valitsee "oston tyyppi". Tämä rajoittaa toisen valintaluettelo sisältää vain toimittajat, jotka myyvät Ostotilaustyyppi. Tämä on klassinen CSS alentaa-heittää.

Toimittajien tallennetaan MOSS mukautetun luettelon mukautettuja sarakkeita toimittajan määritteet nimi, osoite ja erityisesti "tyyppi".

Toteuttaa web-palveluun, InfoPath-asiakkaan kuluttaa että iteroidaan mukautetun toimittajien luettelo, Palaa vain toimittajat vastaavat mukana "tyyppi".

Vedota InfoPath-lomakkeen web-palveluun.

Kokemukset:

  • Ensimmäinen, tarpeen tämän reitin. Olisin halunnut tehdä suodatus täysin InfoPathissa ja luo web palvelu toiminnot täällä. Kuitenkin, Lomakkeet-palvelin ei ilmoita suodatus tarvittavien voimavarojen. Voimme yleensä päälle "tyyppi" valintaluettelossa tavallaan uudelleen Avaa toimittajan kysely-lomakkeessa, mutta emme saa sitä toimimaan kunnolla. Siksi, se oli tarpeen toteuttaa web-palveluun.
  • Tämä on klassinen "CSS valintaluettelosta" ongelma InfoPath muodostaa palvelimen maailmassa ja on olemassa useita hyviä esimerkkejä siellä, että selittää miten ratkaista tämän.
  • Toimittajan luettelon sarake on tyhjä arvo ei palauta tyhjä merkkijono, kun näin: initItem["Toimittajan nimi"]. Sen sijaan, palauttaa null-arvon.

Jotkin muut huomautukset:

  • Palauttaa matriisin[] myyjät koska minulla oli vaikeuksia palata ArrayList. InfoPath valitti ja minulla ei ollut aikaa tai haluja tapella siitä. Tämä, Tietysti, keinotekoinen raja asetetaan toimittajien lukumäärä. Se pakotti minut toteuttaa leikata() array-menetelmä koska vihaan ajatuksesta palata takaisin 100: n null toimittajat. InfoPath ei välitä, mutta se nagged minua. (Uudelleen, Tämä oli helpompaa kuin InfoPath taistelevat ArrayLists).
  • Täytäntöön GetSpecificVendorByName() toimii hyvin, joka voi olla opettavainen.

Koodi:

käyttäminen Järjestelmän;
käyttäminen System.Web;
käyttäminen System.Web.Services;
käyttäminen System.Web.Services.Protocols;
käyttäminen Microsoft.SharePoint;
käyttäminen System.Configuration;

/// <Yhteenveto>
///
Myyntipalvelun: Sisältää toimittajan liittyvät palvelut, jotka nykyään ovat kuluttamaan infopath-asiakasohjelma.
///
/// Historia:
/// ——–
/// 07/24/07: Ensimmäinen koodaus, Paul J. Gavin Conchango.
///
/// </Yhteenveto>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
yleiset luokan VendorService : System.Web.Services.WebService
{

/// <Yhteenveto>
/// Vastaa toimittajan mukautettu sharepoint-luettelosta ylläpitämä MSUSA.
/// </Yhteenveto>
yleiset luokan Toimittajan
{
yleiset Toimittajan() { }

yleiset Toimittajan(SPItem initItem)
{
Jos (! (initItem["Toimittajan nimi"] == Null)) Toimittajan_nimi = initItem["Toimittajan nimi"].Ominaisuuden ToString();
Jos (! (initItem["Osoite 1"] == Null)) VendorAddress1 = initItem["Osoite 1"].Ominaisuuden ToString();
Jos (! (initItem["Osoite 2"] == Null)) VendorAddress2 = initItem["Osoite 2"].Ominaisuuden ToString();
Jos (! (initItem["City"] == Null)) VendorCity = initItem["City"].Ominaisuuden ToString();
Jos (! (initItem["VendorPhone"] == Null)) VendorPhone = initItem["VendorPhone"].Ominaisuuden ToString();
Jos (! (initItem["PurchaseType"] == Null)) VendorType = initItem["PurchaseType"].Ominaisuuden ToString();
Jos (! (initItem["Valtio"] == Null)) VendorState = initItem["Valtio"].Ominaisuuden ToString();
Jos (! (initItem["Zip"] == Null)) VendorZip = initItem["Zip"].Ominaisuuden ToString();
Jos (!(initItem["Faksi"] == Null)) VendorFax = initItem["Faksi"].Ominaisuuden ToString();
Jos (!(initItem["SalesRepName"] == Null)) VendorSalesRepName = initItem["SalesRepName"].Ominaisuuden ToString();

VendorItemId = initItem.ID; // Yksilöllinen tunnus säilytetään kautta MOSS.
}

yleiset int VendorItemId;
yleiset merkkijono Toimittajan_nimi;
yleiset merkkijono VendorAddress1;
yleiset merkkijono VendorAddress2;
yleiset merkkijono VendorCity;
yleiset merkkijono VendorState;
yleiset merkkijono VendorZip;
yleiset merkkijono VendorPhone;
yleiset merkkijono VendorType;
yleiset merkkijono VendorSalesRepName;
yleiset merkkijono VendorFax;
}

yleiset VendorService () {

//Kommentti, seuraava rivi, jos suunnitellut komponentit
//InitializeComponent();
}

Yksityinen Toimittajan[] GenerateTestVendors()
{
Toimittajan[] resultList;
resultList = Uusi Toimittajan[100];

Toimittajan v;
v = Uusi Toimittajan();
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 = Uusi Toimittajan();

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 = Uusi Toimittajan();
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;

paluu resultList;

}

[WebMethod]
yleiset Toimittajan GetSpecificVendorById(int soveltamista vendorId)
{
merkkijono SpVendorSiteName; // Todellinen MOSS-sivuston, joka isännöi toimittajan mukautetun luettelon nimi.
merkkijono SpVendorListName; // Nimi että todellinen MOSS luettelo myyjät.

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

käyttäminen (SPSite sivusto = Uusi SPSite(SpVendorSiteName))
{

käyttäminen (SPWeb Web = sivusto. OpenWeb())
{

SPList currentList = web. Luettelot[SpVendorListName];

SPItem specificItem = currentList.Items[soveltamista vendorId];

paluu Uusi Toimittajan(specificItem);

} // käyttämällä spweb web = site.openweb()
} // spsite-sivuston = uusi spsite("http://localhost/mizuho")

}

[WebMethod]
// Oletetaan, että toimittajan nimi on ainutlaatuinen, liiketoiminnan näkökulmasta
yleiset Toimittajan GetSpecificVendorByVendorName(merkkijono olla)
{
merkkijono SpVendorSiteName; // Todellinen MOSS-sivuston, joka isännöi toimittajan mukautetun luettelon nimi.
merkkijono SpVendorListName; // Nimi että todellinen MOSS luettelo myyjät.

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

käyttäminen (SPSite sivusto = Uusi SPSite(SpVendorSiteName))
{
käyttäminen (SPWeb Web = sivusto. OpenWeb())
{

SPList currentList = web. Luettelot[SpVendorListName];

foreach (SPItem vendorItem Tässä currentList.Items)
{
Jos (vendorItem["Toimittajan nimi"] == Null) Jatka;

Jos (vendorItem["Toimittajan nimi"].Ominaisuuden ToString().Vastaa(olla))
paluu Uusi Toimittajan(vendorItem);
}

Toimittajan v = Uusi Toimittajan();
v.VendorPhone = "ei löydy: " + olla;

paluu v;

paluu Null;

} // käyttämällä spweb web = site.openweb()
} // spsite-sivuston = uusi spsite("http://localhost/mizuho")

} // menetelmä

[WebMethod]
yleiset Toimittajan[] GetVendorsOfType (merkkijono kohteen FilterType-arvoa)
{

merkkijono SpVendorSiteName; // Todellinen MOSS-sivuston, joka isännöi t nimi
Hän toimittajan mukautettu luettelo.
merkkijono SpVendorListName; // Nimi että todellinen MOSS luettelo myyjät.

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

Toimittajan[] resultList;
int vendorIndex = 0;
resultList = Uusi Toimittajan[1000];

// Alustaa luettelon oletus ystävällisen viestin.
Toimittajan v = Uusi Toimittajan();
v.VendorName = "Kirjoita toimittajan asuttamaan tämän luettelon.";
resultList[0] = v;

// Suodatin muuntaa merkkijonon vertailu helpottuu myöhemmin isoja.
kohteen FilterType-arvoa = filterType.ToLower();

// Jos suodattimen tyyppi on "test", Luo yksinkertaisia tietoja.
#alueen Suodattimen tyyppi = "test"
Jos (Yhtä kohteen FilterType-arvoa.("test"))
paluu GenerateTestVendors();
#endregion

Jos (tosi)
{
käyttäminen (SPSite sivusto = Uusi SPSite(SpVendorSiteName))
{
käyttäminen (SPWeb Web = sivusto. OpenWeb())
{

v = Null;

SPList currentList = web. Luettelot[SpVendorListName];

// Avaimettoman toimittajan luettelon kohteet.
foreach (SPItem vendorItem Tässä currentList.Items)
{

merkkijono lowerVendorType;

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

Jos (sama kuin lowerVendorType.(kohteen FilterType-arvoa))
{
resultList[vendorIndex ] = Uusi Toimittajan(vendorItem);
}
} // iteroimalla läpi kaikkien toimittajien luettelosta


paluu TrimVendorArray(vendorIndex, resultList);
// Paluu resultList;

} // käyttämällä spweb web = site.openweb()
} // spsite-sivuston = uusi spsite("http://localhost/mizuho")

} // Jos arvo on tosi

paluu Null;
}

Yksityinen Toimittajan[] TrimVendorArray(int asua kuulumiset, Toimittajan[] originalVendorArray)
{
Toimittajan[] trimmedArray;

Jos (asua kuulumiset == 0) asua kuulumiset = 1;
trimmedArray = Uusi Toimittajan[asua kuulumiset];

int currentCounter = 0;

varten (currentCounter = 0; currentCounter < asua kuulumiset; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

paluu trimmedArray;

}
}

MOSS: Huomioita InfoPath virheenkorjaus

InfoPath lomake Serverin virheilmoitusten ovat harhaanjohtavia.

InfoPath-lomakkeen kehityksen aikana, Post se MOSS palvelimeen ja käyttää lomaketta. Lomakkeen alkaa ladata ja luo harhaanjohtavia virhesanoma, joka muistuttaa minua Windowsin tapahtumalokissa. Itse asiassa, ei viesti on kirjoitettu Windowsin tapahtumalokiin. Pikemminkin, viesti lähetettiin MOSS ascii diagnostinen log. Voit jäljittää että keskitetyn hallinnan kautta.

Sinun täytyy olla nopea jalat. MOSS haluaa kirjoittaa lokitiedostoon, usein ja monisanaisen. Tämä on leikattu mutta kirjoittaminen ongelman oletuslokia on "kaikki mahdollisimman nopeasti".

MOSS: Mukautetun luettelon ajantasaistamiseksi

On olemassa monia hyviä esimerkkejä päivitetään Mukautettujen luetteloiden kautta SDK. Tässä on jälleen.

Liiketoimintaan liittyvästä ongelmasta: InfoPath-lomake on suunniteltu avulla käyttäjät voivat syöttää verkossa ostoehdotukset. PO ostoehdotuksen numerot olisi perinteinen järjestys perustuu kokonaislukuarvoja ja lasketaan automaattisesti.

Yritysratkaisujen: Luoda MOSS luettelon, joka sisältää kaksi saraketta: "ControlField" ja "ControlValue". Arvo-sarakkeessa on seuraava hankinta tilausnumero. Huomaa, että yleinen "valvonta" nimeämiskäytännön säädetään tulevaisuuden aloilla, joita voidaan käyttää tarvittaessa.

Tekninen ratkaisu: Luo web-palveluun, InfoPath asiakkaan käyttämiin. Web-palvelu palauttaa seuraavan ostotilauksen tilausnumero ja päivittää luettelon.

Kokemukset:

  • Kun lisäät tämän web-palvelun tietolähteenä InfoPath-lomake, Löysin sen muuntaminen udc ja säilyttää se ardor tietoyhteyskirjaston.
  • Olen myös löytänyt tarvittavat toimialueiden scripting keskitetyn hallinnan kautta // sovellusten hallinta // palvelimen asetusten.
  • Kun lomakkeen yrittänyt saada web-palveluun, Se vie aikaa ja, aikakatkaisu tapahtuu. Olen temppuja asetukset palvelimen asetusten laajentaa aikakatkaisuasetukset ja jotka näyttivät auttaa.

Koodi:

käyttäminen Järjestelmän;
käyttäminen System.Web;
käyttäminen System.Web.Services;
käyttäminen System.Web.Services.Protocols;
käyttäminen Microsoft.SharePoint;
käyttäminen System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
yleiset luokan PoService : System.Web.Services.WebService
{
yleiset PoService () {

//Kommentti, seuraava rivi, jos suunnitellut komponentit
//InitializeComponent();
}

/// <Yhteenveto>
/// Saada seuraavan PO useita sharepoint-luettelosta po numero valvonta.
/// Lisäys luetteloon PO-numeron.
/// </Yhteenveto>
/// <palauttaa></palauttaa>
[WebMethod]
yleiset merkkijono GetNextPoNumber()
{
merkkijono SpPoControlSiteName; // Todellinen MOSS-sivuston, joka isännöi Ostotilauksen hallinta-luettelon nimi.
merkkijono SpPoControlListName; // Nimen varsinainen MOSS Po-komponentti.

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

merkkijono nextPoReqNumber = "xyzzy";

käyttäminen (SPSite sivusto = Uusi SPSite(SpPoControlSiteName))
{
käyttäminen (SPWeb Web = sivusto. OpenWeb())
{

SPList currentList = web. Luettelot[SpPoControlListName];

foreach (SPItem controlItem Tässä currentList.Items)
{

Jos (((merkkijono)controlItem["ControlField"]).Vastaa("NextPoNumber"))
{
nextPoReqNumber = (merkkijono)controlItem["ControlValue"];

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

int_nextPoReqNumber ;

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

} // Sijainti, lukeminen ja päivittäminen luettelon PO-numeroa.


} // käyttämällä spweb web = site.openweb()
} // spsite-sivuston = uusi spsite("http://localhost/mizuho")

paluu nextPoReqNumber;

}
}