Всем привет! После повторной классификации точки при выставлении свойств вылетает исключение о том, что такого свойства не обнаружено.
Код, который это делает:
private static void Classify(ObjectId objectId, string className, params string[] properties)
{
var manager = HostMapApplicationServices.Application.ActiveProject.ClassificationManager;
// здесь классифицируем
using (var ids = new ObjectIdCollection { objectId })
using (var failIds = new ObjectIdCollection())
{
var errorCodes = new FeatureClassErrorCodeCollection();
// manager.Unclassify(objectId); <-- Не помогает
manager.Classify(failIds, errorCodes, ids, className, true, true);
}
// ниже выставляем значения свойств
using (var featureClassDefinition = manager[className])
{
var collection = new StringCollection { "Пользовательский" };
foreach (var propertyName in properties)
{
using (var property = featureClassDefinition.GetProperty(collection, propertyName))
{
var value = property.FromString(DateTime.Now.Millisecond.ToString());
try
{
property.SetValue(objectId, value, true);
}
catch (MapFeatureClassException mfce)
{
Trace.WriteLine((FeatureClassErrorCode)mfce.ErrorCode);
throw;
}
}
}
}
}
Пусть у нас в файле описаний будет 2 класса:
Класс 1 со свойствами
Свойство 1 и
Свойство 2 и
Класс 2 (
Свойство 3 и
Свойство 4).
При классификации точки в первый раз, мы можем увидеть что для объекта успешно задан класс и заполнены свойства:
При переклассификации на выставлении значений свойств вылетает
MapFeatureClassException с
(FeatureClassErrorCode)mfce.ErrorCode == FeatureClassErrorCode.PropertyNotFound.
И правда, если мы взглянем в свойства объекта, то увидим что одного из свойств
Класса 2 нет:
Собственно, вопрос: как это можно обойти?
Тестовый проект, чертеж с коготочкой, файл описаний и картинка-инструкция по его присоединению в аттаче.
Для того, чтобы воспроизвести ошибку, надо:
1. Открыть приложенный чертеж с коготочкой (или вообще любой чертеж с коготочками),
2. Присоединить файл описаний (приложена картинка из моей предыдущей темы, для 15 цивила шаги аналогичны),
3. Вызвать последовательно команды
CLASSIFY1 и
CLASSIFY2 из приложенного проекта.
P.S. Совсем вылетело из головы. Цивил для приложенного тестового проекта должен быть русским, так как в других локализациях категория
Пользовательский имеет другое название.