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: xxxxkey: xxxxxxxxxxapi:sefycu: https://pre-46xxx.sedipualba.es/sefycu/wssefycu.asmx?wsdlsegra: https://pre-46xxx.sedipualba.es/sefycu/wssegra.asmx?wsdlsegex: https://pre-46xxx.sedipualba.es/segex/wssegex.asmx?wsdlseres_registro: https://pre-46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdlseres_ciudadano: https://pre-46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdldirectorio: https://pre-46xxx.sedipualba.es/wsdirectorio.asmx?wsdlsello: https://pre-46xxx.sedipualba.es/firma/wsselloelectronico.asmx?wsdlnotificaciones: https://pre-46xxx.sedipualba.es/sefycu/wsnotificaciones.asmxentidad: 46xxxdir3: L0146xxxdestino_registro: 16517destino_factures: 18847prod:username: xxxxkey: xxxxxxxxxxapi:sefycu: https://46xxx.sedipualba.es/sefycu/wssefycu.asmx?wsdlsegra: https://46xxx.sedipualba.es/sefycu/wssegra.asmx?wsdlsegex: https://46xxx.sedipualba.es/segex/wssegex.asmx?wsdlseres_registro: https://46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdlseres_ciudadano: https://46xxx.sedipualba.es/seres/Servicios/wsseresregistro.asmx?wsdldirectorio: https://46xxx.sedipualba.es/wsdirectorio.asmx?wsdlsello: https://46xxx.sedipualba.es/firma/wsselloelectronico.asmx?wsdlnotificaciones: https://46xxx.sedipualba.es/sefycu/wsnotificaciones.asmxentidad: 46xxxdir3: L0146xxxdestino_registro: 26265destino_factures: 24180xml: ><?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-8Content-Type: text/xml; charset=utf-8xmlns :sefycu: https://eadmin.dipualba.es/sefycu/wssefycu.asmxsegra: https://eadmin.dipualba.es/sefycu/wssegra.asmxsegex: https://eadmin.dipualba.es/segex/wssegex.asmxseres_registro: http://sedipualba.es/wsSeresV1.2seres_ciudadano: http://sedipualba.es/wsSeresV1directorio: https://sedipualba.es/wsdirectorio.asmxsello: http://www.sedipualba.es/firma/WSSelloElectronico.asmxnotificaciones: /admin/#----------------------------------------------------------------------------------------# 02. CASTILLA#----------------------------------------------------------------------------------------castilla:api_url: https://rrhh-xxxxxxxx.grupocastilla.es/epsilonnetws/WSEmpleado.asmx?wsdlheaders :Content-Type: application/soap+xml; charset=utf-8token: ><TOKEN><AppName>$APPNAME$</AppName><AppToken>xxxxxxx</AppToken></TOKEN>appName: xxxx_APPSnombreTabla: PERSONASxml: ><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%'"#------------------------------------------------------@staticmethoddef writeDataToFileAbsolute(absoluteFileNamePath, data):fileOut=open(absoluteFileNamePath,"w") # RewritefileOut.write(data)fileOut.close@staticmethoddef writeDataToFileRelativeFile(relativeFileNamePath, data):#fileName = sys.path[0] + "/../my-python-programs-output/p01-request-01.output.xml"fileName = sys.path[0] + "/" + relativeFileNamePathprint ('fileName:',fileName)fileOut=open(fileName,"w") # RewritefileOut.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#------------------------------------------------------@staticmethoddef getElementByTag(xmlString, tagString):elem=ET.fromstring(xmlString)tabla=elem.taglevel=0while tabla!=tagString and level<10:elem=elem[0]tabla=elem.taglevel+=1return elem#------------------------------------------------------# Get an array of records as an array of dictionaries# params:# 1. firstElem: xml string to read#------------------------------------------------------@staticmethoddef 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.textdictio[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