वर्ग पुरालेख: काई

काई उन्नत खोज अनुकूलन — मामला उन्नत खोज XSLT में फर्क पड़ता है

मैं अक्सर बहुत उन्नत खोज XSLT को संशोधित न करें, तो ऐसा लगता है जैसे मैं हर समय छोटी पहाड़ियों चढ़ाई कर रहा हूँ.

यह मेरे नवीनतम सबक है: मामला मायने रखती है जब कोई स्तंभ को संदर्भित. मेरे उन्नत खोज में, मैं स्तंभों इस रूप में परिभाषित किया गया है:

<रूट xmlns:xsi="http://www.w3.org/ 2001/xml स्कीमा-उदाहरण">
<
कॉलम>
<
स्तंभ नाम="GafTrainingInvoiceNumber" />
<
स्तंभ नाम="GafTrainingInvoiceLocation" />
<
स्तंभ नाम="कार्य Id"/>
<
स्तंभ नाम="रैंक"/>
<
स्तंभ नाम="शीर्षक"/>
<
स्तंभ नाम="लेखक"/>
<
स्तंभ नाम="का आकार"/>
<
स्तंभ नाम="पथ"/>
<
स्तंभ नाम="विवरण"/>
<
स्तंभ नाम="लिखना"/>
<
स्तंभ नाम="SiteName"/>
<
स्तंभ नाम="CollapsingStatus"/>
<
स्तंभ नाम="HitHighlightedSummary"/>
<
स्तंभ नाम="HitHighlightedProperties"/>
<
स्तंभ नाम="ContentClass"/>
<
स्तंभ नाम="IsDocument"/>
<
स्तंभ नाम="PictureThumbnailURL"/>
</
कॉलम>
</
रूट>

इनवॉइस संख्या और चालान स्थान प्रदर्शित करता है XLST गया था:

<पी>
प्रशिक्षण चालान संख्या: <xsl:मान का का चयन करें="GafTrainingInvoiceNumber"/>
<
br></br>
प्रशिक्षण इनवॉइस स्थान: <xsl:मान का का चयन करें="GafTrainingInvoiceLocation"/>
</
पी>

हालांकि, चयन करें सब कम मामले में संपत्ति को संदर्भित करने के लिए है, के रूप में:

<पी>
प्रशिक्षण चालान संख्या: <xsl:मान का का चयन करें="gaftraininginvoicenumber"/>
<
br></br>
प्रशिक्षण इनवॉइस स्थान: <xsl:मान का का चयन करें="gaftraininginvoicelocation"/>
</
पी>


जब तक कि मैं सही, खोज परिणामों में लेबल से पता चला (अर्थात. "प्रशिक्षण इनवॉइस संख्या") कोई डेटा नहीं लेकिन.

काई / InfoPath प्रपत्र सर्वर (InfoPath 2007) ड्रॉप-डाउन सूची प्रदर्शन

अतिरिक्त श्रेणी: InfoPath

सारांश: एक InfoPath 2007 एक MOSS सर्वर पर वितरित प्रपत्र विक्रेताओं एक कस्टम काई सूची करने के लिए बंधे की एक ड्रॉप-डाउन सूची प्रदान करता है. एक विक्रेता के चयन पर, फ़ील्ड मान पाठ फ़ील्ड्स जैसे बिक्री प्रतिनिधि नाम की एक मुट्ठी भर के लिए नियम असाइन करें, पता, शहर, राज्य, ज़िप और फोन. प्रदर्शन भयानक है. हम सूचना है कि प्रदर्शन खराब हो जाता है (एक गैर-रैखिक फैशन में) प्रत्येक अतिरिक्त फ़ील्ड के लिए हम इस तरह से अद्यतन. यानी, अगर हम सिर्फ बिक्री प्रतिनिधि नाम अद्यतन करें, यह लेता है [एक्स] समय की राशि. अगर हम बिक्री प्रतिनिधि अद्यतन, address1, address2, शहर, राज्य, ज़िप, यह लेता है 10 अब बार.

समाधान: एक वेब सेवा लिखें (नमूना कोड पाया जा सकता यहाँ) कि एक विक्रेता के नाम पर पारित किया है और इसे वापस विक्रेता विवरण देता है. तब, इस तरह से फ़ील्ड असाइन करें. हालांकि यह भी लगता है धीमी गति से, प्रदर्शन में कोई discernable अंतर नहीं था जब हम सौंपा 1 फ़ील्ड बनाम 8 फ़ील्ड् स. एक जोड़ा बोनस के रूप में, उपयोगकर्ताओं को मिलता है एक शांत "सर्वर से संपर्क करने" Cylon वे आह्वान और सेवा परिणामों का उपभोग करने के लिए प्रपत्र के लिए प्रतीक्षा करते समय प्रभाव.

