మంత్లీ ఆర్కైవ్స్: జూలై 2007

MOSS: కస్టమ్ జాబితాలు ద్వారా సంభవింప మరియు InfoPath కు ఫిల్టర్ డేటా తిరిగి

వ్యాపారం దృశ్య:

వినియోగదారులు త్వరితంగా ఖచ్చితమైన కొనుగోలు అభ్యర్థనలకు ఎంటర్ చెయ్యడానికి ఒక పద్ధతి అందించండి.

వ్యాపారం సమస్య:

క్లయింట్ అనేక వందల విక్రేతలైన వ్యాపారం.

Vendors are "type" నిర్దిష్ట. ఈ ఒక అమ్మకందారుని కంప్యూటర్ పరికరాలు విక్రయిస్తుంది అర్థం (ఉదాహరణకు. చిన్న గుంట) లేదా కార్యాలయం సరఫరా (ఉదాహరణకు. స్టేపుల్స్).

ఎలా మేము కొనుగోలు అభ్యర్థనలకు సృష్టించే వినియోగదారులు ఒక చెల్లుబాటు అయ్యే విక్రేత ఎంచుకోండి ఎనేబుల్ చెయ్యాలి?

వ్యాపారం సొల్యూషన్:

"రకం" ద్వారా సిస్టమ్ వెండర్లు భేదం.

"రకం ఎంచుకోండి వినియోగదారులు ప్రారంభించు" ఉత్పత్తి మరియు తరువాత తగిన విక్రేతల ఒక ఫిల్టర్ ఇచ్చును.

సాంకేతిక పరిష్కారం:

ఒక InfoPath రూపం వినియోగదారులు ఆన్లైన్ కొనుగోలు అభ్యర్థనలకు ఎంటర్ చెయ్యడానికి రూపొందించబడింది.

రెండు InfoPath ఎంపిక జాబితాలు నియంత్రణ విక్రేత ఎంపిక. మొదటి, వినియోగదారు ఒక "కొనుగోలు రకం" ఎంపిక. ఈ కొనుగోలు రకం కోసం విక్రయించే మాత్రమే విక్రేతల కలిగి రెండవ ఎంపిక జాబితా పరిమితం. ఈ ఒక క్లాసిక్ కాస్కేడింగ్ డ్రాప్-డౌన్.

విక్రేతల అటువంటి పేరు విక్రేత లక్షణాలు సంప్రదాయక నిలువు ఒక MOSS కస్టమ్ జాబితాలో నిల్వ చేయబడతాయి, చిరునామా మరియు ముఖ్యంగా "రకం".

కస్టమ్ విక్రేత జాబితా ద్వారా iterates ఆ తినే ఒక InfoPath క్లయింట్ కోసం ఒక వెబ్ సేవ అమలు, ఒక సరఫరా "రకం" దొరకలేదు మాత్రమే విక్రేతలు తిరిగి.

InfoPath రూపం ద్వారా వెబ్ సేవను అర్థించడానికి.

నేర్చుకున్న పాఠాలు:

  • మొదటి, ఈ మార్గం వెళ్ళడానికి అవసరమైన తెలుస్తోంది. నేను InfoPath పూర్తిగా వడపోత చేయండి మరియు ఇక్కడ ఏ వెబ్ సేవ కార్యాచరణను సృష్టించలేరు ప్రాధాన్యం ఉండేది. అయితే, రకాల సర్వర్ అవసరమైన వడపోత సామర్ధ్యం అందించడం లేదు. మేము ఒక "రకం లో ఒక నియమం ఉంచవచ్చు" తిరిగి తెరిచి విక్రేత ప్రశ్న యొక్క క్రమం రూపంలో ఎంపిక జాబితా, కానీ మేము అది సరిగా పని పొందలేము. కాబట్టి, వెబ్ సేవ అమలు అవసరం.
  • ఈ ఒక క్లాసిక్ "కాస్కేడింగ్ ఎంపిక జాబితా" InfoPath రూపాలు సర్వర్ ప్రపంచంలో సమస్య అక్కడ ఈ పరిష్కరించడానికి ఎలా వివరించే బయట మంచి ఉదాహరణలు.
  • ఈ వంటి సూచించారు ఉన్నప్పుడు విక్రేత జాబితాలో ఒక కాలమ్ ఖాళీ విలువ ఖాళీ స్ట్రింగ్ తిరిగి లేదు: initItem["Vendor పేరు"]. అందుకు బదులుగా, అది ఒక శూన్య తిరిగి.

