it-swarm.asia

مكون برنامج SSIS - كيفية تعديل Output0Buffer

لدي مكون برنامج نصي يقبل السجلات من جدول قاعدة بيانات 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);
     }
 }
10
flybyte

كل شيء في التحول يتم داخل 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 في التحويل ، فقط في البرامج النصية للوجهة.

6
JohnDavid

لست جيدًا جدًا في SSIS ، ولكن أعتقد أنه يمكنك تجربة الأفكار التالية:

  • انتقل إلى مكون البرنامج النصي وقم بتحريره ،
  • انتقل إلى قسم المدخلات والمخرجات (القسم الثالث) ،
  • انتقل إلى Output0 - أعمدة الإخراج ،
  • أضف عمودًا جديدًا (أعطه اسمًا ونوعًا ، لنفترض الحالة - منطقية).

بعد ذلك سيكون لديك العمود الفارغ في مخرجاتك وستحتاج إلى تعبئته ببعض البيانات لكل من صفوف الإدخال:

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

سيساعدك هذا على إضافة عمود الحالة إلى جدول الإخراج. نأمل أن يكون هذا هو ما أردت.

3
Marian