Home

Advertisement

Notes UI: Class ProgressBar

  • Jan. 12th, 2008 at 1:51 AM
Удивительно, но года полтора назад я думал, что больше изучать в Lotus Notes по программированию мне нечего - я все знаю... Сейчас же я себя развлекаю тем, что изучаю интересные, нетривиальные вещи, которые нахожу в просторах Интернета. Предстоит ещё ОЧЕНЬ многое изучить и понять

Сегодня я бы хотел описать один "вспомогательный" UI шный класс - LNProgressbar. Думаю, каждый программист LN хоть раз в жизни использовал фичу "Recompile All LotusScript". Помните строку, которая там течет с процентами? Не хочется такуюже отображать пользователю? Пожалуйста! Вещь приятная, но в реальности мало принимимая... К сожалению, русский язык не поддерживается =(

Declare Public Function NEMProgressBegin Lib "nnotesws.dll" ( Byval wFlags As Integer ) As Long Declare Public Sub NEMProgressDeltaPos Lib "nnotesws.dll" ( Byval hwnd As Long, Byval dwIncrement As Long ) Declare Public Sub NEMProgressEnd Lib "nnotesws.dll" ( Byval hwnd As Long ) Declare Public Sub NEMProgressSetBarPos Lib "nnotesws.dll" ( Byval hwnd As Long, Byval dwPos As Long) Declare Public Sub NEMProgressSetBarRange Lib "nnotesws.dll" ( Byval hwnd As Long, Byval dwMax As Long ) Declare Public Sub NEMProgressSetText Lib "nnotesws.dll" ( Byval hwnd As Long, Byval pcszLine1 As String, Byval pcszLine2 As String ) Const NPB_TWOLINE = 3 Const NPB_ONELINE = 2 Public Class LNProgressbar hwnd As Long Sub New(SecondLineVisible As Integer) 'Set-up the progress bar on the screen If SecondLineVisible Then hwnd = NEMProgressBegin(NPB_TWOLINE) Else hwnd = NEMProgressBegin(NPB_ONELINE) End If End Sub Sub SetText(FirstLineText As String,SecondLineText As String) 'Display the text in progress bar NemProgressSetText hwnd, FirstLineTExt,SecondLineText End Sub Sub SetProgressPos(Progresspos As Long) NEMProgressSetBarPos hwnd, ProgressPos End Sub Sub SetProgressRange(ProgressMaxElements As Long) 'Set-up the max elements in the progress bar, if you have 'a list with 230 elements then set the MAX to 230 elements. 'For every element you proceed increase the SetProgressPos 'by one to reached 230 NEMProgressSetBarRange hwnd, ProgressMaxElements End Sub Sub DeltaPos(DPos As Long) ' This function adds the number in DPOS to the current ProgressPos NEMProgressDeltaPos hwnd, DPos End Sub Sub UpdateTitles( FirstLineText As String, SecondLineText As String ) NEMProgressSetText hwnd, FirstLineText, SecondLineText End Sub 'Update Sub Delete 'Terminate the progress bar on the screen NEMProgressEnd hwnd End Sub End Class


Пример использования класса:

Sub Click(Source As Button) 'Sample to test the code 'You can paste this code into the click 'event of a button 'We need two lines on the progress bar Dim pb As New LNProgressBar(False) Dim i As Long Call pb.SetText("This is line one" ,"This is line two") 'We set the range to 200 elements Call pb.SetProgressRange(20000) Dim currentDoc As NotesDocument For i=1 To 20000 Dim ws As New NotesUIWorkspace Set currentDoc = ws.CurrentDocument.Document 'we process the elements Call pb.SetProgressPos(i) If i>10000 Then Call pb.UpdateTitles("Testing", "Tesing") End If Next 'Terminate the progress bar Delete pb End Sub

Web сервисы! Эта инновационная технология, которая позволяет стереть грань между различием языков и систем. Одно из главных нововведений в LN7 - предоставление Web Service'ов... Прочитал статью за три часа и уже понимаешь, как можно написать свой такой... 
Всё бы хорошо, но... как подключиться к ВебСервису? Вопрос, на первый взгляд, простой до безобразия... 
Поверьте мне, все на так просто... особенно, если у вас ОС не Windows... 

Итак, все по порядку:
Что мы имеем? LS aka VB, а также Java версии 1.3 (для шестерки). Как мы можем это использовать? Надо отдать должное IBM, которые уделяют достаточно большое внимание вопросам написания и использования вебсервисов... Статей много, для себя я вынес три
Книга по Lotus. Разработка приложений в среде Domino 7: Глава 3 - перевод главы из книги, описывающей работу с WS... Предлагается Java код подключения к WS... Насколько я помню, не до конца рабочий =)
Использование Web-сервисов с помощью Java-агента Lotus Domino - как подключиться к WS при помощи Apache AXIS - проблема, с которой я столкнулся заключалась в том, что если JAR'ы добавлять не в папку ext, а в агент, то ничего не работало... судя по всему автор статьи об этом хитрожопо умалчивает... Неудобство данного метода заключается в том, что для каждого WS нужно генерировать классы-заглушки... Т.е. при изменении методов WS придется заново сгенерировать эти заглушки
Practical Web services in IBM Lotus Domino 7: Writing and testing simple Web services - именно эта статья мне и помогла. Из этой статьи я узнал о существовании такого проекта, как Stubby, который позволяет генерировать те самые заглушки без особых усилий, без ошибок и даже без необходимости вкладывать в проект дополнительные JAR'ы!

