Cómo obtener datos de usuarios de la tabla de revisiones en COMOS mediante VBScript

Para obtener los nombres de usuario asociados a la tabla de revisiones de un documento P&ID en Siemens COMOS ("Creado por", "Revisado por" y "Aprobado o Liberado por"), utilice el método RevisionTableUser(intIdx, intUserType) del objeto de cabecera de documento (objDocHdr). Este método lee directamente los atributos del historial de revisiones del documento activo y devuelve el identificador o nombre del usuario correspondiente al índice de revisión especificado.

Tabla de contenido

Causa técnica: lectura de metadatos de revisión mediante la librería DocHeader

En Siemens COMOS, los documentos técnicos (SystemType = 29) gestionan su historial de revisiones a través de un bloque de objetos y librerías del sistema. La cabecera del documento (objDocHdr) consulta la longitud y estructura de la tabla de revisiones definida en la propiedad intRevisionTableLength de los atributos del capítulo correspondiente.

Para mostrar en la carátula o plano del documento P&ID el nombre del usuario que creó, revisó o aprobó una revisión determinada, no se debe acceder a cadenas estáticas. Se debe invocar la función de la librería de scripts @20|A80|M00|A10|M00S00002 (getDocHdr) para instanciar el objeto de cabecera y llamar al método RevisionTableUser.

Requisitos previos

  • Entorno de desarrollo: Siemens COMOS con licencias de ingeniería y permisos de modificación en el catálogo o diseño de bloques de atributos.
  • Tipo de objeto: Documento P&ID u otro plano técnico con tipo de sistema SystemType = 29.
  • Configuración del proyecto: Objeto de cabecera @20|A80|M00|A10|M00S00002 disponible en el Workset del proyecto y propiedad intRevisionTableLength definida en el capítulo de atributos.

Sintaxis del método RevisionTableUser

El método RevisionTableUser de la interfaz de cabecera de documento requiere dos parámetros numéricos de tipo entero:

VBScript

strUser = objDocHdr.RevisionTableUser(intIdx, intUserType)

Parámetros

  • intIdx: Índice de la línea en la tabla de revisiones (por ejemplo, 1 para la primera entrada o línea activa).
  • intUserType: Tipo de función de usuario en la secuencia de revisión:

    • 1: Usuario que creó la revisión ("Created by").
    • 2: Usuario que verificó o revisó la revisión ("Checked by").
    • 3: Usuario que aprobó o liberó la revisión ("Approved by" / "Released by").

Procedimiento de implementación en script de atributo

Siga estos pasos para configurar un atributo personalizado que muestre automáticamente la firma o nombre del usuario en el cajetín del documento:

  1. Abrir el editor del atributo: En la base de datos de COMOS, acceda a las propiedades del atributo asignado a la carátula del plano donde se mostrará el nombre del usuario.
  2. Definir el script de cálculo: Seleccione la pestaña de Script del atributo y configure la función de detección de valor GetDisplayValue().
  3. Obtener la referencia del documento: Compruebe que el propietario del atributo corresponda a un documento válido (SystemType = "29").
  4. Instanciar la cabecera: Invoque el script central getDocHdr pasando como argumento el objeto documento y la longitud de la tabla de revisiones.
  5. Asignar la llamada del usuario: Invoque RevisionTableUser(intIdx, intUserType) asignando el segundo parámetro según el rol requerido (1, 2 o 3).

Ejemplo de código completo en VBScript

El siguiente script en VBScript se implementa dentro de la función GetDisplayValue() del atributo para consultar y devolver el usuario asignado a la revisión:

VBScript

Function GetDisplayValue()
    Dim objChapter, objDoc, objDocHdr
    Dim intRevisionTableLength, intIdx

    ' Definir el índice de la tabla de revisiones a consultar (ejemplo: fila 1)
    intIdx = 1
    GetDisplayValue = ""

    ' Obtener la referencia del capítulo y del documento propietario
    Set objChapter = ThisObj.Owner
    Set objDoc = ThisObj.GetSpecOwner

    If objDoc Is Nothing Then Exit Function
    If objDoc.SystemType <> "29" Then Exit Function ' 29 identifica objetos de tipo Documento

    ' Leer la longitud de la tabla de revisiones parametrizada
    intRevisionTableLength = ""
    On Error Resume Next
    intRevisionTableLength = objChapter.ScriptEngine.ScriptObject.intRevisionTableLength
    On Error GoTo 0

    ' Obtener el objeto de cabecera del documento mediante la librería del proyecto
    If intRevisionTableLength <> "" Then
        Set objDocHdr = Project.Workset.Lib.CallScriptLib("@20|A80|M00|A10|M00S00002", "getDocHdr", objDoc, intRevisionTableLength)

        If Not objDocHdr Is Nothing Then
            ' Seleccionar la llamada según el rol de usuario requerido:
            ' 1 = Creado por (Created)
            ' 2 = Revisado por (Checked)
            ' 3 = Aprobado por (Released/Approved)
            GetDisplayValue = objDocHdr.RevisionTableUser(intIdx, 1)
        End If
    End If
End Function

Verificación

El procedimiento de consulta de datos de revisión en COMOS se ha ejecutado correctamente cuando:

  • El atributo en el cajetín del plano P&ID muestra el nombre del usuario correspondiente tan pronto como la revisión se crea, verifica o libera en el sistema.
  • Al cambiar el índice intUserType entre 1, 2 y 3, el atributo devuelve respectivamente los identificadores del creador, revisor y aprobador definidos en el historial de revisiones.
  • La ejecución del script no genera errores de tiempo de ejecución (runtime errors) cuando el documento no tiene revisiones creadas o la tabla de revisiones está vacía.

Limitaciones y precauciones operativas

  • Dependencia de la librería del proyecto: La llamada Project.Workset.Lib.CallScriptLib depende de la ruta fija @20|A80|M00|A10|M00S00002. Si la estructura de la base de datos del proyecto COMOS ha sido personalizada o reestructurada, confirme la ubicación exacta de la función getDocHdr.
  • Manejo de valores nulos: Si una revisión ha sido creada pero aún no ha completado las etapas de verificación o aprobación, las llamadas con intUserType = 2 o intUserType = 3 devolverán una cadena vacía. Asegúrese de validar el resultado antes de concatenarlo en cadenas de texto.
  • Tipos de objeto: Verifique que el script se aplique exclusivamente a objetos cuyo SystemType sea "29". Aplicar este código a objetos de ingeniería o carpetas causará la salida inmediata de la función o errores de objeto no encontrado.

Preguntas frecuentes para ingenieros

¿Cómo se obtiene el nombre del usuario de la última revisión en lugar de una fila fija?

Para consultar la revisión más reciente en lugar de un índice fijo (intIdx = 1), se debe calcular dinámicamente el número total de filas activas en la tabla de revisiones utilizando la propiedad correspondiente en objDocHdr antes de invocar el método RevisionTableUser.

¿Qué diferencia existe entre RevisionTableUser y RevisionTableLabel?

RevisionTableLabel(intIdx) devuelve la etiqueta o número de identificación de la revisión (por ejemplo, "Rev. A" o "01"), mientras que RevisionTableUser(intIdx, intUserType) devuelve el nombre del usuario asignado a una de las tres fases del flujo de trabajo de la revisión.

¿Por qué la función getDocHdr devuelve un objeto vacío (Nothing)?

Esto ocurre si el parámetro intRevisionTableLength es una cadena vacía o nula, o si la librería de scripts @20|A80|M00|A10|M00S00002 no existe en la estructura de base de datos del proyecto activo. Verifique la configuración del capítulo de atributos en la plantilla del documento.

Artículos relacionados

Etiquetas relacionadas

Code: C298

6 respuestas