(c) 1998 Microsoft Corporation. Reservados todos los derechos.
El Léame de Repository incluye información actualizada acerca de la documentación que se proporciona con el sistema de desarrollo para Windows e Internet Microsoft(r) Visual Studio. La información de este documento está más actualizada que la información del sistema de Ayuda. Muchos de los problemas que se tratan en este documento se corregirán en versiones posteriores.
Para cuestiones de información general sobre el conjunto de productos Visual Studio 6.0, incluida la instalación conjunta de productos, consulte el archivo Léame de Notas de instalación (install.htm).
Para las demás cuestiones sobre el sistema de Ayuda del conjunto de productos Visual Studio, consulte el archivo Léame de MSDN™ Microsoft Developer Network.
Importante: Esta sección contiene información vital acerca de la instalación de Repository 2.0. Lea atentamente todos los apartados antes de comenzar la instalación.
Notas de instalación de Repository
Diferencias entre Repository 1.0 y Repository 2.0
Funcionamiento asíncrono
Tipos de SQL y API utilizados en las definiciones de propiedades
Características nuevas
Microsoft Repository es una tecnología que permite definir y llenar modelos de información. La utilizan las herramientas de desarrollo de ingeniería y software para compartir información sobre artefactos de ingeniería. Los artefactos de ingeniería pueden ser componentes de software, componentes industriales, documentos, mapas, páginas Web (cualquier información con una estructura compleja que se desee compartir). Microsoft Repository almacena los datos de depósito en una base de datos relacional. Es compatible con dos sistemas de administración de bases de datos: Microsoft(r) SQL Server versión 6.5 o posterior y el motor de bases de datos Microsoft Jet versión 3.0 o posterior.
Microsoft Repository 2.0 contiene mejoras significativas en las áreas de administración de versiones y desarrollo en equipo, mientras que se mantiene la compatibilidad con las anteriores interfaces de Microsoft Repository 1.0.
Las principales áreas de nueva funcionalidad son:
Los usuarios deberían tener en cuenta lo siguiente:
Microsoft Repository se instala durante una instalación de Visual Basic.
Microsoft Repository necesita que se instale el componente de acceso a datos. De manera predeterminada, el componente Data Access se instala durante una instalación de Visual Basic. Sin embargo, si elige no instalar el componente de acceso a datos y, después, instala una herramienta de terceros que utiliza Microsoft Repository, se producirá el error siguiente al iniciar Visual Basic 98:
"Error al abrir la base de datos de Microsoft Repository. El controlador especificado no se ha podido cargar debido a un error 126 del sistema (controlador de Microsoft Access (*.MDB)). El complemento de Microsoft Repository para Visual Basic se cierra."
Para corregir este problema, instale el componente Data Access.
Los archivos siguientes se agregarán al directorio SYSTEM (o SYSTEM32) de Windows:
Los siguientes archivos se agregarán al directorio "Archivos de programa\Archivos comunes\Microsoft Shared\Repostry":
Los siguientes archivos se agregarán al directorio "Archivos de programa\Archivos comunes\Microsoft Shared\Repostry\infoMdl":
Los archivos siguientes se agregarán al directorio de Visual Basic:
Si la base de datos del depósito se ha creado mediante el motor de Repository 1.0 y se ha utilizado para la creación, el llenado y la recuperación del modelo de información sólo mediante este motor, habrá algunas diferencias cuando ejecute la misma aplicación con el motor de Repository 2.0. Las diferencias surgen del tratamiento de las relaciones, como se enumera a continuación:
Utilización en modo mixto de Repository 1.0 y Repository 2.0
Es concebible que una aplicación de Repository 1.0 se pueda ejecutar en el motor de Repository 2.0, en la que las operaciones de versiones se realizan mediante otras aplicaciones sobre el mismo depósito. El motor del curso tiene que respetar la semántica de las versiones, y algunas reglas semánticas serán necesariamente visibles para la aplicación que no tiene control de versiones. Una aplicación de Repository 1.0 solamente puede ver estos efectos al funcionar sobre una base de datos de depósito en la cual las aplicaciones de Repository 2.0 realizan operaciones de versiones y áreas de trabajo. Estos efectos no surgen cuando todas las aplicaciones que actúan sobre la base de datos del depósito siguen la semántica de Repository 1.0. Además de los efectos mencionados anteriormente, pueden surgir los siguientes:
Tablas SQL
Las tablas SQL de Repository 2.0 están revisadas de manera exhaustiva para el control de versiones. Las vistas SQL que coinciden con consultas de SQL de Repository 1.0 que se ejecutan sobre una base de datos del depósito en la cual todos los objetos tienen una versión deben funcionar sin ningún cambio.
Es probable que las consultas SQL de Repository 1.0 ejecutadas sobre un depósito en el que hay varias versiones de objetos se ejecuten hasta el final, pero su semántica se debería revisar a la luz del control de versiones. En ciertas situaciones, las consultas pueden devolver varias versiones del mismo objeto; una aplicación de Repository 1.0 no espera esto.
La tabla RTblSites no tiene la columna NextLocalID en Repository 2.0.
La tabla RTblClassDefs tiene una nueva columna llamada VerPropDescs donde se almacena la definición de clase en Repository 2.0. La columna PropDescs sólo contiene valores nulos y ya no se utiliza. Sin embargo, se mantiene por compatibilidad.
Varios
La tabla siguiente muestra otras diferencias entre Repository 1.0 y Repository 2.0.
Descripción | Motor V1 | Motor V2 |
IRepositoryItem::get_Item() | Un índice entero fuera de intervalo devuelve EREP_BADPARAMS. | Un índice entero fuera de intervalo devuelve DISP_E_BADINDEX. |
IRelationshipCol::Insert() ITargetObjectCol::Insert() |
La inserción se anexa a la colección si la colección no está ordenada. | Error en la inserción con las colecciones no ordenadas (EREP_COL_NOT-SEQUENCED) y las colecciones de destino (EREP_RELSHIP_ORGONLY). |
IRelationshipCol::Move() ITargetObjectCol::Move() |
Error EREP_RELSHIP_ ORGONLY para colecciones no ordenadas y de destino. | Error EREP_COL_NOT-SEQUENCED para colecciones no ordenadas, y EREP_RELSHIP_ ORGONLY para colecciones de destino. |
IRepositoryObjectVersion::put_Name() | El error EREP_OBJ_NO-NAMING-RELSHIP no se agrega a la cola de errores. | El error REP_OBJ_NONAMING-RELSHIP se agrega a la cola de errores. |
Colecciones de nombres únicos: elemento B con nombre "B" se agrega varias veces a una colección de nombres únicos | El código de error es EREP_RELSHIP_DUPENAME. | El código de error es EREP_RELSHIP_EXISTS. |
IRepositoryItem::get_Name() | Se completa con éxito sobre una relación sin nombre (devuelve "0"). | Produce un error. |
IRelationshipCol::get_Item() ITargetObjectCol:: get_Item() |
El argumento puede ser INTID, OBJID, Index o Name. | El argumento puede ser OBJID, Index o Name. |
ExecuteQuery() sobre SQL Server | Comprueba la columna INTID en el conjunto de resultados. | Acepta más de un INTID siempre que sea posible una conversión implícita. |
Actualizar sobre una colección de instancias de objetos | Actualiza las propiedades y después los objetos. | Actualiza los objetos y después las propiedades. |
La carga de colecciones de objetos en respuesta a IRepositoryODBC::ExecuteQuery() puede ser asíncrona. El subproceso que llama debe comprobar si la carga está completa. Si el subproceso que llama intenta leer datos, actualiza la colección o construye un enumerador mientras la carga está en curso, se bloqueará hasta que la carga esté completa.
IndicadoresInterfaces nuevas
- READY = 1 // Carga completa
- INPROGRESS = 2 // Carga en curso
- CANCELLED = 3 // Carga cancelada (por el solicitante)
- FAILED = 4 // Error en la carga (motivo desconocido)
Métodos adicionales:
- LoadStatus: obtiene el estado de carga de la colección.
Firma
- HRESULT LoadStatus(long *piEstado) // Automatización
- HRESULT get_LoadStatus(long *piEstado) // COM
Argumentos
Valor devuelto
- Cancel: solicita la cancelación de la operación de carga en curso.
Firma
HRESULT Cancel()
Valor devuelto
- S_OK.
Métodos adicionales:
- GetOption: obtiene el valor de la opción de carga.
Firma
HRESULT GetOption(long iOpción, VARIANT *psValor)
Argumentos
- iOpción
- [in]
- RODBC_ASYNCH.
- psValor
- [out, retval]
- VARIANT_TRUE o VARIANT_FALSE, según si se estableció o no la opción RODBC_ASYNCH.
Valor devuelto
- S_OK si se ha realizado con éxito, EREP_BADPARAMS si se especificó cualquier otra opción.
SetOption: Establece la opción de carga de la colección. El indicador asíncrono se puede establecer si y sólo si el sistema de base de datos subyacente admite el funcionamiento asíncrono.
Firma
- HRESULT SetOption(long iOpción, VARIANT sValor)
Argumentos de entrada
- iOpción RODBC_ASYNCH y sValor TRUE establecen el modo asíncrono de la carga.
- iOpción RODBC_ASYNCH y sValor FALSE desactivan el modo asíncrono.
- iOpción RODBC_RESET_OPTIONS restablece el modo asíncrono de la carga.
Valor devuelto
S_OK si se realiza con éxito, EREP_TYPE_COLMISMATCH si se especifica un valor distinto de TRUE o FALSE en sValor cuando iOpción es RODBC_ASYNCH.
Otros cambios
Las dos tablas siguientes muestran los tipos de API que reconoce el motor de Repository, así como los tipos de SQL. Estos valores aparecen en las propiedades APIType y SQLType de un objeto PropertyDef. Para obtener información acerca de la conversión entre tipos de SQL y API, consulte la Referencia al programador de ODBC.
TIPOS DE API RECONOCIDOS POR EL MOTOR | |
TIPO DE API | VALOR |
SQL_C_UTINYINT | -28 |
SQL_C_STINYINT | -26 |
SQL_C_ULONG | -18 |
SQL_C_USHORT | -17 |
SQL_C_SLONG | -16 |
SQL_C_SSHORT | -15 |
SQL_C_BINARY | -2 |
SQL_C_TINYINT | -6 |
SQL_C_BIT | -7 |
SQL_C_CHAR | 1 |
SQL_C_LONG | 4 |
SQL_C_SHORT | 5 |
SQL_C_FLOAT | 7 |
SQL_C_DOUBLE | 8 |
SQL_C_DATE | 9 |
SQL_C_TIME | 10 |
SQL_C_TIMESTAMP | 11 |
TIPO DE SQL | VALOR |
SQL_LONGVARCHAR | -1 |
SQL_BINARY | -2 |
SQL_VARBINARY | -3 |
SQL_LONGVARBINARY | -4 |
SQL_BIGINT | -5 |
SQL_TINYINT | -6 |
SQL_BIT | -7 |
SQL_CHAR | 1 |
SQL_NUMERIC | 2 |
SQL_DECIMAL | 3 |
SQL_INTEGER | 4 |
SQL_SMALLINT | 5 |
SQL_FLOAT | 6 |
SQL_REAL | 7 |
SQL_DOUBLE | 8 |
SQL_DATETIME | 9 |
SQL_TIME | 10 |
SQL_TIMESTAMP | 11 |
SQL_VARCHAR | 12 |
Se han agregado dos nuevas propiedades a la interfaz IRepository2 para indicar la versión del archivo de base de datos.
Firma
- HRESULT MajorDBVersion(long *piVersiónPralBD) // Automatización
- HRESULT get_MajorDBVersion( long *piVersiónPralBD) // COM
Argumentos
- piVersiónPralBD
- [out, retval]
- El número de versión principal de la primera versión del motor de Repository que presentó este formato de base de datos.
Firma
- HRESULT MinorDBVersion(long *piVersiónSecundariaBD) // Automatización
- HRESULT get_MinorDBVersion( long *piVersiónSecundariaBD) // COM
Argumentos
- piVersiónSecundariaBD
- [out, retval]
- El número de versión secundaria de la primera versión del motor de Repository que presentó este formato de base de datos.
Se agregó un método nuevo CreateObjectEx() a la interfaz de IRepository2. Crea la primera versión de un nuevo objeto de Repository del tipo especificado. A la versión recién creada se le asigna el identificador de versión del objeto que se ha pasado como argumento, a diferencia de IRepository::CreateObject(), en donde Repository asigna el Id. de versión. Tiene la siguiente sintaxis:
FirmaArgumentos
- HRESULT IRepository2::CreateObjectEx(
- VARIANT IdTipo,
- VARIANT IdObjeto,
- VARIANT IdVersiónExt,
- IRepositoryObjectVersion **ppVersiónObjetoRep);
- IdTipo
- [in]
- Hace lo mismo que IRepository::CreateObject
- IdObjeto
- [in]
- Hace lo mismo que IRepository::CreateObject
- IdVersiónExt
- [in]
- Éste es el identificador de la versión del objeto (20 bytes) que se va a asignar a la primera versión del objeto
- ppVersiónObjetoRep
- [out]
- Éste es el puntero IRepositoryObjectVersion hacia la versión recién creada
IRepositoryObjectVersion
IRelationshipCol y ITargetObjectCol
IVersionAdminInfo
IRepository2
IClassDef e IInterfaceDef
En la documentación de Repository, se menciona que la longitud máxima, en bytes, del nombre que una relación asigna a su objeto de destino es 260, como se define en la constante RELSHIPNAMESIZE. Este valor es realmente 249.
Los nombres de relaciones y objetos deben seguir estas convenciones:
- 1. Los nombres no pueden tener más de 249 caracteres.
- 2. Se puede utilizar cualquier carácter en un nombre.
- 3. El nombre puede contener espacios en blanco al principio o en medio. También puede ser una cadena vacía.
- 4. Si el nombre es todo espacios en blanco, se trata como una cadena vacía.
Esto se aplica a los nombres que se utilizan entre comillas o se almacenan en variables. Por ejemplo, la interfaz "ICarpeta" siguiente debe cumplir estas restricciones:
oFolder("ICarpeta").FolderName
-o bien-
oFolder(sICarpeta).FolderName
where: sICarpeta = "ICarpeta"
Sin embargo, las normas no son para los nombres que se especifican fuera de comillas (como los nombres de propiedad o los nombres de relación). Por ejemplo, la colección de relaciones "RcCarpetaContiene" below:
oFolder("IFolder").RcFolderContains.Count
se debe ajustar a las normas de nombres de Microsoft Visual Basic, excepto en el límite que es de 127 caracteres en lugar de los 255 caracteres que permite Visual Basic.
El nombre del procedimiento almacenado de una tabla se genera precediendo al nombre de la tabla con la cadena "R_i". Puesto que los nombres de tabla son únicos, así se generarán nombres de procedimiento almacenado únicos. Sin embargo, si la longitud del nombre de la tabla es mayor que MaxIdentifierLength-3, al algoritmo de generación de nombre de la tabla produce un error. Por esta razón, un usuario no puede proporcionar un nombre de tabla con una longitud mayor que MaxIdentifierLength-3. Si se proporciona un nombre más largo se produce el error EREP_BADNAME.
Cuando el usuario no proporciona ningún nombre de tabla para una interfaz, el motor genera automáticamente el nombre de tabla a partir del nombre de la interfaz. Si el nombre de la interfaz, sin la letra "I" inicial, es menor que MaxIdentifierLength-4, el nombre de la interfaz se utilizará como nombre de tabla. En cualquier otro caso, el nombre de la interfaz se trunca a MaxIdentifierLength-7, y se agrega al nombre un número de 4 caracteres (denominado "uniquificador") para hacerlo único, antes de anexar el prefijo R_i.
El motor utiliza argumentos con nombre para llamar a los procedimientos almacenados. Un argumento con nombre comienza con el carácter "@" y no puede tener una longitud mayor que MaxIdentifierLength. De esta manera, los nombres de propiedad, que también son nombres de columna, no pueden tener una longitud mayor que MaxIdentifierLength-1.
Los valores de MaxIdentifierLength son:
Las tablas siguientes no se incluyen en el archivo de ayuda de Repository:
- RTblSumInfo
- RTblNamedObj
- RTblVersionAdminInfo
Estas tablas se explican junto con los nombres de columna y los tipos de datos.
RTblSumInfo
RTblSumInfo es una tabla específica de interfaz; sus columnas corresponden a las propiedades expuestas mediante la interfaz ISummaryInformation. De manera predeterminada, ninguna clase del Modelo de información de tipos de Repository implementa ISummaryInformation. Por lo tanto la base de datos de Repository no incluye de manera predeterminada la tabla RTblSumInfo. Repository omite la tabla de la base de datos para ahorrar espacio. Sin embargo, tan pronto como inserte en Repository cualquier clase que implemente ISummaryInformation, Repository creará la tabla.
Nombre de columna | Tipo de dato | Descripción |
IntID | RTIntID | Identificador interno de la clase. |
Z_BranchID_Z | RTBrID | Indica la bifurcación del gráfico de versión que contiene el intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Z_VS_Z | RTVerID | Identificador de versión en bifurcación que indica el límite inferior del intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Z_VE_Z | RTVerID | Identificador de versión en bifurcación que indica el límite superior del intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Comments | RTLongString | Campo que se utiliza para comentarios. |
ShortDesc | RTLongString | Descripción del objeto. |
RTblNamedObj
RTblNamedObj es una tabla específica de interfaz; sus columnas corresponden a las propiedades expuestas mediante la interfaz INamedObject. De manera predeterminada, ninguna clase del Modelo de información de tipos de Repository implementa INamedObject. Por lo tanto la base de datos de Repository no incluye de manera predeterminada la tabla RTblNamedObj. Repository omite la tabla de la base de datos para ahorrar espacio. Sin embargo, tan pronto como inserte en Repository cualquier clase que implemente INamedObject, Repository creará la tabla.
Nombre de columna | Tipo de datos | Descripción |
IntID | RTIntID | Identificador interno de la clase. |
Z_BranchID_Z | RTBrID | Indica la bifurcación del gráfico de versión que contiene el intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Z_VS_Z | RTVerID | Número de versión en bifurcación que indica el límite inferior del intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Z_VE_Z | RTVerID | Número de versión en bifurcación que indica el límite superior del intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Name | RTLongString | Nombre del objeto. |
RTblVersionAdminInfo
RTblVersionAdminInfo es una tabla específica de interfaz; sus columnas corresponden a las propiedades expuestas mediante la interfaz IVersionAdminInfo. De manera predeterminada, ninguna clase del Modelo de información de tipos de Repository implementa IVersionAdminInfo. Por lo tanto la base de datos de Repository no incluye de manera predeterminada la tabla RTblVersionAdminInfo. Repository omite la tabla de la base de datos para ahorrar espacio. Sin embargo, tan pronto como inserte en Repository cualquier clase que implemente IVersionAdminInfo, Repository creará la tabla.
Nombre de columna | Tipo de dato | Descripción |
IntID | RTIntID | Identificador interno de la clase. |
Z_BranchID_Z | RTBrID | Indica la bifurcación del gráfico de versión que contiene el intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Z_VS_Z | RTVerID | Identificador de versión en bifurcación que indica el límite inferior del intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
Z_VE_Z | RTVerID | Identificador de versión en bifurcación que indica el límite superior del intervalo de elementos a los que se van a aplicar los valores de propiedad de esta fila. |
VersionCreateTime | Date/Time | Hora en que se creó la versión. |
VersionModifyTime | Date/Time | Hora en que se modificó la versión. |
CreateByUser | RTLongString | Usuario que creó la versión. |
ModifyByUser | RTLongString | Usuario que modificó la versión. |
COLLECTION_NEWORGVERSIONSDONOTPARTICIPATE = 64
Este indicador está relacionado con otro indicador de la misma enumeración:
COLLECTION_NEWORGVERSIONSPARTICIPATE = 32
Los dos indicadores tienen significados opuestos. Por lo tanto, no se pueden activar al mismo tiempo. Sin embargo, puesto que la configuración predeterminada de cada uno de ellos es no establecido, es posible que ambos indicadores estén no activados al mismo tiempo. Si ambos indicadores están no activados, el depósito funciona como si estuviese activado el indicador COLLECTION_NEWORGVERSIONSPARTICIPATE. Es decir, durante la creación de una nueva versión de un objeto de depósito, Microsoft Repository no copia colecciones origen nuevas desde una versión creada anteriormente a una versión posterior.
Puede dirigirse a los siguientes orígenes para obtener más información sobre Microsoft Repository:
MSDN Library de Visual Studio 6.0
Documentación de Visual Studio
Herramientas de componentes, diseño y anális
Documentos de Microsoft Repository 2.0
MSDN Library de Visual Studio 6.0
Documentación de Visual Basic
Uso de Repository con Visual Basic