SŪNA / InfoPath Forms Server (InfoPath 2007) nolaižamajā sarakstā darbība

Papildu kategorijas: InfoPath

Kopsavilkums: InfoPath 2007 MOSS servera izvietot veidlapas nodrošina nolaižamo sarakstu kreditoru, kas saistīts ar pielāgotu sarakstu MOSS. Pēc kreditora atlases, noteikumiem piešķirt sauju teksta laukus, piemēram, pārdošanas rep vārdu lauka vērtības, adrese, pilsēta, valsts, ZIP un tālruņa. Veiktspēja ir briesmīgs. Mēs pamanām, ka darbība pasliktinās (nelineāru modē) katram papildu laukam šādā veidā mēs update. T.i., Ja mēs vienkārši atjaunināt pārdošanas rep nosaukumu, Tas aizņem [x] laiks. Ja mēs atjaunina pārdošanas rep, Address1, Address2, pilsēta, valsts, zip, Tas aizņem 10 reizes ilgāk.

Šķīdums: Rakstīt web pakalpojumu (parauga kods ir atrodams šeit) kas tiek nodota kreditora nosaukumu un tā atgriežas atpakaļ piegādātājam detaļas. Pēc tam, piešķirt laukus šādā veidā. Lai gan tas šķiet pārāk lēns, nebija jūtamas atšķirības sniegumu, kad mēs piešķirts 1 salīdzinot lauku 8 lauki. Kā pievienota prēmija, lietotājiem saņemt foršs "sazināšanās ar serveri" Cylon efektu, kamēr viņi gaida formu izsaukt un patērē pakalpojumu rezultātus.