కొన్ని ఇతర గమనికలు:

  • నేను ఒక అర్రే తిరిగి[] విక్రేతల నేను ఒక ArrayList తిరిగి ఇబ్బందులను ఎందుకంటే. InfoPath దాని గురించి ఫిర్యాదు మరియు నేను దాని పై పోరాడటానికి సమయం లేదా వంపు లేదు. ఈ, కోర్సు యొక్క, విక్రేతల మొత్తం సంఖ్య కృత్రిమ పరిమితిని ఉంచుతుంది. ఇది కూడా ఒక ట్రిమ్ అమలు నాకు ఒత్తిడి() శ్రేణి పద్ధతి నేను శూన్య విక్రేతల 100 యొక్క తిరిగి తిరిగి ఆలోచనను ద్వేషం ఎందుకంటే. InfoPath పట్టించుకోరు, కానీ అది నాకు nagged. (మళ్ళీ, ఈ ArrayLists పైగా InfoPath పోరాట కంటే సులభంగా).
  • నేను ఒక GetSpecificVendorByName అమలు() ఫంక్షన్ అలాగే, వివరణాత్మకంగా కావచ్చు.

కోడ్:

ఉపయోగించి వ్యవస్థ;
ఉపయోగించి System.Web;
ఉపయోగించి System.Web.Services;
ఉపయోగించి System.Web.Services.Protocols;
ఉపయోగించి Microsoft.SharePoint;
ఉపయోగించి System.Configuration;

