Ver Mensaje Individual
  #5 (permalink)  
Antiguo 16/05/2006, 08:59
mcEmmanuel
 
Fecha de Ingreso: abril-2006
Mensajes: 40
Antigüedad: 18 años, 10 meses
Puntos: 0
Te comentaba que yo habia hecho algo parecido, a lo mejor te es util..

Las funciones y su resultado los maneje como xml.
Primero hice un xsd en donde defini la peticion, el cual me sirve para validar el xml de entrada, todos los xml y xsd los defini como dataset aunque creo que no es necesario.

el xml por ejemplo tiene la siguiente estructura

<companies> --Nombre de la transacion
<CompanyByID> -- Nombre de la funcion
<ID>356</ID> -- elementos o parametros
<CompanyByID>
</companies>

al enviar este documento xml a la llamada de funcion se hace lo sig.
primero el xml lo pase como XmlElement

ByVal Request As XmlElement
Request.Name 'Es el nombre de la transaccion
Request.FirstChild.Name 'es el nombre de la funcion

Con estos dos datos leo el xsd correspondiente el cual lo estructure con carpetas de la sig forma
Nombre de la transaccion
Nombre de la funcion.xsd

en este caso
Companies/CompanyByID.xsd

si no encuentro el xsd regreso un xml de error, ademas defini una lista de errores con un numero y detalles del error segun sea el caso, si fue por un try entonce en el detalle envie el ex.tostring
+- el xml de error
<Site>
<Error>
<CodeError>704</CodeError>
<English>Missing customer data. 'Customer' table</English>
<Spanish>Faltan datos del cliente. 'Customer' table</Spanish>
<Details/>
</Error>
<Site>


Me apolle en un dataset para leer el xml de errores y filtrar el que necesito.
despues lo que sige es
Validar el esquema

si todo esta bien, entonces obtengo el nombre del procedimiento y leo los parametros
por ejemplo el nombre de mi procedimiento lo creo asi

dim spName as string="sp{0}_get{1}"
spName = String.Format(spName, nameTransacction, nameFunction)

los parametros

Dim parameters As NameValueCollection
Dim xmlParameters As XmlNode = Request.FirstChild
If Not xmlParameters Is Nothing Then
parameters = New NameValueCollection
For Each Node As XmlNode In xmlParameters
parameters.Add(Node.Name, Node.InnerText)
Next
End If

Para crear la llamada al procedimiento

Dim sqlDa As SqlDataAdapter = New SqlDataAdapter(spName, AppSettings("Connection"))

With sqlDa.SelectCommand
.CommandType = CommandType.StoredProcedure
For i As Integer = 0 To spParameters.Count - 1
Dim sqlParam As New SqlParameter("@" & spParameters.GetKey(i), spParameters.GetValues(i)(0))
.Parameters.Add(sqlParam)
Next
End With

Y es todo...

Como puedes ver con solo llamar a una funcion puedo invocar varios procedimientos almacenados no solo uno y solo cambio mi xsd o creo uno nuevo y un xml con un respectivo procedimiento sin tener que cambiar el codigo.

Espero te sea util.
Un saludo.