Power Builder - JeinnerH

 
Vista:
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

JeinnerH

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
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

JeinnerH

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