2012-02-13 16 views
37

से कार्य आइटम कैसे प्राप्त करें मैं मुख्य TfsTeamProjectCollection में एक एकल टीम प्रोजेक्ट से पूछताछ करने की कोशिश कर रहा हूं जिसमें कुल मिलाकर 1 9 4 टीम प्रोजेक्ट शामिल हैं। मुझे पता है कि WorkItemStore से आईडी द्वारा WorkItem कैसे प्राप्त करें। बात यह है कि, ऐसा करने से, एपीआई संग्रह में परियोजनाओं के सभी में खोज करता है और क्वेरी में लगभग एक मिनट लगते हैं। यह बहुत धीमा तरीका है, एक टीम परियोजना से सीधे काम आइटम पूछने का एक तरीका होना चाहिए? यहाँ है कोड मैं:टीएफएस एपीआई - विशिष्ट टीम प्रोजेक्ट

private Uri collectionUri; 
    private TfsTeamProjectCollection projectCollection; 
    private WorkItemStore workItemStore; 

    public Project GetTeamProject() 
    { 
     projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri); 

     workItemStore = projectCollection.GetService<WorkItemStore>(); 
     Project teamProject = workItemStore.Projects[TFS_PROJECT_KEY]; 
     return teamProject; 
    } 

अब जब कि मैं टीम परियोजना मैं में दिलचस्पी रखता हूँ है, मैं कैसे आईडी के आधार पर काम आइटम के लिए क्वेरी कर सकते हैं या सिर्फ इस परियोजना में सब काम आइटम मिल सकता है?

+0

FYI करें, कि कोशिश/कैच ब्लॉक से छुटकारा पाने के। यह कुछ भी नहीं करता है। –

+0

यह एक nullpointerexception पकड़ने के लिए प्रयोग किया जाता है क्योंकि विधि एक परियोजना आईडी पैरामीटर के रूप में ले जाएगा, लेकिन मैंने इसे बदल दिया। –

+1

आपने जो कुछ किया वह अपवाद को फिर से उखाड़ फेंक रहा है, जो इसे पकड़ने जैसा नहीं है। आपको NullReferenceException को कभी भी पकड़ना नहीं चाहिए, क्योंकि यह हमेशा एक प्रोग्रामिंग त्रुटि का मतलब है। –

उत्तर

15

यह आपकी रुचि रखने वाले use a query to find the workitems पर शायद सबसे अधिक कुशल है। आप उस प्रोजेक्ट में दायरे को सीमित करने के लिए क्वेरी कहां प्रोजेक्ट = '@ प्रोजेक्ट' जोड़ सकते हैं। सबसे पहले BeginQuery को कॉल करके और फिर EndQuery आपको केवल उन वस्तुओं के लिए वर्कटाइम संग्रह मिलेगा जिन्हें आप ढूंढ रहे थे।

आवश्यक wql क्वेरी प्राप्त करने का सबसे आसान तरीका टीम एक्सप्लोरर में एक क्वेरी बनाना है, फिर फ़ाइल को सहेजने के लिए फ़ाइल-> सहेजें (संपादन मोड में) का उपयोग करें। वहां से क्वेरी को कॉपी करने के लिए नोटपैड में उस फ़ाइल को खोलें।

वैकल्पिक रूप से आप एक ही चीज़ को प्राप्त करने के लिए सीधे WorkItemStore.Query method का उपयोग कर सकते हैं। एक विशिष्ट WorkItem आईडी प्राप्त करने के लिए

WorkItemCollection workItemCollection = workItemStore.Query(
    " SELECT [System.Id], [System.WorkItemType],"+  
    " [System.State], [System.AssignedTo], [System.Title] "+ 
    " FROM WorkItems " + 
    " WHERE [System.TeamProject] = '" + teamProject.Name + 
    "' ORDER BY [System.WorkItemType], [System.Id]"); 

और यह:

+3

wql क्वेरी की बचत एक शानदार टिप है। टीम एक्सप्लोरर जीयूआई का उपयोग करके अपनी क्वेरी को सही तरीके से प्राप्त करना बहुत आसान है। आपने मुझे गड़बड़ के घंटे बचाए हैं :-) – DaveF

34

आप teamProject के भीतर सभी विस प्राप्त करने के लिए कुछ इस तरह की कोशिश कर सकते

WorkItem workItem = workItemStore.GetWorkItem(555); 
+0

क्या आप जानते हैं कि क्वेरी को पहचानने के लिए प्रोजेक्ट में किस संदर्भ को जोड़ना है? क्योंकि मैं पहले से ही 'माइक्रोसॉफ्ट.TeamFoundation.Client' और' माइक्रोसॉफ्ट.TeamFoundation.WorkItemTracking.Client' का उपयोग कर रहा हूं और मुझे इस उत्तर के लिए 'workItemStore.Query()' –

+0

+1 के पैरामीटर में सब कुछ के लिए त्रुटियां मिलती हैं यदि आप मदद कर सकते हैं :) –

+0

कभी नहीं, यह काम करता है ... धन्यवाद –

संबंधित मुद्दे