Power Builder - JeinnerH

   
Vista:
Compañeros, aquí les dejo un código que hice para insertar un registro de un DW a otro. El código está interesante.

Se ejecuta de la siguiente forma:
f_agregar_registro_dw_campos({'Campo1', 'Campo2=Campo4', 'Campo3'}, dw_Origen, <Número Registro Origen>, dw_Destino, ls_Error)

$PBExportHeader$f_agregar_registro_dw_campos.srf
global type f_agregar_registro_dw_campos from function_object
end type

forward prototypes
global function integer f_agregar_registro_dw_campos (string asa_lista_campos[], datawindow adw_fuente, integer ai_registro_fuente, datawindow adw_destino, ref string as_error)
end prototypes

global function integer f_agregar_registro_dw_campos (string asa_lista_campos[], datawindow adw_fuente, integer ai_registro_fuente, datawindow adw_destino, ref string as_error);Any lany_Valor_Origen
Integer li_Campo, li_Posicion, li_Registro_Agregado
String ls_Campo_Origen, ls_Campo_Destino



li_Registro_Agregado=0
For li_Campo=1 to UpperBound(asa_Lista_Campos)
// Verificar si el Nombre en el DW Destino es Otro.
li_Posicion=Pos(asa_Lista_Campos[li_Campo], '=')
If li_Posicion > 0 Then
// Recuperar Nombre Del Campo Origen.
ls_Campo_Origen=Left(asa_Lista_Campos[li_Campo], li_Posicion-1)

// Recuperar Nombre Del Campo Destino.
ls_Campo_Destino=Right(asa_Lista_Campos[li_Campo], li_Posicion+1)

Else
// El Nombre Del Campo en el DW Destino es el Mismo Que el Del Origen.
ls_Campo_Origen=asa_Lista_Campos[li_Campo]
ls_Campo_Destino=ls_Campo_Origen
End If

// Verificar Campo Origen Válido.
If adw_fuente.Describe(ls_Campo_Origen+'.ID') = '!' Then
as_Error='No es posible localizar el Campo('+asa_Lista_Campos[li_Campo]+') en la información de Origen'
RETURN -1
End If

// Verificar Campo Destino Válido.
If adw_destino.Describe(ls_Campo_Destino+'.ID') = '!' Then
as_Error='No es posible localizar el Campo('+asa_Lista_Campos[li_Campo]+') en la información Destino'
RETURN -1
End If

// Obtener Valor Origen.
li_Posicion=Integer(adw_fuente.Describe(ls_Campo_Origen+'.ID'))
lany_Valor_Origen=adw_fuente.Object.Data[ai_registro_fuente, li_Posicion]

If li_Registro_Agregado = 0 Then &
li_Registro_Agregado=adw_destino.InsertRow(0)

If li_Registro_Agregado <= 0 Then
as_Error='Se ha producido ERROR al agregar el registro a la información Destino'
RETURN -1
End If

// Asignar el Valor en el DW Destino.
If adw_destino.SetItem(li_Registro_Agregado, ls_Campo_Destino, lany_Valor_Origen) <= 0 Then
as_Error='No fue posible asignar el Campo('+ls_Campo_Destino+') en la información Destino'
RETURN -1
End If
Next

RETURN li_Registro_Agregado
end function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Por favor corregir la función a la siguiente. Le corregí la forma en la que extrae el nombre del campo destino, si no es el mismo que el origen.

$PBExportHeader$f_agregar_registro_dw_campos.srf
global type f_agregar_registro_dw_campos from function_object
end type

forward prototypes
global function integer f_agregar_registro_dw_campos (string asa_lista_campos[], datawindow adw_fuente, integer ai_registro_fuente, datawindow adw_destino, ref string as_error)
end prototypes

global function integer f_agregar_registro_dw_campos (string asa_lista_campos[], datawindow adw_fuente, integer ai_registro_fuente, datawindow adw_destino, ref string as_error);Any lany_Valor_Origen
Integer li_Campo, li_Posicion, li_Registro_Agregado
String ls_Campo_Origen, ls_Campo_Destino



li_Registro_Agregado=0
For li_Campo=1 to UpperBound(asa_Lista_Campos)
// Verificar si el Nombre en el DW Destino es Otro.
li_Posicion=Pos(asa_Lista_Campos[li_Campo], '=')
If li_Posicion > 0 Then
// Recuperar Nombre Del Campo Origen.
ls_Campo_Origen=Left(asa_Lista_Campos[li_Campo], li_Posicion-1)

// Recuperar Nombre Del Campo Destino.
ls_Campo_Destino=Right(asa_Lista_Campos[li_Campo], Len(asa_Lista_Campos[li_Campo]) - li_Posicion)

Else
// El Nombre Del Campo en el DW Destino es el Mismo Que el Del Origen.
ls_Campo_Origen=asa_Lista_Campos[li_Campo]
ls_Campo_Destino=ls_Campo_Origen
End If

// Verificar Campo Origen Válido.
If adw_fuente.Describe(ls_Campo_Origen+'.ID') = '!' Then
as_Error='No es posible localizar el Campo('+asa_Lista_Campos[li_Campo]+') en la información de Origen'
RETURN -1
End If

// Verificar Campo Destino Válido.
If adw_destino.Describe(ls_Campo_Destino+'.ID') = '!' Then
as_Error='No es posible localizar el Campo('+asa_Lista_Campos[li_Campo]+') en la información Destino'
RETURN -1
End If

// Obtener Valor Origen.
li_Posicion=Integer(adw_fuente.Describe(ls_Campo_Origen+'.ID'))
lany_Valor_Origen=adw_fuente.Object.Data[ai_registro_fuente, li_Posicion]

If li_Registro_Agregado = 0 Then &
li_Registro_Agregado=adw_destino.InsertRow(0)

If li_Registro_Agregado <= 0 Then
as_Error='Se ha producido ERROR al agregar el registro a la información Destino'
RETURN -1
End If

// Asignar el Valor en el DW Destino.
If adw_destino.SetItem(li_Registro_Agregado, ls_Campo_Destino, lany_Valor_Origen) <= 0 Then
as_Error='No fue posible asignar el Campo('+ls_Campo_Destino+') en la información Destino'
RETURN -1
End If
Next

RETURN li_Registro_Agregado
end function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar