Отчеты в Lotus

Тема в разделе "Lotus - Программирование", создана пользователем LuMee, 15 ноя 2006.

  1. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Насколько я понял, обычно отчеты в лотусе делаются путем выгрузки данных в Word или Excel средствами Lotus Script. Подход надежный, но довольно неудобный; особенно тяжко дается подготовка данных (ну до чего же Lotus Script убогий временами), когда требуется их достаточно сложная группировка и всяко.
    Мне было интересно, имеет ли кто-нибудь опыт создания отчетов с помощью других средств, например, на Java (через Notes Java classes), .NET (через СОМ) или с помощью NotesSQL (тоже весьма кривая штука кстати, как оказалось)? И, если таковые имеются, прошу их этим опытом поделиться.
    P.S. Особенно интересует все, что связано с Lotus R5, ибо с ним непосредственно и работаю.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LuMee+15:11:2006, 14:07 -->
    <span class="vbquote">(LuMee @ 15:11:2006, 14:07 )</span><!--QuoteEBegin-->ну до чего же Lotus Script убогий временами
    [snapback]47918" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ложь, п@#ёж и провокация! :huh:

    я бы мог распинаться про кривые руки... но просто не соглашусь с Вами

    <!--QuoteBegin-LuMee+15:11:2006, 14:07 -->
    <span class="vbquote">(LuMee @ 15:11:2006, 14:07 )</span><!--QuoteEBegin-->особенно тяжко дается подготовка данных
    [snapback]47918" rel="nofollow" target="_blank[/snapback]​
    [/quote] - опять враньё....

    вот самый простой пример Класс SortCollection

    у себя зделал через Class и отчёты беруться на ура! и групировка и сортировка и всё что угодно, было бы желание
     
  3. Mihal

    Mihal Гость

    <!--QuoteBegin-LuMee+15:11:2006, 14:07 -->
    <span class="vbquote">(LuMee @ 15:11:2006, 14:07 )</span><!--QuoteEBegin-->Насколько я понял, обычно отчеты в лотусе делаются путем выгрузки данных в Word или Excel средствами Lotus Script. Подход надежный, но довольно неудобный; особенно тяжко дается подготовка данных (ну до чего же Lotus Script убогий временами), когда требуется их достаточно сложная группировка и всяко.
    [snapback]47918" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Протестую! В чём проблема ЛотусСкрипта?! А NotesSQL ясно шо кривая. Какой SQL в нереляционной базе?:huh: Кстати, а чем Java может помочь? Ну, можно дорваться до данных Jav-ой. А дальше что?

    Технологии построения отчётов, которыми пользуюсь (пользовался) (альтернативные): Crystal Report, HTML, XML, ActiveX.
     
  4. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Lotus Script расстраивает, главным образом, отстутствием такой приятной штуки, как коллекции. Array и List проблем не решают, ибо оба неудобны (у второго можно как нибудь по-простому узнать количество элементов?).
    В java есть Hashtable, есть Vector - удобно и побыстрее, чем массивы Redim'ать каждый раз. Правда, нету возможности добраться до СОМ, а без этого сложно данные отобразить (эх, вот если бы кто-нибудь переписал JFreeReport под Java 1.1.8 :huh:)...
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LuMee+15:11:2006, 16:51 -->
    <span class="vbquote">(LuMee @ 15:11:2006, 16:51 )</span><!--QuoteEBegin-->отстутствием такой приятной штуки, как коллекции
    [snapback]47933" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    брэхня..... NotesDocumentCollection

    <!--QuoteBegin-LuMee+15:11:2006, 16:51 -->
    <span class="vbquote">(LuMee @ 15:11:2006, 16:51 )</span><!--QuoteEBegin-->Array и List проблем не решают
    [snapback]47933" rel="nofollow" target="_blank[/snapback]​
    [/quote] - можно доделать класы на основе масивов, с функ-ми сортировки и чего угодно
     
  6. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    ... который:
    1. хранит только документы, а мне числа/строки надо - запаковывать их в NotesDocument? тормозить наверное будет, или нет?
    2. нельзя даже создать по нормальному (жалко что ли IBM'овцам было конструктор ему сделать), приходится изголятся с вьюхами. Мелочь в сущности, но неприятно
    Можно, конечно можно, было бы время. При наличии онного можно вообще взять С++ какой-нить и собственный АPI к Лотусу соорудить, вот только как быть, если время очень крепко поджимает?
    Опять же, динамическая коллекция на основе массивов по-прежнему предполагает регулярное redim'анье массивов, хранящих данные, что не лучшим образом сказывается на производительности (в Java массивы порезвее наверное пересоздаются).
     
  7. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    По-резвее? Из чего это следует? Природу не обманешь! Ну, если в Жабе дин."массив" в действительности сделан на списках, то его Redim и правда будет быстрее. Зато выборка/обновление элемента - медленнее.
    У LS-массивов один существенный недостаток: ограничение на макс.длину
     
  8. Mihal

    Mihal Гость

    Я когда делал на лотусе делал след. конструкцию. Сделал свой тип, состоящий из массива и документа. Потом сделал список таких типов. В массив каждого элемента засовывал ключи на другие элементы списка (что-то вроде многосвязного списка получилось). Такая конструкция у меня отрабатывала МУХОЙ (реально нереально быстро) несколько тысяч документов. Правда, потом долго их сейвила :). Так что извращаться можно по-разному.
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Mihal

    я немного по другому

    Зделал
    Код (Text):
    Class Record
    Public Type As String
    Public Vikovavec As String
    Public VikovavecBez As String
    .......
    около 30 наименований(чтобы точно хватило)
    Потом обьявил "коллекцию/масив"

    Код (Text):
    Class MasRecord
    Public Rec() As Record
    Public Count As Long

    ' Создание класса
    Sub New()
    Count = -1
    End Sub
    В теле класа MasRecord обьявлены все функции : добвления, удаления, сортировки... всё что угодно... работает быстро
     
  10. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Ну да.. А хочется без извращений, по-человечески

    2 Morpheus
    Получается что-то вроде такого, так?
    Код (Text):
    Class Collection
    Private capacity As Long
    Private lastPosition As Long
    Private data() As Variant

    Sub New()
    capacity = 0
    lastPosition = -1
    End Sub

    Sub Add(item As Variant)
    If Not lastPosition < (capacity - 1) Then
    Redim Preserve data(capacity + 1) ' Или больше, чтоб меньше раз Redim'ать
    End If
    lastPosition = lastPosition + 1
    data(lastPosition) = item
    End Sub

    Function Get(index As Long) As Variant
    Get = data(index)
    End Function

    ...
    Только неясно, как в рамках подобной парадигмы оформить удаление элементов: что делать, если элемент удаляется из середины списка?
    З.Ы. Продолжая тему LS-извращений, могу еще и придумать LS-версию Hashtable из Java:
    Код (Text):
    Class Hashtable
    Private data As NotesDocument

    Sub New(db As NotesDatabase)
    Set data = new NotesDocument(db)
    End Sub

    Sub AddItem(key As String, value As Variant)
    Call data.ReplaceItemValue(key, value)
    End Sub

    Function GetByKey(key As String) As Variant
    GetByKey = data.GetItemValue(key)
    End Function

    Function GetByIndex(index As Long) As Variant
    GetByIndex = data.Items(index).Values
    End Function

    ...
    Вот только все это по-прежему отдает извратом ненужным... Зато прикольно :)
     
  11. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LuMee+16:11:2006, 20:49 -->
    <span class="vbquote">(LuMee @ 16:11:2006, 20:49 )</span><!--QuoteEBegin-->Только неясно, как в рамках подобной парадигмы оформить удаление элементов: что делать, если элемент удаляется из середины списка?
    [snapback]48051" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Код (Text):
        'Удаление члена
    Sub Del(i1 As Integer)
    Dim k As Integer
    k = Ubound(Rec)
    Set Rec(i1) = Rec(k)
    If k>0 Then
    Redim TmpMas(k-1) As Record
    Dim i As Integer
    For i = 0 To k-1
    Set TmpMas(i) = Rec(i)
    Next
    Erase Rec
    Redim Rec(k-1) As Record
    For i = 0 To k-1
    Set Rec(i) = TmpMas(i)
    Next
    Count = Count -1
    End If
    End Sub
    ' Замена местами
    Sub Repl(i1 As Integer, i2 As Integer)
    Dim TmpRec As New Record
    Set TmpRec = Rec(i1)
    Set Rec(i1) = Rec(i2)
    Set Rec(i2) = TmpRec
    End Sub
     
  12. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LuMee+16:11:2006, 20:49 -->
    <span class="vbquote">(LuMee @ 16:11:2006, 20:49 )</span><!--QuoteEBegin-->Вот только все это по-прежему отдает извратом ненужным
    [snapback]48051" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    НиХ... :) в смысле - отнюдь! Вполне нормальная работа с класами... а от по Вашим словам получаеться что LS это изврат, а собаки ваабче садо-мазахизм :)
     
  13. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Идею удаления уловил, так и думал, в общем-то :D
    Ну не знаю, тот прикол с хеш-коллекцией являет собой типичный пример нецелевого использования классов (NotesDocument в данном случае), что, вообще говоря, не поощряется.
    LS - он да, в достаточной мере изврат :) После Java и C# выглядит каким-то непродуманным что ли...
    Насчет собак, то в условиях периодических расхождений суровой реальности с документацией (недавно обсуждалось про @IsNewDoc), неважной документированностью отдельных функций, нигде не описанных "особенностей" поведения Лотуса и, наконец, полного отсутствия отладчика программирование на собаках нередко отдает самым жестким BDSM :)
     
  14. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LuMee+17:11:2006, 13:28 -->
    <span class="vbquote">(LuMee @ 17:11:2006, 13:28 )</span><!--QuoteEBegin-->После Java и C# выглядит каким-то непродуманным что ли...
    [snapback]48115" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Так ведь это есть СКРИПТ, что ж его сравнивать с C#.
    Язык достаточно мощний,на котором можно решить поти все, хотя иногда сложновато(например выпадающее меню)

    Подсел ан ЛС 2 года назад... пока не изменяю :unsure:
     
  15. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Молодо-зелено... Не после C#, а ДО. LS намного старше, да и Java-ки - тоже. У молодых языков нет груза обратной совместимости, а история LS еще из 1-2-3 тянется
    К стати, никто не мешает тебе пользоваться Jav-ой. Там всё красивше, и иерархия классов действительно стройнее
     
  16. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Почти все - это да (правда, частенько через заднее место), жалко, что во многих местах (типа вычисления значений CFD-полей) можно только формулы использовать... Также жалко, что нельзя из него в формулы значения передавать (через profile docs - не всегда годится).
    А как на нем выпадающее меню сделать?
    Гвозди бы делать из этих людей :) Мне полугода хватило, чтобы вдрызг расшатать нервную систему :blink:
    Под ПОСЛЕ я имел в виду не историю их создания, а лишь то, что раньше я работал с Java и C# (с этим и сейчас на других проектах), и после знакомства с ними LS мне кажется кривоватым и недоделанным.
    Насчет обратной совместимости, я не думаю, что она сильно пострадает, если джедаи из IBM добавят в LS API несколько вспомогательных классов вроде Java'вских Hashtable или ArrayList, ну или реализуют дополнительные функции в самом LS.
    Мешает, главным образом, то, что Java не может взаимодействовать с ГУИ, да и обработчики кнопок на ней писать нельзя. Значит, понадобится использовать LS вместе с агентами на Java, что в итоге усложняет архитектуру системы.
     
  17. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    "Вы просто не умеете их готовить!" doc.RerplaceItemValue "CFDpole","Value" - и все
    + через поля, + через Environment. На чистом LS из вьюхи в форму тоже переменную передать нельзя: разные модули. Вот и @ - тоже другой модуль
    А при чем здесь язык? Архитектура системы тебя не устраивает, вирт.машина. А её аскетичность - плата за мультиплатформность, нет заклада на WinAPI
    А мне после Модулы и Оберона С/Жаба недоделками кажутся, и?
    Опять: ГУЙ - это здесь вирт.машина. Напиши свой -на Жабе (это доступно, апплеты) и взимодействуй!
     
  18. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Если я не ошибаюсь, в итоге значение поля сохранится в документ. Тогда какое это поле CFD? Обычное вычисляемое получаем, а его мне не надо.
    Еще мне все время было неясно, почему, скажем, на формулах установить значение CFD поля можно (FIELD CfdField := "Some value":blink:, а вот на LS с помощью Evaluate то же самое не получается (пишет что-то вроде "Не удается выполнить команду").
    Да я просто спросил. Знаю, что там какие-то функции из Notes C API можно задействовать, только не попадалось мне пока их толковых описаний.
    Мысль.. ГУИ на джава, бизнес-логику на джава, потом еще MySQL прикрутить где-нибудь с боку и вообще задуматься, а зачем в этой тусовке Lotus нужен :)
     
  19. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Ошибаешься. Если только ты не испортишь property item.saveToDisk. Им-то и отличается CFD-поле от прочих. Hint: это свойство поля устанавливает форма при открытии, а несвоевременное doc.ReplaceItemValue может и испортить
    Все получается. Ищи ошибку. И RTFMь по-чаще. Про команды (@Command): сказано, что они не Evaluate-ятся
    Качай с IBMа весь C API. По Лотусовой традиции там унутре исключительно полный Help в виде *.nsf. Но м.б. разочарован: UI через C API не доступен
    Правильно. В IBM тоже так думают. DB/2 + MQ + ВебСфера + ContentManager+.. На кой эта Domin-а?
     
  20. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Хм, вот этого не знал. А можно поподробнее?
    Ну, на команды и не расчитывал (собссно, и не надо). А вот что надо ему передавать в Evaluate вторым параметром, чтоб работала вышеприведенная формула? Насчет искать ошибку - при всем своем нубизме, в двух строчках ошибиться не могу (перепроверял) :)
    Кой-какой доступен. Нарыл в инете код для создания симпатичного прогресс бара (даже странно, что его не включили в обычный API) ;)
    Эти бы слова, да заказчику в уши :)
     
Загрузка...

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