A set of IBM Lotus Symphony related plug-ins for IBM Lotus Notes 8.5.1 and 8.5.2 with embedded Symphony 3.0 installed (all supported operating systems) to import and export data between Lotus Notes applications and Symphony documents, spreadsheets and presentations.
You need to download also the zip archive including the configuration application, a sample Notes database and two sample spreadsheet.
READ CAREFULLY THE ADMINISTRATOR, USER AND SAMPLE GUIDES INCLUDED IN THE ZIP ARCHIVE TO KNOW DETAILS ABOUT THE WAY THEY WORK.
Guide and user interface are in English language only.
Файл с примерами
1 декабря 2010 г.
26 октября 2010 г.
Продолжение работы с массивами
Пробежка по коллекции документов с возможностью использования Type total для формирования массива содержащего в себе значения lable, value, value_percent. Удобно для использования в сортировке коллекции документов по выбранному ключу (полю)
[Declarations]
Type total
lable As String
value As Double
value_percent As Double
End Type
[Sub/Function]
dim suf
suf = "_1"
Dim doc As NotesDocument
Dim progolos As NotesItem
Dim proc As NotesItem
Dim a As Integer
Dim progolos As String, proc As String, progolos_val As Variant, proc_val As Variant
progolos = "progolos_" & suf
proc= "proc_" & suf
Set doc = coll.GetFirstDocument
Do While Not(doc Is Nothing)
Set progolos = doc.GetFirstItem(progolos_izbiratel)
Set proc = doc.GetFirstItem(proc_izbiratel)
If ( progolos Is Nothing ) Then
progolos_val = ""
Else
progolos_val = progolos.values(0)
End If
If ( proc Is Nothing ) Then
proc_val = ""
Else
proc_val = proc.values(0)
End If
ReDim Preserve array(a%) As total_progolos
array(a%).lable = doc.n_kom(0)
array(a%).value = progolos_val
array(a%).value_percent = proc_val
Set doc = coll.GetNextDocument(doc)
a% = a% + 1
Loop
[Declarations]
Type total
lable As String
value As Double
value_percent As Double
End Type
[Sub/Function]
dim suf
suf = "_1"
Dim doc As NotesDocument
Dim progolos As NotesItem
Dim proc As NotesItem
Dim a As Integer
Dim progolos As String, proc As String, progolos_val As Variant, proc_val As Variant
progolos = "progolos_" & suf
proc= "proc_" & suf
Set doc = coll.GetFirstDocument
Do While Not(doc Is Nothing)
Set progolos = doc.GetFirstItem(progolos_izbiratel)
Set proc = doc.GetFirstItem(proc_izbiratel)
If ( progolos Is Nothing ) Then
progolos_val = ""
Else
progolos_val = progolos.values(0)
End If
If ( proc Is Nothing ) Then
proc_val = ""
Else
proc_val = proc.values(0)
End If
ReDim Preserve array(a%) As total_progolos
array(a%).lable = doc.n_kom(0)
array(a%).value = progolos_val
array(a%).value_percent = proc_val
Set doc = coll.GetNextDocument(doc)
a% = a% + 1
Loop
Ярлыки:
array,
lotus script
25 октября 2010 г.
Вышел релиз IBM Lotus Symphony3
Компания IBM выпустила релиз офисного пакета Lotus Symphony 3.0, построенного на основе переработанного кода OpenOffice.org 3.x (прошлая стабильная версия Lotus Symphony 1.3 была основана на OpenOffice.org 1.1.4) и Eclipse Rich Client Platform. Lotus Symphony имеет переработанный интерфейс пользователя, позволяет создавать документы, электронные таблицы и презентации с организацией совместного доступа и групповой работы над ними. В пакете имеется поддержка всех популярных форматов офисных документов, включая DOC, PPS, OOXML (Microsoft Office) и ODF (Open Document Format). Пакет доступен для свободной загрузки для платформ Windows, Mac OS X, Ubuntu, Red Hat и SUSE Linux.
По сравнению с прошлой версией в Lotus Symphony 3.0 внесено более сотни важных улучшений. Наиболее интересные из новшеств:
Поддержка выполнения VBA-скриптов;
Поддержка стандарта ODF 1.2;
Поддержка OLE-объектов Office 2007;
Полностью переработанная боковая панель инструментов, содержащая расширенный набор секций и панелей, поддерживающая гибкие средства настройки содержимого;
Поддержка настройки содержимого и формата панели инструментов;
Возможность создания новых визитных карт и этикеток;
Возможность интеграции в документ OLE-объектов, аудио и видео файлов;
Поддержка режима Live Text, позволяющего распознавать типовые шаблоны в тексте и выполнять с текстом определенные действия (например, указывать адрес на карте, выводить данные из адресной книги и т.п.);
Поддержка зашифрованных и защищенных паролем файлов Microsoft Word и Excel;
Новая галерея клипарта и расширенный набор шаблонов;
Поддержка VML-изображений в файлах OOXML;
Поддержка в VBA API расширенных параметров для защиты электронных таблиц;
Автоматическая проверка наличия обновления пакета в сети;
Редактор документов
Поддержка вложенных таблиц;
Режим многостраничного просмотра макета документа;
Поддержка режима Auto Text, при котором редактор автоматически подбирает варианты завершения фразы по первым буквам;
Поддержка задания пользовательских свойств;
Несколько уровней начертания абзцев;
Редактор электронных таблиц
Максимальное число столбцов расширено с 256 до 1024;
Поддержка масштабирования, характерного для электронных таблиц;
Поддержка преобразования текста в значения столбцов;
Возможность решения уравнений;
Функция "What if";
Поддержка вставки массива констант в формулу;
Поддержка динамических диапазонов в списках проверки;
Поддержка дополнительных формул.
Система создания презентаций
Поддержка отображения на нескольких мониторах;
Расширение числа анимационных эффектов для презентаций;
Расширения числа макетов страниц, графических объектов и шрифтов;
Поддержка копирования и вставки страниц и объектов, вместе со связанными с ними анимационными эффектами.
Прекращена поддержка возможностей, ранее доступных в версии 1.3: импорт SmartSuite-файлов, поддержка Freehand-таблиц, предварительный просмотр презентации перед выводом на печать, возможность создания XForm-документов и поддержка Connector в редакторе документов.
По сравнению с прошлой версией в Lotus Symphony 3.0 внесено более сотни важных улучшений. Наиболее интересные из новшеств:
Поддержка выполнения VBA-скриптов;
Поддержка стандарта ODF 1.2;
Поддержка OLE-объектов Office 2007;
Полностью переработанная боковая панель инструментов, содержащая расширенный набор секций и панелей, поддерживающая гибкие средства настройки содержимого;
Поддержка настройки содержимого и формата панели инструментов;
Возможность создания новых визитных карт и этикеток;
Возможность интеграции в документ OLE-объектов, аудио и видео файлов;
Поддержка режима Live Text, позволяющего распознавать типовые шаблоны в тексте и выполнять с текстом определенные действия (например, указывать адрес на карте, выводить данные из адресной книги и т.п.);
Поддержка зашифрованных и защищенных паролем файлов Microsoft Word и Excel;
Новая галерея клипарта и расширенный набор шаблонов;
Поддержка VML-изображений в файлах OOXML;
Поддержка в VBA API расширенных параметров для защиты электронных таблиц;
Автоматическая проверка наличия обновления пакета в сети;
Редактор документов
Поддержка вложенных таблиц;
Режим многостраничного просмотра макета документа;
Поддержка режима Auto Text, при котором редактор автоматически подбирает варианты завершения фразы по первым буквам;
Поддержка задания пользовательских свойств;
Несколько уровней начертания абзцев;
Редактор электронных таблиц
Максимальное число столбцов расширено с 256 до 1024;
Поддержка масштабирования, характерного для электронных таблиц;
Поддержка преобразования текста в значения столбцов;
Возможность решения уравнений;
Функция "What if";
Поддержка вставки массива констант в формулу;
Поддержка динамических диапазонов в списках проверки;
Поддержка дополнительных формул.
Система создания презентаций
Поддержка отображения на нескольких мониторах;
Расширение числа анимационных эффектов для презентаций;
Расширения числа макетов страниц, графических объектов и шрифтов;
Поддержка копирования и вставки страниц и объектов, вместе со связанными с ними анимационными эффектами.
Прекращена поддержка возможностей, ранее доступных в версии 1.3: импорт SmartSuite-файлов, поддержка Freehand-таблиц, предварительный просмотр презентации перед выводом на печать, возможность создания XForm-документов и поддержка Connector в редакторе документов.
Ярлыки:
Lotus Symphony
12 октября 2010 г.
Java class по работе связки Notes&SQL
Класс представляет собой связку Notes и SQL. Агент запускается при активировании ссылки [http://host/db.nsf/agent?OpenAgent&id=111111]. Далее происходит обработка запроса к SQL по полученному праметру id=111111, затем в базе Domino создается notes-документ с параметрами выбранными из запроса.
import lotus.domino.*;
import java.util.Vector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.net.*;
import java.io.*;
import java.util.*;
public class JavaAgent extends AgentBase {
public static java.util.Hashtable parseQueryString(String queryString) {
StringTokenizer tokens = new StringTokenizer(queryString, "&");
Hashtable params = new Hashtable();
while (tokens.hasMoreTokens()){
String token = tokens.nextToken();
int equalIdx = token.indexOf('=');
if (equalIdx != -1 && !token.equalsIgnoreCase("OpenAgent")){
String name = token.substring(0, equalIdx);
System.out.println("name " + name);
String value = token.substring(equalIdx + 1);
System.out.println("value " + value);
params.put(name, value);
}
}
return params;
}
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Document webdoc = agentContext.getDocumentContext();
PrintWriter pw = getAgentOutput();
String qs = webdoc.getItemValueString("Query_String");
java.util.Hashtable ht = parseQueryString(qs);
String id = (String) ht.get( "id" );
// pw.println("ID : " + id);
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
// System.out.println("сессии инициировались");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Class.forName("org.postgresql.Driver").newInstance(); //для случая postgresql
System.out.println("Драйвер загружен");
}
catch (Exception ex)
{
System.out.println("SQLException: " + ex.getMessage());
}
try {
conn = DriverManager.getConnection("jdbc:mysql://conect);
// conn = DriverManager.getConnection("jdbc:postgresql://conect); //для случая postgresql
System.out.println("Подключение установлено");
}
catch (SQLException ex)
{
System.out.println("On connect SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
try {
stmt = conn.createStatement();
System.out.println("id " + id);
String Query = "SELECT * FROM pr_data WHERE auth = " + '"'+id+ '"';// + " ORDER BY id";
//String Query = "SELECT * FROM pr_data";
System.out.println("Запрос " + Query);
try {
rs = stmt.executeQuery(Query);
System.out.println("Запрос выполняется");
}
catch(SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
Database db = agentContext.getCurrentDatabase();
Document doc = db.createDocument();
while (rs.next()) {
int theid= rs.getInt("id");
String fname = rs.getString("fname");
String mname = rs.getString("mname");
String lname = rs.getString("lname");
String message = rs.getString("message");
String email = rs.getString("email");
String auth = rs.getString("auth");
String pindex = rs.getString("pindex");
String pregion = rs.getString("pregion");
String plocality = rs.getString("plocality");
String pstreet = rs.getString("pstreet");
String phome = rs.getString("phome");
String pcorps = rs.getString("pcorps");
String pflat = rs.getString("pflat");
System.out.println("Переменные присвоены");
System.out.println("auth_code= " + auth );
System.out.println("id= " + theid + " ---> ФИО = " + fname + " " + mname +" "+ lname);
System.out.println("id= " + theid + " ---> Почтовый адрес = " + pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);
System.out.println("id= " + theid + " ---> Электронныйый адрес = " + email);
System.out.println("id= " + theid + " ---> Текст обращения = " + message );
System.out.println("_________________________________");
doc.replaceItemValue("Form", "rlo");
doc.replaceItemValue("auth", id);
doc.replaceItemValue("FIO", fname + " " + mname +" "+ lname);
doc.replaceItemValue("Address", pindex +" "+ pregion +" "+ plocality +" ул."+ pstreet +" д."+ phome +" корп."+ pcorps +" кв."+ pflat);
doc.replaceItemValue("email", email);
doc.replaceItemValue("Annotation", message);
doc.computeWithForm(false, false);
doc.save();
}
} finally {
if (rs != null) {
try {
rs.close();
} catch(SQLException ex) {}
rs = null;
} //if
if (stmt != null) {
try {
stmt.close();
} catch(SQLException ex) {}
stmt = null;
} //if
} //finally
} catch(Exception e) {
e.printStackTrace();
}
}
}
import lotus.domino.*;
import java.util.Vector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.net.*;
import java.io.*;
import java.util.*;
public class JavaAgent extends AgentBase {
public static java.util.Hashtable parseQueryString(String queryString) {
StringTokenizer tokens = new StringTokenizer(queryString, "&");
Hashtable params = new Hashtable();
while (tokens.hasMoreTokens()){
String token = tokens.nextToken();
int equalIdx = token.indexOf('=');
if (equalIdx != -1 && !token.equalsIgnoreCase("OpenAgent")){
String name = token.substring(0, equalIdx);
System.out.println("name " + name);
String value = token.substring(equalIdx + 1);
System.out.println("value " + value);
params.put(name, value);
}
}
return params;
}
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Document webdoc = agentContext.getDocumentContext();
PrintWriter pw = getAgentOutput();
String qs = webdoc.getItemValueString("Query_String");
java.util.Hashtable ht = parseQueryString(qs);
String id = (String) ht.get( "id" );
// pw.println("ID : " + id);
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
// System.out.println("сессии инициировались");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Class.forName("org.postgresql.Driver").newInstance(); //для случая postgresql
System.out.println("Драйвер загружен");
}
catch (Exception ex)
{
System.out.println("SQLException: " + ex.getMessage());
}
try {
conn = DriverManager.getConnection("jdbc:mysql://conect);
// conn = DriverManager.getConnection("jdbc:postgresql://conect); //для случая postgresql
System.out.println("Подключение установлено");
}
catch (SQLException ex)
{
System.out.println("On connect SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
try {
stmt = conn.createStatement();
System.out.println("id " + id);
String Query = "SELECT * FROM pr_data WHERE auth = " + '"'+id+ '"';// + " ORDER BY id";
//String Query = "SELECT * FROM pr_data";
System.out.println("Запрос " + Query);
try {
rs = stmt.executeQuery(Query);
System.out.println("Запрос выполняется");
}
catch(SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
Database db = agentContext.getCurrentDatabase();
Document doc = db.createDocument();
while (rs.next()) {
int theid= rs.getInt("id");
String fname = rs.getString("fname");
String mname = rs.getString("mname");
String lname = rs.getString("lname");
String message = rs.getString("message");
String email = rs.getString("email");
String auth = rs.getString("auth");
String pindex = rs.getString("pindex");
String pregion = rs.getString("pregion");
String plocality = rs.getString("plocality");
String pstreet = rs.getString("pstreet");
String phome = rs.getString("phome");
String pcorps = rs.getString("pcorps");
String pflat = rs.getString("pflat");
System.out.println("Переменные присвоены");
System.out.println("auth_code= " + auth );
System.out.println("id= " + theid + " ---> ФИО = " + fname + " " + mname +" "+ lname);
System.out.println("id= " + theid + " ---> Почтовый адрес = " + pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);
System.out.println("id= " + theid + " ---> Электронныйый адрес = " + email);
System.out.println("id= " + theid + " ---> Текст обращения = " + message );
System.out.println("_________________________________");
doc.replaceItemValue("Form", "rlo");
doc.replaceItemValue("auth", id);
doc.replaceItemValue("FIO", fname + " " + mname +" "+ lname);
doc.replaceItemValue("Address", pindex +" "+ pregion +" "+ plocality +" ул."+ pstreet +" д."+ phome +" корп."+ pcorps +" кв."+ pflat);
doc.replaceItemValue("email", email);
doc.replaceItemValue("Annotation", message);
doc.computeWithForm(false, false);
doc.save();
}
} finally {
if (rs != null) {
try {
rs.close();
} catch(SQLException ex) {}
rs = null;
} //if
if (stmt != null) {
try {
stmt.close();
} catch(SQLException ex) {}
stmt = null;
} //if
} //finally
} catch(Exception e) {
e.printStackTrace();
}
}
}
6 октября 2010 г.
Новоиспеченный проект по ведению Реестра муниципальных служащих

Недавно поступило задание сделать такой Реестр муниципальных служащих, в котором бы отображалась информация о последних. Сказано сделано! Посидев несколько вечеров написал вот такое приложение.
Из возможностей отмечу следующее.
* ведение Регистра в любом регионе, с последующей репликацией данных в единое хранилище.
* подготовка списка муниципальных служащих как внутри своего муниципального образования, так и в любом из имеющихся в базе данных.
* переопределение одного и более муниципальных служащих из других муниципальных образованиq в своё муниципальное образование
* вычисление стажа работы муниципального служащего на должности в муниципальном образовании
* автоматический пересчет стажа работы муниципального служащего на должности в муниципальном образовании
Видео с презентацией работы.
Ярлыки:
проекты,
OpenOffice
18 марта 2010 г.
Посмотрим на свое network оборудование изнутри
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
arrComputers = Array("localhost")
For Each strComputer In arrComputers
str = str & "SystemName: " & objItem.SystemName & chr(13)
str = str & "==========================================" & chr(13)
str = str & "Computer: " & strComputer & chr(13)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL",wbemFlagReturnImmediately +wbemFlagForwardOnly)
For Each objItem In colItems
str = str & "AdapterType: " & objItem.AdapterType & chr(13)
str = str & "AdapterTypeId: " & objItem.AdapterTypeId & chr(13)
str = str & "AutoSense: " & objItem.AutoSense & chr(13)
str = str & "Availability: " & objItem.Availability & chr(13)
str = str & "Caption: " & objItem.Caption & chr(13)
str = str & "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode & chr(13)
str = str & "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig & chr(13)
str = str & "CreationClassName: " & objItem.CreationClassName & chr(13)
str = str & "Description: " & objItem.Description & chr(13)
str = str & "DeviceID: " & objItem.DeviceID & chr(13)
str = str & "ErrorCleared: " & objItem.ErrorCleared & chr(13)
str = str & "ErrorDescription: " & objItem.ErrorDescription & chr(13)
str = str & "Index: " & objItem.Index & chr(13)
str = str & "InstallDate: " & WMIDateStringToDate(objItem.InstallDate) & chr(13)
str = str & "Installed: " & objItem.Installed & chr(13)
str = str & "LastErrorCode: " & objItem.LastErrorCode & chr(13)
str = str & "MACAddress: " & objItem.MACAddress & chr(13)
str = str & "Manufacturer: " & objItem.Manufacturer & chr(13)
str = str & "MaxNumberControlled: " & objItem.MaxNumberControlled & chr(13)
str = str & "MaxSpeed: " & objItem.MaxSpeed & chr(13)
str = str & "Name: " & objItem.Name & chr(13)
str = str & "NetConnectionID: " & objItem.NetConnectionID & chr(13)
str = str & "NetConnectionStatus: " & objItem.NetConnectionStatus & chr(13)
strNetworkAddresses = Join(objItem.NetworkAddresses, ",")
str = str & "NetworkAddresses: " & strNetworkAddresses & chr(13)
str = str & "PermanentAddress: " & objItem.PermanentAddress & chr(13)
str = str & "PNPDeviceID: " & objItem.PNPDeviceID & chr(13)
strPowerManagementCapabilities = Join(objItem.PowerManagementCapabilities, ",")
str = str & "PowerManagementCapabilities: " & strPowerManagementCapabilities & chr(13)
str = str & "PowerManagementSupported: " & objItem.PowerManagementSupported & chr(13)
str = str & "ProductName: " & objItem.ProductName & chr(13)
str = str & "ServiceName: " & objItem.ServiceName & chr(13)
str = str & "Speed: " & objItem.Speed & chr(13)
str = str & "Status: " & objItem.Status & chr(13)
str = str & "StatusInfo: " & objItem.StatusInfo & chr(13)
str = str & "SystemCreationClassName: " & objItem.SystemCreationClassName & chr(13)
str = str & "TimeOfLastReset: " & WMIDateStringToDate(objItem.TimeOfLastReset) & chr(13)
str = str & chr(13)
str = str & "=========================================="& chr(13)
'WScript.Echo str
'str = ""
Next
s = s & str
Next
Set obj=createobject ("scripting.filesystemobject")
Set notepad=obj.createtextfile("c:\res_net.txt")
notepad.writeline(s)
Function WMIDateStringToDate(dtmDate)
str = str & dtm:
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
arrComputers = Array("localhost")
For Each strComputer In arrComputers
str = str & "SystemName: " & objItem.SystemName & chr(13)
str = str & "==========================================" & chr(13)
str = str & "Computer: " & strComputer & chr(13)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL",wbemFlagReturnImmediately +wbemFlagForwardOnly)
For Each objItem In colItems
str = str & "AdapterType: " & objItem.AdapterType & chr(13)
str = str & "AdapterTypeId: " & objItem.AdapterTypeId & chr(13)
str = str & "AutoSense: " & objItem.AutoSense & chr(13)
str = str & "Availability: " & objItem.Availability & chr(13)
str = str & "Caption: " & objItem.Caption & chr(13)
str = str & "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode & chr(13)
str = str & "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig & chr(13)
str = str & "CreationClassName: " & objItem.CreationClassName & chr(13)
str = str & "Description: " & objItem.Description & chr(13)
str = str & "DeviceID: " & objItem.DeviceID & chr(13)
str = str & "ErrorCleared: " & objItem.ErrorCleared & chr(13)
str = str & "ErrorDescription: " & objItem.ErrorDescription & chr(13)
str = str & "Index: " & objItem.Index & chr(13)
str = str & "InstallDate: " & WMIDateStringToDate(objItem.InstallDate) & chr(13)
str = str & "Installed: " & objItem.Installed & chr(13)
str = str & "LastErrorCode: " & objItem.LastErrorCode & chr(13)
str = str & "MACAddress: " & objItem.MACAddress & chr(13)
str = str & "Manufacturer: " & objItem.Manufacturer & chr(13)
str = str & "MaxNumberControlled: " & objItem.MaxNumberControlled & chr(13)
str = str & "MaxSpeed: " & objItem.MaxSpeed & chr(13)
str = str & "Name: " & objItem.Name & chr(13)
str = str & "NetConnectionID: " & objItem.NetConnectionID & chr(13)
str = str & "NetConnectionStatus: " & objItem.NetConnectionStatus & chr(13)
strNetworkAddresses = Join(objItem.NetworkAddresses, ",")
str = str & "NetworkAddresses: " & strNetworkAddresses & chr(13)
str = str & "PermanentAddress: " & objItem.PermanentAddress & chr(13)
str = str & "PNPDeviceID: " & objItem.PNPDeviceID & chr(13)
strPowerManagementCapabilities = Join(objItem.PowerManagementCapabilities, ",")
str = str & "PowerManagementCapabilities: " & strPowerManagementCapabilities & chr(13)
str = str & "PowerManagementSupported: " & objItem.PowerManagementSupported & chr(13)
str = str & "ProductName: " & objItem.ProductName & chr(13)
str = str & "ServiceName: " & objItem.ServiceName & chr(13)
str = str & "Speed: " & objItem.Speed & chr(13)
str = str & "Status: " & objItem.Status & chr(13)
str = str & "StatusInfo: " & objItem.StatusInfo & chr(13)
str = str & "SystemCreationClassName: " & objItem.SystemCreationClassName & chr(13)
str = str & "TimeOfLastReset: " & WMIDateStringToDate(objItem.TimeOfLastReset) & chr(13)
str = str & chr(13)
str = str & "=========================================="& chr(13)
'WScript.Echo str
'str = ""
Next
s = s & str
Next
Set obj=createobject ("scripting.filesystemobject")
Set notepad=obj.createtextfile("c:\res_net.txt")
notepad.writeline(s)
Function WMIDateStringToDate(dtmDate)
str = str & dtm:
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function
16 марта 2010 г.
Снова о документе подключения
Снова возникла задача массово подрихтовать документы подключения у пользователей, убрать лишнее, посидев вечерочком....подумав ...попечатав ... вот что получилось
Sub create_connect
On Error Goto errmes
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim strErrMessage,connect,dserver
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim coll As NotesDocumentCollection
Dim doc As NotesDocument
Dim coldoc As NotesDocument
Set db = s.GetDatabase("","names.nsf")
Set view = db.GetView("Connections")
'*****************************
connect = "server/domain"
'*****************************
Set coll = view.Getalldocumentsbykey(connect)
Stop
If coll.Count > 1 Then
'если в коллекции найдены несколько документов, то проверить у них интернет-хост
'если он не удовлетворяет условию, удалить документы не удовлетворяющие условию
Set doc = coll.Getfirstdocument
While Not(doc Is nothing)
If doc.Destination(0) = "CN=server/O=domain" Then
If Not (doc.OptionalNetworkAddress(0) = "server_inet_host") Then
Call doc.Removepermanently(True)
Call ws.Viewrefresh()
End If
End If
Set doc = coll.Getnextdocument(doc)
Wend
'если в коллекции найден один документ, то проверить у него интернет-хост
'и если он не удовлетворяет условию, то переписать значение на нужное
ElseIf coll.Count = 1 Then
Set doc = coll.Getfirstdocument
If Not doc.OptionalNetworkAddress(0) = "server_inet_host" Then
Call doc.ReplaceItemValue("OptionalNetworkAddress", "server_inet_host")
Call doc.ReplaceItemValue("PhoneNumber", "server_inet_host")
Call doc.Save(True,False)
End If
'если нет документа, то создать заново
ElseIf coll.Count = 0 Then
Set uidoc = ws.ComposeDocument( "", db.filename, "local" )
Call uidoc.FieldsetText("Destination","CN=server/O=domain")
Call uidoc.FieldsetText("OptionalNetworkAddress","server_inet_host")
Call uidoc.FieldsetText("PhoneNumber","server_inet_host")
Call uidoc.FieldsetText("PortName","TCPIP")
Call uidoc.FieldsetText("LanPortName","TCPIP")
Call uidoc.Save
Call uidoc.Close
Print "Документ подключения " & connect &" cоздан"
End if
'сообщение об ошибке
Exit Sub
errmes:
strErrMessage = "Ошибка " & Error$ & " выполняемая процедура " & Getthreadinfo(10) &" текущая процедура " & Getthreadinfo(1) & ", в строке " & Cstr(Erl)
Print strErrMessage
End sub
Sub create_connect
On Error Goto errmes
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim strErrMessage,connect,dserver
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim coll As NotesDocumentCollection
Dim doc As NotesDocument
Dim coldoc As NotesDocument
Set db = s.GetDatabase("","names.nsf")
Set view = db.GetView("Connections")
'*****************************
connect = "server/domain"
'*****************************
Set coll = view.Getalldocumentsbykey(connect)
Stop
If coll.Count > 1 Then
'если в коллекции найдены несколько документов, то проверить у них интернет-хост
'если он не удовлетворяет условию, удалить документы не удовлетворяющие условию
Set doc = coll.Getfirstdocument
While Not(doc Is nothing)
If doc.Destination(0) = "CN=server/O=domain" Then
If Not (doc.OptionalNetworkAddress(0) = "server_inet_host") Then
Call doc.Removepermanently(True)
Call ws.Viewrefresh()
End If
End If
Set doc = coll.Getnextdocument(doc)
Wend
'если в коллекции найден один документ, то проверить у него интернет-хост
'и если он не удовлетворяет условию, то переписать значение на нужное
ElseIf coll.Count = 1 Then
Set doc = coll.Getfirstdocument
If Not doc.OptionalNetworkAddress(0) = "server_inet_host" Then
Call doc.ReplaceItemValue("OptionalNetworkAddress", "server_inet_host")
Call doc.ReplaceItemValue("PhoneNumber", "server_inet_host")
Call doc.Save(True,False)
End If
'если нет документа, то создать заново
ElseIf coll.Count = 0 Then
Set uidoc = ws.ComposeDocument( "", db.filename, "local" )
Call uidoc.FieldsetText("Destination","CN=server/O=domain")
Call uidoc.FieldsetText("OptionalNetworkAddress","server_inet_host")
Call uidoc.FieldsetText("PhoneNumber","server_inet_host")
Call uidoc.FieldsetText("PortName","TCPIP")
Call uidoc.FieldsetText("LanPortName","TCPIP")
Call uidoc.Save
Call uidoc.Close
Print "Документ подключения " & connect &" cоздан"
End if
'сообщение об ошибке
Exit Sub
errmes:
strErrMessage = "Ошибка " & Error$ & " выполняемая процедура " & Getthreadinfo(10) &" текущая процедура " & Getthreadinfo(1) & ", в строке " & Cstr(Erl)
Print strErrMessage
End sub
Ярлыки:
connection,
lotus script
9 марта 2010 г.
Работа со "stubs" (окурками, удаленных документов)
На днях... решая очередную задачу по db.search, столкнулся ,по началу,с непонятной вещью, а именно, в отчет лезут удаленные документы. Непорядок... нужно избавляться, и занялся я борьбой с последствиями курения - окурками.
Option Public
Option Declare
Dim strErrMessage
Const wAPIModule = "NNOTES"
Declare Private Sub IDDestroyTable Lib wAPIModule Alias "IDDestroyTable" _
( ByVal hT As Long)
Declare Private Function IDScan Lib wAPIModule Alias "IDScan" _
( ByVal hT As Long, ByVal F As Integer, ID As Long) As Integer
Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" _
( ByVal P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" _
( ByVal hDB As Long) As Integer
Declare Private Function NSFDbGetModifiedNoteTable Lib wAPIModule Alias "NSFDbGetModifiedNoteTable" _
( ByVal hDB As Long, ByVal C As Integer, ByVal S As Currency, U As Currency, hT As Long) As Integer
Declare Private Function NSFNoteDelete Lib wAPIModule Alias "NSFNoteDelete" _
( ByVal hDB As Long, ByVal N As Long, ByVal F As Integer) As Integer
Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" _
( ByVal NullPort As Long, ByVal Server As String, ByVal FIle As String, ByVal PathNet As String) As Integer
Declare Private Sub TimeConstant Lib wAPIModule Alias "TimeConstant" _
( ByVal C As Integer, T As Currency)
Dim Db As NotesDatabase
Sub countAndDeleteStubs(db As NotesDatabase, choice As Integer)
On Error GoTo errmes
Dim ever As Currency, last As Currency
Dim hT As Long, RRV As Long, hDB As Long
Dim n&,done,np$
With db
np$ = Space(1024)
OSPathNetConstruct 0, db.Server, db.FilePath, np$
End With
NSFDbOpen np$, hDB
TimeConstant 2, ever
NSFDbGetModifiedNoteTable hDB, &H7FFF, ever, last, hT
n& = 0
done = (IDScan(hT, True, RRV) = 0)
While Not done
If RRV < 0 Then
If (choice = 1) Then
NSFNoteDelete hDB, RRV And &H7FFFFFFF, &H0201
End If
n& = n& + 1
End If
done = (IDScan(hT, False, RRV) = 0)
Wend
IDDestroyTable hT
NSFDbClose hDB
If (choice = 1) Then
print "Удалено " & CStr(n&) & " окурков в базе данных " & db.FilePath & " на сервере " & db.Server
Else
print "В базе данных " & db.FilePath & " на сервере " & db.Server & " найдено " & CStr(n&) & " окурков"
End If
Exit sub
errmes:
strErrMessage = "Ошибка " & Error$ & " выполняемая процедура " & GetThreadInfo(10) &" текущая процедура " & GetThreadInfo(1) & ", в строке " & CStr(Erl)
Print strErrMessage
End Sub
Sub findstubs
'поиск окурков
On Error GoTo errmes
Dim Session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim dbInfo As Variant
Dim sDbServer As String
Dim sDbPath As String
Dim retVal As Integer
Set db = session.Currentdatabase
retVal = ws.Prompt (PROMPT_YESNOCANCEL,"Удалить ""Окурки""?","Удалить все [да] или показать их число [Нет]")
Select Case retVal
Case 1 : Call countAndDeleteStubs(db, 1)
Case 0 : Call countAndDeleteStubs(db, 0)
Case -1 : print "Отменено"
End Select
Print "Процедура сжатия базы данных..."
Call db.Compact
Exit Sub
errmes:
strErrMessage = "Ошибка " & Error$ & " выполняемая процедура " & Getthreadinfo(10) &" текущая процедура " & Getthreadinfo(1) & ", в строке " & Cstr(Erl)
Print strErrMessage
End Sub
Option Public
Option Declare
Dim strErrMessage
Const wAPIModule = "NNOTES"
Declare Private Sub IDDestroyTable Lib wAPIModule Alias "IDDestroyTable" _
( ByVal hT As Long)
Declare Private Function IDScan Lib wAPIModule Alias "IDScan" _
( ByVal hT As Long, ByVal F As Integer, ID As Long) As Integer
Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" _
( ByVal P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" _
( ByVal hDB As Long) As Integer
Declare Private Function NSFDbGetModifiedNoteTable Lib wAPIModule Alias "NSFDbGetModifiedNoteTable" _
( ByVal hDB As Long, ByVal C As Integer, ByVal S As Currency, U As Currency, hT As Long) As Integer
Declare Private Function NSFNoteDelete Lib wAPIModule Alias "NSFNoteDelete" _
( ByVal hDB As Long, ByVal N As Long, ByVal F As Integer) As Integer
Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" _
( ByVal NullPort As Long, ByVal Server As String, ByVal FIle As String, ByVal PathNet As String) As Integer
Declare Private Sub TimeConstant Lib wAPIModule Alias "TimeConstant" _
( ByVal C As Integer, T As Currency)
Dim Db As NotesDatabase
Sub countAndDeleteStubs(db As NotesDatabase, choice As Integer)
On Error GoTo errmes
Dim ever As Currency, last As Currency
Dim hT As Long, RRV As Long, hDB As Long
Dim n&,done,np$
With db
np$ = Space(1024)
OSPathNetConstruct 0, db.Server, db.FilePath, np$
End With
NSFDbOpen np$, hDB
TimeConstant 2, ever
NSFDbGetModifiedNoteTable hDB, &H7FFF, ever, last, hT
n& = 0
done = (IDScan(hT, True, RRV) = 0)
While Not done
If RRV < 0 Then
If (choice = 1) Then
NSFNoteDelete hDB, RRV And &H7FFFFFFF, &H0201
End If
n& = n& + 1
End If
done = (IDScan(hT, False, RRV) = 0)
Wend
IDDestroyTable hT
NSFDbClose hDB
If (choice = 1) Then
print "Удалено " & CStr(n&) & " окурков в базе данных " & db.FilePath & " на сервере " & db.Server
Else
print "В базе данных " & db.FilePath & " на сервере " & db.Server & " найдено " & CStr(n&) & " окурков"
End If
Exit sub
errmes:
strErrMessage = "Ошибка " & Error$ & " выполняемая процедура " & GetThreadInfo(10) &" текущая процедура " & GetThreadInfo(1) & ", в строке " & CStr(Erl)
Print strErrMessage
End Sub
Sub findstubs
'поиск окурков
On Error GoTo errmes
Dim Session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim dbInfo As Variant
Dim sDbServer As String
Dim sDbPath As String
Dim retVal As Integer
Set db = session.Currentdatabase
retVal = ws.Prompt (PROMPT_YESNOCANCEL,"Удалить ""Окурки""?","Удалить все [да] или показать их число [Нет]")
Select Case retVal
Case 1 : Call countAndDeleteStubs(db, 1)
Case 0 : Call countAndDeleteStubs(db, 0)
Case -1 : print "Отменено"
End Select
Print "Процедура сжатия базы данных..."
Call db.Compact
Exit Sub
errmes:
strErrMessage = "Ошибка " & Error$ & " выполняемая процедура " & Getthreadinfo(10) &" текущая процедура " & Getthreadinfo(1) & ", в строке " & Cstr(Erl)
Print strErrMessage
End Sub
Ярлыки:
lotus script,
stubs
3 марта 2010 г.
ProgressBar

На днях, решил приукрасить подготовку отчетов "прогрессом"
Особенность от стандартного использования - это, конвертация ascii в читабельный вид
Вот что получилось
'функции преобразования строк
Const OS_TRANSLATE_NATIVE_TO_LMBCS = 0 'Translate platform-specific to LMBCS */
Const OS_TRANSLATE_LMBCS_TO_NATIVE = 1 'Translate LMBCS to platform-specific */
Const OS_TRANSLATE_LOWER_TO_UPPER = 3 'current int'l case table */
Const OS_TRANSLATE_UPPER_TO_LOWER = 4 'current int'l case table */
Const OS_TRANSLATE_UNACCENT = 5 'int'l unaccenting table */
Const OS_TRANSLATE_LMBCS_TO_ASCII_DOS = 11
Const OS_TRANSLATE_LMBCS_TO_ASCII = 13
Declare Sub OSTranslate Lib "nnotes.dll" Alias "OSTranslate"( ByVal mode As Integer, ByVal strIn As String, ByVal lenIn As Integer, ByVal strOut As String, ByVal lenOut As Integer )
Declare Function NEMProgressBegin Lib "nnotesws.dll" ( ByVal wFlags As Integer ) As Long
Declare Sub NEMProgressEnd Lib "nnotesws.dll" ( ByVal hwnd As Long )
Declare Sub NEMProgressSetBarPos Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal dwPos As Long)
Declare Sub NEMProgressSetBarRange Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal dwMax As Long )
Declare Sub NEMProgressSetText Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal pcszLine1 As String, _
ByVal pcszLine2 As String )
Const NPB_TWOLINE% = 1
Class ProgressBar
Private hwnd As Long
Sub New (BarRange As Long)
On Error GoTo ErrorHandler
Me.hwnd = NEMProgressBegin (NPB_TWOLINE)
Call NEMProgressSetBarRange (Me.hwnd, BarRange)
Exit Sub
ErrorHandler:
strErrMessage_rep = "Ошибка " & Error$ & " выполняемая процедура " & GetThreadInfo(10) &" текущая процедура " & GetThreadInfo(1) & ", в строке " & CStr(Erl)
Print strErrMessage_rep
End Sub
Код как использовать
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim server
Dim view_adr As NotesView
Set db = s.Currentdatabase
If Not ( db.IsFTIndexed ) Then
Call db.UpdateFTIndex( True )
End If
If ( db.LastModified > db.LastFTIndexed ) Then
Call db.UpdateFTIndex( True )
End If
Set view_adr = db.GetView("view_object")
Dim i As Long
Set doc = view_adr.Getfirstdocument()
a = view_adr.Allentries.Count
Dim RefreshProgress As New ProgressBar (view_adr.Allentries.Count) 'отображение рогрес-бара
Dim BarMsg As String
Dim UpdMsg As String
Let BMsg = "Обработка окументов..."
Let tmp0=Len(BMsg)
Let tmp1=Len(BMsg)*2
Let BarMsg = Space(Len(BMsg)*2)
Call OSTranslate( OS_TRANSLATE_NATIVE_TO_LMBCS, BMsg, tmp0, BarMsg, tmp1 )
For i = 1 To a
Call plan_nachislenie(doc)
Call RefreshProgress.UpdatePosition (i)
Let ascii = doc.address(0)
Let tmp0=Len(ascii)
Let tmp1=Len(ascii)*2
Let UpdMsg = Space(Len(ascii)*2)
Call OSTranslate( OS_TRANSLATE_NATIVE_TO_LMBCS, ascii, tmp0, UpdMsg, tmp1 )
Call RefreshProgress.UpdateProgressText(BarMsg, UpdMsg)
Set doc = view_adr.GetNextdocument(doc)
Next
Print "Готово"
Ярлыки:
lotus script
10 февраля 2010 г.
Chart - вкусности Lotus Symphony
Есть в природе такой тулкит, встраивая который, можно строить графики используя LotusScript в связке с Lotus Symphony's
Ярлыки:
Lotus Symphony
8 февраля 2010 г.
Вышла 2-ая бэтка IBM Lotus Symphony 3
Событие примечательное, особенно с таким вот фактом поддержки
Ссылка на оригинал
Будем ждать как зарелизятся и может даже внесут в сборку Lotus Notes клиента
support for Visual Basic Macros, OLE Objects, and embedded audio/video as well as delivering business card and label templates commonly used. Users will also find enhanced support for and interoperability with Microsoft Office 2007 files and OpenOffice.org file formats.
Ссылка на оригинал
Будем ждать как зарелизятся и может даже внесут в сборку Lotus Notes клиента
Ярлыки:
Lotus Symphony
3 февраля 2010 г.
Просмотр элементов дизайна
В представлении создаем кнопу которая заменяет значение в поле $FormulaClass
Dim w As NotesUIWorkspace
Dim uiview As NotesUIView
Dim view As NotesView
Dim unid As String
Dim s As NotesSession
Dim db As NotesDatabase
Dim note As NotesDocument
Set w = New NotesUIWorkspace
Set uiview = w.CurrentView
Set view = uiview.View
Let unid = view.UniversalID
Set s = New NotesSession
Set db = s.CurrentDatabase
Set note = db.GetDocumentByUNID (unid)
Call note.ReplaceItemValue ("$FormulaClass", "2")
Call note.Save (True, True)
Этим самым мы можем видеть элементы дизайна!
Список значений которые может принимать это поле (поддерживает множественные значения ( 4+128+256 = 388 ))
Value Design Elements Shown
1 - Documents
2 - Unknown
4 - Forms and Subforms
8 - Views, Folders and Navigators
16 - Database Title
32 - Design Collection (overall information)
64 - ACL Note (in compiled format)
128 - Unknown
256 - Unknown
512 - Agents (Shared)
1024 - Shared Fields
1548 - Forms, Sub-forms, Views, Folders, Navigators, Agents (Shared), Shared Fields
Dim w As NotesUIWorkspace
Dim uiview As NotesUIView
Dim view As NotesView
Dim unid As String
Dim s As NotesSession
Dim db As NotesDatabase
Dim note As NotesDocument
Set w = New NotesUIWorkspace
Set uiview = w.CurrentView
Set view = uiview.View
Let unid = view.UniversalID
Set s = New NotesSession
Set db = s.CurrentDatabase
Set note = db.GetDocumentByUNID (unid)
Call note.ReplaceItemValue ("$FormulaClass", "2")
Call note.Save (True, True)
Этим самым мы можем видеть элементы дизайна!
Список значений которые может принимать это поле (поддерживает множественные значения ( 4+128+256 = 388 ))
Value Design Elements Shown
1 - Documents
2 - Unknown
4 - Forms and Subforms
8 - Views, Folders and Navigators
16 - Database Title
32 - Design Collection (overall information)
64 - ACL Note (in compiled format)
128 - Unknown
256 - Unknown
512 - Agents (Shared)
1024 - Shared Fields
1548 - Forms, Sub-forms, Views, Folders, Navigators, Agents (Shared), Shared Fields
Ярлыки:
lotus script
Копировании базы с помощью консоли сервера (cl copy)
Интересная статья попалась мне о копировании базы с помощью консоли сервера. Была задача на удаленный сервер скопировать БД для дальнейшей репликации. Обычными средствами не было возможности это сделать. Помогла данная недокументированная возможность
Для того чтобы включить на сервере эту возможность нужно добавить значение в notes.ini:
set config CLUSTER_ADMIN_ON=1 (даже если сервер не использует кластеры)
Перезагрузки сервера не требуется, команда начинает работать сразу же.
Синтаксис команды следующий :
cl copy sourcedb targetdb
Как пользоваться:
- Создание обычной копии базы (не реплики) db1.nsf с сервера serverA в базу db2.nsf на сервер ServerB
CL copy serverA!!db1.nsf serverB!!db2.nsf
- Создание реплики базы db1.nsf с сервера serverA в базу db2.nsf на сервере ServerB
CL copy serverA!!db1.nsf serverB!!db2.nsf REPLICA
- Создание копии структуры базы (только структура, без документов данных) базы db1.nsf с сервера serverA в базу db2.nsf на сервер ServerB
CL copy serverA!!db1.nsf serverB!!db2.nsf TEMPLATE
- Создание обычной (не реплики) копии базы db1.nsf в базу db2.nsf на текущем сервере
CL copy db1.nsf db2.nsf
Для того чтобы включить на сервере эту возможность нужно добавить значение в notes.ini:
set config CLUSTER_ADMIN_ON=1 (даже если сервер не использует кластеры)
Перезагрузки сервера не требуется, команда начинает работать сразу же.
Синтаксис команды следующий :
cl copy sourcedb targetdb
Как пользоваться:
- Создание обычной копии базы (не реплики) db1.nsf с сервера serverA в базу db2.nsf на сервер ServerB
CL copy serverA!!db1.nsf serverB!!db2.nsf
- Создание реплики базы db1.nsf с сервера serverA в базу db2.nsf на сервере ServerB
CL copy serverA!!db1.nsf serverB!!db2.nsf REPLICA
- Создание копии структуры базы (только структура, без документов данных) базы db1.nsf с сервера serverA в базу db2.nsf на сервер ServerB
CL copy serverA!!db1.nsf serverB!!db2.nsf TEMPLATE
- Создание обычной (не реплики) копии базы db1.nsf в базу db2.nsf на текущем сервере
CL copy db1.nsf db2.nsf
Ярлыки:
администрирование,
notes.ini
Создание документа Location
Иногда требуется создать документ подключения к серверу не находясь за компьютером пользователя. Данный скрипт позволит автоматизировать данный процесс. Эту процедуру в последствии можно использовать как функцию
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim allnabs As Variant
allnabs=session.addressbooks
Forall books In allnabs
If books.isprivateaddressbook Then
If Not(Books.isopen) Then
Call Books.open("",books.filename)
Set db = books
End If
End If
End Forall
Set view = db.GetView("Connections")
connect = "имя сервера подключения"
Set doc = view.GetDocumentByKey(connect)
If Not doc Is Nothing Then
Print "Документ подключения " & connect &" уже есть"
Else
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.ComposeDocument( "", db.filename, "local" )
Call uidoc.FieldsetText("Destination","notes-имя сервера подключения")
Call uidoc.FieldsetText("OptionalNetworkAddress","dns-имя сервера подключения")
Call uidoc.FieldsetText("PortName","TCPIP")
Call uidoc.FieldsetText("LanPortName","TCPIP")
Call uidoc.Save
Call uidoc.Close
Print "Документ подключения " & connect &" cоздан"
End If
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim allnabs As Variant
allnabs=session.addressbooks
Forall books In allnabs
If books.isprivateaddressbook Then
If Not(Books.isopen) Then
Call Books.open("",books.filename)
Set db = books
End If
End If
End Forall
Set view = db.GetView("Connections")
connect = "имя сервера подключения"
Set doc = view.GetDocumentByKey(connect)
If Not doc Is Nothing Then
Print "Документ подключения " & connect &" уже есть"
Else
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.ComposeDocument( "", db.filename, "local" )
Call uidoc.FieldsetText("Destination","notes-имя сервера подключения")
Call uidoc.FieldsetText("OptionalNetworkAddress","dns-имя сервера подключения")
Call uidoc.FieldsetText("PortName","TCPIP")
Call uidoc.FieldsetText("LanPortName","TCPIP")
Call uidoc.Save
Call uidoc.Close
Print "Документ подключения " & connect &" cоздан"
End If
Ярлыки:
connection,
lotus script
Импорт значений документов в таблицу Rt поля
Действие вешается в представлении для импорта файла Excel в Lotus
Значения из документов представления "body_f2" из примера импортируются в сгенерированную скриптом табличку, где колличество вкладок вычисляется динамически, в зависимости от количества документов в представлении,а использование стиля позволяем изменять размеры колонок
Sub Click(Source As Button)
Dim val_List( 1 To 200 ) As Variant ' колличество шагов исполнеия цыкла
Dim current_val As Variant
counter% = 1
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
REM Create document with Body rich text item
Dim doc As New NotesDocument(db)
Dim view_doc As NotesDocument
Call doc.ReplaceItemValue("Form", "body_rt_f2") ' название формы отчета по этой форме (в ней же содержится RT поле в котором создается таблица со вкладками)
Dim body As New NotesRichTextItem(doc, "body_rt")
Set view = db.GetView("body_f2")
REM Create table in Body item
rowCount% = 16 'колличество строк в таблице каждой из вкладок
columnCount% = 7 'колличество столбцов в таблице каждой из вкладок
a = view.EntryCount ' число документов в представлении (строки)
'c = a+12
'b = Fix(c/rowCount%) ' число вкладок
b = Fix(a/rowCount%) ' число вкладок
b1 = Fix(a/rowCount%) ' число вкладок
b2 = a/rowCount%
If b1< b2 Then b=b1 +1
Dim tabs() As String
If Messagebox("Продолжить создание таблицы?", _
MB_YESNO + MB_ICONQUESTION, "Tabbed?") = IDNO Then
Call body.AppendTable(b, 1)
Else
Redim tabs(1 To b)
For i = 1 To b
tabs(i) = "Стр № " & i
Next
Call body.AppendTable(b, 1, tabs) 'создание таблицы с вкладками
End If
REM Populate table
Dim rtnav As NotesRichTextNavigator
Set rtnav = body.CreateNavigator
Call rtnav.FindFirstElement(RTELEM_TYPE_TABLE)'
Set view_doc = view.GetFirstDocument
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) 'поиск ячейки в 1 вкладке
' вставка таблицы 7х15
'****************************************** стиль оформления
Dim columnStyles1(0 To 6) As NotesRichTextParagraphStyle
For i = 0 To 6
Set columnStyles1(i) = session.CreateRichTextParagraphStyle
columnStyles1(i).LeftMargin = 0 ' position relative to cell border.
columnStyles1(i).FirstLineLeftMargin = 0
Next
columnStyles1(0).RightMargin = 4.5 * RULER_ONE_CENTIMETER
columnStyles1(0).Alignment = ALIGN_CENTER
columnStyles1(1).RightMargin = 17. * RULER_ONE_CENTIMETER
columnStyles1(1).Alignment = ALIGN_LEFT
columnStyles1(2).RightMargin = 2. * RULER_ONE_CENTIMETER
columnStyles1(2).Alignment = ALIGN_CENTER
columnStyles1(3).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(3).Alignment = ALIGN_CENTER
columnStyles1(4).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(4).Alignment = ALIGN_CENTER
columnStyles1(5).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(5).Alignment = ALIGN_CENTER
columnStyles1(6).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(6).Alignment = ALIGN_CENTER
'*********************************************
For ib = 1 To b Step 1
Call body.BeginInsert(rtnav)
Call body.AppendTable(rowCount%, columnCount%,,,columnStyles1)
'Call body.AppendTable(16, 7,,,columnStyles1)
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) 'поиск ячейки во вложенной таблице 1 вкладки
For iRow% = 1 To rowCount% Step 1
If view_doc.Size = 0 Goto savedoc
On Error Goto savedoc
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 0 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 1 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 2 ))
'On Error=19 Goto savedoc
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 3 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 4 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 5 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Dim v6 As String
v6$ = Left$(view_doc.ColumnValues( 6 ), 6)
Call body.AppendText(v6$)
val_List( counter% ) = current_val
Set view_doc = view.GetNextDocument( view_doc )
counter% = counter% + 1
Call body.EndInsert
If current_val > a Goto savedoc
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Next
Next
'Exit Sub
savedoc:
REM Save document and refresh view
Call doc.Save(True, False)
Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
Exit Sub
End Sub
Значения из документов представления "body_f2" из примера импортируются в сгенерированную скриптом табличку, где колличество вкладок вычисляется динамически, в зависимости от количества документов в представлении,а использование стиля позволяем изменять размеры колонок
Sub Click(Source As Button)
Dim val_List( 1 To 200 ) As Variant ' колличество шагов исполнеия цыкла
Dim current_val As Variant
counter% = 1
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
REM Create document with Body rich text item
Dim doc As New NotesDocument(db)
Dim view_doc As NotesDocument
Call doc.ReplaceItemValue("Form", "body_rt_f2") ' название формы отчета по этой форме (в ней же содержится RT поле в котором создается таблица со вкладками)
Dim body As New NotesRichTextItem(doc, "body_rt")
Set view = db.GetView("body_f2")
REM Create table in Body item
rowCount% = 16 'колличество строк в таблице каждой из вкладок
columnCount% = 7 'колличество столбцов в таблице каждой из вкладок
a = view.EntryCount ' число документов в представлении (строки)
'c = a+12
'b = Fix(c/rowCount%) ' число вкладок
b = Fix(a/rowCount%) ' число вкладок
b1 = Fix(a/rowCount%) ' число вкладок
b2 = a/rowCount%
If b1< b2 Then b=b1 +1
Dim tabs() As String
If Messagebox("Продолжить создание таблицы?", _
MB_YESNO + MB_ICONQUESTION, "Tabbed?") = IDNO Then
Call body.AppendTable(b, 1)
Else
Redim tabs(1 To b)
For i = 1 To b
tabs(i) = "Стр № " & i
Next
Call body.AppendTable(b, 1, tabs) 'создание таблицы с вкладками
End If
REM Populate table
Dim rtnav As NotesRichTextNavigator
Set rtnav = body.CreateNavigator
Call rtnav.FindFirstElement(RTELEM_TYPE_TABLE)'
Set view_doc = view.GetFirstDocument
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) 'поиск ячейки в 1 вкладке
' вставка таблицы 7х15
'****************************************** стиль оформления
Dim columnStyles1(0 To 6) As NotesRichTextParagraphStyle
For i = 0 To 6
Set columnStyles1(i) = session.CreateRichTextParagraphStyle
columnStyles1(i).LeftMargin = 0 ' position relative to cell border.
columnStyles1(i).FirstLineLeftMargin = 0
Next
columnStyles1(0).RightMargin = 4.5 * RULER_ONE_CENTIMETER
columnStyles1(0).Alignment = ALIGN_CENTER
columnStyles1(1).RightMargin = 17. * RULER_ONE_CENTIMETER
columnStyles1(1).Alignment = ALIGN_LEFT
columnStyles1(2).RightMargin = 2. * RULER_ONE_CENTIMETER
columnStyles1(2).Alignment = ALIGN_CENTER
columnStyles1(3).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(3).Alignment = ALIGN_CENTER
columnStyles1(4).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(4).Alignment = ALIGN_CENTER
columnStyles1(5).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(5).Alignment = ALIGN_CENTER
columnStyles1(6).RightMargin = 1.5 * RULER_ONE_CENTIMETER
columnStyles1(6).Alignment = ALIGN_CENTER
'*********************************************
For ib = 1 To b Step 1
Call body.BeginInsert(rtnav)
Call body.AppendTable(rowCount%, columnCount%,,,columnStyles1)
'Call body.AppendTable(16, 7,,,columnStyles1)
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) 'поиск ячейки во вложенной таблице 1 вкладки
For iRow% = 1 To rowCount% Step 1
If view_doc.Size = 0 Goto savedoc
On Error Goto savedoc
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 0 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 1 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 2 ))
'On Error=19 Goto savedoc
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 3 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 4 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Call body.AppendText(view_doc.ColumnValues( 5 ))
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call body.BeginInsert(rtnav)
Dim v6 As String
v6$ = Left$(view_doc.ColumnValues( 6 ), 6)
Call body.AppendText(v6$)
val_List( counter% ) = current_val
Set view_doc = view.GetNextDocument( view_doc )
counter% = counter% + 1
Call body.EndInsert
If current_val > a Goto savedoc
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Next
Next
'Exit Sub
savedoc:
REM Save document and refresh view
Call doc.Save(True, False)
Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
Exit Sub
End Sub
Ярлыки:
импорт,
lotus script,
RT filed style
Перевод атачмента из одного поля в другое
Вот небольшой примерчик кнопки на форме
которая переводит атачмент в одном поле (Info) в embeded object в другое поле (embed)
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim doc As NotesUIDocument
Dim rtitemA As NotesRichTextItem
Dim info As NotesRichTextItem
Set doc = workspace.CurrentDocument 'текущий документ
If Not doc.Document.HasEmbedded Then Exit Sub
Set rtitemA = doc.Document.GetFirstItem("info") ' поле где лежит атачмент
REM Сохраняем аттачи на диск
Forall att In rtitemA.EmbeddedObjects
If att.Type = EMBED_ATTACHMENT Then
filepath$ = "C:\temp\" & att.Source
Call att.ExtractFile(filepath$) ' сохранение файлов в "C:\temp\"
Call doc.GotoField("embed")
Call doc.Import("Microsoft Word",filepath$) ' создание (импорт) объекта Word
Kill filepath$ ' удаление фалов из дирректории "C:\temp\"
End If
End Forall
Call doc.FieldClear("Info") ' очищение поля "Info"
Call rtitemA.Update ' обновление поля
End Sub
которая переводит атачмент в одном поле (Info) в embeded object в другое поле (embed)
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim doc As NotesUIDocument
Dim rtitemA As NotesRichTextItem
Dim info As NotesRichTextItem
Set doc = workspace.CurrentDocument 'текущий документ
If Not doc.Document.HasEmbedded Then Exit Sub
Set rtitemA = doc.Document.GetFirstItem("info") ' поле где лежит атачмент
REM Сохраняем аттачи на диск
Forall att In rtitemA.EmbeddedObjects
If att.Type = EMBED_ATTACHMENT Then
filepath$ = "C:\temp\" & att.Source
Call att.ExtractFile(filepath$) ' сохранение файлов в "C:\temp\"
Call doc.GotoField("embed")
Call doc.Import("Microsoft Word",filepath$) ' создание (импорт) объекта Word
Kill filepath$ ' удаление фалов из дирректории "C:\temp\"
End If
End Forall
Call doc.FieldClear("Info") ' очищение поля "Info"
Call rtitemA.Update ' обновление поля
End Sub
Ярлыки:
attachment,
lotus script
Импорт из Microsoft Excel в документ Lotus
Действие в представлении для импорта файла Excel в Lotus
Кнопка вышается на представление "body_f2", после нажатия возможен выбор файла, но берется по умолчанию, потом вводится колличество строк и далее начинается сам импорт.
На каждую новую строчку в Excel создаётся новый документ, после окончания импорта в представлении отображаются документы,в которых ячейки Excel соответствуют полям формы документа.
Далее из этого представления по действию ("Импорт значений документов в таблицу RT поля") значения из документов импортируются в сгенерированную скриптом табличу, где количество вкладок вычисляется динамически, в зависимости от колличества документов в представлении
Таблица имеет вид
_________________________________________________________________________
|________________________ШАПКА__________________________________________|
|_название__|______код________|_цыфры__|_цыфры_|_цыфры_|_цыфры_|_%_____|
|___"a" _____|____"a_1"_________|__"a_2"__|_"a_3"___|_"a_4"__|__"a_5"__|_"a_6"__|
Sub Initialize
Dim xlFilename As String
xlFilename = Inputbox$("Файл импорта по умолчанию.", "Файл для импорта Диск:\f2.XLS", "c:\f2.xls")
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Dim row As Integer
Dim written As Integer
Dim number As Integer
number = Inputbox$("Введите колличество строк", "количество строк, содержащихся в импортируемом файле")
Dim Excel As Variant
Dim xlWorkbook As Variant
Dim xlSheet As Variant
Dim xlCells As Variant
Set Excel = CreateObject("excel.application")
Excel.Visible = False
Print "Открыт файл " & xlFilename & "..."
Excel.Workbooks.Open xlFilename '// открытие файла Excel
Set xlWorkbook = Excel.ActiveWorkbook
Set xlSheet = xlWorkbook.ActiveSheet
Set xlCells = xlSheet.Cells
row = 1
written = 0
Print "Starting import from Excel file..."
Dim strName As String
Add:
row = row + 1
written=written+1
Print ("Импорт строки: "& Cstr(row) & " из: " &Cstr(number))
Set view = db.GetView("body_f2")'представление где после импорта отображаются созданные документы
strName = xlCells( row, 1). Value
Set doc = view.GetDocumentByKey(strName ,True)
If doc Is Nothing Then
Set doc = db.CreateDocument
With doc
.Form = "body_f2"
.a = xlCells(row, 1).Value
.a_1 = xlCells( row, 2 ).Value
.a_2 = xlCells(row, 3).Value
.a_3 = xlCells( row, 4).Value
.a_4 = xlCells( row, 5).Value
.a_5 = xlCells( row, 6).Value
.a_6 = xlCells( row, 7).Value
End With
Else
End If
Call doc.Save( True, True )
Set doc = Nothing
If written < number Then Goto Add
excel.quit
Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
End Sub
Кнопка вышается на представление "body_f2", после нажатия возможен выбор файла, но берется по умолчанию, потом вводится колличество строк и далее начинается сам импорт.
На каждую новую строчку в Excel создаётся новый документ, после окончания импорта в представлении отображаются документы,в которых ячейки Excel соответствуют полям формы документа.
Далее из этого представления по действию ("Импорт значений документов в таблицу RT поля") значения из документов импортируются в сгенерированную скриптом табличу, где количество вкладок вычисляется динамически, в зависимости от колличества документов в представлении
Таблица имеет вид
_________________________________________________________________________
|________________________ШАПКА__________________________________________|
|_название__|______код________|_цыфры__|_цыфры_|_цыфры_|_цыфры_|_%_____|
|___"a" _____|____"a_1"_________|__"a_2"__|_"a_3"___|_"a_4"__|__"a_5"__|_"a_6"__|
Sub Initialize
Dim xlFilename As String
xlFilename = Inputbox$("Файл импорта по умолчанию.", "Файл для импорта Диск:\f2.XLS", "c:\f2.xls")
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Dim row As Integer
Dim written As Integer
Dim number As Integer
number = Inputbox$("Введите колличество строк", "количество строк, содержащихся в импортируемом файле")
Dim Excel As Variant
Dim xlWorkbook As Variant
Dim xlSheet As Variant
Dim xlCells As Variant
Set Excel = CreateObject("excel.application")
Excel.Visible = False
Print "Открыт файл " & xlFilename & "..."
Excel.Workbooks.Open xlFilename '// открытие файла Excel
Set xlWorkbook = Excel.ActiveWorkbook
Set xlSheet = xlWorkbook.ActiveSheet
Set xlCells = xlSheet.Cells
row = 1
written = 0
Print "Starting import from Excel file..."
Dim strName As String
Add:
row = row + 1
written=written+1
Print ("Импорт строки: "& Cstr(row) & " из: " &Cstr(number))
Set view = db.GetView("body_f2")'представление где после импорта отображаются созданные документы
strName = xlCells( row, 1). Value
Set doc = view.GetDocumentByKey(strName ,True)
If doc Is Nothing Then
Set doc = db.CreateDocument
With doc
.Form = "body_f2"
.a = xlCells(row, 1).Value
.a_1 = xlCells( row, 2 ).Value
.a_2 = xlCells(row, 3).Value
.a_3 = xlCells( row, 4).Value
.a_4 = xlCells( row, 5).Value
.a_5 = xlCells( row, 6).Value
.a_6 = xlCells( row, 7).Value
End With
Else
End If
Call doc.Save( True, True )
Set doc = Nothing
If written < number Then Goto Add
excel.quit
Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
End Sub
Ярлыки:
lotus script,
Microsoft Excel
Установка границ таблицы OpenOffice - sCalc
Set xlglob = CreateObject ( "com.sun.star.ServiceManager" )
Set Desktop = xlglob.createInstance("com.sun.star.frame.Desktop")
Set document = Desktop.LoadComponentFromURL("private:factory/scalc","_ blank",0,mass)
Set Border = Desktop.Bridge_GetStruct("com.sun.star.table.BorderLine")
Set sheets=Document.getSheets()
Set xlWbk = sheets.getByIndex(0)
...........................................
Set oRange = xlWbk.getCellRangeByName("A1:G5")
oRange.merge(True)
Call oRange.setPropertyValue("CellBackColor", 16764057)
Border.color = 155
Border.lineDistance = 0
Border.innerLineWidth = 0
Border.outerLineWidth = 1
Call oRange.SetPropertyValue ( "TopBorder" , Border )
Call oRange.SetPropertyValue( "BottomBorder" , Border )
Call oRange.SetPropertyValue( "LeftBorder" , Border )
Call oRange.SetPropertyValue( "RightBorder" , Border )
Set Desktop = xlglob.createInstance("com.sun.star.frame.Desktop")
Set document = Desktop.LoadComponentFromURL("private:factory/scalc","_ blank",0,mass)
Set Border = Desktop.Bridge_GetStruct("com.sun.star.table.BorderLine")
Set sheets=Document.getSheets()
Set xlWbk = sheets.getByIndex(0)
...........................................
Set oRange = xlWbk.getCellRangeByName("A1:G5")
oRange.merge(True)
Call oRange.setPropertyValue("CellBackColor", 16764057)
Border.color = 155
Border.lineDistance = 0
Border.innerLineWidth = 0
Border.outerLineWidth = 1
Call oRange.SetPropertyValue ( "TopBorder" , Border )
Call oRange.SetPropertyValue( "BottomBorder" , Border )
Call oRange.SetPropertyValue( "LeftBorder" , Border )
Call oRange.SetPropertyValue( "RightBorder" , Border )
Ярлыки:
lotus script,
OpenOffice
Импорт значения из ячейки в таблице документа OpenOffice - sWriter в документ Lotus`а,
Код импорта из ячеек таблицы ODT файла
Используя функцию writegetcelltable (objDocument, "Таблица1", "A2"), нужно лишь указать имя таблицы и имя ячейки
Sub Click(Source As Button)
Dim args()
Set objServiceManager= CreateObject("com.sun.star.ServiceManager")
Set objCoreReflection= objServiceManager.createInstance("com.sun.star.reflection.CoreReflection")
Set objDesktop= objServiceManager.createInstance("com.sun.star.frame.Desktop")
Set objDocument= objDesktop.loadComponentFromURL("file:///C:/1.odt", "_blank", 0, args())
Call writegetcelltable (objDocument, "Таблица1", "A2")
End Sub
Sub writegetcelltable (oDoc As Variant, tablename As Variant, cellname As Variant)
Set TextTables = oDoc.getTextTables()
Set TextTable = TextTables.getByName(tablename) ' таблица
Set TCell = TextTable.getCellByName(cellname) ' ячейка
Set oText = TCell.getText()
a = oText.getValue() ' значение из ячейки
End Sub
Используя функцию writegetcelltable (objDocument, "Таблица1", "A2"), нужно лишь указать имя таблицы и имя ячейки
Sub Click(Source As Button)
Dim args()
Set objServiceManager= CreateObject("com.sun.star.ServiceManager")
Set objCoreReflection= objServiceManager.createInstance("com.sun.star.reflection.CoreReflection")
Set objDesktop= objServiceManager.createInstance("com.sun.star.frame.Desktop")
Set objDocument= objDesktop.loadComponentFromURL("file:///C:/1.odt", "_blank", 0, args())
Call writegetcelltable (objDocument, "Таблица1", "A2")
End Sub
Sub writegetcelltable (oDoc As Variant, tablename As Variant, cellname As Variant)
Set TextTables = oDoc.getTextTables()
Set TextTable = TextTables.getByName(tablename) ' таблица
Set TCell = TextTable.getCellByName(cellname) ' ячейка
Set oText = TCell.getText()
a = oText.getValue() ' значение из ячейки
End Sub
Ярлыки:
импорт,
lotus script,
OpenOffice
Импорт значения из ячейки документа OpenOffice в документ Lotus`а
Код импорта из ячеек таблицы ODS файла
Используя вызов xlWbk.getCellRangeByName("E7").getValue() , мы импортируем в нужное нам notes-поле значение из ячейки
Dim mass()
Dim xlWbk As Variant
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim doc As New NotesDocument(db)
Call doc.ReplaceItemValue("Form","1")
FileName = "1.ods"
Set xlglob = CreateObject ( "com.sun.star.ServiceManager" )
Set Desktop = xlglob.createInstance("com.sun.star.frame.Desktop")
Set document= Desktop.loadComponentFromURL("file:///C:/"+FileName, "_blank", 0, mass)
Set sheets=Document.getSheets()
Set xlWbk = sheets.getByIndex(0)
doc.b_1 = xlWbk.getCellRangeByName("E7").getValue()
Эксперемент показал, что лучше
в конструкции doc.b_1 = xlWbk.getCellRangeByName("E7").getValue()
использовать doc.b_1 = xlWbk.getCellRangeByName("E7").getString()
Используя вызов xlWbk.getCellRangeByName("E7").getValue() , мы импортируем в нужное нам notes-поле значение из ячейки
Dim mass()
Dim xlWbk As Variant
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim doc As New NotesDocument(db)
Call doc.ReplaceItemValue("Form","1")
FileName = "1.ods"
Set xlglob = CreateObject ( "com.sun.star.ServiceManager" )
Set Desktop = xlglob.createInstance("com.sun.star.frame.Desktop")
Set document= Desktop.loadComponentFromURL("file:///C:/"+FileName, "_blank", 0, mass)
Set sheets=Document.getSheets()
Set xlWbk = sheets.getByIndex(0)
doc.b_1 = xlWbk.getCellRangeByName("E7").getValue()
Эксперемент показал, что лучше
в конструкции doc.b_1 = xlWbk.getCellRangeByName("E7").getValue()
использовать doc.b_1 = xlWbk.getCellRangeByName("E7").getString()
Ярлыки:
импорт,
lotus script,
OpenOffice
Выгрузка в Word, через поля-Word
Данный код демострирует как выгрузить данные в Word, используя для этого поля Word'a.
Этот код я использовал для формирования договора. Что оказалось удобным способом для автоматического формирования текста договора (где как правило меняеются данные в одном и том же месте текста договора)
Dim s As New notessession
Dim todaydate As New notesdatetime("Today")
Dim word As Variant
Dim wordoc As Variant
Dim todaysdate As String
Dim orderid As String
Dim producedby As String
Dim storeid As String
Dim customername As String
Dim address As String
Dim citytown As String
Dim postcode As String
Dim daytimeno As String
Dim eveningno As String
'Присваивание значений пересенным (Lotus)
todaysdate = todaydate.localtime
orderid = "2183763248"
producedby = s.username
storeid = "12345"
customername = "John Doe"
address = "Apartment 5c, 5 Test Avenue"
citytown = "Testtown"
postcode = "XX5 5XX"
daytimeno = "1234567890"
eveningno = "0987654321"
'Создание Word-документа
Set word = CreateObject("Word.Application") 'Создание объекта Word'a
Call word.documents.add("Return and Uplift.dot") 'Создание нового документа по шаблону Return and Uplift.dot
Set worddoc = word.activedocument 'Активация объекта
'Присваивание полям-Word'a значений из полей notes-документа
worddoc.FormFields(1).result = todaysdate
worddoc.FormFields(2).result = orderid
worddoc.FormFields(3).result = producedby
worddoc.FormFields(4).result = storeid
worddoc.FormFields(5).result = customername
worddoc.FormFields(6).result = address
worddoc.FormFields(7).result = citytown
worddoc.FormFields(8).result = postcode
worddoc.FormFields(9).result = daytimeno
worddoc.FormFields(10).result = eveningno
worddoc.saveas(customername) 'сохранение документа-Word'a с именем файла "John Doe.doc"
word.visible = True 'Сделать видимым окно Word'a
'word.quit 'закрытие Word'a
Этот код я использовал для формирования договора. Что оказалось удобным способом для автоматического формирования текста договора (где как правило меняеются данные в одном и том же месте текста договора)
Dim s As New notessession
Dim todaydate As New notesdatetime("Today")
Dim word As Variant
Dim wordoc As Variant
Dim todaysdate As String
Dim orderid As String
Dim producedby As String
Dim storeid As String
Dim customername As String
Dim address As String
Dim citytown As String
Dim postcode As String
Dim daytimeno As String
Dim eveningno As String
'Присваивание значений пересенным (Lotus)
todaysdate = todaydate.localtime
orderid = "2183763248"
producedby = s.username
storeid = "12345"
customername = "John Doe"
address = "Apartment 5c, 5 Test Avenue"
citytown = "Testtown"
postcode = "XX5 5XX"
daytimeno = "1234567890"
eveningno = "0987654321"
'Создание Word-документа
Set word = CreateObject("Word.Application") 'Создание объекта Word'a
Call word.documents.add("Return and Uplift.dot") 'Создание нового документа по шаблону Return and Uplift.dot
Set worddoc = word.activedocument 'Активация объекта
'Присваивание полям-Word'a значений из полей notes-документа
worddoc.FormFields(1).result = todaysdate
worddoc.FormFields(2).result = orderid
worddoc.FormFields(3).result = producedby
worddoc.FormFields(4).result = storeid
worddoc.FormFields(5).result = customername
worddoc.FormFields(6).result = address
worddoc.FormFields(7).result = citytown
worddoc.FormFields(8).result = postcode
worddoc.FormFields(9).result = daytimeno
worddoc.FormFields(10).result = eveningno
worddoc.saveas(customername) 'сохранение документа-Word'a с именем файла "John Doe.doc"
word.visible = True 'Сделать видимым окно Word'a
'word.quit 'закрытие Word'a
Ярлыки:
lotus script,
Microsoft Word
Как повысить скорость работы клиента 8.5.1 (eclips vrsion)
В файле \Notes\framework\rcp\deploy\jvm.properties переменную vmarg.Xmx установить примерно в 1/3- 1/2 размера физ. памяти.
Можно еще попробовать vmarg.Xms, возможно тоже даст прирост.
vmarg.Xms - Heap start size
vmarg.Xmx - Heap max size
И дйствительно прирост в скорости работы ощутимый.
На AMD 5000+ И 2 Гб памяти вот с уже такими новыми параметрами
#vmarg.Xmx=-Xmx256m
#vmarg.Xms=-Xms48m
vmarg.Xmx=-Xmxm512m
vmarg.Xms=-Xms128m
стало работать шустрее.
Почтовая БД с сервера Domino 7 (SuSE 11) открылась за 2 сек.
Можно еще попробовать vmarg.Xms, возможно тоже даст прирост.
vmarg.Xms - Heap start size
vmarg.Xmx - Heap max size
И дйствительно прирост в скорости работы ощутимый.
На AMD 5000+ И 2 Гб памяти вот с уже такими новыми параметрами
#vmarg.Xmx=-Xmx256m
#vmarg.Xms=-Xms48m
vmarg.Xmx=-Xmxm512m
vmarg.Xms=-Xms128m
стало работать шустрее.
Почтовая БД с сервера Domino 7 (SuSE 11) открылась за 2 сек.
Ярлыки:
java properties,
Lotus Notes 8.5.1
31 января 2010 г.
Отправка файлов группе
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Set db = s.CurrentDatabase
files = ws.OpenFileDialog(True,"Выберите файлы для отправки",,"c:\")
If Isempty( files) Then
Exit Sub
End If
Stop
Set doc = New NotesDocument( db )
doc.Form = "Memo"
doc.SendTo = "Имя группы получатей" 'имя группы должно присутствовать в АК пользователя
doc.Subject = "Тема письма"
Set body = New NotesRichTextItem(doc, "Body")
Call body.AppendText("_:::. Смотрите прикрепленные файлы .:::_")
Call body.AddNewLine(2)
For i = 0 To Ubound (files)
Call body.EmbedObject(EMBED_ATTACHMENT, "", files(i))
Next
Call doc.Send( False )
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Set db = s.CurrentDatabase
files = ws.OpenFileDialog(True,"Выберите файлы для отправки",,"c:\")
If Isempty( files) Then
Exit Sub
End If
Stop
Set doc = New NotesDocument( db )
doc.Form = "Memo"
doc.SendTo = "Имя группы получатей" 'имя группы должно присутствовать в АК пользователя
doc.Subject = "Тема письма"
Set body = New NotesRichTextItem(doc, "Body")
Call body.AppendText("_:::. Смотрите прикрепленные файлы .:::_")
Call body.AddNewLine(2)
For i = 0 To Ubound (files)
Call body.EmbedObject(EMBED_ATTACHMENT, "", files(i))
Next
Call doc.Send( False )
Ярлыки:
lotus script,
mail
27 января 2010 г.
"Опись имущества" Notes.ini
Бродя по интернету в поисках нужной информации, наткнулся на любопытный ресурс, который довольно подробно отражает настройки файла конфигурации notes.ini
Эта статья будет полезна как при настройке клиента, и безусловно при настройке сервера
Эта статья будет полезна как при настройке клиента, и безусловно при настройке сервера
Ярлыки:
notes.ini
25 января 2010 г.
Работа с массивом
Возникла необходимость создать массив с нужными мне указателями ...
Set view_characters = db.Getview("characters_teplo")
Dim nav As NotesViewNavigator
Dim entry As NotesViewEntry
Dim vecoll As NotesViewEntryCollection
Dim docArray(),q
'uin = uidoc.Document.Universalid
Set vecoll = view_characters.Getallentriesbykey(uin)
Set entry = vecoll.Getfirstentry()
Stop
q = 0
ReDim docArray(vecoll.Count-1,1)
While Not (entry Is Nothing)
If (entry.IsDocument) Then
docArray(q,0) = entry.Columnvalues(1)
Set docArray(q,1) = entry.Document
End If
q=q+1
Set entry = vecoll.GetNextEntry(entry)
Wend
В конечном итоге получается массив
("указатель1")("документ1")
("указатель2")("документ2")
Set view_characters = db.Getview("characters_teplo")
Dim nav As NotesViewNavigator
Dim entry As NotesViewEntry
Dim vecoll As NotesViewEntryCollection
Dim docArray(),q
'uin = uidoc.Document.Universalid
Set vecoll = view_characters.Getallentriesbykey(uin)
Set entry = vecoll.Getfirstentry()
Stop
q = 0
ReDim docArray(vecoll.Count-1,1)
While Not (entry Is Nothing)
If (entry.IsDocument) Then
docArray(q,0) = entry.Columnvalues(1)
Set docArray(q,1) = entry.Document
End If
q=q+1
Set entry = vecoll.GetNextEntry(entry)
Wend
В конечном итоге получается массив
("указатель1")("документ1")
("указатель2")("документ2")
Ярлыки:
array,
lotus script
22 января 2010 г.
Просмотр свойств индексирования БД Lotus

import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
int options = Database.FTINDEX_ALL_BREAKS +
Database.FTINDEX_CASE_SENSITIVE;
if (db.isFTIndexed())
{
db.createFTIndex(options, true);
System.out.println("Параметры индекса");
System.out.println(Database.FTINDEX_ALL_BREAKS);
System.out.println(Database.FTINDEX_CASE_SENSITIVE);
System.out.println(Database.FTINDEX_ALL_BREAKS);
System.out.println(Database.FTINDEX_ATTACHED_BIN_FILES);
System.out.println(Database.FTINDEX_ATTACHED_FILES);
System.out.println(Database.FTINDEX_ENCRYPTED_FIELDS);
}
else
{
db.createFTIndex(options, false);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
21 января 2010 г.
Lotus Notes 8.5.1 Rus
Ярлыки:
Lotus Notes 8.5.1
18 января 2010 г.
Проба пера - FTP connect
import org.apache.commons.net.ftp.*;
import java.util.Vector;
import java.io.*;
import java.net.UnknownHostException;
public boolean connectAndLogin (String host, String userName, String password)
throws IOException, UnknownHostException, FTPConnectionClosedException {
boolean success = false;
connect(host);
int reply = getReplyCode();
if (FTPReply.isPositiveCompletion(reply))
success = login(userName, password);
if (!success)
disconnect();
return success;
}
public void setPassiveMode(boolean setPassive) {
if (setPassive)
enterLocalPassiveMode();
else
enterLocalActiveMode();
}
public boolean ascii () throws IOException {
return setFileType(FTP.ASCII_FILE_TYPE);
}
public boolean binary () throws IOException {
return setFileType(FTP.BINARY_FILE_TYPE);
}
public boolean downloadFile (String serverFile, String localFile)
throws IOException, FTPConnectionClosedException {
FileOutputStream out = new FileOutputStream(localFile);
boolean result = retrieveFile(serverFile, out);
out.close();
return result;
}
public boolean uploadFile (String localFile, String serverFile)
throws IOException, FTPConnectionClosedException {
FileInputStream in = new FileInputStream(localFile);
boolean result = storeFile(serverFile, in);
in.close();
return result;
}
public Vector listFileNames ()
throws IOException, FTPConnectionClosedException {
FTPFile[] files = listFiles();
Vector v = new Vector();
for (int i = 0; i < files.length; i++) {
if (!files[i].isDirectory())
v.addElement(files[i].getName());
}
return v;
}
public String listFileNamesString ()
throws IOException, FTPConnectionClosedException {
return vectorToString(listFileNames(), "\n");
}
public Vector listSubdirNames ()
throws IOException, FTPConnectionClosedException {
FTPFile[] files = listFiles();
Vector v = new Vector();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
v.addElement(files[i].getName());
}
return v;
}
/** Создать новую директорию */
public int mkd(String dir) throws IOException {
return sendCommand(FTPCommand.MKD, dir);
}
/** Удалить файл */
public int deletfile (String file) throws IOException {
return sendCommand(FTPCommand.DELE, file);
}
/** Удалить директорию */
public int rmdir(String dir) throws IOException {
return sendCommand(FTPCommand.RMD, dir);
}
/** текущая директория */
public int pwd() throws IOException {
return sendCommand(FTPCommand.PWD);
}
/** сменить директория */
public int сwd(String dir) throws IOException {
return sendCommand(FTPCommand.CWD, dir);
}
public String listSubdirNamesString ()
throws IOException, FTPConnectionClosedException {
return vectorToString(listSubdirNames(), "\n");
}
private String vectorToString (Vector v, String delim) { StringBuffer sb = new StringBuffer();
String s = "";
for (int i = 0; i < v.size(); i++) {
sb.append(s).append((String)v.elementAt(i));
s = delim;
}
return sb.toString();
}
}
import java.util.Vector;
import java.io.*;
import java.net.UnknownHostException;
public boolean connectAndLogin (String host, String userName, String password)
throws IOException, UnknownHostException, FTPConnectionClosedException {
boolean success = false;
connect(host);
int reply = getReplyCode();
if (FTPReply.isPositiveCompletion(reply))
success = login(userName, password);
if (!success)
disconnect();
return success;
}
public void setPassiveMode(boolean setPassive) {
if (setPassive)
enterLocalPassiveMode();
else
enterLocalActiveMode();
}
public boolean ascii () throws IOException {
return setFileType(FTP.ASCII_FILE_TYPE);
}
public boolean binary () throws IOException {
return setFileType(FTP.BINARY_FILE_TYPE);
}
public boolean downloadFile (String serverFile, String localFile)
throws IOException, FTPConnectionClosedException {
FileOutputStream out = new FileOutputStream(localFile);
boolean result = retrieveFile(serverFile, out);
out.close();
return result;
}
public boolean uploadFile (String localFile, String serverFile)
throws IOException, FTPConnectionClosedException {
FileInputStream in = new FileInputStream(localFile);
boolean result = storeFile(serverFile, in);
in.close();
return result;
}
public Vector listFileNames ()
throws IOException, FTPConnectionClosedException {
FTPFile[] files = listFiles();
Vector v = new Vector();
for (int i = 0; i < files.length; i++) {
if (!files[i].isDirectory())
v.addElement(files[i].getName());
}
return v;
}
public String listFileNamesString ()
throws IOException, FTPConnectionClosedException {
return vectorToString(listFileNames(), "\n");
}
public Vector listSubdirNames ()
throws IOException, FTPConnectionClosedException {
FTPFile[] files = listFiles();
Vector v = new Vector();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
v.addElement(files[i].getName());
}
return v;
}
/** Создать новую директорию */
public int mkd(String dir) throws IOException {
return sendCommand(FTPCommand.MKD, dir);
}
/** Удалить файл */
public int deletfile (String file) throws IOException {
return sendCommand(FTPCommand.DELE, file);
}
/** Удалить директорию */
public int rmdir(String dir) throws IOException {
return sendCommand(FTPCommand.RMD, dir);
}
/** текущая директория */
public int pwd() throws IOException {
return sendCommand(FTPCommand.PWD);
}
/** сменить директория */
public int сwd(String dir) throws IOException {
return sendCommand(FTPCommand.CWD, dir);
}
public String listSubdirNamesString ()
throws IOException, FTPConnectionClosedException {
return vectorToString(listSubdirNames(), "\n");
}
private String vectorToString (Vector v, String delim) { StringBuffer sb = new StringBuffer();
String s = "";
for (int i = 0; i < v.size(); i++) {
sb.append(s).append((String)v.elementAt(i));
s = delim;
}
return sb.toString();
}
}
Ярлыки:
Class,
connection,
java code
Подписаться на:
Комментарии (Atom)




