К основному контенту

Сообщения

Показаны сообщения с ярлыком "Development"

Модульное тестирование для LotusScript, статья на Хабре и прочее

Ох, давно не брал я в руки шашку! По крайней мере в блоге. Пора немного наверстать упущенное. Модульное тестирование, DUnit Несколько раз мне приходила в голову мысль, что было бы не плохо иметь покрытие модульными (unit) тестами систем под IBM Notes/Domino, написанных на LotusScript. Код некоторых становится достаточно сложным, а количество вариантов прохождения неподъемным для прогона после каждого изменения. Т.к. готового инструмента вообще говоря нет, пришлось его создать самому. Так появился DUnit . Это фреймворк для написания и выполнения unit тестов для кода на языке LotusScript. Сам он тоже написан на нем же. Фреймворк свободный, с открытым кодом. Доступен на GitHub . Там же подробная документация о том, как писать и запускать тесты. Проект был так же размещен на OpenNTF.org Статья на Хабре Написание DUnit стало для меня некоторым вызовом. Нет, не в плане кода, а в плане подхода к реализации. Я изначально планировал реализовать как отдельный самостоятельный продук...

XPages. Как сделать тур (Feature Tour) по приложению

Если вы задавались вопросом: как сделать обучение по возможностям своего приложения или рассказать о новых возможностях? - эта статья для вас.

FAQ. Domino Designer. Поиск строки с ошибкой