काई: अपवाद आ गया. (HRESULT से अपवाद: 0एक्स 80020009 (DISP_E_EXCEPTION))

अद्यतन: हम कभी नहीं फिर से इस समस्या है और यह कभी नहीं सतह का मूल कारण निर्धारित.

हम एक साइट के विकास के कार्यान्वयन के दौरान सूचना है कि अचानक, दो उपयोगकर्ताओं को एक साइट संग्रह का उपयोग करने में असमर्थ रहे हैं. उन खातों को मुख्य साइट के लिए प्रमाणित कर सकते हैं, लेकिन जब एक विशेष साइट संग्रह तक पहुँचने के लिए कोशिश कर रहा, वे सिर्फ एक खाली स्क्रीन मिल. कोई त्रुटियाँ प्रदर्शित, सिर्फ एक सफेद रिक्त पृष्ठ.

हम एक साइट संग्रह व्यवस्थापक के रूप में लॉग इन करें और एक उन उपयोगकर्ताओं की एक साइट व्यवस्थापक और इस समय के रूप में जोड़ने के लिए प्रयास करें, "ठीक" दबाने पर, हम इस संदेश प्राप्त:

अपवाद आ गया. (HRESULT से अपवाद: 0एक्स 80020009 (DISP_E_EXCEPTION))

हम यह शोध कर कुछ समय बिताया और दुर्भाग्य से, कुछ उपयोगी के साथ आया था. नैदानिक लॉग में कुछ संदेश थे, लेकिन यह बिल्कुल उन्हें इस मुद्दे के साथ सहसंबंधी करने के लिए मुश्किल था.

अंत में, हम साइट संग्रह को हटाने और फिर से बनाया है और यह कि इसे हल.

अगर मैं यह पता लगाने क्या इस का भविष्य में कारण, मैं इस पोस्ट अद्यतन हूँ.

काई: कस्टम सूचियों के माध्यम से iterating और फ़िल्टर किए गए डेटा को InfoPath लौटने

व्यापार परिदृश्य:

एक तरीका है कि उपयोगकर्ताओं को सटीक खरीद माँग शीघ्रता से दर्ज करने के लिए सक्षम बनाता है प्रदान करते हैं.

व्यापार समस्या:

ग्राहक कई सौ विक्रेताओं के साथ व्यापार करता है.

"प्रकार विक्रेताओं रहे हैं" विशिष्ट. इसका मतलब यह है कि एक विक्रेता के कंप्यूटर उपकरण बेचता है (जैसे. डेल) या कार्यालय आपूर्तियाँ (जैसे. स्टेपल).

हम अंत उपयोगकर्ता जो एक मान्य विक्रेता खरीद माँग चुनें बनाएँ कैसे सक्षम करूँ?

व्यापार समाधान:

"प्रकार" के माध्यम से व्यवस्था में विक्रेताओं अंतर.

"प्रकार का चयन करने के लिए उपयोगकर्ताओं को सक्षम करें" उत्पाद की और उसके बाद उपयुक्त विक्रेताओं का कोई फ़िल्टर किए गए सेट प्रदान करते हैं.

तकनीकी समाधान:

किसी InfoPath प्रपत्र डिज़ाइन किया गया है कि सक्षम बनाता है उपयोगकर्ताओं को ऑनलाइन दर्ज करने की माँग खरीद.

विक्रेता चयन दो InfoPath चयन सूची नियंत्रण. प्रथम, उपयोगकर्ता एक "खरीद"प्रकार का चयन करता है. यह सीमा केवल विक्रेताओं है कि बेचने के लिए है कि खरीद के प्रकार होते हैं के लिए एक दूसरा चयन सूची. यह एक क्लासिक कैस्केडिंग ड्रॉप-डाउन है.

विक्रेताओं का नाम जैसे विक्रेता विशेषताओं के लिए कस्टम स्तंभों के साथ एक काई कस्टम सूची में संग्रहीत किए जाते हैं, पते और विशेष रूप से "प्रकार".

को लागू करने कि उपभोग करने के लिए किसी InfoPath क्लाइंट के लिए किसी वेब सेवा को कस्टम विक्रेता सूची के माध्यम से iterates, केवल एक आपूर्ति की "प्रकार" मिलान विक्रेताओं रिटर्निंग.

InfoPath प्रपत्र के द्वारा वेब सेवा आह्वान.

