వర్గం ఆర్కైవ్స్: MOSS

MOSS ఆధునిక శోధన అనుకూలీకరణను — కేస్ ఆధునిక శోధన XSLT లో అవసరం

నేను చాలా తరచుగా ఆధునిక శోధన XSLT సవరించడానికి లేదు, నేను చిన్న కొండలు ప్రతిసారీ పైకి ఉంటాను కాబట్టి అది ఉంది.

నా క్రొత్త పాఠం ఇది: ఒక కాలమ్ సూచించేటప్పుడు కేస్ సంబంధించిన. నా ఆధునిక శోధన లో, నేను ఈ వంటి నిలువు నిర్వచించారు:

<వేరు xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
నిలువు>
<
కాలమ్ పేరు="GafTrainingInvoiceNumber" />
<
కాలమ్ పేరు="GafTrainingInvoiceLocation" />
<
కాలమ్ పేరు="WorkId"/>
<
కాలమ్ పేరు="రాంక్"/>
<
కాలమ్ పేరు="శీర్షిక"/>
<
కాలమ్ పేరు="రచయిత"/>
<
కాలమ్ పేరు="పరిమాణము"/>
<
కాలమ్ పేరు="మార్గం"/>
<
కాలమ్ పేరు="వర్ణన"/>
<
కాలమ్ పేరు="వ్రాయండి"/>
<
కాలమ్ పేరు="SITENAME"/>
<
కాలమ్ పేరు="CollapsingStatus"/>
<
కాలమ్ పేరు="HitHighlightedSummary"/>
<
కాలమ్ పేరు="HitHighlightedProperties"/>
<
కాలమ్ పేరు="Contentclass"/>
<
కాలమ్ పేరు="IsDocument"/>
<
కాలమ్ పేరు="PictureThumbnailURL"/>
</
నిలువు>
</
వేరు>

ఇన్వాయిస్ సంఖ్య మరియు వాయిస్ నగర ప్రదర్శించే XLST ఉండేది:

<p>
Training Invoice Number: <XSL:విలువ యొక్క ఎంచుకోండి="GafTrainingInvoiceNumber"/>
<
br></br>
Training Invoice Location: <XSL:విలువ యొక్క ఎంచుకోండి="GafTrainingInvoiceLocation"/>
</
p>

అయితే, ఎంపిక, అన్ని లోయర్ కేస్ లో ఆస్తి సూచన ఉంది, లో:

<p>
Training Invoice Number: <XSL:విలువ యొక్క ఎంచుకోండి="gaftraininginvoicenumber"/>
<
br></br>
Training Invoice Location: <XSL:విలువ యొక్క ఎంచుకోండి="gaftraininginvoicelocation"/>
</
p>


Until I corrected that, search results showed the labels (ఉదా. "Training Invoice Number") but no data.

MOSS / InfoPath పత్రాలు సర్వర్ (InfoPath 2007) డ్రాప్ డౌన్ జాబితా ప్రదర్శన

అదనపు వర్గం: InfoPath

సంగ్రహము: ఒక InfoPath 2007 ఒక MOSS సర్వర్ అమలు ఏర్పాటు కస్టమ్ MOSS జాబితా జతచేయబడి విక్రేతల ఒక డ్రాప్ డౌన్ జాబితా. ఒక అమ్మకందారుని ఎంచుకోవడం తరువాత, నియమాలు అలాంటి అమ్మకాల ప్రతినిధిని పేరు టెక్స్ట్ రంగాలలో చూపడంతో కు రంగంలో విలువలు కేటాయించవచ్చు, చిరునామా, నగరం, స్థితి, జిప్ మరియు ఫోన్. ప్రదర్శన భయంకరమైన ఉంది. మేము పనితీరు అధ్వాన్నంగా అందుతుంది అని గమనించవచ్చు (ఒక విరళ ఫ్యాషన్ లో) ప్రతి అదనపు రంగంలో కోసం మేము ఈ విధంగా అప్డేట్. అంటే, మేము కేవలం అమ్మకాల ప్రతినిధిని పేరు అప్డేట్ ఉంటే, అది పడుతుంది [x] సమయం మొత్తం. మేము అమ్మకాల ప్రతినిధిని అప్డేట్ ఉంటే, address1, address2, నగరం, స్థితి, మీటను జరిపినపుడు దానంతట అదే కరుచుకునే ఒక సాధనముతో బిగించు (జిప్), అది పడుతుంది 10 రెట్లు ఎక్కువ.