Ну и последний способ подключения к WS... никаких проблем, если у вас... Windows, потому что используется технология COM. Создаете объект MSSOAP.SoapClient и работаете с WS как с обычным классом. Действительно просто

Интересный ресурс...

  • Dec. 4th, 2007 at 4:59 PM
Интересный ресурс появился в сети,  где разработчики, администраторы и просто пользователи продуктов семейства Lotus высказывают свои предложения по улучшению оного... Жаль только, что восьмерка уже практически вышла. Остается только надеяться, что разработчики из IBM'а заглянут туда и хотя бы что-нибудь решат воплотить в следующих версиях Lotus Notes

Безусловно, основное направление IBM - hardware, но они ведь и софт производят... Одной из таких программ является Lotus Notes / Domino. Раз в несколько лет выходит новая версия этого замечательного продукта, которая приносит нам (разрабочикам... точнее мне, не знаю как всем разработчикам) не самые лучшие мысли. 
Оставим пользовательский клиент LN, это чисто коммерческая часть... Возьмем дизайнер.... Жаль, но каждый, кто хоть раз видел Visual Studio или же Eclipse, впадает в уныние от нашего дизайнера... Все равно что сравнивать ладу с мерседесом. Если LS можно как-то более менее нормально использовать, то когда пишешь на яве возникает ощущение, что пишешь в блокноте... я уже не говорю о мелких глюках, о ужасной эргономике дизайнера, который застрял в конце 20 века... Дайте, хотябы, нормальный дебагер Java! Но выход есть! И вот эта ЗОЛОТАЯ ССЫЛКА Плагин к Eclips'у, который позволяет быстро выгружать в Eclipse базы LN, быстро загружать в Eclipse и даже производить полноценную отладку Java агентов!!! Спасибо, ребята за замечательную вещь!

ps
Думаю, если дела с дизайнером не сдвинуться с мертвой точки (т.е. он не будет переведен по Eclipse) в следующей версии, то разработчики завопят... потому что нужно иметь совесть

 

Хотя я не пишу какую-либо личную информацию в блоге, но этой новостью поделиться хочется со всеми... Да и не новость это сейчас уже =) С такой игрой нам на ЧЕ делать нечего... ну что ж... спасибо Хорваты!!! Спасибо, Вам, огромное! Хотя мы и не заслужили.... 

Утилиты и тулсы

  • Nov. 22nd, 2007 at 1:06 PM

Сегодня мне бы хотелось рассказать об утилитах для работы с Lotus Notes'ем... Помимо всем известного TeamStudio (лично я не сильно сталкивался с этими утилитами) существуют ещё некоторые... А именно... Ytria! Действительно, набор утилитов от Ytria заслуживает восклицательного знака. Вы просто зайдите и посмотрите видео презентации на каждую из утилит. Слюнки потекли?

Основные фичи, которые мне как разработчику очень понравились:

·         Одновременное редактирование смежных элементов дизайна - отбираете какой-то набор (представления, формы и т.д.) и все одновременно настраиваете, например, action bar...  (модули actionBarEZ, viewEZ)

