นี่คือวิธีการ ArcObjects ตามตัวอย่างนี้เพื่อระบุการรวมทั้งหมดในเลเยอร์และระบุปลายทางและชื่อตารางต้นทางและคีย์หลักและกุญแจต่างประเทศ:
- รับการอ้างอิงไปยัง
ILayer
ที่มีหนึ่งหรือมากกว่าเข้าร่วม
- ส่ง
ILayer
ให้กับIDisplayTable
- ร่าย
IDisplayTable.DisplayTable
ทรัพย์สินไปIRelQueryTable
- ในขณะที่ตารางปัจจุบันคือ
IRelQueryTable
:
- ตรวจสอบ
RelQueryTable
ของDestinationTable
และSourceTable
คุณสมบัติ
- ตรวจสอบ
OriginPrimaryKey
และOriginForeignKey
คุณสมบัติของIRelQueryTable.RelationshipClass
คุณสมบัติ
- ตั้งค่าตารางปัจจุบัน
RelQueryTable
เป็นSourceTable
คุณสมบัติปัจจุบัน
สคริปต์ Python นี้ (ใช้comtypesและโมดูลตัวช่วยนี้) จะเข้าร่วมการเชื่อมต่อทั้งหมดตั้งแต่ล่าสุดจนถึงเร็วที่สุดและพิมพ์ชื่อปลายทางและชื่อตารางต้นทางคีย์หลักต้นกำเนิดและ foreign key สำหรับการเข้าร่วมแต่ละครั้ง:
from ESRICOMHelpers import * # helper module from https://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)
ตัวอย่างเอาต์พุตรับเลเยอร์ซอร์สที่มีสามตัวรวม:
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
สำหรับข้อมูลเพิ่มเติมให้ดูที่ฉันจะเข้าถึง ArcObjects จาก Python ได้อย่างไร