Думаю, все, кто работает с Eclipse-версией редактора LotusScript, который появился с 8-ой версии сталкивался с проблемой, что номер строки в сообщении об ошибке ну никак не совпадает с тем, что есть на самом деле. Речь идет о коде, который написан в разделе Declarations таких элементов, как скриптовые библиотеки, агенты, Database Script. Т.е. по сути - о классах. В версиях 7 и ниже была проблема найти метод или класс, а теперь (когда дизайнер научился отображать классы и методы в дереве элементов) проблема найти строку с ошибкой :) Полагаю, так же не секрет формула вывода нужной строки: берем количество строк в Options, складываем с тем, что выдала ошибка и получаем строку, которую нужно искать перейдя в просмотр кода всей библиотеке. Та-да-м! Недавно, зачем-то рылся в пунктах меню и наткнулся на...кнопку спасения! - Go to Erl Line.... До чего же было мое удивление. Давно ее добавили, я много проспал? :) В общем, чтобы ей воспользоваться, нужно перейти в Declarations (просто ...

Oracle Lib - библиотека для работы с Oracle для LotusScript

LS_Oracle_Lib - свободно распространяемая библиотека на языке LotusScript с открытым исходным кодом для работы с базами данных Oracle. Библиотека поставляется "как есть". Вы можете использовать ее на свой страх и риск. Автор не несет ответственности за последствия использования библиотеки. При использовании библиотеки автор не ограничивает изменение кода библиотеки под свои нужды. Тем не менее, рекомендуется переопределение классов и методов в соответствии с принципами ООП. Библиотека использует OLE-объект OracleInProcServer.XOraSession для работы с Oracle. Это объект из OLE Objects For Oracle (OO4O). Используется родные Oracle OLE-объекты, поскольку дают больше возможностей, чем стандартные LC классы LotusScript. Например, стандартные классы не дают возможности вернуть результат выполнения хранимой процедуры. Механизм несколько устаревший, поскольку на серверах х64 dll регистрируется не корректно и объект OracleInProcServer.XOraSession не удается создать. В дальнейшем пл...

LS_ActiveDirectory_Lib. Документация и примеры использования. Часть 2. ADObject

Продолжении документации по открытой библиотеке LS_ActiveDirectory_Lib . Первая часть доступна здесь . Часть 3

LS_ActiveDirectory_Lib. Документация и примеры использования. Часть 1. ADConnector

LS_ActiveDirectory_Lib - свободно распространяемая библиотека на языке LotusScript с открытым исходным кодом. Библиотека поставляется "как есть". Вы можете использовать ее на свой страх и риск. Автор не несет ответственности за последствия использования библиотеки. При использовании библиотеки автор не ограничивает изменение кода библиотеки под свои нужды. Тем не менее, рекомендуется переопределение классов и методов в соответствии с принципами ООП. Библиотека  LS_ActiveDirectory_Lib предоставляет интерфейс взаимодействия с Microsoft Active Directory (MS AD) для IBM Notes/Domino. Взаимодействия происходит по протоколу LDAP. Для подключения используется OLE-объект ADODB.Connection. Часть 2 и Часть 3 документации.

XPages. Диалог с пользователем. dGrowl уведомления. Часть 2

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

XPages. Диалог с пользователем. dGrowl уведомления. Часть 1

Продолжаю тему диалога с пользователем. И снова уведомления. Ведь правда хочется, чтобы приложение реагировал на действия пользователя красивыми всплывающими уведомлениями? Почему бы и нет! Интересно? Тогда поехали!

Замена текста в NotesRichTextItem и сохранение стиля

Задача: заменить текст в RichTextItem. Например, есть какой-то шаблон с тегами, в котором динамически происходит подстановка значений. Поиск и замену всех тегов указанного значения можно выполнить вот в таком цикле: Dim rtRange As NotesRichTextRange Dim rtNav As NotesRichTextNavigator Set rtRange = rtItem.Createrange() Set rtNav = rtItem.Createnavigator() While rtNav.Findfirststring(TAGKEY) //Замена значения Set rtRange = rtItem.Createrange() Set rtNav = rtItem.Createnavigator() Wend , где rtItem - переданный NotesRichTextItem. Саму замену можно произвести вот так: Call rtRange.Setbegin(rtNav) Call rtRange.Setend(rtNav) Call rtRange.Remove() Call rtItem.Begininsert(rtNav) Call rtItem.Appendtext(VALUE) //Добавляем текстовое значение. Call rtItem.Endinsert() НО . В таком случае при выполнении rtRange.Remove() мы теряем стилевую информацию и вставка происходит со значениями по-умолчанию. Перенос rtRange.Remove() не помогает. Нужно вместе с этим сохранить стиль....

XPages. Диалог с пользователем. Собственные уведомления

Итогом полученных ограничений, которые получились в итоге  стало появление "собственной" системы сообщений. Итак, по-порядку: 1. FlashScope Сегодняшняя работа будет очень тесна связана в возможностью показать сообщение после редиректа страницы. Поэтому с механизма, который позволит это сделать и начнем. Метод, позволяющий отображать сообщения (речь идет о FacesMessage) после смены страницы описан тут . Но будем использовать, в некотором смысле, более универсальный механизм, который позволит передавать параметры между запросами и не занимать sessionScope или applicationScope - это  FlashScope . Я использую немного не эту реализацию, а реализацию от  Jesse Gallagher . Еще нужно в faces-config.xml прописать: <managed-bean>   <managed-bean-name>flashScope</managed-bean-name>   <managed-bean-class>java.util.HashMap</managed-bean-class>   <managed-bean-scope>session</managed-bean-scope> </mana...

XPages. Диалог с пользователем. Уведомления с помощью FacesMassage. Часть 2

В прошлой части я дал некоторую теоретическую подоснову о том, что такое FacesMessage в JSF и показал, как можно добавить и отобразить сообщение для пользователя, используя FacesContext.addMessage и компонент xp:messages. Сегодня продолжим: поработаем над отображением сообщений.

XPages. Диалог с пользователем. Уведомления с помощью FacesMassage. Часть 1

Для улучшения восприятия пользователем приложения, с которым он общается было бы не плохо взаимодействовать с ним через отправку ему уведомлений (например, "Документ успешно сохранен". В цикле XPages. Диалог с пользователем буду рассматривать различные варианты отправки и отображения сообщений/уведомлений пользователю, двигаясь последовательно от простейших и не самых симпатичных до вполне радующих глаз. В определенный момент планирую перейти от OneUI темы (как в скриншотах, так и в демо-приложении) к Bootstrap, вероятно, описав нюансы подключения и перехода отдельным постом. В конце будет получен Java-класс (Bean), отвечающий за отправку сообщений и 1-2 Custom Control для их корректных отображений.

Синхронизация фоток пользователей в Учетные записи Active Directory

Занимательные взаимоотношения получились с задачей обновления фотографий пользователей в учетные записи Active Directory. Все оказалось несколько "необычнее", чем смотрелось на первый взгляд.

Web-сервисы - наше все.

Обнаружил и изучил несколько неплохих статьей из цикла Practical Web services in IBM Lotus Domino 7 (Практическое использование Web-сервисов в IBM Lotus Domino 7), последовательно раскрывающих суть Web-сервисов и их создание в среде Notes/Domino. 1.  What are Web services and why are they important?  Статья доступна на русском . 2.  Writing and testing simple Web services . Статья  доступна на русском . 3.  Writing complex Web services . Статья доступна на русском .

Widget Container. Базовые компоненты Extension Library

На повестке дня довольно простой, но очень симпатичный компонент: Widget Container 1.  Application Layout 2.  Navigator 3.  Data View 4.  Form Table (+Form Layout Column, Form Layout Row) 5.  Dialog (+ Dialog Content, Dialog Button Bar) 6. Tooltip Dialog --- Дополнительно --- 7. Widget Container 8. Bread Crumbs

Bootstrap для XPages в действии

Не стал откладывать возможность опробовать Bootstrap для XPages в долгий ящик и применил его для своего приложения " Личный баланс ". Итог меня очень вдохновил: приложение отлично изменяет размер и расположение своих элементов в зависимости от разрешения устройства. Один дизайн и код для всего! :) Кое-какие моменты в отображении формы (полей) мне не нравятся, но т.к. решение из коробки, то в целом более чем отлично! Вот так теперь выглядит приложение при коннекте с телефона: Основной вид Занесение данных Немного о настройках: 1. Используется тема bootstrapv3.2.0, поставляемая в составе последней сборки ExtLib (в доступных есть так же версия bootstrapv2.3.1, при установленном плагине Bootstrap4XPages) 2. Компонент Application Layout построен по конфигурации для Boostrap. Об этой  новой возможности упоминал в этом посте. 3. Для корректной работы всех элементов, на закладке Page Generation (в настройках приложения XspProperties), в разделе HTML Generatio...

Extension Library и Bootstrap

На просторах OpenNTF.org развивается проект Bootstrap4XPages. Bootstrap - фреймворк для Web-приложений. Суть проекта - дать человеческую возможность разработчикам на xPages пользоваться благами Bootstrap. В последнем релизе ExtLib 9.0.1 (build v00_10.20141105-0922) была включена поддержка Bootstarp (версия темы 3.2.0) и jQuery (версия темы 2.1.1) в виде нового плагина: XPages Responsive Bootstrap (XRB). Плагин, в том числе, дает возможность использовать компонент Application Layout с новой конфигурацией: Bootstrap Responsive Application Configuration. Данная конфигурация обладает дополнительными возможностями, описанными в Readme к ExtLib. Вот так вот меняется диалог настройки компонента при его перетаскивании с палитры: Одно из исходных преимуществ Bootstrap - автоматическое изменение своего отображения в зависимости от разрешения дисплея, т.е. ничего не меняется при использовании как мобильных устройствах, так и на больших устройствах. Использование Bootstarp для XPag...

Какой инструментарий должен быть в арсенале у XPages-разработчика

D avid Leedy в своем блоге NotesIn9 начал цикл постов о разработке Web-приложений под IBM Domino на XPages, что называется, с основ. Особенностью его блога является то, что это в основном-видео блог. 2-ой пост из этого цикла рассказывает о том, какие плагины он будет использовать в дальнейшем. Пост полезен тем, что все самое необходимое собрано в одном месте и Девид показывает, как происходит установка плагинов на сервер и клиент. С пособ установки плагинов перекликается с тем, что описывал я в посте по установке Extension Library с одной интересной особенностью, что каждый новый плагин он добавляет не в одну и ту же базу UpdateSite, а под каждый организует свою базу. В общем к просмотру этот пост и последующие рекомендую!

IBM Notes. Личный баланс

Х очу поделиться приложением, которое я делал и делаю по-сути для себя. Одна из первых идей для личного удобства, которую я начал делать, когда еще только познакомился с IBM Lotus Notes/Domino. Это приложение пережило несколько итераций и было одно из первых, на которых я опробовал попытки создания движков для приложений. Это приложение не самое сложное, которое я когда-либо делал. Это приложение не обладает невообразимыми функциональными возможностями. Но. Это приложение, которым я горжусь. Это приложение, позволяющее вести личный баланс...