Как узнать состояние объекта?

Программирование для SmarTeam.

Как узнать состояние объекта?

Сообщение Геройчиковый » 26 дек 2007 13:07

Всем привет!
Собственно вот на такую вещь наткнулся уже всюголову сломал, все МетаИнфы и ОбджектСторы обыскал, ну нету там нигде нчиего про это...
ЕСть про операции жизненного цикла - это да, это язнаю.. А как узнать, в каком состоянии(Создаеться новый(ADD)/изменяется(UPDATE)/просто просматриваеться и т.п.) находитсья объект?
Люди, помогайте, я уже просто дурею 8))) Весь ман уже облазил, никак не могу найти ничего похожего...
Заранее спасибо :beer:
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение green_fx » 28 дек 2007 16:57

Одно уточнение:
тебе необходимо узнать текущее состояние объекта при исполнении скрипта?
Например: на ProfileCard нажимают на кнопку -> запускается скрипт -> и собственно в этом скрипте ты должен узнать состояние (update или add)?
Если это то, что тебе нужно узнать - значит ты влип, это сделать сложно, но возможно. В краце путь следующий: при запуске твоего скрипта (в самом начале) ты должен вызвать функцию из DLL (LoadLiblary и т.д. в иенте множество примеров как это сделать причем все вызовы функций из DLL реально работают из SmartScript'а, сам пробовал и не раз), которую заранее должен написать. Функция и будет тебе возвращять текущее состояние, так? да очень просто! В функцию ты должен передать текст заголовка текущего окна объекта (Window Title Text) далее в DLL'ке по этому тексту ищем это окно, а потом контрол в котором у тебя либо написано Update либо Add или вообще пусто. Вот вообщемто и все.
Небольшой коментарий, зачем все это делать именно в другой DLL? Ответ: потомучто скрипты смартима (SmartSсript) не понимают некоторые функции WinAPI, а особенно критично директивы. Например addressOf. Меня в свое время это реально заставило отказаться от SmartScript и перейдти почемуто на WEB :)
Аватара пользователя
green_fx
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 28 сен 2007 10:46

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 28 дек 2007 17:24

Да, Грин_фх, это именно то, о чем я спрашивал.
О.о
Афигеть, вот уж не думал, что это так решается 8)) Действительно, не просто, но можно...
Если еще у меня это получится - с меня пыво, полюбому :beer:
З.ы. самое забавное - откуда это Вы стока всего знаете? о_О В принципе, понятно, что если с этим работать и т.п.... Просто может быть вы программист Дасо? }8))) Шучу канеша, но что-то уж очень хорошо Вы тут все знаете про СТ 8)
З.з.ы. Кстати - спасибо большое! 8>
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 14 янв 2008 12:28

Грин_фх, вы просто "папка"! :8):
Сделал я эту вещь...Аж глаз радуется 8) С меня бублик, полюбому }8> :friends:
P.S. Пока делал,наткнулся на эту вещь с AdderssOf и указателями вообще. Не подскажете, как это решать? А то вроде как самих указателей там нет, хотя по умолчанию все там переменные - ByRef. Т.е. бред какой-то.... :%)
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение apufidom » 16 янв 2008 08:42

green_fx писал(а):В функцию ты должен передать текст заголовка текущего окна объекта (Window Title Text) далее в DLL'ке по этому тексту ищем это окно, а потом контрол в котором у тебя либо написано Update либо Add или вообще пусто.

Какой изврат :fool:
А в веб-эдиторе таких (или схожих) проблем нет?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 16 янв 2008 10:22

apufidom писал(а):А в веб-эдиторе таких (или схожих) проблем нет?

Ждем Грин_фх'а 8)
apufidom писал(а): Какой изврат :fool:

Ну я бы не сказал... Звучит канечно страшно, но с помощью МСДН, инета, и т.п. Это все решается... Тем более если "надо" - значит надо 8)
Ну а что же еще делать, если прсото так это не выцепить...? Голь на выдумки хитра, так сказать }8)
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение apufidom » 24 янв 2008 11:20