सबक सीखा:

  • प्रथम, यह लगता है कि इस मार्ग से जाना करने के लिए आवश्यक. मैं पूरी तरह से InfoPath के भीतर फ़िल्टरिंग करते हैं और किसी भी वेब सेवा कार्यक्षमता यहाँ पैदा नहीं पसंद होगा. हालांकि, प्रपत्र सर्वर की आवश्यकता फ़िल्टरिंग क्षमता प्रदान नहीं करता है. हम एक नियम पर रख सकते हैं एक "प्रकार" चयन सूची की तरह विक्रेता क्वेरी को पुन: खोलने के लिए के रूप में, लेकिन हम इसे ठीक से काम करने के लिए प्राप्त नहीं कर सकता. इसलिए, यह वेब सेवा को लागू करने के लिए आवश्यक था.
  • यह एक क्लासिक "कैस्केडिंग चयन सूची है" InfoPath में समस्या सर्वर दुनिया रूपों और वहाँ कई अच्छे उदाहरण है कि इस को हल करने के लिए कैसे की व्याख्या कर रहे हैं.
  • विक्रेता सूची में एक स्तंभ के लिए कोई रिक्त मान एक रिक्त स्ट्रिंग जब इस तरह संदर्भित वापस नहीं करता है: initItem["विक्रेता का नाम"]. इसके बजाय, यह एक null रिटर्न.

कुछ अन्य नोट्स:

  • मैं एक सरणी वापस[] विक्रेताओं की क्योंकि मैं कुछ कठिनाई एक ArrayList लौट रहा था. InfoPath इसके बारे में शिकायत कर रहा था और मैं समय या इसे खत्म से लड़ने के लिए झुकाव नहीं है. यह, बेशक, एक कृत्रिम सीमा विक्रेताओं की कुल संख्या पर डालता है. यह भी एक ट्रिम को लागू करने के लिए मुझे मजबूर किया() विधि सरणी पर क्योंकि मैं लौटने के विचार नफरत करता हूँ वापस बातिल विक्रेताओं के 100. InfoPath परवाह नहीं करता, लेकिन यह मुझ पर nagged. (फिर से, यह आसान ArrayLists से अधिक InfoPath से लड़ने की तुलना थी).
  • मैं एक GetSpecificVendorByName कार्यान्वित() रूप में अच्छी तरह से फ़ंक्शन, जो शिक्षाप्रद हो सकता.

कोड:

का उपयोग कर प्रणाली;
का उपयोग कर System.Web;
का उपयोग कर System.Web.Services;
का उपयोग कर System.Web.Services.Protocols;
का उपयोग कर Microsoft.SharePoint;
का उपयोग कर System.Configuration;

