SSIS स्क्रिप्ट घटक - Output0Buffer को कैसे संशोधित किया जाए


10

मेरे पास एक स्क्रिप्ट घटक है जो SQL Azure डेटाबेस तालिका से रिकॉर्ड स्वीकार करता है। स्क्रिप्ट तब एक वेब सेवा को आमंत्रित करती है, जो विफल और सफलता रिकॉर्ड की संख्या लौटाती है।

सभी रिकॉर्ड्स के लिए, मैं स्थिति फ़ील्ड जोड़ना चाहूंगा जिसमें "सफलता" या "विफल" है और यह स्क्रिप्ट घटक से आउटपुट प्राप्त करता है।

मैं फिर उन आउटपुट को टेक्स्ट फाइल में लॉग करता हूं।

समस्या: मैं प्रत्येक इनपुट रिकॉर्ड के लिए स्थिति जोड़ने में सक्षम नहीं हूं क्योंकि वेब सेवा कॉल केवल पोस्ट एग्जीक्यूट पर होता है।

मैंने यह कोशिश की, लेकिन अभी भी काम नहीं कर रहा है:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
         listOfData.Add(new ClockData 
         {
             TimeClockID=Row.TimeClockID,
             PersonID=Row.EmployeeCode,
             LocationCode=Row.ClockInServiceContextID,
             ClockInDateTime=Row.ClockInDateTime,
             ClockOutDateTime=Row.ClockOutDateTime

         });
 }

 public override void CreateNewOutputRows()
 {
     MessageBox.Show("Test CreateNewOutputRows");
     MessageBox.Show(listOfData.Count.ToString());
     foreach (var item in listOfData)
     {
         Output0Buffer.AddRow();
         Output0Buffer.EmployeeCode = item.PersonID;
         MessageBox.Show(item.PersonID);
     }
 }

1
आप प्रक्रिया के दौरान वेब सेवा कॉल को निष्पादित क्यों नहीं कर सकते हैं? इस पद्धति से बाहर होने के बाद सभी डेटा पहले ही पाइपलाइन से नीचे जा चुके हैं। आप अपने स्थानीय चर में डेटा जमा कर रहे हैं, लेकिन इस बिंदु पर यह एक कार की तस्वीर रखने की तरह है जो बस दूर चला गया-हाँ, यह वही है जो ऐसा दिख रहा था लेकिन यह वापस नहीं आ रहा है
बिलिंक

@flybyte: मेरे उत्तर में कुछ भी उपयोगी है?
मैरियन

जवाबों:


6

एक परिवर्तन में सब कुछ Input0_ProcessInputRow के भीतर किया जाता है। समाधान अनिवार्य रूप से होगा

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
         listOfData.Add(new ClockData 
         {
             TimeClockID=Row.TimeClockID,
             PersonID=Row.EmployeeCode,
             LocationCode=Row.ClockInServiceContextID,
             ClockInDateTime=Row.ClockInDateTime,
             ClockOutDateTime=Row.ClockOutDateTime
         });
         Output0Buffer.AddRow();
         Output0Buffer.EmployeeCode = item.PersonID;
         MessageBox.Show(item.PersonID);
}

आप PostExecute में आउटपुट चरणों को करने में सक्षम हो सकते हैं, CreateNewOutputRows केवल गंतव्य स्क्रिप्ट्स में, परिवर्तन में नहीं चलाया जाता है।


3

मैं SSIS में बहुत कुशल नहीं हूँ, लेकिन मुझे लगता है कि आप निम्नलिखित विचारों को आज़मा सकते हैं:

  • स्क्रिप्ट घटक पर जाएं और इसे संपादित करें,
  • अनुभाग इनपुट और आउटपुट पर जाएं (तीसरा खंड),
  • आउटपुट0 पर जाएं - आउटपुट कॉलम,
  • एक नया कॉलम जोड़ें (इसे एक नाम और प्रकार दें, मान लें कि स्थिति - बूलियन)।

फिर आपके पास अपने आउटपुट के लिए खाली कॉलम होगा और आपको प्रत्येक इनपुट पंक्तियों के लिए कुछ डेटा के साथ इसे पॉप्युलेट करना होगा:

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    Row.Status = IIf(String.IsNullOrEmpty(rowValues.GetValue(1).ToString()), 0, 1)

यह आपको अपनी आउटपुट तालिका में एक स्थिति कॉलम जोड़ने में मदद करेगा। आशा है कि यह वही है जो आप चाहते थे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.