Estoy intentando unir una featureclass contenida dentro de un pgdb con una tabla creada con un InMemory Workspace.
La tabla en memoria contiene los resultados que quiero utilizar para definir la simbología en la featureclass.
La creación de la tabla va bien, puedo ver los datos calculados, pero la IRelationshipClass creada no devuelve ningún registro. He intentado utilizar múltiples campos para unir los datos sin éxito. También he añadido la tabla creada a ArcMap para crear la unión directamente en ArcMap, sin éxito. Pasa todas las validaciones, pero no devuelve ningún registro.
Intenté unir mi tabla inmemory con un shapefile featureclass en su lugar y funcionó.
He aquí un ejemplo de código
// Create an in-memory workspace factory.
IWorkspaceFactoryPtr ipWorkspaceFactory(CLSID_InMemoryWorkspaceFactory);
// Create a new in-memory workspace. This returns a name object.
IWorkspaceNamePtr ipWorkspaceName;
ipWorkspaceFactory->Create(NULL, L"ValeursCalculees", NULL, 0, &ipWorkspaceName);
INamePtr ipName(ipWorkspaceName);
// Open the workspace through the name object.
IUnknownPtr ipWorkspaceUnk;
ipName->Open(&ipWorkspaceUnk);
IWorkspacePtr ipWorkspace(ipWorkspaceUnk);
IFeatureWorkspacePtr ipMemoryFeatureWorkspace(ipWorkspace);
IDatasetPtr ipFeatureClassDataset(ipFeatureClass);
CComBSTR strNomFC;
ipFeatureClassDataset->get_Name(&strNomFC);
IFieldsEditPtr ipFieldsEdit(CLSID_Fields);
... Field creation code ...
ITablePtr ipTable;
ipMemoryFeatureWorkspace->CreateTable("InMemoryTable", ipFieldsEdit, NULL, NULL, NULL, &ipTable);
... Table Filling code ...
//IRelQueryTable
IFeatureWorkspacePtr ipFeatureWorkspace(CTools::GetWorkspaceFromFeatureClass(ipFeatureClass));
IObjectClassPtr ipObjectClass(ipTable);
IMemoryRelationshipClassFactoryPtr ipMemoryRelationshipClassFactory(CLSID_MemoryRelationshipClassFactory);
IRelationshipClassPtr ipRelClass;
HRESULT hr = ipMemoryRelationshipClassFactory->Open(L"Join", ipFeatureClass, L"Numero_AD", ipObjectClass, L"NumeroAD", L"forward", L"backward", esriRelCardinalityOneToMany, &ipRelClass);
IDisplayRelationshipClassPtr ipDisplayRelationshipClass(ipFeatureLayer);
ipDisplayRelationshipClass->DisplayRelationshipClass(ipRelClass, esriLeftOuterJoin);
//Add the table to ArcMap
IStandaloneTableCollectionPtr ipStandaloneTableCollection(CTools::GetMap(ipMxDocument));
IStandaloneTablePtr ipStandaloneTable(CLSID_StandaloneTable);
ipStandaloneTable->putref_Table(ipTable);
hr = ipStandaloneTableCollection->AddStandaloneTable(ipStandaloneTable);
ipMxDocument->UpdateContents();
¿Estoy intentando hacer algo imposible?