పరిష్కారము: ఒక వెబ్ సేవ వ్రాయండి (నమూనా కోడ్ చూడవచ్చు ఇక్కడ) ఒక అమ్మకందారుని పేరు ఆమోదించబడింది తిరిగి విక్రేత వివరాలు తిరిగి ఆ. అప్పుడు, ఖాళీలను ఈ విధంగా కేటాయించవచ్చు. ఈ చాలా నెమ్మదిగా కనిపిస్తున్నప్పటికీ, మేము కేటాయించిన ఉన్నప్పుడు ప్రదర్శన ఏ discernable వ్యత్యాసం లేదు 1 రంగంలో వర్సెస్ 8 ఖాళీలను. అదనపు బోనస్ గా, users get a cool "contacting the server" Cylon వారు సేవ ఫలితాలు ఇన్వోక్ మరియు తినే ఫారమ్ కోసం వేచి ఉన్నప్పుడు ప్రభావం.

MOSS: మినహాయింపు సంభవించింది. (HRESULT నుండి మినహాయింపు: 0x80020009 (DISP_E_EXCEPTION))

UPDATE: మేము ఈ సమస్య యొక్క మూల కారణంగా నిర్ణయించబడుతుంది ఎప్పుడూ మరియు మరలా ఉపరితలం ఎప్పుడూ.

మేము ఒక అభివృద్ధి సైట్ హఠాత్తుగా అమలు సమయంలో గమనించవచ్చు, రెండు వినియోగదారులు ఒక సైట్ సేకరణ ఆక్సెస్ చెయ్యలేకపోతే. ఆ ఖాతాలను ప్రధాన సైట్ కు ప్రమాణీకరించడానికి, కానీ ఒక నిర్దిష్ట సైట్ సేకరణ యాక్సెస్ చేసేటప్పుడు, వారు కేవలం ఒక ఖాళీ తెర పొందుటకు. ప్రదర్శించబడుతుంది లోపాలు, ఒక తెల్లని ఖాళీ పేజీ.

మేము ఒక సైట్ సేకరణ నిర్వాహకునిగా లాగిన్ మరియు ఒక సైట్ నిర్వాహకునిగా వినియోగదారుల ఒకటి జోడించడానికి ప్రయత్నించండి మరియు ఈ సమయం, upon pressing "OK", మేము ఈ సందేశం:

మినహాయింపు సంభవించింది. (HRESULT నుండి మినహాయింపు: 0x80020009 (DISP_E_EXCEPTION))

మేము ఈ మరియు దురదృష్టవశాత్తు పరిశోధన కొంత సమయం గడిపాడు, ఉపయోగకరమైన ఏదైనా ఆలోచన లేదు. విశ్లేషణ లాగ్ కొన్ని సందేశాలు ఉన్నాయి, కానీ అది ఖచ్చితంగా ఈ సమస్య వాటిని పరస్పర సంబంధం కలిగిఉందని హార్డ్ ఉంది.

చివరికి, మేము సైట్ సేకరణ తొలగించడం మరియు అది తిరిగి రూపొందించినవారు మరియు అది పరిష్కరించబడింది.

నేను భవిష్యత్తులో ఈ కారణంగా ఏమి దొరుకుతుందని ఉంటే, నేను ఈ డేట్ చేస్తాము.

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;

}
}