SŪNA: Radās izņēmums. (Izņēmums no HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

ATJAUNINĀJUMS: Mēs nekad noteikt cēloni šo problēmu, un tā nekad virsmas atkal.

Mēs pamanām, īstenojot attīstības vietā tas pēkšņi, divi lietotāji nevar piekļūt vietņu kolekcijas. Šos kontus var autentificēt uz galveno vietu, bet, mēģinot piekļūt vietņu kolekcijai, viņi saņem tikai tukšs ekrāns. Parādīt kļūdas, tikai balto tukšu lappusi.

Mēs pieteikties kā vietņu kolekcijas administrators un mēģiniet pievienot vienu no šiem lietotājiem site admin un šoreiz, pēc nospiežot "OK", mēs šo ziņojumu:

Radās izņēmums. (Izņēmums no HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Mēs pavadīju kādu laiku, pētot šo un diemžēl, nav jānāk klajā ar kaut ko noderīgu. Diagnostikas žurnālā, kas bija daži ziņojumi, bet tas bija grūti tos tieši korelē ar šo jautājumu.

Beigās, vietņu kolekcijas dzēšanas un izveidota atkārtoti, un tas mums atrisināt.

Ja es izrēķināt, ko izraisīja tas nākotnē, I'll update šo amatu.

SŪNA: Atkārtojot ar pielāgotiem sarakstiem un atgriežas filtrētus datus, InfoPath

Biznesa scenāriju:

Metode, kas ļauj lietotājiem ātri ievadīt precīzu pirkuma pieprasījumu sniegt.

Biznesa problēmas:

Klients veic komercdarbību ar vairāki simti pārdevēji.

Pārdevēji ir "tips" īpašas. Tas nozīmē, ka pārdevējs pārdod datoru iekārtas (piem.. Dell) vai kancelejas preces (piem.. Skavas).

Kā mēs ļautu gala lietotājiem, kuri veido pirkuma pieprasījumus atlasiet derīgu piegādātāju?

Biznesa risinājumu:

Atšķirt kreditori sistēmā caur "tips".

Iespējot lietotājus atlasīt tipu"" produktu un pēc tam nodrošina filtrēto atbilstošajiem piegādātājiem.

Tehniskais risinājums:

Ir izstrādāta InfoPath veidlapa ļauj lietotājiem ievadīt tiešsaistes pirkuma pieprasījumus.

Divi InfoPath atlases sarakstus kontrolē piegādātāja izvēli. Pirmais, lietotājs atlasa "pirkšanas tips". Tas ierobežo otro izvēles sarakstu satur tikai pārdevēji, kas pārdod pirkšanas tipu. Tas ir klasisks kaskādes Nolaižamajā.

Kreditoriem tiek glabātas MOSS pielāgotu sarakstu ar pielāgotu kolonnu piegādātāja atribūtiem, piemēram, nosaukums, adresi un it īpaši "tips".

Ieviest web pakalpojums, InfoPath klientu patērēt, ka atkārtojas pa pasūtījuma piegādātāju sarakstu, atgriežas tikai kreditoriem, saskaņojot norādīto "tipa".

Lietot web pakalpojumu, izmantojot InfoPath veidlapas.

Gūtās mācības:

  • Pirmais, tas šķiet vajadzīgs, lai iet šo ceļu. Es vēlētos, lai veiktu filtrēšanu tikai programmā InfoPath un nevar izveidot jebkuru web pakalpojuma funkcionalitāti. Tomēr, veidlapu serveris nenodrošina nepieciešamo filtrēšanas iespējas. Mēs varam nodot uz kārtulu "tips" izvēles saraksta veidā kārtot vēlreiz atvērt kreditora vaicājumu, bet mēs nevaram iegūt darbu pareizi. Tādēļ, tas bija nepieciešams ieviest web pakalpojums.
  • Tas ir klasisks "kaskādes atlases sarakstā" problēmas InfoPath veidlapu servera pasaulē, un tur ir daudzi labi piemēri, kas tur, kas paskaidro, kā atrisināt šo.
  • Kreditoru saraksta kolonnā tukša vērtība nevar atgriezt tukšu virkni, ja norādes, kā šī: initItem["Pārdevēja nosaukums"]. Tā vietā, tiek atgriezta vērtība null.

Dažas citas piezīmes:

  • Es atgriezties masīvs[] pārdevēji, jo man bija dažas grūtības atgriezties ArrayList. InfoPath bija sūdzas par to, un man nav laika vai vēlēšanās cīnīties tai pāri. Tas, protams, mākslīgu ierobežojumu uzvelk kreditoru kopskaits. Tas arī bija likusi man īstenot apdares() masīva metodi, jo man riebjas doma par atgriešanos atpakaļ 100 nulle kreditoriem. InfoPath nav vienalga, bet tas nagged pie manis. (Atkal, tas bija vieglāk nekā cīnās InfoPath ArrayLists).
  • Man jāīsteno GetSpecificVendorByName() funkcijas, kā arī, kas var būt pamācošs.

Kods:

izmantojot Sistēma;
izmantojot System. Web;
izmantojot System.Web.Services;
izmantojot System.Web.Services.Protocols;
izmantojot Microsoft.SharePoint;
izmantojot System.Configuration;

/// <kopsavilkums>
///
Piegādātāja pakalpojumi: Nodrošina piegādātāju saistīto pakalpojumus, kas šobrīd patērē klients infopath veidlapu.
///
/// Vēsture:
/// ——–
/// 07/24/07: Sākotnējo kodēšana, Paul J. Gavin Conchango.
///
/// </kopsavilkums>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
valsts klase VendorService : System.Web.Services.WebService
{

/// <kopsavilkums>
/// Pārstāv kreditoru no pielāgotas sharepoint sarakstu uztur MSUSA.
/// </kopsavilkums>
valsts klase Kreditoru
{
valsts Kreditoru() { }

valsts Kreditoru(SPItem initItem)
{
Ja (! (initItem["Pārdevēja nosaukums"] == nulle)) VendorName = initItem["Pārdevēja nosaukums"].ToString();
Ja (! (initItem["Adrese 1"] == nulle)) VendorAddress1 = initItem["Adrese 1"].ToString();
Ja (! (initItem["Adrese 2"] == nulle)) VendorAddress2 = initItem["Adrese 2"].ToString();
Ja (! (initItem["Pilsēta"] == nulle)) VendorCity = initItem["Pilsēta"].ToString();
Ja (! (initItem["VendorPhone"] == nulle)) VendorPhone = initItem["VendorPhone"].ToString();
Ja (! (initItem["PurchaseType"] == nulle)) VendorType = initItem["PurchaseType"].ToString();
Ja (! (initItem["Valsts"] == nulle)) VendorState = initItem["Valsts"].ToString();
Ja (! (initItem["Zip"] == nulle)) VendorZip = initItem["Zip"].ToString();
Ja (!(initItem["Fakss"] == nulle)) VendorFax = initItem["Fakss"].ToString();
Ja (!(initItem["SalesRepName"] == nulle)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Unikālo ID, uzturēti caur MOSS.
}

valsts Int VendorItemId;
valsts virkne VendorName;
valsts virkne VendorAddress1;
valsts virkne VendorAddress2;
valsts virkne VendorCity;
valsts virkne VendorState;
valsts virkne VendorZip;
valsts virkne VendorPhone;
valsts virkne VendorType;
valsts virkne VendorSalesRepName;
valsts virkne VendorFax;
}

valsts VendorService () {

//Uncomment ja izmantojot sekojošu rindu izstrādātas sastāvdaļas
//InitializeComponent();
}

privāts Kreditoru[] GenerateTestVendors()
{
Kreditoru[] resultList;
resultList = jaunā Kreditoru[100];

Kreditoru v;
v = jaunā Kreditoru();
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 = jaunā Kreditoru();

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 = jaunā Kreditoru();
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;

atgriešanās resultList;

}

[Web metodi]
valsts Kreditoru GetSpecificVendorById(Int vendorId)
{
virkne SpVendorSiteName; // Nosaukums faktiskais MOSS vietnes, kas vieso kreditoru pielāgotu sarakstu.
virkne SpVendorListName; // Nosaukums faktiskais MOSS sarakstu, kurā ietilpst pārdevēji.

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

izmantojot (SPSite vieta = jaunā SPSite(SpVendorSiteName))
{

izmantojot (SPWeb Web vietas =. OpenWeb())
{

SPList currentList = interneta. Saraksti[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

atgriešanās jaunā Kreditoru(specificItem);

} // izmantojot spweb web = site.openweb()
} // izmantojot spsite site = jaunu spsite("http://localhost/Midzuho")

}

[Web metodi]
// Tiek pieņemts, ka kreditora nosaukums ir unikāls, no biznesa viedokļa
valsts Kreditoru GetSpecificVendorByVendorName(virkne būt)
{
virkne SpVendorSiteName; // Nosaukums faktiskais MOSS vietnes, kas vieso kreditoru pielāgotu sarakstu.
virkne SpVendorListName; // Nosaukums faktiskais MOSS sarakstu, kurā ietilpst pārdevēji.

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

izmantojot (SPSite vieta = jaunā SPSite(SpVendorSiteName))
{
izmantojot (SPWeb Web vietas =. OpenWeb())
{

SPList currentList = interneta. Saraksti[SpVendorListName];

foreach (SPItem vendorItem programmā currentList.Items)
{
Ja (vendorItem["Pārdevēja nosaukums"] == nulle) «««;

Ja (vendorItem["Pārdevēja nosaukums"].ToString().Ir vienāds ar(būt))
atgriešanās jaunā Kreditoru(vendorItem);
}

Kreditoru v = jaunā Kreditoru();
v.VendorPhone = "nav atrasts: " + būt;

atgriešanās v;

atgriešanās nulle;

} // izmantojot spweb web = site.openweb()
} // izmantojot spsite site = jaunu spsite("http://localhost/Midzuho")

} // metode

[Web metodi]
valsts Kreditoru[] GetVendorsOfType (virkne filterType)
{

virkne SpVendorSiteName; // Nosaukums faktiskais MOSS vietnes, kas vieso t
viņš kreditoru pielāgotu sarakstu.
virkne SpVendorListName; // Nosaukums faktiskais MOSS sarakstu, kurā ietilpst pārdevēji.

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

Kreditoru[] resultList;
Int vendorIndex = 0;
resultList = jaunā Kreditoru[1000];

// Inicializēt ar draudzīgu ziņojumu noklusējuma sarakstu.
Kreditoru v = jaunā Kreditoru();
v.VendorName = "Norādiet kreditora tipa, lai aizpildītu šo sarakstu.";
resultList[0] = v;

// Zemāku gadījumā vieglāk virknes salīdzinājums vēlāk pārvērst filtrs.
filterType = filterType.ToLower();

// Ja pagājis filtra tips ir "tests", dažas vienkāršas datu ģenerēšanai.
#reģions Filtra tips = "tests"
Ja (filterType. ir vienāda ar("test"))
atgriešanās GenerateTestVendors();
#endregion

Ja (patiess)
{
izmantojot (SPSite vieta = jaunā SPSite(SpVendorSiteName))
{
izmantojot (SPWeb Web vietas =. OpenWeb())
{

v = nulle;

SPList currentList = interneta. Saraksti[SpVendorListName];

// Atkārtot ar piegādātāju sarakstā esošos vienumus.
foreach (SPItem vendorItem programmā currentList.Items)
{

virkne lowerVendorType;

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

Ja (lowerVendorType. ir vienāda ar(filterType))
{
resultList[vendorIndex ] = jaunā Kreditoru(vendorItem);
}
} // karodziņš notiek caur visu kreditoru sarakstā


atgriešanās TrimVendorArray(vendorIndex, resultList);
// resultList atgriezt;

} // izmantojot spweb web = site.openweb()
} // izmantojot spsite site = jaunu spsite("http://localhost/Midzuho")

} // Ja tā ir true

atgriešanās nulle;
}

privāts Kreditoru[] TrimVendorArray(Int newsize, Kreditoru[] originalVendorArray)
{
Kreditoru[] trimmedArray;

Ja (newsize = = 0) newsize = 1;
trimmedArray = jaunā Kreditoru[newsize];

Int currentCounter = 0;

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

atgriešanās trimmedArray;

}
}

SŪNA: Apsvērumus par InfoPath atkļūdošana

InfoPath veidlapu servera kļūdu ziņojumiem ir maldinošas.

InfoPath veidlapu izstrādes laikā, Es post to MOSS serveri un piekļūt formai. Veidlapu varētu sākt ielādēt, un pēc tam radīt maldinošu kļūdas ziņojumu, norādot mani uz windows detaļas notikumu žurnālā. patiesībā, ziņojums tika rakstīts windows notikumu žurnālā. Drīzāk, MOSS ascii diagnostikas žurnālā, kas bija nosūtīta ziņojuma. Kas var izsekot caur centrālo pakalpojumu administrācijas.

Jums ir ātri uz savām kājām. MOSS patīk rakstīt log file, bieži un verbosely. Tas var apgriezt, bet noklusējuma pieteikšanās rakstiski uzvedība ir "viss, cik ātri vien iespējams".

SŪNA: Pielāgota saraksta atjaunināšana

Ir daudz labu piemēru atjaunināšanu pielāgotus sarakstus, izmantojot SDK. Šeit ir vēl viens.

Biznesa problēmas: Ir izstrādāta InfoPath veidlapa ļauj lietotājiem ievadīt tiešsaistes pirkuma pieprasījumus. Numuriem jābūt tradicionālā sērija PO pieprasījuma veselo skaitļu vērtībām balstīta un aprēķināt automātiski.

Biznesa risinājumu: Izveidot pielāgotu sūnu saraksts divām kolonnām: "ControlField" un "ControlValue". Vērtību kolonnā norādīts nākamā pirkuma pieprasījuma numurs. Ņemiet vērā, ka vispārīgajai "kontroles" nosaukumdošanas konvencija paredz turpmāko kontroli lauki, kurus var izmantot pēc nepieciešamības.

Tehniskais risinājums: Izveidot web pakalpojumam, InfoPath klients piekļūst. Web pakalpojums atgriež atpakaļ nākamajā pirkuma pieprasījuma numurs un atjaunina vērtību sarakstu.

Gūtās mācības:

  • Pievienojot šo web pakalpojumu kā datu avotu InfoPath veidlapas, Es atklāju, ka ir nepieciešams konvertēt udc un uzglabāt to datu savienojumu bibliotēkā.
  • Es arī konstatēts jāļauj starpdomēnu skriptu izmantojot centrālo pakalpojumu administrācijas // lietojumprogrammu pārvaldība // veidlapu servera konfigurācijas.
  • Pirmo reizi veidā mēģināja piekļūt web pakalpojums, paiet kāds laiks, un par godu, tas būtu laiks, kas. Es pacilāja veidlapu servera konfigurācijas iestatījumus, lai paplašinātu taimauta iestatījumus un šķita, ka tas palīdz.

Kods:

izmantojot Sistēma;
izmantojot System. Web;
izmantojot System.Web.Services;
izmantojot System.Web.Services.Protocols;
izmantojot Microsoft.SharePoint;
izmantojot System.Configuration;

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

//Uncomment ja izmantojot sekojošu rindu izstrādātas sastāvdaļas
//InitializeComponent();
}

/// <kopsavilkums>
/// Iegūtu nākamo PO numuru sarakstā sharepoint po numuru kontrole.
/// Palielinājuma PO numuru šajā sarakstā.
/// </kopsavilkums>
/// <atgriež></atgriež>
[Web metodi]
valsts virkne GetNextPoNumber()
{
virkne SpPoControlSiteName; // Nosaukums faktiskais MOSS vietnes, kas vieso PO vadības saraksts.
virkne SpPoControlListName; // Nosaukums faktiskais MOSS sarakstu, kurā ietilpst Po kontroles.

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

virkne nextPoReqNumber = "xyzzy";

izmantojot (SPSite vieta = jaunā SPSite(SpPoControlSiteName))
{
izmantojot (SPWeb Web vietas =. OpenWeb())
{

SPList currentList = interneta. Saraksti[SpPoControlListName];

foreach (SPItem controlItem programmā currentList.Items)
{

Ja (((virkne)controlItem["ControlField"]).Ir vienāds ar("NextPoNumber"))
{
nextPoReqNumber = (virkne)controlItem["ControlValue"];

Int int_nextPoReqNumber;
int_nextPoReqNumber = Konvertēt.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

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

} // Noteiktu atrašanās vietu, lasīt un atjaunināt PO numurs sarakstā.


} // izmantojot spweb web = site.openweb()
} // izmantojot spsite site = jaunu spsite("http://localhost/Midzuho")

atgriešanās nextPoReqNumber;

}
}