3 votos

¡Cómo utilizar IDatabaseConnectionInfo3 Interfaz ArcObjects!

Intento recuperar los usuarios conectados desde una geodatabase entreprise utilizando ArcObjects .

Primero intenté convertir Mi espacio de trabajo a IDatabaseConnectionInfo3 pero lanza

ClassCastException

IWorkspace workspace = sdeWorkspaceInstance();
IDatabaseConnectionInfo3 databaeseConnectinfo = (IDatabaseConnectionInfo3) workspace;
IEnumUserInfo listUserInfo = databaeseConnectinfo.getConnectedUsers();

¿Alguna idea de cómo utilizar la interfaz IDatabaseConnectionInfo3?

2voto

M. B. Altaie Puntos 11

En JavaDoc hace pas afirman que Sde4Workspace implementa IDatabaseConnectionInfo3 -- Sólo afirma IDatabaseConnectionInfo que es una superinterfaz. Por lo tanto, el reparto debe fallar (que lo hace).

Si desea preguntar a Esri por qué la interfaz de conexión no admite consultas de información del servidor, deberá ponerse en contacto con el servicio de asistencia técnica, pero sospecho que tiene que ver con la diferencia entre los objetos subyacentes: un Sde4Workspace es esencialmente una envoltura alrededor de un Sde4Workspace. SE_CONNECTION (de la API 'C'), mientras que la lista de usuarios conectados en una instancia es una envoltura alrededor de SE_instance_get_users (que es una encuesta del ahora obsoleto servidor de aplicaciones).

Sin duda podría utilizar un Sde4Workspace para crear una consulta SQL de los usuarios conectados, aunque esto variaría ligeramente según el RDBMS.

1voto

Berend Puntos 587

Un espacio de trabajo SDE debe implementar esa interfaz, a menos que sea un Sde3Espacio de trabajo objeto. Pero para ser honesto, no sé la diferencia entre Sde3Workspace y Sde4Workspace .

Como con todos los enumeradores ArcObjects, es necesario llamar a Reset() y, a continuación, repasar los resultados con Next() . Tenga en cuenta que ConnectedUsers puede lanzar una excepción si no tienes permiso para ver los usuarios conectados.

Lamentablemente no sé cómo utilizar el Java ArcObjects SDK, pero supongo que debe ser muy similar a C #, así que aquí está un ejemplo:

private void GetConnectedUsers(IWorkspace workspace)
{
    var connectionInfo = workspace as IDatabaseConnectionInfo3;
    if (connectionInfo == null) return; // Other types of workspace, e.g. fgdb

    IEnumUserInfo listUserInfo;
    try
    {
        listUserInfo = connectionInfo.ConnectedUsers;
    }
    catch (Exception ex)
    {
        // May not have permission to see connected users
        Debug.WriteLine(ex.Message);
        return;
    }

    listUserInfo.Reset();

    IUserInfo userInfo;
    while ((userInfo = listUserInfo.Next()) != null)
    {
        Debug.WriteLine(userInfo.Name);
    }
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X