Hero писал(а):Звучит канечно страшно, но с помощью МСДН, инета, и т.п. Это все решается... Тем более если "надо" - значит надо 8)
Ну а что же еще делать, если прсото так это не выцепить...? Голь на выдумки хитра, так сказать }8)


Дело не в том, что это неудобно или страшно, а в том, что это неправильно. Что, если там будет написано не "Update либо Add", а "Обновить" либо "Добавить"?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 25 янв 2008 11:18

apufidom писал(а):
Hero писал(а):Звучит канечно страшно, но с помощью МСДН, инета, и т.п. Это все решается... Тем более если "надо" - значит надо 8)
Ну а что же еще делать, если прсото так это не выцепить...? Голь на выдумки хитра, так сказать }8)


Дело не в том, что это неудобно или страшно, а в том, что это неправильно. Что, если там будет написано не "Update либо Add", а "Обновить" либо "Добавить"?

В моем случае это - "изменить"/"Создать объект". Вот я и ищу эти заголовки. В принципе, это не имеет значения, что искать, главное правильно написать процедуру поиска. А проблема такая возникает, потмоучто в СТ коряво сделано создание объекта(мб и не коряво, но глуповато - это точно). Когда создаеться объект, тоу него ОбджектАйДи нету(т.к. его же еще могут отменить на стадии создания.. по-этому обратиться к нему по нормальному незя... А стадия "изменить"(апдейт) - вообще никак не выявляеться, кроме как визуально (на глаз, так сказать, пользователя)... тока табличка внизу с кнопаками появляется и все.. никаких параметров.. ничего.. Вот и приходится выворачиваться.
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение capitaine » 16 фев 2008 23:10

все на самом деле проще, если подойти к задаче с другого бока.

если пользователь делает UPDATE, то объект в дереве объектов уже существует и подсвечен. если ADD, то объекта еще не существует.

следовательно:

хинт1: в первом случае OBJECT_ID объекта получить можно, а во втором OBJECT_ID равен страшному отрицательному числу. то есть тупо получить OBJECT_ID и проверить его на положительность.
хинт2: в первом случае выбранный в дереве объект - это редактируемый объект. во втором случае - это другой (родительский) объект. (получаем выбранный в дереве объект и...)

и никаких длл тут не надо ;) задача была решена лично мною в релизе где-то 9-м :). кусочек скрипта, где идет определение адд это или апдейт, занимает строчек 5-6.

адью :-)
Toujours a votre service, le capitaine le Sang.
Внедрив систему управления данными, вы будете управлять всеми вашими документами через одно место
Аватара пользователя
capitaine
Участник
Участник
 
Сообщения: 134
Зарегистрирован: 12 сен 2007 22:52
Откуда: из Москвы

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 17 фев 2008 16:37

capitaine писал(а):если пользователь делает UPDATE, то объект в дереве объектов уже существует и подсвечен. если ADD, то объекта еще не существует.


А если и не эдд и не апдейт???
Ведь вопрос-то стоял именно в этом, как различать все 3 состояния однозначно. Отличить эдд от апдейта - это-то канечно просто. Достаточно проверить наличие обджектАЙДИ. А как отличить когда объект просто просматриваеться и когда его меняют?

capitaine писал(а):и никаких длл тут не надо ;)

ДЛЛ надо, тока стандартные виндусовские. ВОт и все.. строчек кода там канеша не 5-6 но тоже не много. Без ВинАПИ тут не обойтись... Так что вот так вот... :beer:
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение capitaine » 17 фев 2008 20:58

"просто просматривается" - это как?

ты на какое событие собрался вешать скрипт? на OnScreenExit что ли?
Toujours a votre service, le capitaine le Sang.
Внедрив систему управления данными, вы будете управлять всеми вашими документами через одно место
Аватара пользователя
capitaine
Участник
Участник
 
Сообщения: 134
Зарегистрирован: 12 сен 2007 22:52
Откуда: из Москвы

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 17 фев 2008 21:01

