Hallo,
wenn ich Dich richtig verstanden habe, willst Du per Indexer auf die Spaltenwerte zugreifen, also z.B. mit dem Wert 5 auf die 5te Spalte zugreifen?
Die Standard-Implementierung der generierten InputXBuffer Klasse gibt es die Möglichkeit nicht. Du könntest die Klasse anpassen, um über den Index/Namen die Werte anzurufen, aber: Not supported und bei jeder Änderung an der Skript Komponente warden
Deine Änderungen überschrieben.
Die Anpassung an der "BufferWrapper.vb" können so aussehen (Anpassung in fett):
<CLSCompliant(False)> _
Public Class Input0Buffer
Inherits ScriptBuffer
Public Sub New(ByVal Buffer As PipelineBuffer, ByVal BufferColumnIndexes As Integer(), ByVal OutputMap As OutputNameMap)
MyBase.New(Buffer, BufferColumnIndexes, OutputMap)
End Sub
Public ReadOnly Property GetValue(ByVal index As Integer) As Object
Get
Return Buffer.Item(index)
End Get
End Property
Public ReadOnly Property GetValue(ByVal name As String) As Object
Get
Return Buffer.Item(Me.BufferColumnIndexes(name))
End Get
End Property
Public ReadOnly Property [value1]() As Int32
Get
Return Buffer.GetInt32(Me.BufferColumnIndexes(0))
End Get
End Property
und in Deiner Skript Komponente kannst Du es so verwenden:
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim valueByIndex As Object = Row.GetValue(0)
Dim valueByName As Object = Row.GetValue("Name")
End Sub
Aber wie gesagt: Ist nicht zu empfehlen, weil die Änderungen überschrieben werden können und Du den Vorteil verlierst mit typisierten Daten zu arbeiten.
Leider ist die BufferWrapper Klasse nicht als wie sonst üblich als Partial ausgelegt, sonst könnte man seine Anpassungen in eine eigene auslagern.
Olaf Helper
[
Blog] [
Xing] [
MVP]