Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Curso migración de aplicaciones nsl nk90 a tmp

670 views

Published on

Curso de migracion de aplicaciones

Published in: Business
  • Be the first to comment

  • Be the first to like this

Curso migración de aplicaciones nsl nk90 a tmp

  1. 1. Sixbell Nekotec Solutions
  2. 2.  Consideraciones para la migración. Diferencias en las funciones de NK90 y TMP. Diseño de aplicaciones en TMP. Pruebas y debug en TMP. Mejores practicas.
  3. 3.  Conocimiento de funciones NSL en NK90. Maqueta para pruebas. Marcación de prueba.
  4. 4. Los scripts y audios deben estar colocados de una formaestandar para poder llamar a scripts y audios de igualmanera en todas las aplicaciones.
  5. 5.  Para llamar a un script local del proyecto ◦ sScriptRutinas = “264_rutinas.nek”; Para llamar a un audio local ◦ sAudiosBienvenida = “audios/bienvenida.wav”; Para llamar a un script externo al proyecto ◦ sScript264 = http://localhost:8080/264/264/264.nek;
  6. 6.  Para manejo de archivos de la aplicación, estos se guardan localmente en el MR, estos deben guardar se en la ruta estándar: ◦ /opt/sns/app/<aplicación> ◦ Ejemplo: ◦ /opt/sns/app/fax ◦ /opt/sns/app/buzon ◦ /opt/sns/app/log
  7. 7.  PlayMessage. ◦ Esta función recibe como parámetro el nombre del archivo a reproducirse, para TMP se coloca la ruta relativa si el archivo esta en el directorio del proyecto o la URL si el archivo esta en otro proyecto. PlayMessage("audios/nombre_de_audio.wav"); RaiseScript y ExecuteScriptFunction ◦ Colocar solo el nombre del archivo a invocar si esta dentro del proyecto o toda la URL si esta en otro proyecto RaiseScript("111_CAC.nek",0,1); StringFormatEx(sScriptMenu3G, "%s/264/264/3G/menu3 G.nek", sHttpBAS); ExecuteScriptFunction (sScriptMenu3G, "", sTemp, iResult,sDynData,sDyn Data);
  8. 8.  CallInfo ◦ Las transferencias pueden ser con ForwardCall o con MakeCal lEx o MakeCallAsync en cualquiera de los 2 casos se debe de usar la estructura CALL_INFO. ◦ CallInfo.strPhoneA debe ser llenado con el número de A, solo dígitos, el intérprete lo pondrá en el formato correcto en caso de ser llamada IP ◦ CallInfo.strPhoneB debe ser llenado con el número de B, solo dígitos, el intérprete lo pondrá en el formato correcto en caso de ser llamada IP ◦ CallInfo.strNetwork debe ser llamada con PSTN_CALL en caso de llamada ISUP, R2 o ISDN ó IP_CALL en caso de llamada SIP. ◦ Ejemplo: @PHONE_B = "*0002"; @SERVICE_NAME = "IP_CALL"; CALL_INFO sCallInfo; sCallInfo = sCALL_INFO; DynamicClear(sCallInfo.sProtocolInfo); sCallInfo.strPhoneA = @PHONE_A; sCallInfo.strPhoneB = @PHONE_B; sCallInfo.strNetworkChoice = @SERVICE_NAME; ForwardCall(sCallInfo);
  9. 9.  HTTPRequest ◦ Para las peticiones HTTP se debe de usar la función HTTPRequestEx, la vieja función HTTPRequest queda depreciada para esta versión. Para usar la nueva función hay que declarar las siguientes variables. DYNAMIC_STRUCT dHTTPParams; INT iCode; INT iHttpTimeout = 20000; DynamicAdd(dHTTPParams, "TIMEOUT", iHttpTimeout); DynamicAdd(dHTTPParams, "CONNECTTIMEOUT", iHttpTimeout); La función vieja se veria asi: HttpRequest(salida,entrada,iResult,20000); ◦ La nueva queda asi: HttpRequestEx(salida, dHTTPParams, entrada, iResult, iCode); ◦ El timer que se usaba como parámetro en el HTTPRequest anterior ahora se declara en la estructura dHTTPParams.
  10. 10.  Consultas a BD [ACTPREPAGO] Application Attributes = T ◦ Las consultas a BD no Attributes = W BatchAutocommitMode = IfAllSuccessful cambian, lo que hay que BindAsFLOAT = F CloseCursor = F conocer es como hacer la DisableDPM = F configuración del ODBC. La DisableMTS = T Driver = Oracle 11g ODBC driver conexión del ODBC debe DSN = ACTPREPAGO EXECSchemaOpt = hacerse en el MR, para lo EXECSyntax = T Failover = T cual es necesario que FailoverDelay = 10 tenga instalado los drivers FailoverRetryCount = 10 FetchBufferSize = 64000 ODBC ya sea para ORACLE ForceWCHAR = F Lobs = T o para MySQL. La conexión Longs = T se declara en el archivo MetadataIdDefault = F QueryTimeout = T ResultSets = T /etc/odbcunix/odbc.ini ServerName = COSTARRICA un ejemplo de conexión SQLGetData extensions = F Translation DLL = para ORACLE es: Translation Option = 0 DisableRULEHint = T UserID = ACTPREPAGO
  11. 11. Los campos importantes son: el nombre del bloque porque ese es el nombre del DSN, DSN, en este campo va el nombre del DSN, normalmente igual al nombre del bloque. ServerName , aquí va el identificador del Host, para telcel ese server name siempre es telcel UserID, este es el usuario de la BD para conectarnos.Para probar la conexión a BD.Se usa el comando isql desde una sesión SSH en el MR:$isql DSN_NAME USER PASSWORDOtro punto importante es que si quieren usar la BD de la plataforma esta es ORACLE por lo que se deben armar los queries para este motor de BD.
  12. 12.  Fax y File ◦ Para usar las funciones de Fax y File hay que tener en cuenta las rutas recomendadas para tener organizado los archivos en el MR. String sFaxPath = “/opt/sns/apps/<apptmp>/fax”; String sFilePath = “/opt/sns/apps/<apptmp>/log”; EventLaunchCodes ◦ Los eventlauchcodes son soportados por el ControlNSL pero en vez de asociarlos a prefijos se usan directamente las rutas completas, en nuestro caso por el uso del AS se usan las URLs STRING sHttpBAS = "http://localhost:8080"; STRING sScriptOnBusy; STRING sScriptOnError; STRING sScriptOnAnswer; STRING sScriptOnAnswer; StringFormatEx(sScriptOnBusy, “%s/proyecto/proyecto/OnBusy.nek”, sHttpBAS); StringFormatEx(sScriptOnError, “%s/proyecto/proyecto/OnError.nek”, sHttpBAS); StringFormatEx(sScriptOnAnswer, “%s/proyecto/proyecto/OnAnswer.nek”, sHttpBAS); StringFormatEx(sScriptOnNoAnswer, “%s/proyecto/proyecto/OnNoAnswer.nek”, sHttpBAS); sLaunchCodes.OnAnswerSimple = sScriptOnAnswer; sLaunchCodes.OnBusy = sScriptOnBusy sLaunchCodes.OnError = sScriptOnError sLaunchCodes.OnNoAnswer = sScriptOnNoAnswer; SetEventLaunchCode(sLaunchCodes);
  13. 13.  Fecha ◦ Cuando se usa la función StringData el formato que retornado es YYYY- MM-DD, para mayor control de la fecha se recomienda usar la función StringDateEx, por ejemplo . StringDateEx("yyyy-MM-dd", strFecha); Mail ◦ Para enviar un Correo debe de usarse la function MailSend de la siguiente forma. DYNAMIC_STRUCT dMailSend; INT iResult; DynamicAdd(dMailSend, "MailServer", "mail.nekotectelecom.com"); DynamicAdd(dMailSend, "Login", "arturo.ruiz@nekotectelecom.com"); DynamicAdd(dMailSend, "Password", "XXXXXX"); DynamicAdd(dMailSend, "to.AllAddresses", "arturo_ruiz_m@hotmail.com, kaliman1 997@gmail.com"); DynamicAdd(dMailSend, "from.AllAddresses", "arturo.ruiz@nekotectelecom.com"); DynamicAdd(dMailSend, "subject", "un email desde el ControlNSL"); //DynamicAdd(dMailSend, "Text", "El texto del mensaje"); DynamicAdd(dMailSend, "TMIME.1.Text", ""); DynamicAdd(dMailSend, "MIME.2.AttachmentFile", sFileName); MailSend(dMailSend, iResult);
  14. 14.  Diseñar la Base de datos de acuerdo a los siguientes requerimientos. Datos dinámicos a consultar Catálogos a consultar Reportes Estadísticas
  15. 15.  Modularizar ◦ Script Principal con la lógica del servicio ◦ Script de variables ◦ Script(s) de configuración(es). ◦ Scripts Secundarios
  16. 16.  Cargar la aplicación en el AS y asociarle una regla, usando el SMILODON.
  17. 17.  Esperar 1 minuto para la sincronización del AS con los MRs. Marcar al número DID asociado al proyecto. Seguir el flujo de acuerdo a la prueba que se quiere hacer. Se pueden consultar los trazados que hace el ControlNSL de la ejecución del script, estos se localizan en la ruta /opt/sixlabs/var/log y el formato del nombre del log es ControlNSL-YYYYMMDD- HHMISS.txt.
  18. 18.  Es muy recomendable colocar trazados en el script para hacer un debugueo más efectivo. Para abrir el trace se puede usar el vi o puede descargarse con una aplicación de transferencia de archivos SFTP como el WinSCP, FileZilla, etc. También se puede usar el comando tail para ver en línea la ejecución:$cd /opt/sixlabs/var/log$tail -f ControlNSL-YYYYMMDD-HHMISS.txt | grep @@@
  19. 19.  Usar cuadro de datos para cada script://----------------------------------------------------------------------// Script 111.nek// Autor: Lucero Estrada// Fecha Elaboración: Abril-Junio de 2011// Descripcion: Servicio de 111 Homologado//----------------------------------------------------------------------// Actividad:// - Adaptado para R6//
  20. 20.  Versionar cada script y los audios pueden indicarse en el script principal.v.X.Y.Z/a.WX es la versión del script liberado,Y la versión del cambio,Z la versión de la corrección,W la versión del paquete de audios.Cuando X incrementa, Y y Z cambian a 0, cuando Y incrementan Z cambia a 0. W indica los cambios en los archivos de audios.Usar la variable STRING sVersion = “1.0.0”; y actualizarla en cada cambio.
  21. 21.  Los cambios en el script deben documentarse abajo del cuadro de texto://---------------------------------------------------------------------------// Actividad:// - Adaptado para R6//// Versión: 1.0.4/a.3// Realizada por: Francisco A. Mondragón// Fecha del cambio: 14-07-11 4:15p.m.// Solicitante: Arturo Ruiz//---------------------------------------------------------------------------
  22. 22.  Usar un encabezado para realizar los traces. StringFormatEx(sTrace,"[A:%s][%s][%s][v%s][B:%d-S:%d- C:%d]:",sANI,@SCRIPT_NAME,sFH,sVersion,@BOARD,@STREAM,@CHANNEL);
  23. 23.  Los nombres de las variables debe de tener un prefijo que indique el tipo:str para STRING,i para INT,s Para STRUCT,d para DYNAMIC_STRUCT.
  24. 24.  Usar rutinas para las tareas repetitivas.SUB OBTEN_IDEQUIPOExecuteScriptFunction(sScript_GetIP, "", sTemp, iResult, @DYNAMIC_STRUCT, @DYNAMIC_STRUCT);IF(iResult == 0) //bDynamicGet(@DYNAMIC_STRUCT, "IdEquipo", giID_EQUIPO);Trace("%s IDequipo: %d", sTrace,giID_EQUIPO);ELSE //bgiID_EQUIPO = 0;Trace("%s No se pudo obtener IDequipo, se fija a: %d", sTrace,giID_EQUIPO);END_IF //bEND_SUBCALL_SUB OBTEN_IDEQUIPO
  25. 25.  Migrar un script de NK90 a NSL TMP

×