/// <సంగ్రహము>
///
Vendor సర్వీస్: ఒక InfoPath క్లయింట్ రూపం ద్వారా సేవించాలి ఇవి నేడు విక్రేత సంబంధించిన సేవలను అందిస్తుంది.
///
/// చరిత్ర:
/// ——–
/// 07/24/07: ప్రారంభ కోడింగ్, పాల్ జె. Conchango గావిన్.
///
/// </సంగ్రహము>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
ప్రజా తరగతి VendorService : System.Web.Services.WebService
{

/// <సంగ్రహము>
/// MSUSA ద్వారా నిర్వహించబడుతుంది కస్టమ్ SharePoint జాబితా నుండి ఒక విక్రేత సూచిస్తుంది.
/// </సంగ్రహము>
ప్రజా తరగతి విక్రేత
{
ప్రజా విక్రేత() { }

ప్రజా విక్రేత(ఉమ్మి initItem)
{
అయితే (! (initItem["Vendor పేరు"] == సున్న)) VendorName = initItem["Vendor పేరు"].ToString();
అయితే (! (initItem["చిరునామా 1"] == సున్న)) VendorAddress1 = initItem["చిరునామా 1"].ToString();
అయితే (! (initItem["2 చిరునామా"] == సున్న)) VendorAddress2 = initItem["2 చిరునామా"].ToString();
అయితే (! (initItem["సిటీ"] == సున్న)) VendorCity = initItem["సిటీ"].ToString();
అయితే (! (initItem["VendorPhone"] == సున్న)) VendorPhone = initItem["VendorPhone"].ToString();
అయితే (! (initItem["PurchaseType"] == సున్న)) VendorType = initItem["PurchaseType"].ToString();
అయితే (! (initItem["రాష్ట్రం"] == సున్న)) VendorState = initItem["రాష్ట్రం"].ToString();
అయితే (! (initItem["జిప్"] == సున్న)) VendorZip = initItem["జిప్"].ToString();
అయితే (!(initItem["ఫ్యాక్స్"] == సున్న)) VendorFax = initItem["ఫ్యాక్స్"].ToString();
అయితే (!(initItem["SalesRepName"] == సున్న)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // MOSS ద్వారా నిర్వహించబడుతుంది ప్రత్యేక ID.
}

ప్రజా Int VendorItemId;
ప్రజా తీగ VendorName;
ప్రజా తీగ VendorAddress1;
ప్రజా తీగ VendorAddress2;
ప్రజా తీగ VendorCity;
ప్రజా తీగ VendorState;
ప్రజా తీగ VendorZip;
ప్రజా తీగ VendorPhone;
ప్రజా తీగ VendorType;
ప్రజా తీగ VendorSalesRepName;
ప్రజా తీగ VendorFax;
}

ప్రజా VendorService () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

ప్రైవేట్ విక్రేత[] GenerateTestVendors()
{
విక్రేత[] resultlist;
resultlist = కొత్త విక్రేత[100];

విక్రేత v;
v = కొత్త విక్రేత();
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 = కొత్త విక్రేత();

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 = కొత్త విక్రేత();
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;

తిరిగి resultlist;

}

[WebMethod]
ప్రజా విక్రేత GetSpecificVendorById(Int vendorId)
{
తీగ SpVendorSiteName; // విక్రేత కస్టమ్ జాబితా హోస్ట్ అసలు MOSS సైట్ పేరు.
తీగ SpVendorListName; // విక్రేతల కలిగి వాస్తవ MOSS జాబితా పేరు.

SpVendorSiteName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["VendorList"].ToString();

ఉపయోగించి (SPSite site = కొత్త SPSite(SpVendorSiteName))
{

ఉపయోగించి (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

ఉమ్మి specificItem = currentList.Items[vendorId];

తిరిగి కొత్త విక్రేత(specificItem);

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

}

[WebMethod]
// విక్రేత పేరు ఏకైక అని ఊహించుకొని, ఒక వ్యాపార కోణం నుండి
ప్రజా విక్రేత GetSpecificVendorByVendorName(తీగ vendorName)
{
తీగ SpVendorSiteName; // విక్రేత కస్టమ్ జాబితా హోస్ట్ అసలు MOSS సైట్ పేరు.
తీగ SpVendorListName; // విక్రేతల కలిగి వాస్తవ MOSS జాబితా పేరు.

SpVendorSiteName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["VendorList"].ToString();

ఉపయోగించి (SPSite site = కొత్త SPSite(SpVendorSiteName))
{
ఉపయోగించి (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

foreach (ఉమ్మి vendorItem లో currentList.Items)
{
అయితే (vendorItem["Vendor పేరు"] == సున్న) కొనసాగించు;

అయితే (vendorItem["Vendor పేరు"].ToString().సమానం(vendorName))
తిరిగి కొత్త విక్రేత(vendorItem);
}

విక్రేత v = కొత్త విక్రేత();
v.VendorPhone = "దొరకలేదు: " + vendorName;

తిరిగి v;

తిరిగి సున్న;

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

} // పద్ధతి

[WebMethod]
ప్రజా విక్రేత[] GetVendorsOfType (తీగ ఫిల్టర్ రకం)
{

తీగ SpVendorSiteName; // T హోస్ట్ అసలు MOSS సైట్ పేరు
అతను విక్రేత కస్టమ్ జాబితా.
తీగ SpVendorListName; // విక్రేతల కలిగి వాస్తవ MOSS జాబితా పేరు.

SpVendorSiteName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["VendorList"].ToString();

విక్రేత[] resultlist;
Int vendorIndex = 0;
resultlist = కొత్త విక్రేత[1000];

// ఒక డిఫాల్ట్ స్నేహపూర్వక సందేశంతో జాబితా ప్రారంభించడం.
విక్రేత v = కొత్త విక్రేత();
v.VendorName = "ఈ జాబితా జనసాంద్రత ఒక విక్రేత రకం ఎంచుకోండి.";
resultlist[0] = V;

// తరువాత సులభంగా స్ట్రింగ్ పోలిక బడిలోని వడపోత మార్చండి.
filterType = filterType.ToLower();

// ఆమోదించింది వడపోత రకం "పరీక్ష" ఉంటే, కొన్ని సాధారణ దత్తాంశాన్ని తయారుచేస్తాయి.
#ప్రాంతం వడపోత రకం = "పరీక్ష"
అయితే (filterType.Equals("test"))
తిరిగి GenerateTestVendors();
#endregion

అయితే (నిజమైన)
{
ఉపయోగించి (SPSite site = కొత్త SPSite(SpVendorSiteName))
{
ఉపయోగించి (SPWeb web = site.OpenWeb())
{

v = సున్న;

SPList currentList = web.Lists[SpVendorListName];

// విక్రేత జాబితాలో అన్ని అంశాలను ద్వారా iterate.
foreach (ఉమ్మి vendorItem లో currentList.Items)
{

తీగ lowerVendorType;

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

అయితే (lowerVendorType.Equals(ఫిల్టర్ రకం))
{
resultlist[vendorIndex ] = కొత్త విక్రేత(vendorItem);
}
} // జాబితాలో అన్ని విక్రేతలు త్రూ iterating


తిరిగి TrimVendorArray(vendorIndex, resultlist);
// resultlist తిరిగి;

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

} // నిజమైన ఉంటే

తిరిగి సున్న;
}

ప్రైవేట్ విక్రేత[] TrimVendorArray(Int newsize, విక్రేత[] originalVendorArray)
{
విక్రేత[] trimmedArray;

అయితే (న్యూస్ == 0) = On న్యూస్ 1;
trimmedArray = కొత్త విక్రేత[newsize];

Int currentCounter = 0;

కోసం (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = OriginalVendorArray[currentCounter];
}

తిరిగి trimmedArray;

}
}

MOSS: InfoPath డీబగ్గింగ్ పరిశీలనలు

InfoPath రూపం సర్వర్ లోపం సందేశాలు తప్పు దారి పట్టించవచ్చు.

ఒక InfoPath రూపం అభివృద్ధిలో, నేను MOSS సర్వర్ కు పోస్ట్ మరియు రూపం యాక్సెస్ ఉంటుంది. రూపం వివరాలు నాకు విండోస్ ఈవెంట్ లాగ్ గురిపెట్టి ఒక తప్పుదోవ పట్టించే లోపం సందేశాన్ని లోడ్ మరియు అప్పుడు ఉత్పత్తి ప్రారంభిస్తుంది. నిజానికి, ఏ సందేశం విండోస్ ఈవెంట్ లాగ్ రాయబడింది. కాకుండా, సందేశం MOSS ascii విశ్లేషణ లాగ్ పంపబడింది. మీరు కేంద్ర సేవలు పరిపాలన ద్వారా ఆ డౌన్ ట్రాక్ చేయవచ్చు.

మీరు మీ అడుగుల త్వరగా అవసరం. MOSS లాగ్ ఫైల్ వ్రాయడానికి ఇష్టపడ్డారు, తరచుగా మరియు verbosely. This can be trimmed but the default log writing behavior is "everything as quickly as possible".

MOSS: కస్టమ్ జాబితా నవీకరిస్తోంది

SDK ద్వారా కస్టమ్ జాబితాలు నవీకరించుటకు అనేక మంచి ఉదాహరణలు ఉన్నాయి. ఇక్కడ మరో ఉంది.

వ్యాపారం సమస్య: InfoPath రూపం వినియోగదారులు ఆన్లైన్ కొనుగోలు అభ్యర్థనలకు ఎంటర్ చెయ్యడానికి రూపొందించబడింది. PO వ్రాతపూర్వకమైన ఆదేశము సంఖ్యలు సాంప్రదాయిక సన్నివేశాన్ని ఆధారిత పూర్ణాంక విలువలను మరియు స్వయంచాలకంగా లెక్కించిన ఉండాలి.

వ్యాపారం సొల్యూషన్: రెండు నిలువు కలిగి కస్టమ్ MOSS జాబితా సృష్టించు: "ControlField" and "ControlValue". విలువ కాలమ్ తదుపరి కొనుగోలు వ్రాతపూర్వకమైన ఆదేశము సంఖ్యను కలిగి. Note that the generic "control" సమావేశం నామకరణ అవసరమైన ఉపయోగించే భవిష్యత్ నియంత్రణ ఖాళీలను అందిస్తుంది.

సాంకేతిక పరిష్కారం: InfoPath క్లయింట్ ప్రాప్తి ఒక వెబ్ సేవ సృష్టించు. వెబ్ సేవ తిరిగి తదుపరి కొనుగోలు వ్రాతపూర్వకమైన ఆదేశము సంఖ్య మరియు నవీకరణలను జాబితా విలువ తిరిగి.

నేర్చుకున్న పాఠాలు:

  • InfoPath రూపం ఒక డేటా మూలం వెబ్ సేవ చేర్చేటప్పుడు, నేను అవసరం ఒక UDC మార్పిడి మరియు ఒక డేటా కనెక్షన్ లైబ్రరీ లోకి నిల్వ కనుగొన్నారు.
  • నేను కూడా ఇది అవసరం కేంద్ర సేవలు పరిపాలన ద్వారా క్రాస్ డొమైన్ స్క్రిప్టింగ్ ప్రారంభించడానికి దొరకలేదు // అప్లికేషన్ నిర్వహణ // రూపం సర్వర్ కాన్ఫిగరేషన్.
  • మొదటిసారి రూపం వెబ్ సేవ యాక్సెస్ చేసేందుకు ప్రయత్నించారు, కొంత సమయం పడుతుంది మరియు సందర్భంగా, దాన్ని సమయం ఉంటుంది. నేను సమయం ముగిసింది సెట్టింగులను విస్తరించేందుకు రూపం సర్వర్ కాన్ఫిగరేషన్ సెట్టింగులు తో fiddled మరియు సహాయం కనిపించింది.

కోడ్:

ఉపయోగించి వ్యవస్థ;
ఉపయోగించి System.Web;
ఉపయోగించి System.Web.Services;
ఉపయోగించి System.Web.Services.Protocols;
ఉపయోగించి Microsoft.SharePoint;
ఉపయోగించి System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
ప్రజా తరగతి PoService : System.Web.Services.WebService
{
ప్రజా PoService () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

/// <సంగ్రహము>
/// Obtain the next PO number from the sharepoint po number control list.
/// Increment the PO number in that list.
/// </సంగ్రహము>
/// <తిరిగి></తిరిగి>
[WebMethod]
ప్రజా తీగ GetNextPoNumber()
{
తీగ SpPoControlSiteName; // Name of the actual MOSS site that hosts the PO Control list.
తీగ SpPoControlListName; // Name of the actual MOSS list containing the Po control.

SpPoControlSiteName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = కాన్ఫిగరేషన్ సెట్టింగులను.AppSettings["PoControlList"].ToString();

తీగ nextPoReqNumber = "xyzzy";

ఉపయోగించి (SPSite site = కొత్త SPSite(SpPoControlSiteName))
{
ఉపయోగించి (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpPoControlListName];

foreach (ఉమ్మి controlItem లో currentList.Items)
{

అయితే (((తీగ)controlItem["ControlField"]).సమానం("NextPoNumber"))
{
nextPoReqNumber = (తీగ)controlItem["ControlValue"];

Int int_nextPoReqNumber;
int_nextPoReqNumber = రూపంలో మార్పు తెచ్చు.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

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

} // Locating, reading and updating the PO number in the list.


} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

తిరిగి nextPoReqNumber;

}
}