काई: कस्टम सूचियों के माध्यम से 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;

}
}

कोई जवाब दो

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. अपेक्षित स्थानों को रेखांकित कर दिया गया है *