martes, 20 de febrero de 2024

Python (II) Web Services Client (II) . Sedipualba & Castilla. Tablas importantes de Castilla

 Vamos a ver como mejoreamos el programa anterior para que también pueda ejecutar WS de Sedipualba.

1. Fichero de configuración YAML

Separamos la información de Castilla y la de Sedipualba. Los campos marcados con varias "x" son campos que cada uno debe de rellenar en base a su personalización. Este fichero lo he llamado x02_Config.yml


#----------------------------------------------------------------------------------------
# 01. SEDIPUALBA
#----------------------------------------------------------------------------------------
sedipualba:
demo:
username: xxxx
key: xxxxxxxxxx
api:
sefycu: https://pre-46xxx.sedipualba.es/sefycu/wssefycu.asmx?wsdl
segra: https://pre-46xxx.sedipualba.es/sefycu/wssegra.asmx?wsdl
segex: https://pre-46xxx.sedipualba.es/segex/wssegex.asmx?wsdl
seres_registro: https://pre-46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdl
seres_ciudadano: https://pre-46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdl
directorio: https://pre-46xxx.sedipualba.es/wsdirectorio.asmx?wsdl
sello: https://pre-46xxx.sedipualba.es/firma/wsselloelectronico.asmx?wsdl
notificaciones: https://pre-46xxx.sedipualba.es/sefycu/wsnotificaciones.asmx
entidad: 46xxx
dir3: L0146xxx
destino_registro: 16517
destino_factures: 18847
prod:
username: xxxx
key: xxxxxxxxxx
api:
sefycu: https://46xxx.sedipualba.es/sefycu/wssefycu.asmx?wsdl
segra: https://46xxx.sedipualba.es/sefycu/wssegra.asmx?wsdl
segex: https://46xxx.sedipualba.es/segex/wssegex.asmx?wsdl
seres_registro: https://46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdl
seres_ciudadano: https://46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdl
directorio: https://46xxx.sedipualba.es/wsdirectorio.asmx?wsdl
sello: https://46xxx.sedipualba.es/firma/wsselloelectronico.asmx?wsdl
notificaciones: https://46xxx.sedipualba.es/sefycu/wsnotificaciones.asmx
entidad: 46xxx
dir3: L0146xxx
destino_registro: 26265
destino_factures: 24180

xml: >
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<$FUNCTION$ xmlns="$XMLNS$">
<wsSegUser>$USERNAME$</wsSegUser>
<wsSegPass>$KEY$</wsSegPass>
<idEntidad>$ENTIDAD$</idEntidad>
$PARAMETERS$
</$FUNCTION$>
</soap:Body>
</soap:Envelope>
headers :
#Content-Type: application/soap+xml; charset=utf-8
Content-Type: text/xml; charset=utf-8

xmlns :
sefycu: https://eadmin.dipualba.es/sefycu/wssefycu.asmx
segra: https://eadmin.dipualba.es/sefycu/wssegra.asmx
segex: https://eadmin.dipualba.es/segex/wssegex.asmx
seres_registro: http://sedipualba.es/wsSeresV1.2
seres_ciudadano: http://sedipualba.es/wsSeresV1
directorio: https://sedipualba.es/wsdirectorio.asmx
sello: http://www.sedipualba.es/firma/WSSelloElectronico.asmx
notificaciones: /admin/
#----------------------------------------------------------------------------------------
# 02. CASTILLA
#----------------------------------------------------------------------------------------
castilla:
api_url: https://rrhh-xxxxxxxx.grupocastilla.es/epsilonnetws/WSEmpleado.asmx?wsdl
headers :
Content-Type: application/soap+xml; charset=utf-8
token: >
&lt;TOKEN&gt;
&lt;AppName&gt;$APPNAME$&lt;/AppName&gt;
&lt;AppToken&gt;xxxxxxx&lt;/AppToken&gt;
&lt;/TOKEN&gt;
appName: xxxx_APPS
nombreTabla: PERSONAS
xml: >
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<ConsultaGenericaBD_XML xmlns="http://www.grupocastilla.es/epsilonnetws">
<sToken>$TOKEN$</sToken>
<nombreTabla>$TABLA$</nombreTabla>
<condicion>$CONDICION$</condicion>
</ConsultaGenericaBD_XML>
</soap:Body>
</soap:Envelope>


2. Clases de utilidad para trabajar con ficheros yXML

La primera clase es simple y es para escribir datos a un fichero ya sea en ruta absoluta o relativa

La segunda es para hacer unas pocas cosas con XML

Veamos el primer fichero u02_File.py 

import sys

'''
File Utils
'''

class FileUtils:
#------------------------------------------------------
# 01. Create the XML for making the WS call
# params:
# 1. condicion for instance "APELLIDO1 LIKE '%PEREZ%'"
#------------------------------------------------------
@staticmethod
def writeDataToFileAbsolute(absoluteFileNamePath, data):
fileOut=open(absoluteFileNamePath,"w") # Rewrite
fileOut.write(data)
fileOut.close

@staticmethod
def writeDataToFileRelativeFile(relativeFileNamePath, data):
#fileName = sys.path[0] + "/../my-python-programs-output/p01-request-01.output.xml"
fileName = sys.path[0] + "/" + relativeFileNamePath
print ('fileName:',fileName)
fileOut=open(fileName,"w") # Rewrite
fileOut.write(data)
fileOut.close


Veamos el segundo fichero u02_XML.py 

import xml.etree.ElementTree as ET

'''
XML Utils
'''
class XMLUtils:
#------------------------------------------------------
# Get a XML by tab
# params:
# 1. firstElem: xml string to read
#------------------------------------------------------
@staticmethod
def getElementByTag(xmlString, tagString):
elem=ET.fromstring(xmlString)
tabla=elem.tag
level=0
while tabla!=tagString and level<10:
elem=elem[0]
tabla=elem.tag
level+=1
return elem

#------------------------------------------------------
# Get an array of records as an array of dictionaries
# params:
# 1. firstElem: xml string to read
#------------------------------------------------------
@staticmethod
def getRecordsCastilla(firstElem):
records=[]
for secondElem in firstElem: # REGISTRO
#print('100 ',secondElem.tag, secondElem.attrib, secondElem.text)
dictio={}
for thirdElem in secondElem: # CAMPO
#print('200 ',thirdElem.tag, '--', thirdElem.attrib,'----', thirdElem.text)
att = thirdElem.attrib['NOMBRE']
value = thirdElem.text
dictio[att]=value
#print ('dictio=',dictio)
records.append(dictio)
return records


Tablas importantes

PUES_TRAB

    - id_trabajador: ('00075'???)

    -id_nivel ('00068')

    -id_secuencia ('004')


NIV_ORB

    -id_nivel ('00068')

    -d_nivel ("Tecnic nivell xx informatica")

    -id_puesto ('00013')


TRABAJADORES

    -id_empresa

    -id_trabajador

    -id_secuencia

Y ya buscamos en PERSONAS para obtener el resto de dtos

No hay comentarios :

Publicar un comentario