Баландин Денис
Зарегистрирован: 15.08.2006 Сообщения: 44 Откуда: Екатеринбург
|
Добавлено: Вт 08 Дек 2009 22:52 Заголовок сообщения: Помогите оживить программу... |
|
|
Когда-то работая в управлении архитектуры, написал несколько модулей для Ингео, которые взаимодействовали с системой Мониторинг.
Использовалась Инмета версии 1.9.66, но недавно, после очередного upgrad'а системы (на одну из последних версий Инметы), модули отказались работать выдавая ошибку: Interface not supported
для их работы использовался объект InMetaCR.InMetaDataServiceClient, функции доступа к Инмете были примерно такие...
Код: |
function GetDataServiceClient: boolean;
begin
// Получение доступа к реестровой подсистеме Инмета
if Trim(GetInmetaUrl)<>'' then begin
gDataServiceClient := CreateOLEObject('InMetaCR.InMetaDataServiceClient') as InMetaDataServiceClient;
gDataServiceClient.Ingeo := gInGeoApp;
gDataServiceClient.ServerURL:=GetInmetaUrl;
gDataServiceClient.SpatialConfigURL:=GetInmetaUrl+'/spatial-config.xml';
gSpatialConfigObject := gDataServiceClient.SpatialConfig;
inc(GDSCounter);
result:=true;
end
else result:=false;
end;
function GetInmetaObject(ingObjectID: string): Variant;
var
anRegisterNo: string;
anIngeoObj: IIngeoMapObject;
aLayerID, aClassName,
anInmetaLinkProperty, aLayerLinkTable,
aLayerLinkField, aLayerClassifierField: WideString;
WhereSQL: string;
anObjectArray,
anObjectInfo: Variant;
begin
GetDataServiceClientAsIf;
if Trim(ingObjectID)='' then exit;
if VarIsNull(gDataServiceClient) then exit;
if VarIsNull(gSpatialConfigObject) then exit;
// Берем точное имя класса из LinkTable, медленнее но...
aClassName := GetInmetaClassNameExt(ingObjectID);
//aClassName := GetInmetaClassName(ingObjectID);
if aClassName = '' then exit;
aLayerID:=gIngeoApp.ActiveDb.MapObjects.LayerIDFromObjectID(ingObjectID);
anIngeoObj := gIngeoApp.ActiveDb.MapObjects.GetObject(ingObjectID);
try
gSpatialConfigObject.GetLinkInfo(aClassName, aLayerID,
anInmetaLinkProperty, aLayerLinkTable,
aLayerLinkField, aLayerClassifierField);
anRegisterNo := anIngeoObj.SemData.GetValue(aLayerLinkTable,aLayerLinkField,0);
except
msgbox('Error Into [GetInmetaObject]');
anRegisterNo := '';
end;
if anRegisterNo='' then exit;
// Берем инф. по объекту из Inmeta
try
WhereSQL:=anInmetaLinkProperty+'Property'+' = '+QuotedStr(anRegisterNo);
anObjectArray:=gDataServiceClient.QueryObjectInfoArray(aClassName,WhereSQL,null,'');
anObjectInfo:=anObjectArray[0];
result:=anObjectInfo;
except
msgbox('Error Into [GetInmetaObject]');
result:=Null;
end;
end;
|
может быть кто-нибудь знает что там изменилось, и как это исправить с минимальными затратами?
P.S. заранее благодарен. |
|