Папка:
01. Технические вопросы, 06. Разработка Notes-приложений, 99. Разное
Тип сообщения:
Мне лень заполнять это поле
Сообщение:
>в том то и дело что будет доступен пока Вы не закроете Лотус... :)
>даже если в клиенте закрыть базу данных, объект полученный и сохраненный в коллекцию будет доступен!
>меня и самого все это поразило до глубины души, но факт на лицо - работает!
мало спал, много думал ;)
1. создается сом inprocess объект
2. если дернуть любое свойство в vb у объекта помещенного в коллекцию, бейсик ругается object requered (значит скриптовые объекты ненастоящие, что логично, т.к. LS чистый интерпретатор. создавать COM session внутри из LS, в пятере заканчивалось гарантированно плохо, лотус падал)
3. почему не умирает объект, тоже понятно, лотус один раз юзнув dll\exe объект держит ее\его насмерть, пока сам не сгинет (это , кстати , минус - юзер один раз влез в БД и память хавнулась до перезагрузки клиента)
4. COM и OLE интерфейсы лотуса это пристройки, только когда мы зовем OLe снаружи мы получаем доступ к загруженному(с клиентом) инстансу ядра, соответственно единый доступ к инмемори образу документа. если мы дергаем COM, то загружаем в свой тред новый инстанс ядра LND, соответсвенно без связи с инмемори образами объектов живущих в клиентском ядре.
5. сам lotus script не оперирует OLE совместимыми объектами, ему в лом, он работает со своими интерпретируемыми подобиями объектов, но т.к. нотес ядро одно, то ole объект этого ядра и LS объект работают с одним инмемори образом документа.
6. COM не может работать с этими инмемори образами, т.к. у него свой инстанс ядра.
>и во внешнем приложение можно ведь и проверить, а не null ли объект... :)
бессмысленно, см. выше
>на сколько я понимаю, при передаче в COM Notes создает COM-объект "notes.notesSession" и передает его, но при этом сам COM объект связывается с >нотсовским объектом и живут они совместно. :)
сорри, этой фразы я не догнал
>Не совсем понял почему нельзя? Я получаю из ActiveX нормальный COM-объект, связанный с нотсовским объектом, могу делать с ним что угодно (что >дозволенно делать через COM)....
см. выше
> проще, с теме же очередями. т.к. наконец стало работать свойство
> Notesxxx.NotesURL и метод NotesSession.Resolve делаем просто засовываем в
> очередь урл (правда, док надо сохранить перед этим), а когда надо достаем и
> делаем resolve. что мне не нравиться, надо много ставить клиенту.
>Тоже вариант, но на сколько я понимаю по Resolve будет создан новый объект, не связанный с прародителем, так сказать...
не факт, это требует проверки, думаю, что лотус иногда "ошибается", нарушая единственность инмемори образа документа. если соблюдать опр. правила, то можно , видимо, получить два объекта ссылающихся на один инмемори образ.
> На самом деле, возможны и какие-то ограничения, их я еще не откопал просто...
например коллекцию в vb , лучше\легче создать визардом, а потом немного поправить, тогда не надо у процедур выставлять атрибуты, чтобы , например , по айтемам forall-ом ходить можно было, и т.д.
кстати, можно скрестить две идеи. оформить этот коллектор как настоящий комсервер, запускать его через shell, получать на его объект ссылку GetObject
он создает свою сессию получает урл документа, резолвит его у себя и сохраняет( не уверен, но думаю, что урлы документов полученных через ключ и по юниду будут отличаться - у одного будет юнид вьюшки, а у второго 0 - типа дефолтная вьюшка), урл может сразу служить ключом коллекции, получиться такой управляемый кэш