просто просматриваються, это когда объект выбран(его карточка атрибутов видна), но его не редактируют/
Скрипт вешаетсья на кнопку или едитбокс какой-нитьт (он чейндж), но вот работать должен только тогда, когда объект создают/редактируют/просматривают.
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение capitaine » 17 фев 2008 21:09

ты изменяешь поля или атрибуты объекта? ;)

если поля, то пущай они объизменяются, все равно в режиме просмотра объект не изменится.
Toujours a votre service, le capitaine le Sang.
Внедрив систему управления данными, вы будете управлять всеми вашими документами через одно место
Аватара пользователя
capitaine
Участник
Участник
 
Сообщения: 134
Зарегистрирован: 12 сен 2007 22:52
Откуда: из Москвы

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 17 фев 2008 21:13

Хорошо, объясню на примере:
Вот есть объект, щас я на него смортю.. на нем есть кнопочка. Я на нее нажимаю - и у меня вываливаеться месадж бокс - "привет!"
Но, я не хочу чтобы этот привет появлялс просто потому, что наали на кнопочку. я хочу ,чтобы он появлялся тогда только, когда объект будет в стадии - изменить.
После того, как все сделано мы получаем - объект, на котором кнопка, которую как ни щелкай - ничег оне будет. Как только объект будет в состоянии изменить, то при нажатии этой кнопки будет - "привет!"
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение capitaine » 17 фев 2008 21:14

1. гемморой себе придумываешь сам :-)
2. я подумаю
Toujours a votre service, le capitaine le Sang.
Внедрив систему управления данными, вы будете управлять всеми вашими документами через одно место
Аватара пользователя
capitaine
Участник
Участник
 
Сообщения: 134
Зарегистрирован: 12 сен 2007 22:52
Откуда: из Москвы

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 17 фев 2008 21:18

1. Гемороой не придумываеться, он сам рождается. А вещь это действительно нужная. Т.к. Дасовцы не предусмотрели в ФормЕдиторе такой вещи у кнопок, как Енеблед. Не гвооря уже о том, что это тока частный случай. А в общем случае - нужно прсото получать состояние объекта - создаеться/изменяется/просматривается.
2. Думать тут вроде бы уже не осталось.. надо написать всего-то маленькую процедурку используя винАПИ.
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Как узнать состояние объекта?

Сообщение capitaine » 17 фев 2008 21:53

Герой, да не особо нужная это вещь.

это как в анекдоте про яйца, помнишь? неаккуратненько как-то ;)

хотя enabled-disabled не помешал бы, да.
Toujours a votre service, le capitaine le Sang.
Внедрив систему управления данными, вы будете управлять всеми вашими документами через одно место
Аватара пользователя
capitaine
Участник
Участник
 
Сообщения: 134
Зарегистрирован: 12 сен 2007 22:52
Откуда: из Москвы

Re: Как узнать состояние объекта?

Сообщение Engineer » 14 мар 2008 05:45

Повесьте по скрипту на евенты Before Update, After Update, Before Add, After Add. Пость те которые before пишут в SmSession.GlobalData стринг MyState = "Update" или MyState = "Add", а те, которые after, стирают этот стринг
А тот скрипт, который вы повесите на профильную карту, пость читает этот стринг
Engineer
Новичок
Новичок
 
Сообщения: 1
Зарегистрирован: 14 мар 2008 04:58

Re: Как узнать состояние объекта?

Сообщение Геройчиковый » 26 мар 2008 20:02

Engineer, это тоже вариант, но вот к этому варианту как раз стоит подписать это -
capitaine писал(а):неаккуратненько как-то ;)

8)
Вариант с бефо эд/апдейт и афтер - возможно решение.. на, так сказать, безрыбье... Просто 4 скрипта вешать(или если уже повешены, то к ним дописывать) ради все этого - как-то забавно выглядит... Тем более при любом(а не только нужном нам) изменении, добавлении - они буду запускаться... :%)
Кстати, скрипт на афтре эд - не выполнится, если создавать объект, а потом его отменить...
Но опять же, если совесть не жмет :oops: - можно и такой вариант.. :good:
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron