คอมโพเนนต์สคริปต์ 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
เหตุใดคุณจึงไม่สามารถเรียกใช้บริการทางเว็บในระหว่างกระบวนการป้อนข้อมูล ข้อมูลทั้งหมดลงไปในท่อแล้วเมื่อไม่ได้ใช้วิธีการนั้น คุณกำลังรวบรวมข้อมูลในตัวแปรท้องถิ่นของคุณ แต่ ณ จุดนี้มันเหมือนกับการถือภาพรถที่ขับออกไปใช่นั่นคือสิ่งที่ดูเหมือน แต่ไม่กลับมา
billinkc

@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 แต่ฉันคิดว่าคุณสามารถลองแนวคิดต่อไปนี้:

  • ไปที่องค์ประกอบของสคริปต์และแก้ไข
  • ไปที่ส่วนอินพุตและเอาต์พุต (ส่วนที่ 3)
  • ไปที่ Output0 - คอลัมน์ผลลัพธ์
  • เพิ่มคอลัมน์ใหม่ (ให้ชื่อและประเภทสมมติว่าสถานะ - บูลีน)

จากนั้นคุณจะมีคอลัมน์ว่างให้กับผลลัพธ์ของคุณและคุณจะต้องเติมข้อมูลด้วยข้อมูลบางอย่างสำหรับแต่ละแถวข้อมูลเข้า:

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

สิ่งนี้จะช่วยคุณเพิ่มคอลัมน์สถานะลงในตารางผลลัพธ์ของคุณ หวังว่านี่คือสิ่งที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.