Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Автоматическая запись в семантику при создании нового объекта

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Rest



Зарегистрирован: 19.08.2009
Сообщения: 16

СообщениеДобавлено: Пт 10 Июл 2015 18:14    Заголовок сообщения: Автоматическая запись в семантику при создании нового объекта Ответить с цитатой

Здравствуйте!
Можно ли при создании (не программно) нового объекта сразу записать в его семантику данные ?
Не нашел метода OnCreate у MapObject.

И еще вопрос - как можно сразу вызвать процедуру или метод при выделении объекта на карте ?

Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Азаматов Азамат Хадисович



Зарегистрирован: 17.02.2005
Сообщения: 100
Откуда: г. Учалы, Респ. Башкортостан

СообщениеДобавлено: Сб 11 Июл 2015 00:07    Заголовок сообщения: Ответить с цитатой

Есть событие DbMapObjects_CreateComplete
после которого можно записать семантику.

Событие после выделения
Application_SelectionChangeComplete

работает как то странно, видимо есть какая то оптимизация, иногда работает, иногда нет.
Лучше по таймеру отслеживать состояние Selection
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Rest



Зарегистрирован: 19.08.2009
Сообщения: 16

СообщениеДобавлено: Пн 13 Июл 2015 16:30    Заголовок сообщения: Ответить с цитатой

Да, спасибо, разобрался.

Еще небольшой вопрос - создаю программно таблицу на C#

Код:
IIngeoSemTable semTable = layer.SemTables.Add();
                semTable.Name = tableName;
                semTable.SemDbTableName = "Operation" + layer.ID.ToString();
                IIngeoSemDbTable semDbTable = semTable.SemDbTable;
                semDbTable.Fields.Add("ID", TIngeoFieldDataType.inftString, 12, TIngeoFieldFlags.inffRequired, 0);
                semTable.FieldInfos.Add("ID", "ID", "", "", "");
                semDbTable.Fields.Add("CreateOperator", TIngeoFieldDataType.inftString, 128, 0, 0);
semTable.FieldInfos.Add("CreateOperator", "Оператор создания объекта", "", "", "");
                semDbTable.Update();
                semTable.Update();
                m_IngeoApp.ActiveDb.MapObjects.UpdateChanges();


При этом описание поля таблицы такое же, как и имя поля, т.е. не присваивается "Оператор создания объекта".
Это такой глюк или в чем может быть проблема ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Азаматов Азамат Хадисович



Зарегистрирован: 17.02.2005
Сообщения: 100
Откуда: г. Учалы, Респ. Башкортостан

СообщениеДобавлено: Ср 22 Июл 2015 21:09    Заголовок сообщения: Ответить с цитатой

ну вот работающий код
Код:

                IIngeoSemTable st = lar.SemTables.Add();
                Random rnd = new Random();
                st.Name = lar.Name;
                st.SemDbTableName = "result_table" + rnd.Next();
                st.SemDbTable.Fields.Add("SKEY", TIngeoFieldDataType.inftString, 100, 0, 0);
                st.SemDbTable.Fields.Add("REASON", TIngeoFieldDataType.inftString, 255, 0, 0);
                // FieldInfos.Add("KEY", "КЛЮЧ", "", "", "");
                st.Update();
                lar.Update();

                st = lar.SemTables.Add();
                //Random rnd = new Random();
                st.Name = lar.Name+"_поля";
                st.SemDbTableName = "result_table2" + rnd.Next();
                st.SemDbTable.Fields.Add("SKEY", TIngeoFieldDataType.inftString, 100, 0, 0);
                for (int ffi = 0; ffi < schema.dfields.Length; ffi++)
                {
//                    st.SemDbTable.Fields.Add(GetFieldName(schema.sfields[ffi])+"_s", TIngeoFieldDataType.inftString, 250, 0, 0);
//                    st.SemDbTable.Fields.Add(GetFieldName(schema.dfields[ffi])+"_d", TIngeoFieldDataType.inftString, 250, 0, 0);
                    IIngeoSemDbField fld1= st.SemDbTable.Fields.Add("A" + ffi.ToString(), TIngeoFieldDataType.inftString, 255, 0, 0);
                    IIngeoSemDbField fld2=st.SemDbTable.Fields.Add("B" + ffi.ToString(), TIngeoFieldDataType.inftString, 255, 0, 0);
                   

                }

           //     st.SemDbTable.Fields.Add("REASON", TIngeoFieldDataType.inftString, 255, 0, 0);
                // FieldInfos.Add("KEY", "КЛЮЧ", "", "", "");
                st.Update();
                for (int ffi = 0; ffi < schema.dfields.Length; ffi++)
                {
                    st.FieldInfos[ffi * 2+2].Caption ="(Исх.) "+ GetFieldNameWOrecode(schema.sfields[ffi]);
                    st.FieldInfos[ffi * 2+3].Caption = "(Рез.) "+GetFieldNameWOrecode(schema.dfields[ffi]);

                }
                st.Update();
                lar.Update();
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB