Aquí es un enfoque de ArcObjects, con base en este ejemplo, para enumerar todas las combinaciones de una capa y una lista de su origen y de destino de la tabla de nombres y claves principales y externas:
- Obtener una referencia a un
ILayer
que tiene una o más combinaciones
- Elenco de la
ILayer
a IDisplayTable
- Elenco de la
IDisplayTable.DisplayTable
propiedad IRelQueryTable
- Mientras que la tabla actual es un
IRelQueryTable
:
- Inspeccione el
RelQueryTable
's DestinationTable
y SourceTable
propiedades
- Inspeccione el
OriginPrimaryKey
y OriginForeignKey
propiedades de la IRelQueryTable.RelationshipClass
de la propiedad.
- Establecer la tabla actual para el actual
RelQueryTable
's SourceTable
de la propiedad
Esta secuencia de comandos de Python (utilizando comtypes y este helper módulo) va a ir a través de todos los de la une, desde la más reciente a la más antigua, y la impresión de un destino y origen de los nombres de tabla, el origen de la clave principal y el origen de clave externa para cada combinación:
from ESRICOMHelpers import * # helper module from http://gis.stackexchange.com/a/5082/753
esriArcMapUI = GetESRIModule("esriArcMapUI")
esriCarto = GetESRIModule("esriCarto")
esriGeoDatabase = GetESRIModule("esriGeoDatabase")
def listJoins(table):
while CType(table, esriGeoDatabase.IRelQueryTable):
relQueryTable = CType(table, esriGeoDatabase.IRelQueryTable)
destTable = relQueryTable.DestinationTable
sourceTable = relQueryTable.SourceTable
destDataset = CType(destTable, esriGeoDatabase.IDataset)
sourceDataset = CType(sourceTable, esriGeoDatabase.IDataset)
relClass = relQueryTable.RelationshipClass
print destDataset.Name, sourceDataset.Name, relClass.OriginPrimaryKey, relClass.OriginForeignKey
table = sourceTable
if __name__ == "__main__":
#app = GetCurrentApp() # Use if run in-process
app = GetApp("ArcMap") # Use if run in a standalone script
mxd = CType(app.Document, esriArcMapUI.IMxDocument)
# Gets the first layer in the active data frame
map = mxd.FocusMap
lyr = map.Layer[0]
# Need to get the "display table" to access the joins
displayTable = CType(lyr, esriCarto.IDisplayTable).DisplayTable
# List the layer's joined tables
listJoins(displayTable)
La salida del ejemplo, dada una capa de origen con tres combinaciones:
join_table_3 master_fc_join_table_1_join_table_2 JOIN_ID_3 master_fc.MASTER_ID
join_table_2 master_fc_join_table_1 JOIN_ID_2 master_fc.MASTER_ID
join_table_1 master_fc JOIN_ID_1 MASTER_ID
Para obtener más información, consulte ¿Cómo puedo acceder a ArcObjects desde Python?