• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Обновление полей в зависимых документах

  • Автор темы beloff
  • Дата начала
B

beloff

1. Задача: есть документ (основной), к нему привязываются другие поддокументы (не ответные), привязываются по UNID, отображаются в Embedded view. На postsave формы основного документа прописывается изменения и зависимых (поддокументов). Как сделать так чтобы выбрать коллекцию и перебором основных документов при самом переборе открывать эти документы чтобы заставить сработать postsave и обновились поля в зависимых документах. Computewithform не предлагать, не работает.

2. Задача 2 (альтернативная, больше администраторская). Есть БД с кучей доков. Грубо говоря, 90 000 доков весит 5,5 гигов. После архивации большей половины (ок 50 000) доков размер базы нифига не уменьшился. Compact, перестройка всех индексов резалта не дает. Точно такая же локальная копия этой базы со всеми индексами весит 2,5 гб. вопрос: WTF???
(Понятно что там есть какие то таблицы структурные. С прктической точки здрения чо нить сделать можно ввиду уменьшения объема БД?)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
1. Задача: есть документ (основной), к нему привязываются другие поддокументы (не ответные), привязываются по UNID, отображаются в Embedded view. На postsave формы основного документа прописывается изменения и зависимых (поддокументов). Как сделать так чтобы выбрать коллекцию и перебором основных документов при самом переборе открывать эти документы чтобы заставить сработать postsave и обновились поля в зависимых документах. Computewithform не предлагать, не работает.

2. Задача 2 (альтернативная, больше администраторская). Есть БД с кучей доков. Грубо говоря, 90 000 доков весит 5,5 гигов. После архивации большей половины (ок 50 000) доков размер базы нифига не уменьшился. Compact, перестройка всех индексов резалта не дает. Точно такая же локальная копия этой базы со всеми индексами весит 2,5 гб. вопрос: WTF???
(Понятно что там есть какие то таблицы структурные. С прктической точки здрения чо нить сделать можно ввиду уменьшения объема БД?)

1. Computewithform возможно сработает если поля Computed, а не Computed when composed.
А чтоб заставить выполниться PostSave... разве что описать постсейв в процедуре/функции и в цикле "дергать" ее... ну и ее же вызывать и при постсейве. PostSave вроде как возникает при UI

2. Может Soft delete большой?
И какие ключи при компакте?
 
B

beloff

1. Computewithform возможно сработает если поля Computed, а не Computed when composed.
А чтоб заставить выполниться PostSave... разве что описать постсейв в процедуре/функции и в цикле "дергать" ее... ну и ее же вызывать и при постсейве. PostSave вроде как возникает при UI

там просто какая задача - нужно актуализировать документы имеющие определенный признак каждый месяц на текущий месяц, а вместе с основным нужно актуализировать и зависимые. Я думал может можно не простым присваиванием значений а выполнить потссейв на основном доке (а то нужно в процессе апдейта делать развилку, т.к. поля называются по разному в основном и зависимых доках). Поля не computed, там реализовано по другому. Основное несущее инфо поле - оно editable но скрыто, a инфу выводит computedtext. Про UI тоже думал только не додумался как от документа получить UIдокумент. Наоборот понятно можно. в голову пришло только ws.EditDocument но это ж метод уидока. По ходу нужно делать как сразу решил - переназначать поля как в постсэйве.

2. Может Soft delete большой?
если вопрос про стабы - то удалял и стабы тоже. Размер не менялся

какие ключи при компакте?
делал через форму свойств БД, не через админку
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
там просто какая задача - нужно актуализировать документы имеющие определенный признак каждый месяц на текущий месяц, а вместе с основным нужно актуализировать и зависимые. Я думал может можно не простым присваиванием значений а выполнить потссейв на основном доке (а то нужно в процессе апдейта делать развилку, т.к. поля называются по разному в основном и зависимых доках). Поля не computed, там реализовано по другому. Основное несущее инфо поле - оно editable но скрыто, a инфу выводит computedtext. Про UI тоже думал только не додумался как от документа получить UIдокумент. Наоборот понятно можно. в голову пришло только ws.EditDocument но это ж метод уидока. По ходу нужно делать как сразу решил - переназначать поля как в постсэйве.


если вопрос про стабы - то удалял и стабы тоже. Размер не менялся


делал через форму свойств БД, не через админку
1. Ну как самый вариант - описать процедуру для PostSave основного дока и в ней модифицировать основной (при необходимости) и пересчитывать дочерние. Другого пути не вижу
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
1. Вынести код с PostSave в отдельную процу новой библиотеки и дёргать из 2-х мест.
Если жмёт создавать библиотеку ради одной функции, то можно этот общий код поместить в агент, вызываемый из обоих мест с помощью runWithDocumentContext(NotesDocument).
 
B

beloff

чуть не то. В 1 случае на постсейве зависимые доки ищутся по УНИДу основного, в 2 случае - доки ищутся по форме, статусу и признаку, так что не получится так.
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
В любом случае на скрипте нужно будет написать функцию, которая возьмет коллекцию основных доков и пробежав по основным возьмет для каждого коллекцию зависимых и обновит, и так далее рекурсивно.
функции обновления (если они разные) логично вынести в библиотеку, чтобы они менялись в одном месте и не было путаницы. Это написали и ранее, только другими словами.

Что касается базы - то надо сравнить все свойства заодно.
а в локальной реплике - возможно не все индексы построены

зайдите в вид локальной базы и нажмите ctrl+shift+f9 для обновления всех индексов в базе и потом сравните размер
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
для 90K слишком большой вес... Аттачи?
Размер одного и тоже документа разный в репликах? Может не во всех различается.
RTF поля... Размеры сравнить. Может сжатие не работает, хотя глупость какая-то...

Хотя не совсем глупость,скорее непонятка (для меня)...
Галочка на LZ1 на каждой реплике своя, и да локальная реплика действительно легче(29М на сервере => 20М на локале).
Да, объем конечно не тот, но все же 9М (~30%)
 
B

beloff

Размер одного и тоже документа разный в репликах?
это база персонала. сравнил свои доки - размер одинаковый.

базы абсолютно одинаковые. Что локальная что серверная. Но с серверной была такая история - она легла, пришлось поднимать из бэкапа. Так вот как там было: бэкап на 16.09 весил 5,5 гига, а та, которая легла 19.09 - почти 7 гб. Это однозначно не документы столько завесили. ИМХО какая то внутренняя структура данных, таблицы какие нибудь (не силен)
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Я не админ :( так что мой пост просто как совет...
На сисадминс наткнулся на такой совет:
nfixup, fixup ,compact,updall.
Судя по хелпу админки:
Fixup databasepath -L
Compact database path
Load updall databasepath -V
nFixup делается из команды ОС, при выключенном сервере.

правда тут проблема была с почтовой базой.

И еще, если есть ScanEz или даже временная версия(можно качнуть), то при открытии базы Scanez может ругнуться на TableID.
Попробуйте проверить.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!