Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Ситуация: > s Obj=##class(User).%OpenId(1) > s Obj.SomeProperty = "New Value" //старое значение - Old Value > s Obj2=##class(User).%OpenId(1) > w Obj2.SomeProperty New Value Вопрос: как заставить Obj2 считать объект из базы а не "подключиться" к существующему объекту в памяти? (вариант c %Reload не предлагайте, т.к. он изменит Obj) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 12:35 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Интересная фигня! А я наивно полагал что пока не сделаеш Код: plaintext ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:19 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
И восхвалим мы SYSTEM OREF и уверуем в него... PS: Если это делать в разных процессах (соседних терминалах) - то будет OldValue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:35 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
krvsaА я наивно полагал что пока не сделаеш %Save Другой экземпляр объекта будет использовать то, что в "БД"... If a version of the specified object is already in memory, then %Open increments the object's reference count and returns the OREF value referring to this version. Конституция РФ, статья %Library.Persistent часть %Open ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:46 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю задача состоит в том что бы имет состояние объекта до изменения... Навскидку есть несколько вариантов - первый использовать для второй выборки SQL Код: plaintext 1. 2. 3. 4. 5. 6. Вариант второй сделать внутри объекта поле ссылку на самого себя - объявить его транзиентным. И в обработчиках %OnNew() и %OnOpen() вставить создание клона Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:46 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Мы используем SQL-ный вариант чтения данных... Классовый только для внесения изменений. Но и тут иной раз обходимся SQL-ем... ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 14:28 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Есть ещё такое GetStored http://127.0.0.1:8972/csp/docbook/DocBook.UI.Page.cls?KEY=GCV1_developer#GCV1_C58486 Код: plaintext 1. 2. 3. 4. 5. Это с версии 5.1 -------- Cache for Windows (Intel) 5.2.3 (Build 710U) Tue Dec 12 2006 10:15:11 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 15:01 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Ptn Вариант второй сделать внутри объекта поле ссылку на самого себя - объявить его транзиентным. И в обработчиках %OnNew() и %OnOpen() вставить создание клона Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Так и сделал, осталась маленькая мелочь. При сохранении объекта User (обратите внимание на свойство Prefix), если у объекта Shadow его не заполнить, но сохранение не происходит, хотя Shadow - transient. Приходится в методе сохранения, очищать Shadow перед %Save, а затем восстанавливать. У Вас так же, или это я что то упустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 18:47 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
У нас такое вообще не используется :-) это был экспромт... проблема из-за Required поля - и возникает она в волидате методе... Можно при помощи дополнителной тразиентой галки всегда заставить считать Shadow корректным... но учитывая IS ... стирать Shadow наверное лучше ... Точне я бы сказал что .... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. в 5-ке половину того что делали в %OnBeforeSave приходится выполнять в %OnAddToSaveSet ЗЫ: Кстате вариант Александр Коблов с GetStorted все таки выглядить привлекательнее IMXO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 08:35 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
Третий вариант :-))) сделать так ... Код: plaintext 1. 2. 3. Типы свойств в Каше собсно только при сохранении и проверяются - а доступ при налиии в переменно OREF ссылки должен работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 08:45 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
PtnТретий вариант :-))) сделать так ... Код: plaintext 1. 2. 3. Типы свойств в Каше собсно только при сохранении и проверяются - а доступ при налиии в переменно OREF ссылки должен работать именно так всё работает. А почему переносили в OnAddToSaveSet? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 12:23 |
|
||
|
%OpenId и объекты в памяти
|
|||
|---|---|---|---|
|
#18+
начиная с 5-ки что то изменилось.... и такое впечателение что после OnAddToSaveSet модификация полей не устанавливает бит IsModifed В итоге если имелся в объекте например массив строк - то его изменение в OnBeforSave не сохранялась ... обычные (регулярные поля) вроде сохранялись ? В ветке 4.x такого не было. Все что поменял в OnBeforSave все ушло в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 12:48 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=34894505&tid=1559138]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 439ms |

| 0 / 0 |
