16/05/2006, 08:59
|
| | Fecha de Ingreso: abril-2006
Mensajes: 40
Antigüedad: 18 años, 8 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. |