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

Тема в разделе "Lotus - Программирование", создана пользователем beloff, 8 окт 2012.

  1. beloff

    beloff Well-Known Member

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

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

    NickProstoNick Статус как статус :)

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

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

    beloff Well-Known Member

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

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

    делал через форму свойств БД, не через админку
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    1. Ну как самый вариант - описать процедуру для PostSave основного дока и в ней модифицировать основной (при необходимости) и пересчитывать дочерние. Другого пути не вижу
     
  5. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    1. Вынести код с PostSave в отдельную процу новой библиотеки и дёргать из 2-х мест.
    Если жмёт создавать библиотеку ради одной функции, то можно этот общий код поместить в агент, вызываемый из обоих мест с помощью runWithDocumentContext(NotesDocument).
     
  6. beloff

    beloff Well-Known Member

    Регистрация:
    24 июл 2012
    Сообщения:
    103
    Симпатии:
    0
    чуть не то. В 1 случае на постсейве зависимые доки ищутся по УНИДу основного, в 2 случае - доки ищутся по форме, статусу и признаку, так что не получится так.
     
  7. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    В любом случае на скрипте нужно будет написать функцию, которая возьмет коллекцию основных доков и пробежав по основным возьмет для каждого коллекцию зависимых и обновит, и так далее рекурсивно.
    функции обновления (если они разные) логично вынести в библиотеку, чтобы они менялись в одном месте и не было путаницы. Это написали и ранее, только другими словами.

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

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

    beloff Well-Known Member

    Регистрация:
    24 июл 2012
    Сообщения:
    103
    Симпатии:
    0
    Gandliar
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    для 90K слишком большой вес... Аттачи?
    Размер одного и тоже документа разный в репликах? Может не во всех различается.
    RTF поля... Размеры сравнить. Может сжатие не работает, хотя глупость какая-то...

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

    beloff Well-Known Member

    Регистрация:
    24 июл 2012
    Сообщения:
    103
    Симпатии:
    0
    это база персонала. сравнил свои доки - размер одинаковый.

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Я не админ :( так что мой пост просто как совет...
    На сисадминс наткнулся на такой совет:
    Судя по хелпу админки:
    Fixup databasepath -L
    Compact database path
    Load updall databasepath -V
    nFixup делается из команды ОС, при выключенном сервере.

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

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

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    a ods одинаковый на базах?
     
Загрузка...
Похожие Темы - Обновление полей зависимых
  1. DNT
    Ответов:
    6
    Просмотров:
    812
  2. Cleric-Lviv
    Ответов:
    4
    Просмотров:
    1.260
  3. Адриан
    Ответов:
    1
    Просмотров:
    943
  4. Antigo
    Ответов:
    16
    Просмотров:
    3.003
  5. azat20
    Ответов:
    2
    Просмотров:
    2.106

Поделиться этой страницей