He heredado un proyecto ArcObjects verdaderamente horrible y muy grande que fue escrito originalmente en VB y luego portado a C#. Aparentemente el código fuente que me han dado no es la última versión y estoy persiguiendo errores por todas partes. El problema más desafiante va así...
Se están uniendo varias tablas (una tras otra) a una capa de características mediante IDisplayRelationshipClass.DisplayRelationshipClass
. Llamemos a estas tablas A y B (hay más de 2). Cada una de estas tablas tiene los campos 1 y 2. Los objetos ITable se crean utilizando IFeatureWorkspace.OpenTable con un archivo DBF.
Después de la primera unión, si compruebo los campos de mi capa de características y al final puedo ver A.1 y A.2 (nombre de campo prefijado con el nombre del archivo DBF del que procede la tabla), ¡genial! Sin embargo, después de la segunda unión A.1 y A.2 han desaparecido, y en su lugar tengo B.1, B.2 - no tan bien...
¿Tengo que hacer algo para que los campos adicionales persistan en estas uniones, de modo que acabe con A.1, A.2, B.1, B.2, etc.? ? Si lo hago, o bien este comportamiento ha cambiado desde que se escribió el código por primera vez, o bien el código nunca ha funcionado. Dado que los campos están correctamente prefijados, no deberían sobrescribirse unos a otros.
Las uniones se producen así:
IMemoryRelationshipClassFactory pMemRelFact = new MemoryRelationshipClassFactoryClass();
IRelationshipClass pRelClass = pMemRelFact.Open("TabletoLayer", (IObjectClass)pTTable, dbfJnField, (IObjectClass)pFeatLayer.FeatureClass, layerJnField, "forward", "backward", esriRelCardinality.esriRelCardinalityOneToMany);
IDisplayRelationshipClass pDispRC = (IDisplayRelationshipClass) pFeatLayer;
pDispRC.DisplayRelationshipClass(pRelClass, esriJoinType.esriLeftInnerJoin);
Cualquier ayuda con este tema sería muy apreciada.
EDITAR : Si esto ayuda, he observado algo bastante extraño. Después de la unión, pFeatLayer.FeatureClass.Fields.FieldsCount da el número original de campos antes de la unión, pero ((ITable)pFeatLayer.Fields.FieldsCount da el número esperado (con los campos unidos). Desafortunadamente, la variable pFeatLayer se pasa de nuevo a la función de unión, por lo que parece que las tablas se unen repetidamente contra el estado inicial de la capa de características, por lo que sólo la última unión hace una diferencia.
¿Alguna sugerencia de por qué un reparto de ITable daría un recuento de campos diferente al de la FeatureClass? ¿Es un error o simplemente un diseño tonto?