====== PBtoWS - Procesos - Backend Powerbuilder (WS-SOAP) - Estándares de Desarrollo - Nomenclatura: Powerbuilder ====== Este capitulo contiene información relacionada con la nomenclatura de códificación para el lenguaje Powerbuilder, la cual ha sido definida por la organización. Se implementará la nomenclatura estandar sugerida por sybase/SAP. La cual puede consultarse desde la url: http://www.pbdr.com/pbstd/varnmstd.htm ===== Organización de los Componentes ===== Todos los componentes que se definan en el proceso de migración y posteriomente en el legunaje Powerbuilder que sean expuestos en servicios SOAP por medio del framework PBtoWS SICOF deben seguir los siguientes lineamientos: ==== Tabla de Código de Aplicaciones ==== ^ Aplicación ^ Prefijo ^ |Presupuesto|01| |Tesorería|02| |Contabilidad|03| |Compras|04| |Nómina|05| |Talento|10| |Core/Framework/Main|00| Cualquier nueva aplicación que se defina y que impacte los componentes Backend debe ser definida en esta tabla. ==== Tipos de Librerías ==== * **Librerías Lanzadoras**: Son las que exponen las operaciones de los servicios SOAP (Generan la estructura del WSDL). * **Librerías Invocadoras**: Contienen las clases que orquestan la ejecución de los procesos asociados a las operaciones de los servicios expuestos. * **Librerías Modelo (Lógica del Negocio)**: Contiene las clases de la lógica del negocio. ==== Capas de Implementación ==== * **Capa Core**: Capa relacionada con los procesos internos de ejecución. Por lo general está asociada a las operaciones del Framework. * **Capa Controller**: Capa relacionada con los procesos de orquestación de servicios. * **Capa Model**: Capa relacionada con los procesos de la lógica del negocio (código migrado). ==== Prefijos ==== * **ws: (WebService)**: Prefijo asociado a la exposición de servicios. Es utilizado por las librerías lanzadoras. * **sf: (Software)**: Prefijo asociado a las librerias de implementación de los procesos y la exposición de los servicios. ==== Librerías ==== Se deben crear respetando las siguientes convenciones de acuerdo a la capa de implementación (se toma como ejemplo el componente Login): ^ Tipo Libreria ^ Prefijo ^ Código Aplicación ^ Capa de implementación ^ Nombre Componente ^ Ejemplo ^ |Lanzadora|ws|00|No Aplica|login|ws00_login.pbl| |Invocadora|sf|00|Controller|login|sf00controller_login.pbl| |Modelo|sf|00|Model|login|sf00model_login.pbl| === Observaciones === * Todos los nombres de librerías deben ser en minuscula. * La capa de implementación de la libreria Lanzadora no aplica porque esa capa es gestionada automaticamente por powerbuilder al desplegar las operaciones de los servicios SOAP. * Los nombres pueden contener el separador _ * Los nombres deben representar las funcionalidades contenidas, debe evitar acronimos. * Los nombres no deben estar duplicados incluso en otros proyectos. ==== Codificación ==== === Calificadores de Alcance === ^ Alcance ^ Prefijo ^ Ejemplo ^ Restricciones ^ |Argumento|a|al_variable|Ninguna| |Global|g|gl_variable|No permita en la implementación| |Instance|i|il_variable|Ninguna| |Local|l|ll_variable|Ninguna| |Shared|s|sl_variable|No permita en la implementación| === Calificadores de Alcance === ^ Tipo Dato ^ Prefijo ^ Ejemplo ^ Observaciones ^ |Any|a|la_raw|Solo se puede utilizar en las librerias Modelo| |Blob|blb|lblb_image|Se recomienda hacer uso limitado de este tipo y solo en las librerías Modelo| |Boolean|b|lb_exit| | |Character|c|lc_letra| | |Date|d|ld_fecha|Evaluar el uso de este tipo en procesos que van a la base de datos. Se recomienda usar el tipo Datetime| |Datetime|dt|ldt_fecha| | |Decimal|dec|ldec_numero| | |Double|db|ldb_numero| | |Integer|i|li_numero| | |Long|l|ll_numero| | |Real|r|lr_numero|Se recomienda el uso del tipo Double| |String|s|ls_cadena| | |Time|t|lt_tiempo|Evaluar el uso de este tipo en procesos que van a la base de datos. Se recomienda usar el tipo Datetime| |Unsigned Integer|ui|lui_numero| | |Unsigned Long|ul|lul_numero| | === Prefijos de Tipo de Datos de Objetos Estándar === ^ Tipo Dato ^ Prefijo ^ Código Aplicación ^ Ejemplo ^ Observaciones ^ |Application|ws|00|ws00_login|Solo para proyectos de exposición de servicios | |Application|app|00|app00_login|Solo para proyectos de consumo de servicios (Proxy) | |ClassDefinition|cldef| |lcldef_Object| | |ClassDefinitionObject|cldefo| |lcdefo_ThatObject| | |Connection|cn| |lcn_Known| | |ConnectionInfo|cni| |lcni_ServerInfo| | |ConnectObject|cno| |scno_ConObj| | |Datastore|ds| |lds_source| | |Datawindow Grid|dwg| |dwg_lista|Solo aplica para la definición del control (dataobject). No para utilización en la implementación (se usa datastore)| |Datawindow Free|dwf| |dwf_consulta|Solo aplica para la definición del control (dataobject). No para utilización en la implementación (se usa datastore)| |DynamicDescriptionArea|dda| |ldda_Execute| | |DynamicStagingArea|dsa| |ldsa_MyQuery| | |EnumerationDefinition|enum| |lenum_Cycle| | |EnumerationItemDefinition|enumi| |ienumi_Item| | |Environment|env| |lenv_System| | |Error|err| |gerr_Snarl| | |ExtObject|exto| |gexto_Outside| | |Function_Object|of| |of_Function| | |iNet|inet| |linet_Web| | |InternetResult|ir| |lir_Page| | |MailFileDescription|mfd| |lmfd_Mail| | |MailMessage|mm| |lmm_Mail| | |MailRecipient|mr| |lmr_Mail| | |MailSession|ms| |lms_Session| | |NonVisualObject|nvo| |lnvo_Invisible| | |OLEObject|oo| |loo_Ghost| | |OLEStorage|ostg| |gostg_WordFile| | |OLEStream|ostm| |lostm_River| | |OMObject|omo| |iomo_Bob| | |OMStorage|omstg| |somstg_Drive| | |OMStream|omstm| |lomstm_Mersey| | |PBtoCPPObject|pb2cpp| |lpb2cpp_Quad| | |Pipeline|pl| |lpl_OilandGas| | |Powerobject|po| |lpo_Source| | |ProfileCall|prc| |lprc_Face| | |ProfileClass|prcl| |lprcl_Room| | |ProfileLine|prl| |iprl_Bob| | |ProfileRoutine|prr| |lprr_Cat| | |Profiling|pr| |lpr_Outline| | |RemoteObject|ro| |iro_Employee| | |ScriptDefinition|sdef| |lsdef_Mycode| | |Service|srv| |lsrv_Charge| | |SimpleTypeDefinition|std| |istd_MyType| | |Structure|str| |lstr_Data| | |SystemFunctions|sf| |lsf_Bay| | |Timing|tmg| |ltmg_Clock| | |TraceActivityNode|tran| |ltran_Node| | |TraceBeginEnd|trbe| |ltrbe_Start| | |TraceError|tre| |ltre_Error| | |TraceFile|trf| |itrf_TraceFile| | |TraceGarbageCollect|trgc| |itrgc_Call| | |TraceLine|trln| |strln_Rope| | |TraceObject|tro| |ltro_Bob| | |TraceRoutine|trr| |ltrr_Tiger| | |TraceSQL|trsql| |ltrsql_MySQL| | |TraceTree|trt| |ltrt_Birch| | |TraceTreeError|trte| |ltrte_Err| | |TraceTreeGarbageCollect|trtgc| |ltrtgc_Trash| | |TraceTreeLine|trtl| |ltrtl_String| | |TraceTreeNode|trtn| |ltrtn_Kilt| | |TraceTreeObject|trto| |ltrto_Trace| | |TraceTreeRoutine|trtr| |ltrtr_BobGrimmer| | |TraceTreeUser|trtu| |ltrtu_User| | |TraceUser|tru| |ltru_Blue| | |Transaction|ts| |lts_Trans| | |TypeDefinition|typdef| |ltypdef_Details| | |UserObject|uo| |luo_Control| | |VariableCardinalityDefinition|vcd| |lvcd_Type| | |VariableDefinition|vd| |lvd_Sore| | === Observaciones === * Cualquier tipo de datos o control no definido en la tabla anterior no debe ser utilizado en la generación de componentes ni en el consumo de proxys. === Convención de nombres de clases === == Prefijos de clases == ^ Clase ^ Prefijo ^ Código Aplicación ^ Ejemplo ^ Observaciones ^ |Standard Class User Object|n_| |n_ds|Esta nomenclatura se puede ignorar si se mantiene el nombramiento de variables y calificadores de acceso Ej: lds_source para datastore| |Custom Class User Object|n_cst_| |n_cst_customer| | |Global Structure|s_| |s_point| | == Nombramiento de clases: Custom Class User Object == ^ Tipo de Clase ^ Capa de Implementación ^ Prefijo ^ Ejemplo ^ Observaciones ^ |Controller|Controller|n_cst_controller_|n_cst_controller_login|Se recomienda una sola implementación por componente| |Service|Controller|n_cst_service_|n_cst_service_login|Se recomienda una sola implementación por componente| |Model|Model|n_cst_|n_cst_login|Pueden existir varias clases modelo dependiendo de la complejidad del componente| === Observaciones === * Cualquier tipo de datos o control no definido en la tabla anterior no debe ser utilizado en la generación de componentes ni en el consumo de proxys. === Convención de nombres de Tipos de Datawindows === ^ Clase ^ Prefijo ^ Código Aplicación ^ Ejemplo ^ Observaciones ^ |Grid|dwg_| |dwg_prueba| | |Free o para Filtros|dwf_| |dwf_prueba| | |External|dwe_| |dwe_prueba| | === Observaciones === * Cualquier tipo de datawindows no definido en la tabla anterior no debe ser utilizado en la generación de componentes ni en el consumo de proxys. === Convención de nombres de funciones === ^ Tipo ^ Prefijo ^ Código Aplicación ^ Ejemplo ^ Observaciones ^ |Function Object|of_| |of_calcular_saldo| | |Function Set|set_| |set_valor| | |Function Get|get_| |get_valor| | === Observaciones === * No debe utilizar funciones globales. ==== Recomendaciones: ==== La siguientes recomendaciones no imponen reglas de utilización sin embargo trate en lo posible de aplicarlas ya que el hacerlo optimiza el código generado: * Evite el uso de variables globales. * No utilice cursores en el código (utilice datastore). * Evite el uso de funciones globales (agrupelas en objetos no visuales). * Evite el uso de la tabla Dummy (utilice datawindows external). * Evite el uso de la función RowCount() en un bucle Ej: for i = 1 to ldwg_prueba.RowCount ya que implica un consumo excesivo de ram en su lugar asigne el valor una variable y utilicela en la definición del bucle. * Evite el uso del tipo de dato Date en su lugar utilice el tipo Datetime. * No debe utilizar el tipo de datos Any en la capa de implementacion controller, solo puede ser utilizado en la capa model ya que las conversiones implicitas pueden generar comportamientos indefinidos y excepciones en tiempo de ejecución. * El valor Nulo solo es permitido en las asignaciones implicitas setNull y en los valores de retornos de la base de datos.