/// <सारांश>
///
विक्रेता सेवा: जो आज एक infopath ग्राहक प्रपत्र द्वारा भस्म कर रहे हैं विक्रेता से संबंधित सेवाएं प्रदान करता है.
///
/// इतिहास:
/// ——–
/// 07/24/07: प्रारंभिक कोडिंग, Paul J. गेविन Conchango के.
///
/// </सारांश>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
सार्वजनिक वर्ग VendorService : System.Web.Services.WebService
{

/// <सारांश>
/// MSUSA द्वारा अनुरक्षित किसी कस्टम sharepoint सूची से एक विक्रेता का प्रतिनिधित्व करता है.
/// </सारांश>
सार्वजनिक वर्ग विक्रेता
{
सार्वजनिक विक्रेता() { }

सार्वजनिक विक्रेता(SPItem initItem)
{
अगर (! (initItem["विक्रेता का नाम"] == अशक्त)) VendorName = initItem["विक्रेता का नाम"].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; // अद्वितीय ID MOSS के द्वारा बनाए रखा.
}

सार्वजनिक int VendorItemId;
सार्वजनिक स्ट्रिंग VendorName;
सार्वजनिक स्ट्रिंग VendorAddress1;
सार्वजनिक स्ट्रिंग VendorAddress2;
सार्वजनिक स्ट्रिंग VendorCity;
सार्वजनिक स्ट्रिंग VendorState;
सार्वजनिक स्ट्रिंग VendorZip;
सार्वजनिक स्ट्रिंग VendorPhone;
सार्वजनिक स्ट्रिंग VendorType;
सार्वजनिक स्ट्रिंग VendorSalesRepName;
सार्वजनिक स्ट्रिंग VendorFax;
}

सार्वजनिक VendorService () {

//यदि का उपयोग कर निम्न पंक्ति घटक डिज़ाइन uncomment
//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; // कि विक्रेता कस्टम सूची को होस्ट करता है वास्तविक काई साइट का नाम.
स्ट्रिंग SpVendorListName; // वास्तविक काई विक्रेताओं से युक्त सूची का नाम.

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

का उपयोग कर (SPSite साइट = नई SPSite(SpVendorSiteName))
{

का उपयोग कर (SPWeb वेब साइट =। OpenWeb())
{

SPList currentList वेब =। सूचियाँ[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

वापस जाएँ नई विक्रेता(specificItem);

} // spweb वेब का उपयोग = site.openweb()
} // spsite साइट का उपयोग करके नए spsite =("http://लोकलहोस्ट mizuho")

}

[WebMethod]
// विक्रेता नाम अद्वितीय है यह मान लिया गया, एक व्यापार के नजरिए से
सार्वजनिक विक्रेता GetSpecificVendorByVendorName(स्ट्रिंग हो)
{
स्ट्रिंग SpVendorSiteName; // कि विक्रेता कस्टम सूची को होस्ट करता है वास्तविक काई साइट का नाम.
स्ट्रिंग SpVendorListName; // वास्तविक काई विक्रेताओं से युक्त सूची का नाम.

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

का उपयोग कर (SPSite साइट = नई SPSite(SpVendorSiteName))
{
का उपयोग कर (SPWeb वेब साइट =। OpenWeb())
{

SPList currentList वेब =। सूचियाँ[SpVendorListName];

foreach (SPItem vendorItem में currentList.Items)
{
अगर (vendorItem["विक्रेता का नाम"] == अशक्त) «««;

अगर (vendorItem["विक्रेता का नाम"].ToString().के बराबर होती है(हो))
वापस जाएँ नई विक्रेता(vendorItem);
}

विक्रेता v = नई विक्रेता();
v.VendorPhone = "पाया नहीं: " + हो;

वापस जाएँ v;

वापस जाएँ अशक्त;

} // spweb वेब का उपयोग = site.openweb()
} // spsite साइट का उपयोग करके नए spsite =("http://लोकलहोस्ट mizuho")

} // विधि

[WebMethod]
सार्वजनिक विक्रेता[] GetVendorsOfType (स्ट्रिंग filterType)
{

स्ट्रिंग SpVendorSiteName; // वास्तविक काई साइट t होस्ट का नाम
वह विक्रेता कस्टम सूची.
स्ट्रिंग SpVendorListName; // वास्तविक काई विक्रेताओं से युक्त सूची का नाम.

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

विक्रेता[] resultList;
int vendorIndex = 0;
resultList = नई विक्रेता[1000];

// सूची के साथ एक डिफ़ॉल्ट दोस्ताना संदेश को प्रारंभ.
विक्रेता v = नई विक्रेता();
v.VendorName = "इस सूची को पॉप्युलेट करने के लिए एक विक्रेता प्रकार का चयन करें।";
resultList[0] v =;

// फ़िल्टर परिवर्तित आसान स्ट्रिंग तुलना के बाद में निचले मामले के लिए.
filterType = filterType.ToLower();

// यदि फ़िल्टर प्रकार पारित कर दिया गया है "परीक्षण", कुछ सरल डेटा उत्पन्न.
#क्षेत्र फ़िल्टर प्रकार = "का परीक्षण"
अगर (बराबरी filterType.(टेस्ट""))
वापस जाएँ GenerateTestVendors();
#endregion

अगर (सच है)
{
का उपयोग कर (SPSite साइट = नई SPSite(SpVendorSiteName))
{
का उपयोग कर (SPWeb वेब साइट =। OpenWeb())
{

v = अशक्त;

SPList currentList वेब =। सूचियाँ[SpVendorListName];

// विक्रेता सूची में सभी आइटम्स के माध्यम से पुनरावृति.
foreach (SPItem vendorItem में currentList.Items)
{

स्ट्रिंग lowerVendorType;

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

अगर (बराबरी lowerVendorType.(filterType))
{
resultList[vendorIndex ] = नई विक्रेता(vendorItem);
}
} // सूची में सभी विक्रेताओं के माध्यम से iterating


वापस जाएँ TrimVendorArray(vendorIndex, resultList);
// resultList वापसी;

} // spweb वेब का उपयोग = site.openweb()
} // spsite साइट का उपयोग करके नए spsite =("http://लोकलहोस्ट mizuho")

} // अगर यह सच है

वापस जाएँ अशक्त;
}

निजी विक्रेता[] TrimVendorArray(int newsize, विक्रेता[] originalVendorArray)
{
विक्रेता[] trimmedArray;

अगर (newsize = = 0) newsize = 1;
trimmedArray = नई विक्रेता[newsize];

int currentCounter = 0;

के लिए (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] originalVendorArray =[currentCounter];
}

वापस जाएँ trimmedArray;

}
}