MOSS / InfoPath Ffurflenni Gweinydd (InfoPath 2007) perfformiad gwymplen

Categori ychwanegol: InfoPath

Crynodeb: Mae InfoPath 2007 ffurfio defnyddio i weinydd MOSS darparu rhestr a ollyngir i lawr o werthwyr glymu i restr MOSS arfer. Ar ôl dewis gwerthwr, rheolau aseinio gwerthoedd cae i lond llaw o feysydd testun fel gwerthiant enw cynrychiolydd, cyfeiriad, dinas, cyflwr, zip a ffôn. Mae perfformiad yn ofnadwy. Rydym yn sylwi bod perfformiad yn gwaethygu (mewn modd nad yw'n llinol) ar gyfer pob cae ychwanegol rydym yn diweddaru'r ffordd hon. H.y., Os yn unig yn diweddaru enw cynrychiolydd gwerthu, Mae'n cymryd [x] faint o amser. Os ydym yn diweddaru'r cynrychiolydd gwerthu, address1, address2, dinas, cyflwr, Zip, Mae'n cymryd 10 gwaith yn hwy.

Ateb: Ysgrifennu gwasanaeth gwe (Gellir dod o hyd i cod sampl yma) y caiff ei basio enw gwerthwr a bydd yn dychwelyd yn ôl manylion y gwerthwr. Yna, neilltuo caeau y ffordd hon. Er bod hyn yn ymddangos yn rhy araf, Nid oedd unrhyw wahaniaeth amlwg mewn perfformiad pan ydym yn neilltuo 1 maes erbyn 8 meysydd. Yn fonws ychwanegol, Mae defnyddwyr yn cael oer "cysylltu â gweinydd" Cylon canlyniadau effaith tra maent yn aros am y ffurflen i alw a ddefnyddiwn y gwasanaeth.

MOSS: Eithriad digwydd. (Eithriad rhag HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Y NEWYDDION DIWEDDARAF: Rydym byth yn benderfynol wrth wraidd y broblem hon ac nid yw byth yn wyneb eto.

Rydym yn sylwi wrth weithredu'r safle datblygu yn sydyn, dau ddefnyddiwr yn gallu cael mynediad i gasgliad safle. Gall y rhai cyfrifon dilysu â'r prif safle, ond wrth geisio cael mynediad i gasgliad safle penodol, maent ond yn cael sgrin wag. Dim arddangos gwallau, dim ond dudalen wag gwyn.

Rydym yn logio i mewn fel casgliad safle gweinyddol ac yn ceisio ychwanegu un o'r rhai defnyddwyr fel gweinyddol safle a'r tro hwn, ar bwyso "OK", rydym yn cael y neges hon:

Eithriad digwydd. (Eithriad rhag HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Rydym yn treulio peth amser yn ymchwilio ac yn anffodus hwn, nid oedd yn dod o hyd i unrhyw beth defnyddiol. Roedd rhai negeseuon yn y log diagnostig, ond yr oedd yn anodd eu cyfateb yn union â'r mater hwn.

Yn y diwedd, rydym yn dileu'r casgliad safle ac ail-greu a'i bod ei datrys.

Os byddaf yn chyfrif i maes beth achosodd hyn yn y dyfodol, 'N annhymerus' diweddaru y swydd hon.

MOSS: Ailadrodd drwy restrau arfer a dychwelyd data hidlo i InfoPath

Senario Busnes:

Darparu dull sy'n galluogi defnyddwyr i fynd i mewn archebion prynu cywir yn gyflym.

Problem Busnes:

Mae'r cleient yn gwneud busnes gyda rhai cannoedd o gwerthwyr.

Gwerthwyr yn cael eu "math" penodol. Mae hyn yn golygu y bydd gwerthwr yn gwerthu offer cyfrifiadurol (e.e.. Dell) neu gyflenwadau swyddfa (e.e.. Staples).

Sut allwn ni hwyluso defnyddwyr sydd wedi creu dethol archebion prynu gwerthwr ddilys?

Ateb Busnes:

Gwahaniaethu gwerthwyr yn y system drwy "math".

Galluogi defnyddwyr i ddewis "math" cynnyrch ac yna darparu set wedi'u hidlo o werthwyr priodol.

Ateb technegol:

Lluniwyd ffurflen InfoPath bod archebion prynu yn galluogi defnyddwyr i fynd ar-lein i.

Mae dwy restr ddethol InfoPath rheoli dethol gwerthwr. Cyntaf, Mae'r defnyddiwr yn dewis "math prynu". Mae hyn yn cyfyngu ar restr ddethol ail i gynnwys dim ond gwerthwyr sy'n gwerthu ar gyfer y math o brynu. Dyma estynnol clasurol i'r rhaeadru.

Cedwir gwerthwyr yn rhestr bersonol MOSS gyda cholofnau personol ar gyfer nodweddion gwerthwr megis enw, cyfeiriad a enwedig "math".

Gweithredu gwasanaeth ar y we ar gyfer cleient InfoPath i fwyta sy'n ailadrodd drwy'r rhestr gwerthwr arfer, dychwelyd dim ond gwerthwyr paru a gyflenwir "math".

Weithredu'r gwasanaeth ar y we drwy gyfrwng y ffurflen InfoPath.

Gwersi a Ddysgwyd:

  • Cyntaf, mae'n ymddangos yn angenrheidiol i fynd y llwybr hwn. Byddwn wedi bod yn well i wneud y hidlo gyfan gwbl o fewn InfoPath a pheidio â chreu unrhyw swyddogaeth gwasanaeth ar y we yma. Fodd bynnag,, Nid yw ffurflenni gweinydd yn darparu'r gallu hidlo gofynnol. Gallwn roi rheol ar y "math" rhestr dewis yn y ffurflen er mwyn datrys o ail-agor y gwerthwr ymholiad, ond ni allwn ei gael i weithio'n iawn. Felly,, roedd angen i weithredu'r gwasanaeth ar y we.
  • Mae hon yn glasur "rhaeadru dethol rhestr" problem yn y ffurflenni InfoPath gweinydd byd ac mae llawer o enghreifftiau da allan yna sy'n egluro sut i ddatrys y.
  • Nid yw gwerth gwag ar gyfer colofn yn y rhestr gwerthwr yn dychwelyd llinyn gwag pan cyfeirio fel hyn: initItem["Gwerthwr enw"]. Yn lle hynny, mae'n dychwelyd yn null.

Rhai Nodiadau eraill:

  • Byddaf yn dychwelyd arae[] gwerthwyr oherwydd fy mod wedi cael rhywfaint o anhawster dychwelyd i ArrayList. Roedd InfoPath cwyno am y peth a doeddwn i ddim yn cael yr amser na'r awydd i ymladd drosto. Mae hyn yn, wrth gwrs, rhoi terfyn artiffisial ar gyfanswm nifer y gwerthwyr. Mae hefyd yn gorfodi i mi i weithredu trim() dull ar y casgliad oherwydd mae'n gas gennyf y syniad o ddychwelyd yn ôl 100 o'r gwerthwyr NWL. Nid InfoPath yn poeni, ond mae'n nagged arnaf. (Unwaith eto,, roedd hyn yn haws nag ymladd InfoPath dros ArrayLists).
  • Rwy'n gweithredu GetSpecificVendorByName() swyddogaeth yn ogystal, a allai fod yn addysgiadol.

Mae'r cod:

gan ddefnyddio System;
gan ddefnyddio System.Web;
gan ddefnyddio System.Web.Services;
gan ddefnyddio System.Web.Services.Protocols;
gan ddefnyddio Microsoft.SharePoint;
gan ddefnyddio System.Configuration;

/// <crynodeb>
///
Gwasanaeth gwerthwr: Darparu gwasanaethau Mae'r gwerthwr yn gysylltiedig â yfir heddiw gan ffurflen cleient infopath.
///
/// Hanes:
/// ——–
/// 07/24/07: Cychwynnol codio, Paul J. Gavin Conchango.
///
/// </crynodeb>
[Webservice(Bwlchenw = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
cyhoeddus dosbarth VendorService : System.Web.Services.Webservice
{

/// <crynodeb>
/// Cynrychioli gwerthwr o restr sharepoint personol a gynhelir gan MSUSA.
/// </crynodeb>
cyhoeddus dosbarth Gwerthwr
{
cyhoeddus Gwerthwr() { }

cyhoeddus Gwerthwr(Poeri initItem)
{
os (! (initItem["Gwerthwr enw"] == sero)) VendorName = initItem["Gwerthwr enw"].ToString();
os (! (initItem["Cyfeiriad 1"] == sero)) VendorAddress1 = initItem["Cyfeiriad 1"].ToString();
os (! (initItem["Yn ymdrin â 2"] == sero)) VendorAddress2 = initItem["Yn ymdrin â 2"].ToString();
os (! (initItem["Dinas"] == sero)) VendorCity = initItem["Dinas"].ToString();
os (! (initItem["VendorPhone"] == sero)) VendorPhone = initItem["VendorPhone"].ToString();
os (! (initItem["PurchaseType"] == sero)) VendorType = initItem["PurchaseType"].ToString();
os (! (initItem["State"] == sero)) VendorState = initItem["State"].ToString();
os (! (initItem["Zip"] == sero)) VendorZip = initItem["Zip"].ToString();
os (!(initItem["Ffacs"] == sero)) VendorFax = initItem["Ffacs"].ToString();
os (!(initItem["SalesRepName"] == sero)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // ID unigryw a gynhelir drwy MOSS.
}

cyhoeddus int VendorItemId;
cyhoeddus llinyn VendorName;
cyhoeddus llinyn VendorAddress1;
cyhoeddus llinyn VendorAddress2;
cyhoeddus llinyn VendorCity;
cyhoeddus llinyn VendorState;
cyhoeddus llinyn VendorZip;
cyhoeddus llinyn VendorPhone;
cyhoeddus llinyn VendorType;
cyhoeddus llinyn VendorSalesRepName;
cyhoeddus llinyn VendorFax;
}

cyhoeddus VendorService () {

//Uncomment Cynlluniodd y llinell ganlynol os ydych yn defnyddio cydrannau
//InitializeComponent();
}

preifat Gwerthwr[] GenerateTestVendors()
{
Gwerthwr[] resultList;
resultList = newydd Gwerthwr[100];

Gwerthwr v;
v = newydd Gwerthwr();
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 = newydd Gwerthwr();

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 = newydd Gwerthwr();
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;

dychwelyd resultList;

}

[WebMethod]
cyhoeddus Gwerthwr GetSpecificVendorById(int vendorId)
{
llinyn SpVendorSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r rhestr bersonol y gwerthwr.
llinyn SpVendorListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys gwerthwyr.

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

gan ddefnyddio (SPSite safle = newydd SPSite(SpVendorSiteName))
{

gan ddefnyddio (SPWeb we = safle. OpenWeb())
{

SPList currentList = we. Rhestrau[SpVendorListName];

Poeri specificItem = currentList.Items[vendorId];

dychwelyd newydd Gwerthwr(specificItem);

} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")

}

[WebMethod]
// Tybio bod enw'r gwerthwr yn unigryw, o safbwynt busnes
cyhoeddus Gwerthwr GetSpecificVendorByVendorName(llinyn vendorName)
{
llinyn SpVendorSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r rhestr bersonol y gwerthwr.
llinyn SpVendorListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys gwerthwyr.

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

gan ddefnyddio (SPSite safle = newydd SPSite(SpVendorSiteName))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{

SPList currentList = we. Rhestrau[SpVendorListName];

foreach (Poeri vendorItem yn currentList.Items)
{
os (vendorItem["Gwerthwr enw"] == sero) parhau;

os (vendorItem["Gwerthwr enw"].ToString().Equals(vendorName))
dychwelyd newydd Gwerthwr(vendorItem);
}

Gwerthwr v = newydd Gwerthwr();
v.VendorPhone = "nid dod o hyd: " + vendorName;

dychwelyd v;

dychwelyd sero;

} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")

} // dull

[WebMethod]
cyhoeddus Gwerthwr[] GetVendorsOfType (llinyn math hidlo)
{

llinyn SpVendorSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r t
rhestr bersonol gwerthwr au.
llinyn SpVendorListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys gwerthwyr.

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

Gwerthwr[] resultList;
int vendorIndex = 0;
resultList = newydd Gwerthwr[1000];

// Ymgychwyn y rhestr gyda neges gyfeillgar diofyn.
Gwerthwr v = newydd Gwerthwr();
v.VendorName = "Dewiswch math o gwerthwr i lenwi'r rhestr hon.";
resultList[0] = v;

// Troi'n yr Hidlydd achos is ar gyfer haws cymharu llinyn yn ddiweddarach.
filterType = filterType.ToLower();

// Os oedd y math hidlydd ei basio yn 'brofi', cynhyrchu rhai data syml.
#rhanbarth Hidlo math = 'brofi"
os (filterType.Equals('brofi"))
dychwelyd GenerateTestVendors();
#endregion

os (wir)
{
gan ddefnyddio (SPSite safle = newydd SPSite(SpVendorSiteName))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{

v = sero;

SPList currentList = we. Rhestrau[SpVendorListName];

// Ailadrodd drwy holl eitemau yn y rhestr gwerthwr.
foreach (Poeri vendorItem yn currentList.Items)
{

llinyn lowerVendorType;

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

os (lowerVendorType.Equals(math hidlo))
{
resultList[vendorIndex ] = newydd Gwerthwr(vendorItem);
}
} // buddiol drwy'r holl gwerthwyr yn y rhestr


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

} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")

} // Os yw'n wir

dychwelyd sero;
}

preifat Gwerthwr[] TrimVendorArray(int newsize, Gwerthwr[] originalVendorArray)
{
Gwerthwr[] trimmedArray;

os (newsize == 0) newsize = 1;
trimmedArray = newydd Gwerthwr[newsize];

int currentCounter = 0;

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

dychwelyd trimmedArray;

}
}

MOSS: Sylwadau ar debugging InfoPath

Ffurflen negeseuon gwall gweinydd InfoPath yn gamarweiniol.

Yn ystod datblygu ffurflen InfoPath, Byddwn yn ei phostio i weinydd MOSS a chael mynediad i'r ffurflen. Byddai'r ffurflen yn dechrau lwytho ac yna cynhyrchu pwyntio mi i'r log ffenestri neges gwall camarweiniol am fanylion. Yn wir,, Roedd unrhyw neges ysgrifenedig at y log digwyddiadau windows. Yn hytrach, Anfonwyd y neges at y log ddiagnostig MOSS ascii. Gallwch olrhain hynny i lawr drwy'r weinyddiaeth gwasanaethau canolog.

Rhaid ichi fod yn gyflym ar eich traed. Mae'r MWSOG yn hoffi ysgrifennu i'r ffeil log, yn aml, ac verbosely. Gall hyn fod yn tocio ond yn y log diofyn ysgrifennu ymddygiad "popeth cyn gynted ag y bo modd".

MOSS: Diweddaru rhestr arfer

Mae llawer o enghreifftiau da o ddiweddaru rhestrau arfer drwy'r SDK. Dyma arall eto.

Problem Busnes: Ffurflen InfoPath wedi'i gynllunio sy'n galluogi defnyddwyr i fynd i mewn archebion prynu ar-lein. Dylai'r rhifau Ymholiad PO fod yn werthoedd cyfanrif yn seiliedig ar ddilyniant traddodiadol a chyfrifo yn awtomatig.

Ateb Busnes: Creu rhestr MOSS arfer yn cynnwys dwy golofn: "ControlField" a "ControlValue". Mae y golofn gwerth cynnwys Rhif yr archeb brynu nesaf. Yn nodi bod y generig "rheoli" Mae'r confensiwn enwi yn darparu ar gyfer rheoli dyfodol meysydd y gellir eu defnyddio yn ôl yr angen.

Ateb technegol: Creu gwasanaeth gwe ar gael gan y cleient InfoPath. Mae gwasanaeth y we yn dychwelyd yn ôl Rhif yr archeb brynu nesaf ac yn diweddaru'r gwerth y rhestr.

Gwersi a Ddysgwyd:

  • Wrth ychwanegu gwasanaeth gwe hwn fel ffynhonnell data ffurflen InfoPath, Chael hi'n angenrheidiol i droi yn cyfeiriant a'i storio yn Llyfrgell cysylltiad data.
  • Hefyd cefais ei bod yn angenrheidiol er mwyn galluogi sgriptio parth traws drwy weinyddu gwasanaethau canolog // Rheoli cais // ffurfweddu gweinydd ffurflen.
  • Y tro cyntaf ar ffurf yn ceisio cael gafael ar y gwasanaeth gwe, Mae'n cymryd amser ac ar adegau, Byddai amser allan. Yr wyf ffidlan gyda lleoliadau ar ffurf ffurfweddiad gweinydd i ehangu'r gosodiadau goramser a oedd yn ymddangos i helpu.

Mae'r cod:

gan ddefnyddio System;
gan ddefnyddio System.Web;
gan ddefnyddio System.Web.Services;
gan ddefnyddio System.Web.Services.Protocols;
gan ddefnyddio Microsoft.SharePoint;
gan ddefnyddio System.Configuration;

[Webservice(Bwlchenw = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
cyhoeddus dosbarth PoService : System.Web.Services.Webservice
{
cyhoeddus PoService () {

//Uncomment Cynlluniodd y llinell ganlynol os ydych yn defnyddio cydrannau
//InitializeComponent();
}

/// <crynodeb>
/// Gael y Rhif y Llywydd nesaf o'r rhestr rheoli Rhif sharepoint y Llywydd.
/// Cynyddran y Llywydd nifer yn y rhestr honno.
/// </crynodeb>
/// <ffurflenni></ffurflenni>
[WebMethod]
cyhoeddus llinyn GetNextPoNumber()
{
llinyn SpPoControlSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r y rhestr rheoli y Llywydd.
llinyn SpPoControlListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys y rheolydd y Llywydd.

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

llinyn nextPoReqNumber = "xyzzy";

gan ddefnyddio (SPSite safle = newydd SPSite(SpPoControlSiteName))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{

SPList currentList = we. Rhestrau[SpPoControlListName];

foreach (Poeri controlItem yn currentList.Items)
{

os (((llinyn)controlItem["ControlField"]).Equals("NextPoNumber"))
{
nextPoReqNumber = (llinyn)controlItem["ControlValue"];

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

int_nextPoReqNumber ;

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

} // Lleoli, darllen a diweddaru nifer y Llywydd yn y rhestr.


} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")

dychwelyd nextPoReqNumber;

}
}