·         Добавить столбец в 10 представлений? Легко! Действие в 15 форм? Не вопрос! 

·         Редактирование содержимое документа - одна из самых нужных мне фич!

 Вообще нужно сказать, что модуль scanEZ центральный в наборе утилит от Ytria и охватывает большой объем работ (редактирование, сравнение документов, профильных документов, одновременная работа с набором документов, решение replication конфликтов и многое другое!)

В итоге, набор утилитов от Ytria - это сильное упрощение жизни разработчику и администратору системы, а также мощный ресурс для аудита системы

Безусловно, все это не бесплатно и стоит больших денег... но мы живем в России.... так что вот вам драгоценная ссылочка. Подсказка - если после патча все ещё будет просить ключ, удалите указанные в патче ветки

Фреймы, фреймы, фреймы... удивительная! просто поразительная вещь в Lotus Notes! Удивительно точно об этом явлении сказал  Ivan Tsibanenko на форуме Интертраста: "недокументированное царство оставляет сложное смешанное ощущение тихого ужаса и робкого благоговения перед вселенским хаосом. Как будто заглянул в жерло вулкана, а там, на дне - ад."
Как сделать гибкую систему фреймов? НИКАК! Забудьте об этом! 
Хотите обменяться данными между фреймами? Забудьте об этой идее! В лучшем случае получится через notes.ini, но от такого стиля программирования я бы отказался

После долгого биения об стол и лотус удалось добиться некоторых результатов:
1. Более менее толково можно обменяться данными только при помощи JS
2. Не удалось обменяться данными с динамическими фреймами (открывается документ по линку из представления, например)
Пример JS кода:

var currentDoc = document.forms[0]
var contentDoc = window.parent.frames["Content"].document.forms[0]
currentDoc.ContentUNID.value = contentDoc.UNID.value

Ссылки по теме: раз, два

Другая проблема была открыть документ во фрейме не по ссылки из представления, а программным образом... Как известно, такой код не работает:

Call WS_current.SetTargetFrame("Content")
Call WS_current.EditDocument(False, ND_current)

После поиска на IBM'овском форуме нашлось решение:

Call WS_current.SetTargetFrame("Content")
Call WS_current.EditDocument(False, ND_current, False,,False)

но новая ошибка не заставила себя долго ждать - при попытке открыть документ в том же фрейме, в котором была кнопка, исполняющая данный код, вылетала ошибка "Cannot close current program"... удивительно, и эта ошибка была решена !!! Код необходимо записать в агент и вызывать агент... Ссылка по теме

Вот так мы преодолеваем неграмотность и глюки лотуса... ну почему нельзя было сделать нормальную работу с фреймами?

Млять! Это LN

  • Nov. 6th, 2007 at 11:26 AM

Найдите мне программиста, которому нравится лотусовый GUI! Меня всю жизнь добивали эти таблицы, которые постоянно съезжают; этот горизонтальный скролл, который если уж появится, то никак не избавишься... К сожалению, это слишком мелкие проблемы, до которых IBM нет дела
Сейчас понадобилось разработать удобный для пользователя GUI на базе FrameSet'ов... Мало того, что для работы с FS два-три метода, так и они не работают! SetTargetFrame метод класса NotesUIWorkspace никак не хочет открывать документ в нужно фрейме... При помощи танцев с бубном и кучей ненужного кода эту проблему удается решить... Правда пока готового решения у меня нет =( 

Ёмг... какая же тема?

  • Nov. 2nd, 2007 at 4:52 PM
Никогда не понимал, почему люди стремяться рассказать о своих мыслях другим людям, предоставить доступ к личной информации... Только недавно, можеть быть, я понял что такое "блог" и почему блоги стали так популярны в наше время... Думаю, никто никогда не догадается, кто сумел донести до меня эту мысль... Есть идеи? Не трудитесь! На IBM Lotus Forum 2007 блогам уделялось огромное внимание. Оказывается, IBM поощряет блоги сотрудников, читает их и делает выводы... Удивительно

О чём буду писать я? Я постараюсь выкладывать полезную инфу для разработчиков БД на Lotus Notes, интересные вещи, с которыми буду встречаться ну и, может быть, что-нить позитивное, не относящееся к LN

Tags: