Lotus Notes/Domino -- продукт и инструмент. Выпуск: 6
Новости о ПО Lotus Notes1. IBM открывает Bluehouse для «облачных вычислений» - IT World
2. ОАО «ВымпелКом» проводит миграцию своих почтовых серверов на IBM Lotus Domino версии 8.0.1Москва, 25 сентября 2008 г. – Компании IBM (NYSE:IBM) и ОАО «ВымпелКом» объявили об успешном завершении первого этапа миграции инфраструктуры ПО IBM Lotus Domino ОАО «ВымпелКом» на новую версию 8.0.1. Миграция была осуществлена силами сотрудников информационного департамента ОАО «ВымпелКом» при помощи специалистов IBM, оказанной в рамках услуги «Расширенная поддержка IBM» (IBM Software Premium Support).3. BioLink IDenium интегрирует технологии биометрии и смарт-карт - E-generator
4. Пользователь, защищайся! - Новости компаний
5. IBM Lotus продвигается в социальные сети - PC Week
6. Почему трудно конкурировать с бесплатным ПО - PC Week
7. IBM выпустила новую версию Lotus iNotes для iPhone - Компьюлента
8. IBM выпускает ПО Lotus iNotes для iPhone - ITC Online
9. BioLink выпустила новую версию сервиса IDenium - СайберCекьюрити.Ру
10. IBM выпускает iNotes для iPhone - Астера - Новости ИТ-бизнеса
11. IBM выпустила Lotus Notes для iPhone 3G - СайберCекьюрити.Ру
12. IBM выпустила новую версию Lotus iNotes для iPhone - Компьюлента
13. XTNDConnect PC 7.0 – мобильное приложение для синхронизации данных - Ferra
14. "ВымпелКом" переходит на почтовую систему IBM Lotus Domino 8.0.1 - СайберCекьюрити.Ру
15. Наконец-то выпущен PocketMac - Gala.net
Статьи. Публикации. Пресс-релизы1. Разработка агента IBM Lotus Domino с поддержкой JMSВ статье демонстрируется, как в IBM Lotus Domino разработать Java-агент, который будет отправлять сообщения JMS-провайдеру (в частности, IBM WebSphere MQ) и получать от него ответные сообщения. Компания ПУЛ - разработка приложений на Lotus Notes/Domino CodeStore. Коды Примеры Шаблоны1. IBM Lotus Domino with BlackBerry Enterprise Server: Performance best practicesThis article is designed to act as a guide and reference paper for configuring BlackBerry Enterprise Server with IBM® Lotus® Domino®. It focuses on the load implications of running BlackBerry Enterprise Server within a Lotus Domino mail environment. It is designed to highlight areas where this load can be controlled and minimized.2. Disable and Cleanup Mail RulesAdd this agent to your Lotus Notes mail template. Ask your user to: - open their mailbox- click on the Actions menu, and choose "Disable and Cleanup Mail Rules" This will disable all mail rules in the user's mailbox, and move the user to their Rules folder so they can enable rules as needed. 3. Creating and using a real-time port monitoring application powered by IBM Lotus Sametime instant messagingLearn how to create a port checker application that, when combined with IBM® Lotus® Sametime®, can provide instant notification of outages in your environment. The Lotus Sametime toolkits can be used in powerful ways to create customized applications that harness the power of Lotus Sametime.4. Bug With UntilKey URL Parameter | BlogAlmost a year ago I talked about how you can get Domino's UntilKey URL parameter to make its StartKey counterpart do what you'd expect it to -- return only exact matches from the first column in the view. If you had a sorted view of animals you could return all those who were Cats use a URL like this: animals?ReadViewEntries&StartKey=Cat&UntilKey=Cat_ All's well and good and I've used the the trick repeatedly since, not knowing how I managed without it. Then this week I was talking about using lists in the first column of a view to allow flexible lookups. Again, all was good. Until I tried to search for the last document in the view. In the example it's a car called Zonda. Type in "Z" and nothing comes back. The bug: It looks like the UntilKey trick doesn't work on views sorted by a multi-value column. It just won't return the last document. Taking the example of the cars here's an empty result set for "Z" and here's what you'd expect to see, which points to a view with a normal single value column. Just another reason not to trust Domino to give you want you want and to go you own way. For me I'll be using my Ajax NotesViewNavigator Object. No doubt there's a performance hit, but at least it does what you want it to. 5. Integration of IBM Lotus Connection 1.0.1 with IBM Tivoli Access Manager V6.0This article describes the step by step procedure for integrating IBM Lotus Connections with IBM Tivoli Access Manager V 6.0. It is intended to help administrators protect the features of IBM Lotus Connections via the Tivoli reverse proxy solution known as WebSEAL and provide the convenience of Single Sign On using LTPA cookie mechanism.6. Simple, Yet Effective Tip - Type-Ahead Lookups Based on Any Word | BlogThis is one of my favourite type of tips; as it's simple to do, applicable to most of you and has great benefits for the end user. Most of us have probably used some sort of type-ahead-drop-down Ajaxey-document-picker at one time or another. Maybe even you're using them in all your applications. What values do yours lookup? Maybe it's the name of other people. Maybe it's the names of products. Maybe it's place names. Whatever the user is (in effect) searching for, chances are you can make it a little easier for them by allowing them to match their search in a more flexible way. For example, let's say you're looking for a car on an insurance website (poor example, but stick with me). You'd maybe start by typing "For" in the lookup field. What if you typed "Must" though? Chances are it wouldn't work. Why not though? In the example picture above you can see I've typed in "For" and as well as a couple of Fords it's showing me a Fiat called a "Forentino" (I made that name up), which could prove handy if you're looking for that car and had forgotten it was a Fiat. Either way it's nice to be able to do both. How have I done this?It couldn't be easier. All I did was modify the first column in the view that the Ajax looks to for matches. The formula for the column now explodes the field with the car's name in to a list of items. After making the column show lists as separate view entries I can search on any part of the name. Here's the view the Ajax looks to: Notice I've included the unexploded Name value in the list as well so that you still get a match when you type something like "Ford Mu". Other Real World UsesA car picker probably isn't the best example of its use but it's something we can all relate to. Any of you remember I used the same example in the first article I ever wrote on this site over eight years ago (Codestore's birthday is on the 9th September but it passed me by this year). As a more real world practical use imagine how it could be used in the humble name picker. If you have a field where a user selects another user's name what do you have them type first? Should it be the other user's first name or last name? Whichever it is how do you expect the user who is searching to know that? Well, why not make it search first and last names? The formula for the first column in your "Users" view just needs to be: (FirstName + " " + Surname):(Surname + ", " + FirstName) Taking it even further you could add more items to the "searchable" list, such as: (FirstName + " " + Surname) : (Surname + ", " + FirstName) : EmailAddress : MaidenName : NickName Note that it's the second column in the view that is returned to be listed by the picker. No matter where in the name you find a match the displayed name is always in the same format, but the part with the match is highlighted to help you see why it's in the list. Hope you find it useful. It's part of the DEXT app and the demo is live now. Download to follow. Although all the code is in the source. The picker (of which there are hundreds of variants) you see in the demo is a Dominofied version of this one. 7. Alternate version of @Command forwards subform via LotusScriptThe @Command([MailForward]) function lets you place an UI document's contents into a mail memo and forward it. If you only want to forward a portion or subform of the UI document, this tip can show you how, using a LotusScript alternative.8. Hacking Domino: XSS-Safe Form - Can You Hack It? | BlogAfter spending way longer than I'd hoped on it (what a can of worms!) I have a Domino form that I believe to be XSS-safe. So sure was I that I put a message on there about a (nominal) monetary reward for the first user to hack the form. Then I had a scary vision of loads of you doing it and me being out of pocket big time, so I took the message off. I'll put it back on after the "first pass" of testing in the wild. I've tested the form against all the hacks listed here and it seemed to stand up to them well. I also tested it using the XSS Me Firefox plugin, which it passed with flying colours. Please only use XSS Me on your own local applications. DO NOT point it at codestore.net or any other website you don't own for that matter! So, if you have some time to spare and fancy yourself as something of a hacker then see if you can get your own JavaScript code to run on this form. Disclaimer: Last week Dragon Cotterill pointed out that I could be committing and offence by describing how to hack a webpage. I said I wouldn't lose sleep over it, but Chris Linfoot then suggested I should. Whatever your outlook I guess what I'm asking you to do is in fact to commit a criminal offence by attempting to hack the above webpage. If you don't feel comfortable doing so then I suggest you don't. Although it goes without saying that I won't press charges. 9. Hacking Domino: How to Filter Out XSS Attacks | BlogHopefully by now I've convinced you to take XSS seriously?! If so then you're probably keen to see what the solution is. Let's see shall we. The basic premise is that all field values submitted as part of your Domino web forms must be inspected for any potential attacks. And I mean all fields. As I showed on Wednesday even hidden and/or computed fields could be vulnerable. How you filter the field depends on its type. For normal Text fields where you don't expect or want HTML then you need to remove all HTML. This is just a case of replacing all angle brackets (< or >) with either < or >. Job done. For fields where you want to allow HTML entry it gets a whole lot more complicated. You can either use a "tag whitelist" or "tag blacklist" of HTML tags you either want to allow or remove, respectively. It's probably easier to maintain a whitelist, which might include the following subset of HTML tags:
If you do decide to use a blacklist then here's a taster of the kind of thing to look out for. All of these tags can be used in malice:
Once you've removed/replaced all the tags you don't want (while deciding what to do with their content) you then have to look at the inner attributes of the tags that remain. Here's a sample of a "attribute whitelist".
If you use a blacklist then you need to look for any event-related attribute such as onclick, onmouseover etc. All of which can do considerable harm. Nothing is ever easy though is it. Even if you've removed the potentially naughty attributes the actual value of the normally safe ones can in turn cause harm. Consider a user entering the following HTML:
Both the tag and the attribute are in our whitelists so it might get past the filter on the first pass. Howeve, in IE, this innocent-looking bit of HTML can execute JavaScript code. For all the attributes you do allow you need to examine their actual values for naughty code. In the example above it's not even as simple as looking for the word "expression" in the value. You first need to strip it of comments and whitespace and make sure your search isn't case-sensitive. It all gets very complicated. Take a look at this extensive list of possible hacks to see just what we're dealing with. As yet I've not finished work on the code for the filter needed to prevent XSS attacks. Even when I do I don't know if I'd be willing to bet money on it being 100% effective and don't even know if there's a filter out there that is. What has surprised me is that there doesn't seem to be an existing Java library that will take a String input of HTML and make it safe (while formatting it and correcting errors). You can bet Ruby on Rails and PHP have effective filters, but I just can't find the Java equivalent. While I work on rectifying that you'll just have to wait. I hope you're not a sitting duck in the mean time ;o) I'm keen to get it done as I'm well aware I need to apply the code in more than a few places on this server! When I'm happy with the code I'll make it available for testing/download and describe the approach I've taken to implementing its use in Domino in more detail. 10. How DirLint verifies data in Lotus Notes Domino 8 directoriesGet an introduction to DirLint, a new tool available in Lotus Notes Domino 8 that scans directories and identifies issues such as invalid syntax in names, issues with the naming hierarchy scheme, and reports problems in directory names.11. Hacking Domino: Harvesting Your User's Logins -- Why You Should Take XSS Seriously! | BlogFollowing on from yesterday's discussion about users editing hidden fields I want to discuss another danger and the reason I was thinking about the problem in the first place. Let's forget about the consequence of the actual change to the field for a moment. Even if changing it has no adverse effect on the system itself there is another, potentially dangerous, problem. Cross-Site Scripting or XSS. Maybe you've heard of XSS but dismissed it as something not worthy of attention. You really shouldn't dismiss it too easily though. What if I were to say I could easily use XSS to login to your server as an administrator or any other user for that matter!? It's really easy to do!! Let's assume you have a form that allows user-entered HTML. This can be either because you want them to (TinyMCE on top of a Rich Text field, for example) or because you don't strip HTML from fields where you don't want or expect it (the Title for example). Either way, if the user can enter HTML, they can then have a good go at hacking you. As an example imagine a user enters the following HTML in to a field:
Or even the following (which works in IE6) seemingly harmless-looking HTML:
If either of the above (or the 1,000s of similar hacks) aren't properly filtered out then you could be in trouble! If the above code was stored in a document and you opened it while logged in you'd reveal your authentication cookie's value to the hacker. They could also see your IP address and the URL you were logged in to. To prove it works I actually tested it out. In the example above the form on the other server looked like this:
Note that the user would only see this if the <img> hack was used from two I showed above. If the <script> hack was used the user wouldn't see this and would be completely unaware of the problem. Even if they are aware there's not much they can do. Even if they panic and close the browser it's too late. Although closing the browser logs them off, the session still exists on the server and if the hacker reproduces a cookie called DomAuthSessId with the value they now know the hacker will be logged in as you! Your only hope is that the user has the wherewithal to ring and tell somebody who can quit the HTTP task on the server and not start it again until they've fixed the huge security hole. To test it out I made it so that the LogCookie Form (see the above screenshot) would run a WebQueryOpen agent to email me the cookie value and the URL they were logged in to. Then all I did was:
Scarily easy! Note that I tested this from different servers and PCs. The server logging the cookie was different to the one hacked. The PC I logged in to with the stolen cookie was not the one I used to log in to when I visited the bad page and, so, had a different IP address. This is as real world a test as I could conjure up. Real enough to prove it's possible. So then. This isn't one of my digs at Domino. This is a problem that affects all web server environments that user cookie-based authentication. I'm only showing how easy it is in the hope it will make you sit up and take notice of how serious XSS vulnerabilities can be. Tomorrow I'll talk about a solution. That solution will be from an application perspective. As far as the server goes I can't see why Lotus don't tie a session to the IP the user logged in from. That and/or using the HttpOnly flag on the DomAuthSessId cookie, which would prevent JavaScript (and hence the hacker) from accessing it in most browsers. 12. Harness the power of XPages in Lotus Domino DesignerOne of the latest additions to the Domino Web developers' toolkit of technologies, XPages, is also arguably its most powerful and revolutionary to date. XPages allows for functionality and capabilities previously thought impossible to achieve in Domino application development. With the inclusion of XPages, you now have the ability to easily create Web 2.0 user experiences in your existing applications. To demonstrate the power of XPages, this tutorial shows you how to Web 2.0-enable the personal address book Domino application template.13. Hacking Domino: Over-riding Hidden or Computed Field Values | BlogIt might be old news to some, but have you seen how easy it is for a (power) user to alter a web form so they can pass any field values they like back to the server!? As an example, let's say you have a form with a computed field called Status on it. In edit mode the field's value is displayed to the user, like so:
Now let's look at how easy it is to turn this computed field in to an editable one. Assuming you have Firebug installed, right click the Draft message (or anywhere on the page for that matter) and select Inspect Element. You'll then be able to edit the HTML that forms the page, like so:
What if you edit the text and replace it with some HTML, like so:
Now look at the web page again; there's a field where the wasn't one before: Imagine this happening in a workflow scenario where you'd expect the newly-submitted document to have a Status of "Awaiting Approval", but, as you can see above, they've managed to jump past approval and get it published straight away. Now imagine it happening in a shopping cart scenario where you skipped the "Awaiting Payment" status and went straight to "Paid", which triggers the logic in the WQS event to mail out the merchandise. Hey, it could happen. Even if no harm is done there's always the embarrassment factor and it never looks good if a solution you've sold a customer is "hackable". What I can't work out is how to counter an attack like this. In a SQL-based environment, when a form is submitted you can use an Update() request to change the stored values of only certain "fields" -- the ones you'd expect to be "editable" by the user. In Domino there's no way to easily say "hang on, how come that fields changed?" or "Hey that shouldn't have changed, let's change it back to what it was. Hang on, what was it again?" Any ideas on this one folks? Is it just a case of trusting your users either not to know how to or simply not wanting to hack you site? 14. Riding the rails with IBM Lotus ConnectionsIn this article, we use Ruby on Rails to build a Web application that communicates with an IBM® Lotus® Connections Dogear server to retrieve and display bookmark information using REST services.15. Process large arrays in Notes forms without undue coding or testingWhen two Domino developers had to process large arrays in Lotus Notes forms for an international company, they devised a solution that reduced the coding, debugging and testing time involved. Get the LotusScript code they used to easily process the arrays.16. Change fields position in a flat text file'---: Option Declare ' ' FieldName TAB Length TAB Position ' Const FormatFileInput=|USR-IDAZE 8 36 USR-MAZEAT 7 44 USR-TIAZETRE 4 51 USR-NAZEOM 25 55 | ' ' FieldName TAB Length TAB Position ' Const FormatFileOutput=| USR-IDAZE 8 501 USR-MAZEAT 7 509 USR-TIAZETRE 4 516 USR-NAZEOM 25 520 | Const FileNameInput = "IN.TXT" Const FileNameOutput = "OUT.TXT" Type LineFileFormat Name As String Length As Long Position As Long End Type Type FormatConv In As LineFileFormat Out As LineFileFormat End Type Dim LineOutTotalLength As Long Sub Initialize Dim FormatConvertion List As FormatConv Dim V As Variant Dim FormatFile_Tmp As Variant Dim LineFileFormat_Tmp As LineFileFormat ' IN FormatFile_Tmp = Split( FormatFileInput , Chr$(10) ) Forall Champ In FormatFile_Tmp V = Split( Champ , Chr$( 9 ) ) If Trim$( V(0) ) <> "" Then LineFileFormat_Tmp.Name = Trim$( V( 0 ) ) LineFileFormat_Tmp.Length = Val( V( 1 ) ) LineFileFormat_Tmp.Position = Val( V( 2 ) ) FormatConvertion( LineFileFormat_Tmp.Name ).IN = LineFileFormat_Tmp End If End Forall ' OUT FormatFile_Tmp = Split( FormatFileOutput , Chr$(10) ) Forall Champ In FormatFile_Tmp V = Split( Champ , Chr$( 9 ) ) If Trim$( V(0) ) <> "" Then LineFileFormat_Tmp.Name = Trim$( V( 0 ) ) LineFileFormat_Tmp.Length = Val( V( 1 ) ) LineFileFormat_Tmp.Position = Val( V( 2 ) ) FormatConvertion( LineFileFormat_Tmp.Name ).OUT = LineFileFormat_Tmp If LineFileFormat_Tmp.Position + LineFileFormat_Tmp.Length > LineOutTotalLength Then LineOutTotalLength = LineFileFormat_Tmp.Position + LineFileFormat_Tmp.Length End If End Forall ' ' Format Control ' Forall OneFieldConvertion In FormatConvertion If OneFieldConvertion.In.Name = "" Then Print OneFieldConvertion.Out.Name + Chr$(9) + Chr$(9) + " The ouput file do not contains this field" Elseif OneFieldConvertion.Out.Name = "" Then Print OneFieldConvertion.In.Name + Chr$(9) + Chr$(9) + " The ouput file do not contains this field" Elseif OneFieldConvertion.In.Length > OneFieldConvertion.Out.Length Then Print OneFieldConvertion.In.Name + Chr$(9) + Chr$(9) + " This field size will be reduced to " + Cstr(OneFieldConvertion.Out.Length) + " instead of " + Cstr(OneFieldConvertion.In.Length) End If End Forall ' ' Convertion ' Dim FileNumInPut As Long FileNumInPut = Freefile Open FileNameInput For Input Access Read As FileNumInPut Dim FileNumOutPut As Long FileNumOutPut = Freefile Open FileNameOutput For Output Access Write As FileNumOutPut Dim S As String Do Until Eof(FileNumInPut) Line Input #FileNumInPut, S Print #FileNumOutPut, LineConvert( S , FormatConvertion ) Loop Close #FileNumOutPut Close #FileNumInPut End Sub Function LineConvert( LineIn As String, FormatConvertion List As FormatConv ) As String Dim S As String Dim LineOut As String LineOut = Space$( LineOutTotalLength ) Forall AFieldToConvert In FormatConvertion If (AFieldToConvert.IN.Name <> "") And (AFieldToConvert.OUT.Name <> "") Then S = Mid$( LineIn , AFieldToConvert.IN.Position , AFieldToConvert.IN.Length ) If Len(S) < AFieldToConvert.OUT.Length Then S = S + Space$( AFieldToConvert.OUT.Length - Len(S) ) End If LineOut = Left$( LineOut , AFieldToConvert.OUT.Position-1 ) + Left$( S , AFieldToConvert.OUT.Length ) + Mid$( LineOut , AFieldToConvert.OUT.Position + AFieldToConvert.OUT.Length ) End If End Forall LineConvert = LineOut End Function 17. Export all group members in CSV fileDim FileNum As LongDim LogError As String Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim collection As NotesDocumentCollection Dim doc As NotesDocument Set db = session.CurrentDatabase Set collection = db.UnprocessedDocuments Set doc = collection.GetFirstDocument() While Not(doc Is Nothing) Call InitExport( Doc.ListName(0) ) Call GroupExport( Doc.ListName(0) ) Call TerminateExport( ) Set doc = collection.GetNextDocument(doc) Wend print LogError End Sub Sub TerminateExport( ) Close #FileNum End Sub Sub GroupExport( GroupName As String ) Dim Session As New NotesSession Dim DB As NotesDatabase Set DB = Session.CurrentDatabase Dim AllUsersView As NotesView Set AllUsersView = DB.GetView( "($Users)" ) Dim Doc As NotesDocument Set Doc = AllUsersView.GetDocumentByKey( GroupName , True ) If Doc Is Nothing Then LogError = LogError + " Groupe/User introuvable : " + GroupName + Chr$(10) Exit Sub End If If Doc.Type(0) = "Group" Then Forall OneMember In Doc.Members GroupExport( OneMember ) End Forall Elseif Doc.Type(0) = "Person" Then Print #FileNum, |"| + Doc.FullName(0) + |"| End If End Sub Sub InitExport( GroupName As String ) FileNum = Freefile() Open "c:\TEMP\Export CSV of " + GroupName + ".CSV" For Output Access Write As FileNum End Sub 18. Export Selected documents as CSVSub Initialize Dim I As Long Dim ExportedFields List As LongDim NombreExportedFields As Long Const NomCSVFile = "C:\TEMP\Export.CSV" Dim CSVFile As Long CSVFile = Freefile() Open NomCSVFile For Output Access Write As CSVFile Dim session As New NotesSession Dim db As NotesDatabase Dim collection As NotesDocumentCollection Dim doc As NotesDocument Set db = session.CurrentDatabase Set collection = db.UnprocessedDocuments I=1 Set doc = collection.GetFirstDocument() While Not(doc Is Nothing) And (I<50) Forall ANotesItem In Doc.Items If Not Iselement( ExportedFields( ANotesItem.Name ) ) Then NombreExportedFields = NombreExportedFields + 1 ExportedFields( ANotesItem.Name ) = NombreExportedFields End If End Forall I = I +1 Set doc = collection.GetNextDocument(doc) Wend Redim LigneOut( 1 To NombreExportedFields) As String Forall UC In ExportedFields LigneOut( UC ) = Listtag( UC ) End Forall Call FlushLineOut( CSVFile , LigneOut ) Set doc = collection.GetFirstDocument() While Not(doc Is Nothing) Forall ANotesItem In Doc.Items If Not Iselement( ExportedFields( ANotesItem.Name ) ) Then Error 9995 LigneOut( ExportedFields( ANotesItem.Name ) ) = ANotesItem.Values(0) End Forall Call FlushLineOut( CSVFile , LigneOut ) Call session.UpdateProcessedDoc( doc ) Set doc = collection.GetNextDocument(doc) Wend Close #CSVFile End Sub Sub FlushLineOut( FileNum As Long , LigneOut() As String ) Dim i As Long For I = 1 To Ubound( LigneOut ) If I>1 Then Print #FileNum, |;| ; Print #FileNum, |"| + LigneOut( I ) + |"| ; LigneOut( I ) = "" Next I Print #FileNum, "" End Sub 19. Understanding a Lotus Notes Smart Upgrade rolloutWhen upgrading to Lotus Notes 8 or Lotus Notes 8.0.1, give your end users the best possible upgrade experience by performing a Smart Upgrade. This tutorial from "Giving your users the complete Notes 8 upgrade experience" gives explains how to successfully roll out a Lotus Notes client upgrade and how to implement a Smart Upgrade.20. Photo Book for IBM Lotus Quickr services for WebSphere PortalThis article presents an example of a customized team place component for IBM® Lotus® Quickr™ services for WebSphere® Portal, Photo Book. This component uses both a Lotus Quickr document library for storing content and for rich desktop integration and Lotus Web Content Management capabilities for presentation on the Web with photo gallery and slideshow-style presentations.21. Creating a composite application for IBM Lotus Notes 8 using IBM WebSphere Portlet FactoryCurrently, many tools have been developed to create composite applications such as IBM® Lotus® Domino® Designer, IBM Lotus Component Designer, and IBM Rational® Application Development. This article introduces a new way to create composite applications in IBM Lotus Notes® 8 using IBM WebSphere® Portlet Factory.22. How to use LotusScript to modify a Lotus Notes view selectionIf you've been looking for a way to use parameters to limit a Lotus Notes view selection, you're in luck. This tip gives the LotusScript and a few examples to help you.23. Fix and update Lotus Notes documents with limited accessWhen updating or fixing a document in a Lotus Notes database, there are a few things to consider. First, ensure that you have the proper system access. Then, run this agent to easily update or fix the document.24. Implementing and deploying Google gadgets for the Lotus Connections Home pageThis article introduces the IBM®-developed iWidget specification used in various IBM products such as IBM Lotus® Connections 2.0. It describes different aspects of the specification through a practical example, which shows how to implement an iWidget that acts as a wrapper for a Google gadget.25. Extend your Notes applications to the Web fast with Ext.ndShorten the time it takes to Web-enable a Notes application, without losing functionality, by using Ext.nd, an extension of the open-source Ext JS framework for building rich Internet applications (RIAs) across browsers. Ext.nd offers widgets that mimic the user interface (UI) controls and design elements in a Notes client application, plus a set of JavaScript classes that enable you to access common Domino objects in the same manner as Notes and Domino’s LotusScript and Java classes. Follow some easy steps for setting up Ext.nd in your environment and then experience how fast it is to Web-enable a sample Notes application with Ext.nd (downloadable at www.eVIEW.com).26. Trap an attachment path via the Domino file upload control fieldGet the steps to trap the path of an uploaded attachment in your Notes Domino environment using the Domino file upload control field, JavaScript and HTML.27. Writing efficient, effective Web code for Domino, Part 2: Analyze the native Domino approachBuild your Web code assessment skills by doing: Learn how to apply the diagnostic tools introduced in part 1 of this series, using a demonstration Web form you can download at www.eVIEW.com. Determine whether Domino-generated Web page layouts meet search engine optimization (SEO), usability, and performance criteria, and test how much improvement you get from specific code adjustments such as adding missing tags to Domino’s Hypertext Markup Language (HTML) code.28. Solving your Lotus Notes Domino and BlackBerry problemsOur annual survey shows that a large majority of our Lotus Notes Domino readers are using BlackBerry mobile devices. Refer to this compilation of frequently asked questions and expert answers when seting up BlackBerry devices in your Notes/Domino environments. Whether synchronizing your Notes Personal Address Book, transferring data between devices or blocking spam, we've got the answers you need.29. Mobilizing Domino applications onto BlackBerry devices, Part 4: Transfer and synchronize data from Lotus DominoConsolidate all the skills you’ve picked up so far in this series and learn how to make BlackBerry smartphones communicate over the air with Domino to transfer data and refresh a demonstration application. The demo application and agent code are available at www.eVIEW.com. You also get some helpful tips on versioning and security for enterprise systems.30. Writing efficient, effective Web code for Domino, Part 1: Create a powerful Web development toolboxEnhance your Domino Web development environment with free tools that support building and testing highly competitive Web pages. Learn the tricks for setting up an environment that helps you develop Web code that conforms to World Wide Web Consortium guidelines for Extensible Hypertext Markup Language (XHTML) and Cascading Style Sheets (CSS), Level Triple-A of the Web Content Accessibility Guidelines (WCAG-AAA), Section 508 of the U.S. Federal Rehabilitation Act, and much more. These tools are featured in the rest of this series on how to achieve highly accessible, intuitive, and efficient Web applications.31. Right size Notes mail-quota limits by group with Quota ManagerDevelop and administer an effective quota policy by group with Quota Manager, a Notes application you can download at www.eVIEW.com. Quota Manager’s LotusScript agents collect information about mail files and their related quotas, provide reports on file sizes by categories, and enable you to set quotas by groups in your Domino Directory. By periodically reviewing reports and tuning quota sizes by group, you can maintain a quota policy that eliminates solving quota problems for individuals and reduces the frequency of exceeded quotas.32. Prevent over-quota calendaring disasters by using the Lotus Notes 7.0.2+ Enhanced Quota featureMinimize quota-related problems by tailoring Lotus Notes’ over-quota consequences with these techniques. Find out how to use the undocumented Enhanced Quota feature in Lotus Notes 7.0.2+ to prevent over-quota users from creating meetings that are not saved to their own calendars, which causes them to miss their own meetings. Prevent process bottlenecks with LotusScript modifications that allow over-quota users to continue creating and sending memos when the Enhanced Quota feature is enabled. You also learn how to use this feature to refine the warning and over-quota messages Notes displays so users know exactly how to regain privileges.33. IBM Lotus Server.Load: The new IBM Lotus Sametime workloadsSet up and use the IBM Lotus Server.Load workload generation tool, which includes new IBM Lotus Sametime instant messaging workloads, ST70IM and ST75IM, and the Sametime Initialization workload. We show you how to use these workloads to optimize your Lotus Sametime deployment performance.34. Converting Lotus Notes views to XML documents using JavaScriptTo convert Lotus Notes views to XML, you can use the ReadViewEntries command. This tip gives another method -- parsing XML content using JavaScript.35. An introduction to Lotus Notes password options and essentialsGet an introduction to Lotus Notes and Internet passwords and how they interact with the Domino Directory to secure your Lotus Notes Domino environment.36. Emailing a subform from the current UI documentI have provided a sample database with this utility at: http://www.openntf.org/Projects/pmt.nsf/HomeLookup/97CEA8C9251DA3BE862574A2006FA7B8?OpenDocument Emailing a subform from the current UI document I'm sure most of you are familar with the simple @Command([MailForward]) function. @Command([MailForward]) forwards the current document by placing its entire contents into a mail memo which the user then addresses and sends. I was tasked with duplicating this functionality, but for a subform on the current document. Futhermore, the customer wanted to the memo to be executed through the backend and sent via the click of a button. Approach: The key to this accomplishing this task is to isolate the subform in its own form. After the subform isolated, its entire contents can be copied to the clipboard, pasted it into a rich text field, and sent to a specified user. Follow these 3 steps to create the basic forms and code for this utility. Step 1: a.) Create a hotspot button on the subform you wish to email and add this code to the 'click' event: (note: In the 'hide-when' options of the hotspot button, check the box for hiding when "Copied to the Clipboard") 'This button will switch the form name of the current document and open the document using the temp form. Dim strOrgForm As StringDim ws As New NotesUIWorkspace Set doc = ws.CurrentDocument.Document Let strOrgForm = doc.Form(0) 'capture the original form name doc.ReplaceItemValue "Form", "TempForm" 'switch the form to the temp 'email' form. Call ws.EditDocument(False,doc) 'reopen the document with the 'temp' form. doc.ReplaceItemValue "Form", strOrgForm 'replace the form name back to its original name. ----------------------------------------------------------------------------------------- Step 2: a.) Create a form in your database and name it "TempForm". b.) Insert the subform from Step 1 into "TempForm" c.) (optional: If your underlying original form as richtext fields with attachments, add those richtext fields on the tempform in a hidden section. The section must be hidden and the section properties must be set to 'auto-collapse' on open. Otherwise the attachments from the main form will appear at the bottom of the email when it is sent. This step is not necessary if your underlying form does not have rich text fields.) d.) copy and paste the following code into the "PostOpen" event the "TempForm" subform. Dim db As NotesDatabase Dim ns As New NotesSession Dim uidoc As NotesUIDocument Dim docMemo As NotesDocument Dim ws As New NotesUIWorkspace Dim ndt As New NotesDateTime("12/31/1899") 'The postopen event will copy the entire unhidden contents of the form to the user's clipboard 'Then it will grab the memo document saved in the database and open it. Set db = ns.CurrentDatabase Set uidoc = ws.CurrentDocument Call uidoc.SelectAll Call uidoc.Copy Call uidoc.Close Set dcMemo = db.Search(|Form = "Memo"|,ndt,1) 'Get the Memo document in database. There should only be 1 memo document If dcMemo.Count = 0 Then 'If the memo document is not created, than create a new one 'This code will only execute the first time someone uses this utility. Set docMemo = New NotesDocument(db) docMemo.ReplaceItemValue "Form", "Memo" Else Set docMemo = dcMemo.GetFirstDocument 'otherwise just get the existing memo document End If 'In this example we are sending the subform to the current user. docMemo.ReplaceItemValue "SendTo", ns.CommonUsername 'If you wish to make the sendto field variable, add a hidden field to the tempform Form, popluate it, and then reference it here like this: 'docMemo.ReplaceItemValue "SendTo", uidoc.Document.GetFirstItem(your fieldname goes here).Values docMemo.ReplaceItemValue "CopyTo", "" 'Add more people to CC if desired docMemo.ReplaceItemValue "Subject", "Test: Emailing a subform" 'add a subject to your memo docMemo.ReplaceItemValue "Body", "" 'clear the body field each time before opening the memo Call ws.EditDocument(True,docMemo) 'Open the Memo document. ------------------------------------------------------------------------------------------------ Step 3: a.) Create a form in your database and name it "Memo" b.) Create an editable rich text field on the Memo Form and name it "Body". c.) copy and paste the following code into the "PostOpen" event the "TempForm" subform. Dim uidoc As NotesUIDocument Dim ws As New NotesUIWorkspace 'The postopen event of this form will paste the contents of the user's clipboard into the body field Set uidoc = ws.CurrentDocument Call uidoc.Paste 'paste the subform into the body field of the uidoc (body field is default focus) Call uidoc.Save 'the uidoc must be saved to capture the rich text Call uidoc.Document.Send(False,False) 'send the memo document Call uidoc.Close 37. Securing an IBM Lotus Domino Web server: Using the new Internet lockout featureInternet lockout is a new feature of IBM® Lotus® Domino® 8. This article describes Internet lockout, documents the configuration, and provides a sample that shows how to create a custom login form.38. Build up your own search center using IBM Lotus Quickr content servicesIn this article, we give an example of how to build a customized search center using the IBM® Lotus® Quickr content services. In the example, the Lotus Quickr search service is used to get search results and the Lotus Quickr document services are used to retrieve detailed properties of the search results, which are then used to implement customized functions such as sorting, categorizing, and filtering.39. Using IBM WebSphere Portlet Factory to integrate IBM Lotus Connections with IBM WebSphere PortalIn this article, you learn how the REST Service Call builder in IBM® WebSphere® Portlet Factory can be used to access, display, and manipulate the data from the five IBM Lotus® Connections services.40. Using IBM Rational Performance Tester V7.0.1 to load test IBM Lotus Notes standard client in a Citrix environmentThis article describes how the IBM® Lotus® Domino® System Test team used IBM Rational® Performance Tester to test the IBM Lotus Notes® standard client, so that the team can provide you with the answers to your scalability questions on Citrix.41. IBM Lotus Domino going green: The new Lotus Domino attachment and object serviceThe IBM® Lotus® Domino® attachment and object service (DAOS) in release 8.5 reduces the total cost of ownership and helps customers with green computing practices by storing all file attachments in a separate repository on the server and retrieving them by reference. Read more to plan, set up, configure, and manage Lotus Notes® large objects.42. Copying IBM Lotus Domino TeamRoom documents into an IBM Lotus Quickr libraryThis article demonstrates how to copy documents from an IBM® Lotus® Domino® TeamRoom to an IBM Lotus Quickr™ services for IBM WebSphere® Portal document library using Lotus Quickr Content Services.43. Designing composite applications: IBM Lotus Notes componentsThis article shows how to build IBM® Lotus® Notes® components, providing some tips and techniques for using your existing Lotus Notes applications in composite applications. Learn how to use the power of composite applications to provide a context that combines information from multiple components and leverages that context when performing tasks.44. Designing composite applications: Writing an Eclipse component for IBM Lotus NotesThis article introduces some helper classes so you can quickly build and deploy feature-rich, reusable, Eclipse-based components for IBM Lotus Notes. You also learn how to create a foundation upon which other components can be created quickly and easily.45. The Lead Manager application in IBM Lotus Notes V8: An overviewLearn how to combine multiple Lotus Notes applications and other technologies to produce a unified interface in which users can conduct their business more effectively and supply innovative business solutions.46. Accessing IBM Lotus Quickr REST services using IBM WebSphere Portlet FactoryThis article presents a sample application that demonstrates how to use IBM® WebSphere® Portlet Factory builders to easily interact with IBM Lotus® Quickr™ REST services with minimal coding.47. Getting started with Lotus Forms in the WebSphere business process management suiteLearn about different methods for integrating IBM Lotus Forms into your business processes and human tasks using IBM WebSphere business process management V6.1 products. (IBM WebSphere Developer Technical Journal)48. Using IBM Lotus Domino and IBM DB2 integration features to enhance the functionality and performance of Lotus Domino applicationsLearn how to use IBM® DB2® as a data store for IBM Lotus® Domino® data. This article uses a sample application to describe four possible usage scenarios for the Lotus Domino and DB2 integration features in pure Lotus Domino applications.49. Developing a composite application in IBM Lotus Notes to integrate Lotus Notes and Google calendarsThis article shows you how to develop a composite application in IBM® Lotus® Notes® 8.0 that integrates the calendars in Google and Lotus Notes, based on the Atom API and XSLT technology. It demonstrates the ease with which you can create a composite application and consume the Atom API.50. Using REST services for IBM Lotus Quickr administrationThis article provides an introduction to the administration console, new in IBM® Lotus® Quickr™ 8.1, a short description of a new policy feature in Lotus Quickr 8.1, and a detailed look at the REST-based service that the console uses and that you can reuse to enhance your server's management.51. Modification of Michael Woehrer's History Class to show new valuesThis is an example of how Michael Woehrer's [<a href="http://www.openntf.org/Projects/codebin/codebin.nsf/0/71E930683C3401A3C1256F2F00611BAA">History Class</a>] can be modified to track the new value as well as the old value.52. Connect Server Agent to Restricted File Share with Alternate UserName/PasswordSo the SQL Server guy stop by and says, "Hey, we want to create some reports of Notes data and we only know how to use SQL Server to do it. Do you mind exporting it to a delimited text file and saving it to this restricted folder on the file server? Here's the username and password of a special Windows account with rights to the folder. Oh, and we need it to run on a scheduled basis so everything is automated. Thanks!" The key here is the use of an alternate username and password to gain access to a restricted folder on a Windows file server. Note: This only works on Domino servers running on Windows. Read more: http://www.lotusguru.com/lotusguru/LGBlog.nsf/d6plinks/20080530-7F5HBT53. IBM Lotus Domino 8.0.1 for 64-bit server performanceLearn how the 64-bit IBM® Lotus® Domino® 8.0.1 server performs against 32-bit Lotus Domino 8.0.1 using the N8Mail workload.54. Using IBM Lotus Expeditor Toolkit V6.1.2 for eRCP application development on devicesThis article provides a step-by-step tour of IBM® Lotus® Expeditor client and toolkit. Learn how to install the Lotus Expeditor client and toolkit, how to create a client services project and to import a sample into the tools, and how to remotely launch the application onto devices.55. Agent Access Information RequiredHello An Agent X runs on ServerA and this agent has been signed by ServerAIf the same Agent X needs to runs on ServerB duely signed with the signature of ServerA, what permissions would the Agent require to run successfully on ServerB. Any suggestions please reply Rgds Roopa 56. Installing additional features from IBM Lotus Expeditor 6.1.2 onto IBM Lotus Notes 8.0.1Learn how to install additional features from the IBM® Lotus® Expeditor 6.1.2 Client for Desktop onto the IBM Lotus Notes® 8.0.1 Client so that you can run Lotus Expeditor components that use these features on the Lotus Notes 8.0.1 desktop.57. IBM Lotus Domino 8.0.1 server performance with IBM Lotus Notes Traveler usersIn this article, we discuss the performance of IBM® Lotus® Domino® 8.0.1 server with IBM Lotus Notes® Traveler users.58. Introducing IBM Lotus Domino 8.0.1 Web Access Lite modeIBM® Lotus® Domino® Web Access Lite mode is an exciting new capability within the established Lotus Domino Web Access product that uses a new page architecture optimized for empty-cache or low-bandwidth scenarios. Learn how these innovative performance improvements are delivered to you in an updated user interface (UI) that more closely resembles your IBM Lotus Notes® client user experience.59. Extract data from PDF files - fields, text, pages, bookmarksThis database was created for the purpose of helping people who want to parse values from fields on a PDF form, extract text from PDF files, pull the bookmark names, and extract individual pages from a PDF file. I pulled many of these examples from all over the web via google, and many of them from posts on www.notes.net, and I'm sure I did some searching on openntf.org. I am in no way taking credit for all of this code, but since it came from so many sources, and I did not keep up with them, I just saying it's not all mine. I simply put about 20 examples into 1 place so that we could all share. Requirements: Built using Notes 7.0.2, also need Adobe Professional. I used Adobe Pro 7.x.. Must also have bookmarks in your PDF file. Again MUST HAVE ADOBE PROFESSIONAL. If you have questions, commnets or suggestions, please feel free to contact me at jason@ciaresearch.com. Be warned that this code is in no way complete. I guessed at many of the things I did in here because I could not find good and complete examples. Please share your thoughts, comments, code improvements with all of us. I will update code if I get any great ideas from people. Thanks for taking a look and I hope this helps many of you. Jason60. IBM Lotus Quickr library linker: Content interoperations between Lotus Quickr libraries based on Dojo and Lotus Quickr REST servicesLearn how to operate your Lotus Quickr library content with Lotus Quickr REST services based on Dojo. In this example described in this article, content from different Lotus Quickr libraries interacts with simple Lotus Quickr REST services in the library linker tool, which is based on the latest Dojo 1.0 framework.61. Migrating Java EE projects to IBM Lotus Expeditor V6.1Migrate your Java EE projects to IBM Lotus Expeditor V6.1 using IBM Lotus Expeditor Toolkit, and then deploy the migrated project on the Lotus Expeditor runtime. This article shows you which steps you need to take to migrate your Java EE projects and which Java EE features are not supported by Lotus Expeditor.62. Bring real-time collaboration to the next level with IBM Lotus Sametime Advanced 8.0IBM Lotus Sametime Advanced is the new and exciting product joining the Lotus Sametime family. This article illustrates how Lotus Sametime Advanced allows your organization to enhance real-time collaboration and decision making by extending its instant messaging capabilities.63. In Place Merge SortAccording to Wikipedia InPlaceMergeSort is a pretty fast sorting algorithm (O(n log n) on average, O(n log n) worst case and O(1) memory usage.) Sub InPlaceMergeSort(vArray As Variant, nLow0 As Integer, nHigh0 As Integer)Dim nLow As Integer Dim nHigh As Integer Dim nMid As Integer Dim nEndLow As Integer Dim nStartHigh As Integer Dim vTemp As Variant Dim nCount As Integer nLow = nLow0 nHigh = nHigh0 If nLow >= nHigh Then Exit Sub End If nMid = (nLow + nHigh) \ 2 Call InPlaceMergeSort(vArray, nLow, nMid) Call InPlaceMergeSort(vArray, nMid + 1, nHigh) nEndLow = nMid nStartHigh = nMid + 1 While nLow <= nEndLow And nStartHigh <= nHigh If vArray(nLow) < vArray(nStartHigh) Then nLow = nLow + 1 Else vTemp = vArray(nStartHigh) For nCount = nStartHigh -1 To nLow Step -1 vArray(nCount + 1) = vArray(nCount) Next vArray(nLow) = vTemp nLow = nLow + 1 nEndLow = nEndLow + 1 nStartHigh = nStartHigh + 1 End If Wend End Sub Sub sort(vArray As Variant) Call InPlaceMergeSort(vArray, Lbound(vArray), Ubound(vArray)) End Sub 64. How to export data From Notes document to MS Word using Lotussscript action button?Hi! I have a big problem. I need to do the following thing: I have a Notes database where is a lot of documents, when i'm opening one document than there is an Action button which when pressed, opens an MS Word document and export all Notes document data to the MS Word document. The only thing i know, is to open blank Word document with this code (see in Usage/Example), But i don't know, how to put Notes data into Word document! It's seems to be a very easy LotusScript but i don't know how to do that, but i need this Lotus Script with Action Button. Can anyone help me please? I will be very pleased if someone can give a sample code or good advice how to do that or a hyperlink to web page where is information about my problem! Best regards, Guntis!65. WebSphere Process Server and Lotus Forms integrationA new capability in WebSphere Process Server V6.1 includes the ability to work with Lotus Forms as a front-end for human tasks. This article describes how the two technologies work together and shows you how to build a business process with human tasks that include Lotus Forms.66. ASNDSort LibraryASNDSort library is a collection of sort routines written in LotusScript. The routines can be used as is via an Include statement. Library includes BubbleSort, QuickSort, and MergeSort algorthms. Sorting is based on the type of information in the array, like number, datetime, or text.67. Implementing an embedded Web browser using IBM Lotus Expeditor ToolkitThe IBM Lotus Expeditor embedded browser is a configurable and manageable browser, which you can easily embed in a client application. This article describes how to develop an application containing an embedded browser view using the Lotus Expeditor Toolkit.68. Customizing components in IBM Lotus Quickr services for IBM WebSphere Portal 8.0Learn about the composite applications that are available for IBM Lotus Quickr services for IBM WebSphere Portal 8.0. See how to customize the components that use IBM Workplace Web Content Management services. Follow along with an example as we add functionality to the blog composite application.69. LS-ERROR - Minimal Error Handling for Lotus ScriptLS-ERROR describes a minimal yet powerfull approach to error handling in Lotus Script: http://lserror.sourceforge.net/ Here is the downloadable source code: http://downloads.sourceforge.net/lserror/lserror.lss The library is in the public domain.70. Dojo - Easy As 123 - updated again: 21-May-08I learn by seeing how things are done by others... I struggled with dojo because I could not find examples! This database has several dojo elements exampled. You will also see what is needed to incorporate dojo into your code, what needs to be installed locally/server and some different ways to use dojo (pass thru html or within field properties) credits: This database is a variation of a database used at a lotusphere 2008 session: SpeedGeeking. I have changed the name to prevent users from confusing this with the original... and not to take any credit for the work done by Scott Good or Henry Newberry. I saw dojo illustrated at Lotusphere, and read all about it on various Lotus/IBM sites.. however, reading the documentation at the dojo web sites didn't help since I wanted to implement this on domino. After several days of experimentation I found Henry's database and I could finally see dojo working. I needed more field types and after additional experimentation learned many things. This database will show you the things I learned, and hopefully, save you some time in your exploration. Feedback is welcomed, and my thanks are returned to Scott Good and Henry Newberry. This is not an application. This is a simple database with one view and one form with dojo type fields exampled on a form.71. Creating RESTful IBM Lotus Domino applications in a Web 2.0 world with Project ZeroLearn how to create RESTful IBM Lotus Domino Web applications using Project Zero to deliver a responsive Web 2.0 application. This article explores the various options developers have to create RESTful Lotus Domino Web applications and shows how you can deliver such applications with the help of Project Zero.72. Login using AJAXA small test NSF that shows how you can build login functionality into your web apps with out using the server default login form direct from your application using AJAX. The sample file is fully self contained and needs no other downloads to work. If you have any problems please let me know.73. Tool to find all design elements signed by an idA little tool that will help you find all the design elements in your databases located on a specific server? You can add exclusions for databases or folders that you don't want to scan (Mail\, Help\, Admin4,nsf, etc) You can then sort the results by Server, By signer, By design element, etc. It's very useful when an Admin no longer works for your company but many designe elements (agents , scripts libraires,e tc) were signed with his ID. Topic discussed herehttp://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/9d7b35990139a466852573ef005bfe71?OpenDocument 74. The case for upgrading to IBM Lotus Domino 8 for better server performanceTests of IBM Lotus Domino 8 performance show that upgrading to Lotus Domino 8 and the new Lotus Notes 8 client should yield positive results. Tests show CPU reductions across the board as well as I/O reductions on most platforms when compared to Lotus Notes and Domino 7. Read more about the test results.75. Sort months by name (@Sort formula example)asMonths := "January":"February":"March":"April":"May":"June":"July":"August":"September":"October":"November":"December"; @If(@IsDocBeingSaved | @IsDocBeingMailed; @Sort(@ThisValue; [CustomSort] ; @Member($A; asMonths) > @Member($B; asMonths)); @ThisValue) 76. Skype-enable your databasesDuring development of a Sametime-Skype plugin, I found a simple way to integrate Skype-out phone calling into any Notes database. There are two technical ways: using the skype-url-mechanism or a special skype commandline argument. I prefer the latter one, because it launches Skype in case it is not running. The Notes fieldname for the phone number as well as the replacements of non numeric characters must be customised. Sykpe expects international number format: "+ countrycode areacode number" without spaces. So here is the code - put it in an agent, a button an action, whatever you like: REM {URL-type launch}; REM {===========================}; o := @ReplaceSubstring(OfficePhoneNumber;" ";""); o := @ReplaceSubstring(o;"-";""); @Command([Execute];"skype:"+o+"?call") REM {direct launch}; REM {===========================}; x:= @RegQueryValue("HKEY_LOCAL_MACHINE";"SOFTWARE\\Skype\\Phone";"SkypePath"); o := @ReplaceSubstring(OfficePhoneNumber;" ";""); o := @ReplaceSubstring(o;"-";""); @Command([Execute];x;"\"/uri:"+o+"\"")77. Assigning Initial Values To An ArrayMost programming languages support an away to initialize an array in a single statement, but not LotusScript. Maybe it is just me doing this, but I have always found myself writing LS code something like Dim Month(12) As StringMonth(1) = "JAN" Month(2) = "FEB" ... Month(12) = "DEC" Eventually this bugged me enough that I searched for a way to initialize an array such as the above in a single statement. To make my code "easy" to read I have created an Array function which takes a string and evaluates it using @Formulae (which does allow a "List" to be assigned). I can now write a single LS statement such as Months = Array({"JAN":"FEB":"MAR":"APR":"MAY":"JUN":"JUL":"AUG":"SEP":"OCT":"NOV":"DEC"}) This works for both text and numeric values. The code for the Array function is as follows:- '/** ' * Returns an array populated with initial values ' * ' * @author Peter Presnell ' * @param Source The initial values separated by colon ' * @return An array created from the initial values ' */ Function Array(Source As String) As Variant Dim MyArray(0) As String Try: On Error Goto Catch Array = Evaluate(Source$) Exit Function Catch: Stop MyArray(0) = Source$ Array = MyArray Exit Function End Function 78. Web NAB Picker Form Field for ExtJS v1.xUsed to create a live address picker in a standard Ext form -- config with normal Ext.form.Combobox config parameters, plus optional NABPicker parameters (DBPath, view, etc.). A common datastore will be used for all instances of the NABPicker in your forms, unless you specifiy a different "DPPath", "view", or "count". This Ext extension uses part of an alpha combo box "clearer" extension that I found a long time ago on the ExtJS.com forums -- if anyone recognizes whose it is, feel free to tell me so that I may give the author credit.79. Multiples signatures in mail fileCurrently the users has no ability to select from different signatures when creating an email. In this database, you have 1 form (Signature), 1 view (Signatures) and 2 agents (Signature -Copy and Signature - Paste). In your memo form, just add a button to call the first agent to add a different signature to your email.80. ExtJS 2.0 -> Notes Database via WebDAVI have uploaded ExtJS v2.0 to a Notes Database via WebDAV81. UserAccessDetails class - allows consistent access to a user's access levelIn my experience, the native LotusScript methods are usually fine provided that: the code in question is running on a server, orthe user happens to be explicitly defined in the Access Control List (and you don't necessarily need a union of all roles, etc), or the "Enforce a consistent Access Control List across all replicas" property is enabled on the database. If one or more of these conditions is not true, the native functions may not behave as expected. Catch that last part from the Designer Help for the QueryAccessRoles method of the NotesDatabase class: "If the name you specify is not listed explicitly in the ACL, QueryAccess checks to see if the name is a member of a group in the primary address book where the program is running: on a workstation the Personal Address Book; on a server the Domino Directory." So if your code is executed on a workstation as opposed to a server, the QueryAccess method uses the local NAB. This poses a problem when resolving group membership. Enabling the "...consistent Access Control List..." property seems to (at least) alleviate the problem. But that may not always be an option, in which case, QueryAccessRoles may not work as desired. That was one of the reasons I wrote this class which provides an interface to most aspects of a specific user's access to a specific database. The class accounts for group memberships and wildcard entries in the ACL. Public Properties: CLASS_NAME Return value: String constant, name of this class (mostly for use in error handling) PUBLIC_NAB_REPLICAID Return value: String constant, replica ID of the public Name & Address Book (or Domino Directory if you prefer) DEFAULT_ARRAY_VALUE Return value: String constant, value to which arrays are initialized GetACL Return value: NotesACL, a handle to the ACL of the database for this instance GetProperACLEntry Return value: NotesACLEntry, a handle to the explicitly defined ACL entry for the specified user to the specified database for this instance (may be nothing) GetActiveEntries Return value: Variant, (string array) all active ACL entry names for the specified user to the specified database GetActiveRoles Return value: Variant, (string array) a union of all active ACL roles for the specified user to the specified database GetAccessLevel Return value: Integer, access level (as defined by NotesACLEntry class) for the specified user to the specified database CanDelete Return value: Boolean, true if specified user has access to delete documents in the specified database, otherwise false Constructor: Sub New(pndbTarget As NotesDatabase, pstrUName As String) Description: class contructor Parameters: pndbTarget - NotesDatabase, database to which access details are to be compiled pstrUName - String, the user name for which access details are to be compiled Public Methods: Sub Delete() Description: class destructor, executes by default when a given instance of the class is dereferenced Parameters: none Sub ReleaseNotesObjects() Description: releases all Notes handles except for the target NotesDatabase Parameters: none Sub Initialize() Description: a convenient way of collecting all access details Parameters: none Private Methods: Function setNAB() Description: Attempts get a handle to the public name and address via the PUBLIC_NAB_REPLICAID constant. Return value: Boolean, true if successful, otherwise false. Parameters: none Function setGroupView(pviewOut As NotesView) Description: Attempts get a handle to the NotesView used for accessing group documents. Return value: Boolean, true if successful, otherwise false. Parameters: pviewOut - NotesView, receives a handle to the NotesView used for accessing group documents Function getActiveACLEntries() Description: Attempts to compute all active ACL entries by which a given user has access to a database. Return value: Boolean - true if successful, otherwise false. Parameters: none Function getActiveACLRoles() Description: Attempts to compute a union of all active ACL roles a given user possesses for a given database. Return value: Boolean - true if successful, otherwise false. Parameters: none Function detectDeleteAccess() Description: Attempts to determine whether or not a given user has delete access to a given database. Return value: Boolean - true if successful, otherwise false. Parameters: none Function getMaxAccessLevel() Description: Returns the maximum access level a given user has for a given database. Return value: Integer, the maximum access level determined for a given user to a given database. Parameters: none Function expandGroupMembers(pstrGroupName As String, pvarGroupMembersOut As Variant) Description: Attempts to resolve the individual members of a given group name by evaluating an @Function. Return value: Boolean - true if successful, otherwise false. Parameters: pstrGroupName - String, the group name whose members are to be resolved pvarGroupMembersOut - Variant, receives the names of the individual group members Function getGroupMembers(pv 82. Class + Agent to maintain the field memberOf on person documents'ag.i-Seven.DominoDirectory.MemberOf: Option Declare'ag.i-Seven.DominoDirectory.MemberOf: Public Class I7DirectorySession Private mvSession As NotesSession Private mvCurrentNAB As NotesDatabase Private mvDirectories List As I7DominoDirectory Private mvSimulateToFilePath As String Private mvSimulateForNotesName As NotesName Private mvPersonDocument As NotesDocument Public Property Set SimulateToFilePath As String mvSimulateToFilePath = SimulateToFilePath End Property Public Property Set SimulateForNotesName As NotesName Set mvSimulateForNotesName = SimulateForNotesName End Property Public Property Set PersonDocument As NotesDocument If PersonDocument.IsValid And Not PersonDocument.IsDeleted Then If Lcase$(PersonDocument.GetItemValue("Form")(0)) = "person" Then Set mvPersonDocument = PersonDocument End If End If End Property Public Sub New Set mvSession = New NotesSession If mvSession.CurrentDatabase.IsPublicAddressBook Then Set mvCurrentNAB=mvSession.CurrentDatabase Set mvDirectories(GetDirectoryListIndex(mvCurrentNAB)) = New I7DominoDirectory (mvCurrentNAB) End If Forall DB In mvSession.AddressBooks If DB.IsPublicAddressBook Then If Not Iselement(mvDirectories(GetDirectoryListIndex(DB))) Then Set mvDirectories(GetDirectoryListIndex(DB)) = New I7DominoDirectory (DB) End If End If End Forall End Sub Public Sub UpdateAttribute_MemberOf Dim FullName As NotesName Dim ListNames As Variant Dim FF As Integer Dim ListNamesAsString As String Dim ListNameAsArray As Variant If Not mvSimulateForNotesName Is Nothing Then Set FullName = mvSimulateForNotesName Elseif Not mvPersonDocument Is Nothing Then Set FullName = New NotesName (mvPersonDocument.GetItemValue("FullName")(0)) End If If Not FullName Is Nothing Then ListNames = GetListNamesByName(FullName) If Not Isempty(ListNames) Then Redim ListNameAsArray(0) As String Forall LN In ListNames If ListNameAsArray(Ubound(ListNameAsArray)) <> "" Then Redim Preserve ListNameAsArray(Ubound(ListNameAsArray)+1) As String End If ListNameAsArray(Ubound(ListNameAsArray)) = Listtag(LN) If mvSimulateToFilePath<> "" Then ListNamesAsString = ListNamesAsString + Listtag(LN) + "," End If End Forall If mvSimulateToFilePath= "" Then If Not mvPersonDocument Is Nothing Then 'TODO, sort at check ListNameAsArray against memberOf before updating and saving document to avoid saves Call mvPersonDocument.ReplaceItemValue("memberOf", ListNameAsArray) Call mvPersonDocument.Save(True,False,False) End If Else FF = Freefile Open mvSimulateToFilePath For Append As #FF Write #1, FullName.Canonical, ListNamesAsString Close #FF End If End If End If End Sub Private Function GetListNamesByName (aoName As NotesName) As Variant Dim ListDocuments As NotesDocumentCollection Dim ListNames List As NotesName Dim ListDoc As NotesDocument Dim NewListName As NotesName Forall Directory In mvDirectories Forall ListIndex In Directory.ListIndexes Set ListDocuments = ListIndex .GetAllDocumentsByKey(Lcase$(aoName.Canonical),True) If ListDocuments.Count > 0 Then Set ListDoc = ListDocuments.GetFirstDocument Do While Not ListDoc Is Nothing If ListDoc.IsValid And Not ListDoc.IsDeleted Then Set NewListName = New NotesName(ListDoc.GetItemValue("ListName")(0)) If Not Iselement(ListNames(Lcase$(NewListName.Canonical))) Then Set ListNames(Lcase$(NewListName.Canonical)) = NewListName Forall NN In GetListNamesByName(NewListName) If Not Iselement(ListNames(Lcase$(NN.Canonical))) Then Set ListNames(Lcase$(NN.Canonical)) = NN End If End Forall End If End If Set ListDoc = ListDocuments.GetNextDocument(ListDoc) Loop End If End Forall End Forall GetListNamesByName = ListNames End Function Private Function GetDirectoryListIndex (aoDB As Variant) As String GetDirectoryListIndex=Lcase$(aoDB.Server+"!!"+aoDB.FilePath) End Function End Class Public Class I7DominoDirectory Private mvDatabase As NotesDatabase Private mvServerAccess As NotesView Private mvMailGroups As NotesView Private mvListIndexes List As NotesView Public Property Get ListIndexes As Variant ListIndexes = mvListIndexes End Property Public Sub New (aoDB As Variant) If aoDB.IsPublicAddressBook Then If Not aoDB.IsOpen Then Call aoDB.Open("","") End If If aoDB.isOpen Then Set mvDatabase = aoDB Set mvServerAccess =mvDatabase.GetView("($ServerAccess)") Set mvMailGroups =mvDatabase.GetView("($MailGroups)") mvServerAccess.AutoUpdate=False mvMailGroups.AutoUpdate=False Set mvListIndexes("($ServerAccess)") = mvServerAccess Set mvListIndexes("($MailGroups)") = mvMailGroups End If End If End Sub Sub Delete 83. Action Bar Skinner For ExtJS v1.1.1Just a simple little script that'll skin your action bar in a Domino web application document. It's a hack, but it works for me. I've tested it with ExtJS v1.1.1, but it works with v1.1 too. It successfully skins nested menuitem-style actions, too. I haven't tried it out in many different settings, so I don't know what it'll do in your particular application, so don't come crying to me if it breaks something. 12/17/2007: Included tentative support for action bar positioning (top/bottom).84. ND8 IconView ToolFor years I have used IconViewer from Workflow Systems, Inc - however it hasn't been updated to reflect the new icons now available... so I've created one for ND6/ND7 and now that Notes 8 has even more new icons, I've just updated this so you can use them all. This little app was made with flash. BONUS! I stumbled upon hidden icons! This version includes 17 undocumented icons which you can use. Their numbers are negative! These bonus icons are indicated along the right side. This upload should be considered as version3 (my 2nd version) of this tool. This has been updated for Notes 8. I've separated those icons which are new for Notes 8, so you can code for earlier Notes versions without worry. Here is a link to my last versionhttp://www.openntf.org/Projects/codebin/codebin.nsf/CodeBySubContributor/48354F7B1D07B64F86257182005C350F Post your feedback. Thanks edit: Sure, I don't mind uploading a PNG of the image. You'll find it attached. edit: I'm also attaching the SWF file too 85. NotesView2 fixed totals js fileA version of the jsNotesView2.1.5 which has been modified to allow totals to be displayed correctly in views.86. Another ExpandGroup SolutionThere are already a few solutions for expanding nested groups, but I needed a 'quick and dirty' one wich can just be pasted into a new database and which attends also groups in groups and do not fail on loops. Please let me know how you find it or if there are problems.87. Change tracking / audit trail framework . . .Below is a change tracking / audit trail framework I wrote a few years ago (for the Notes client). I know there are others that are very well done, but I thought this might be worth sharing, too. Features: The size limitation of text fields is avoided by spreading the audit trail across multiple fields as necessary. Recorded history is easily rendered in a printable dialog. Recorded history may be exported directly to MS Word or as "raw" XML. Allows "auditable" fields to be defined on a form-by-form basis. The Change Auditor framework is comprised of the design elements below, all of which may be found in the attached database along with a sample implementation. See the Help|Using document in the attached database for more information. Script libraries: (EnhancedItem) (ErrorHandling) (LSHashMap) (UI - Audit Definition) (UI - Cascading Menu Builder) (UI - Change Auditor) Forms: Audit Definition Subforms: (Dialog - Repoert History Display) (Report History) Agents: (Add/Edit Audit Definition profile document) Images: Action.gifEdit.gif Cancel.gif Save.gif 88. NotesNameParser utility class (Java) . . .package utils.notes; /** * This is a light-weight class that can convert various forms of a Lotus Notes user name* string into other various corresponding forms of a user name string. Lotus/IBM supply * the lotus.domino.Name class for these types of operations (and more) but it must be * instantiated from lotus.domino.Session, which is not always practical or convenient. * This class has no such requirement. * <p>The supported forms of a Notes user name here are as follows:<ol> * <li>CN=Joe Blow/OU=IS/O=Acme Anvils (canonical name),</li> * <li>CN=Joe Blow/OU=IS/O=Acme Anvils@Acme (canonical name with a domain),</li> * <li>Joe Blow/IS/Acme Anvils (abbreviated name), and</li> * <li>Joe Blow/IS/Acme Anvils@Acme (abbreviated name with domain).</li></ol> * The country may also be specified in combination with any of the above name forms.</p> * </p>An example of a full hierarchical name that takes advantage of every parameter:<ul> * G=Joe/I=JB/S=Blow/Q=Jr/CN=Joe Blow/OU=IS/OU=Engineering/O=Acme Anvils/P=PrivAdmin/A=PubAdmin/C=US * </ul>where<ul> * <li>"G" is the given name component (first name)</li> * <li>"I" is the initials</li> * <li>"S" is the sir name component (last name)</li> * <li>"Q" is the generational qualifier component (such as "Jr")</li> * <li>"CN" is the common name component</li> * <li>"OU" is the organizational unit component</li> * <li>"O" is the organization component</li> * <li>"P" is the PRMD component (private management domain name)</li> * <li>"A" is the ADMD component (administration management domain name)</li> * <li>"C" is the country</li> * </ul></p> * * @since 06/17/2005 * @author Dallas Gimpel */ public abstract class NotesNameParser { /** String - The common name prefix for a Notes name in canonical form.*/ public static final String COMMON_NAME_PREFIX = "CN="; /** String - The organizational unit prefix for a Notes name in canonical form.*/ public static final String ORGANIZATIONAL_UNIT_PREFIX = "/OU="; /** String - The organizational prefix for a Notes name in canonical form.*/ public static final String ORGANIZATION_PREFIX = "/O="; /** String - The country prefix for a Notes name in canonical form.*/ public static final String COUNTRY_PREFIX = "/C="; /** String - The character used to delimit the elements of a Notes name in abbreviated form.*/ public static final String ABBREVIATED_NAME_DELIMITER = "/"; /** String - The character used to indicate the domain of a given Notes name.*/ public static final String DOMAIN_INDICATOR = "@"; /** String - The value to be returned when no value exists, is valid, etc.*/ public static final String NO_VALUE = ""; /** * Method attempts to parse the "common" name (e.g., "Joe Blow") from the abbreviated * or canonical Notes name String it is passed. * @param pstrNameVal - String, abbreviated or canonical Notes name String from which to * parse a "common" name (e.g., "CN=Joe Blow/OU=IS/O=Acme Anvils" or "Joe Blow/IS/Acme * Anvils"). * @return String, "common" name parsed (if any) from the String passed */ public static String parseCommonName(String pstrNameVal) { if (!NotesNameParser.isValidString(pstrNameVal)) { return NotesNameParser.NO_VALUE; } String astrName = pstrNameVal; if (NotesNameParser.isNameCanonical(pstrNameVal)) { astrName = NotesNameParser.cleanName(pstrNameVal); } String[] astrNameElements = astrName.split(NotesNameParser.ABBREVIATED_NAME_DELIMITER); if (astrNameElements.length == 1) { return NotesNameParser.removeDomainName(astrName); } // remove the "CN=" prefix (if it exists) return astrNameElements[0].replaceFirst("([Cc][Nn][=])+", ""); } /** * Method attempts to parse the "abbreviated" name (e.g., "Joe Blow/IS/Acme Anvils") * from the canonical Notes name String it is passed. * @param pstrNameVal - String, a canonical Notes name String from which to parse an * "abbreviated" Notes name String * @return String, "abbreviated" name String parsed (if any) from the String passed */ public static String parseAbbreviatedName(String pstrNameVal) { if (!NotesNameParser.isValidString(pstrNameVal)) { return NotesNameParser.NO_VALUE; } if (!NotesNameParser.isNameCanonical(pstrNameVal)) { return NotesNameParser.removeDomainName(pstrNameVal); } String astrName = NotesNameParser.cleanName(NotesNameParser.removeDomainName(pstrNameVal)); StringBuffer asbuff = new StringBuffer(astrName.length()); String[] astrNameElements = astrName.split("="); for (int i = 1; i < astrNameElements.length; i++) { asbuff.append(astrNameElements[i].split(NotesNameParser.ABBREVIATED_NAME_DELIMITER)[0]); asbuff.append(NotesNameParser.ABBREVIATED_NAME_DELIMITER); } asbuff.setLength(asbuff.length() - 1); // remove the last character in the buffer (should be ABBREVIATED_NAME_DELIMITER) return asbuff.toString(); } /** * Method attempts to parse the "canonical" 89. Tool to find Old documents pushed back by replicationTool to find Old documents or deleted documents pushed back to server by replicationThis db allows you to find the Added to file date of all person documents in your NAB. The search is done against the Mail Users views. In your search , you have to specify which mail servers (From your mail users view) to look at. Find Old documents or deleted documents pushed back to server by replication Deleted documents are reappearing after replication http://www-1.ibm.com/support/docview.wss?rs=0&uid=swg21098733 It's possible to find them by script with the AddedToThisFile API. Q&As about replication purge intervals and cutoff dates http://www-1.ibm.com/support/docview.wss?rs=475&context=SSKTWP&context=SSKTMJ&dc=DB520&q1=documents+and+cut-off&uid=swg21110117&loc=en_US&cs=utf-8&lang=en How to track down where replication changes originate http://www-1.ibm.com/support/docview.wss?rs=475&context=SSKTWP&context=SSKTMJ&dc=DB520&q1=documents+and+replication+and+old&uid=swg21225071&loc=en_US&cs=utf-8&lang=en http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/1acb01c8dc57378785257377002dfd5f?OpenDocument You can reuse this code to search other dbs, or other types of document sin the NAB (server documents, holiday documents, etc) 90. read text from / write text to the Windows clipboard . . .There are two functions below: the getClipBoardText function for reading text from the clipboard, andthe setClipBoardText function for writing text to the clipboard. '// W32 API declares Declare Private Function W32GetActiveWindow Lib "user32" Alias "GetActiveWindow" ( _ ) As Long Declare Private Function W32OpenClipboard Lib "user32" Alias "OpenClipboard" ( _ Byval hWnd As Long _ ) As Long Declare Private Function W32CloseClipboard Lib "user32" Alias "CloseClipboard" ( _ ) As Long Declare Private Function W32EmptyClipboard Lib "user32" Alias "EmptyClipboard" ( _ ) As Long Declare Private Function W32GetClipboardData Lib "user32" Alias "GetClipboardData" ( _ Byval wFormat As Long _ ) As Long Declare Private Function W32SetClipboardData Lib "user32" Alias "SetClipboardData" ( _ Byval wFormat As Long, _ Byval hMem As Long _ ) As Long Declare Private Function W32IsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" ( _ Byval wFormat As Long _ ) As Long Declare Private Function W32GlobalLock Lib "kernel32" Alias "GlobalLock" ( _ Byval hMem As Long _ ) As Long Declare Private Function W32GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" ( _ Byval hMem As Long _ ) As Long Declare Private Function W32GlobalAllocate Lib "kernel32" Alias "GlobalAlloc" ( _ Byval wFlags As Long, _ Byval dwBytes As Long _ ) As Long Declare Private Function W32WriteMemoryToString Lib "kernel32" Alias "lstrcpyA" ( _ Byval lpString1 As String, _ Byval lpString2 As Any _ ) As Long Declare Private Function W32WriteStringToMemory Lib "kernel32" Alias "lstrcpyA" ( _ Byval lpString1 As Long, _ Byval lpString2 As String _ ) As Long Function getClipBoardText(pblnClearClipboard As Boolean, pstrTextOut As String) As Boolean '// +++ GLOBAL VARIABLES +++ '// Constants: '// {record any global constants here} '// '// Class instances: '// {record any global class intances here} '// '// Primitives: '// {record any global primitives here} '// '// 05/21/2004 - Dallas Gimpel '// '// DESCRIPTION: '// This function attempts to programmatically open the Windows clipboard and write the '// text held in memory (if any exists) to the output parameter. '// '// Notes from MSDN on the "CF_TEXT" standard clipboard format . . . '// "Text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A '// null character signals the end of the data. Use this format for ANSI text." '// '// NOTE: '// This code is obviously Win/32 specific. '// '// INPUT: '// pblnClearClipboard - Boolean, flag indicating whether or not to clear the clipboard '// '// OUTPUT: '// pstrTextOut - String, receives text (if any can be retrieved) held in the clipboard '// Function returns true if text can be successfully retrieved from the clipboard On Error Goto errorHandler Const CF_TEXT = 1 '// one of the "standard clipboard formats" Const MAXSIZE = 4096 Dim lngRC As Long Dim lngCBStatus As Long Dim lngHCBMemory As Long Dim lngGMemPointer As Long Dim strBuff As String * MAXSIZE getClipBoardText = False '// Attempt to open the clipboard. lngCBStatus& = W32OpenClipboard(0&) If lngCBStatus& = 0 Then Msgbox {Unable to access the text in memory (i.e., contents of the "clipboard") - another application may have it locked.}, , "Error encountered . . ." Goto functionExit End If '// Attempt to get a handle to the text currently held in the clipboard. lngHCBMemory& = W32GetClipboardData(CF_TEXT) If lngHCBMemory& = 0 Then Msgbox {There is no text available in memory (i.e., copied to the "clipboard") - unable to continue.}, , "No text available . . ." Goto functionExit End If '// Attempt to lock the memory and store a pointer to it. lngGMemPointer& = W32GlobalLock(lngHCBMemory&) If lngGMemPointer& = 0 Then '// no text in memory - close clipboard & exit Msgbox "Failed to lock the memory from which the text is to be copied - unable to continue.", , "Error encountered . . ." Goto functionExit End If '// Copy the in-memory string (by pointer location) into the buffer. strBuff$ = Space$(MAXSIZE) lngRC& = W32WriteMemoryToString(strBuff$, lngGMemPointer&) If lngRC& = 0 Then '// an error has occurred in the copy operation Msgbox "An error was encountered while attempting to copy the string from memory - unable to continue.", , "Error encountered . . ." Else strBuff$ = Mid(strBuff$, 1, Instr(1, strBuff$, Chr$(0), 0) - 1) '// remove the null terminator pstrTextOut$ = Trim(strBuff$) '// clean up the string If pblnClearClipboard Then Call W32EmptyClipboard() '// clear contents of the clipboard End If getClipBoardText = True End If lngRC& = W32GlobalUnlock(lngHCBMemory&) '// release lock on the memory functionExit: '// Always make sure to close the clipboard (even in the event of an error). If Not(lngCBStatus& = 0) Then Call W32CloseClipboard() lngCBStatus& = 0 End If Exit Function errorHandler: Msgbox "Error " & Err & ": " & Error$ & " encountered at line " & Erl & " of " & Getthreadinfo(1) & ".", , "Error encountered . . ." Print "Error 91. Easily debug JNI signatures for LS2J usage . . .'// Forms the meta-data for a given Java class (namely, JNI signatures for use with LS2J) and'// writes the results to an XML file on the Windows desktop via the LSLogger class, the source '// code for which can be found at: '// http://www.openntf.org/Projects/codebin/codebin.nsf/CodeBySubContributor/847ADBAD668FA911862572800073A25D '// '// This is useful during initial "set up" and debugging of LS2J code. '// '// See the example below using the javax.swing.JFileChooser class Option Declare Uselsx "*javacon" Sub debugJavaClass(pjSess As JavaSession, pjClass As JavaClass) On Error Goto errorHandler Const MODIFIER_PUBLIC& = 1 Const MODIFIER_STATIC& = 8 Const MODIFER_FINAL& = 16 Const MODIFER_VOLITILE& = 64 Const MODIFIER_TRANSIENT& = 128 Const PUBLIC_CONSTANT& = MODIFIER_PUBLIC + MODIFIER_STATIC + MODIFER_FINAL Const LS_TYPE_STR = 8 Const LS_TYPE_BLN = 11 Const LS_TYPE_BYT = 17 Const LS_TYPE_INT = 2 Const LS_TYPE_LNG = 3 Const LS_TYPE_SNG = 4 Const LS_TYPE_DBL = 5 Const LS_TYPE_OBJ = 32 Const RT_TYPE_BYT = "B" Const RT_TYPE_CHR = "C" Const RT_TYPE_DBL = "D" Const RT_TYPE_FLT = "F" Const RT_TYPE_INT = "I" Const RT_TYPE_LNG = "J" Const RT_TYPE_SHT = "S" Const RT_TYPE_BLN = "Z" Const RT_TYPE_VOID = "V" Dim jmClxn As JavaMethodCollection Dim jpClxn As JavaPropertyCollection Dim jmeth As JavaMethod Dim jprpty As JavaProperty Dim jObj As JavaObject Dim logger As LSLogger Dim lngModifier As Long Dim lngLSType As Long Dim i As Integer Dim intCount As Integer Dim strFilePath As String Dim strSignature As String Dim strReturn As String '// Set up the logger. strFilePath$ = Environ$("HOMEPATH") & "\DeskTop\JavaClass - " & Replace(pjClass.ClassName, ".", "_") & ".xml" Set logger = New LSLogger(strFilePath$) Call logger.ClearLog() Call logger.AddXMLTag(True, "JavaClass") Call logger.LogXMLTagValue(True, True, "ClassName", pjClass.ClassName) '// Record the details of the methods of the Java class passed. Call logger.AddXMLTag(True, "MethodDetails") Set jmClxn = pjClass.GetClassMethods() Set jmeth = jmClxn.GetFirst() intCount% = jmClxn.Count For i = 1 To intCount% Call logger.AddXMLTag(True, "Method") Call logger.LogXMLTagValue(True, True, "Name", jmeth.MethodName) '// Record the "raw" LS2J signature. strSignature$ = jmeth.Signature Call logger.LogXMLTagValue(True, True, "LS2JSignature", strSignature$) '// Parse the return type from the method signature. strReturn$ = Strright(strSignature$, ")") If Strcompare(Right(strReturn$, 1), ";") = 0 Then strReturn$ = Strleft(strReturn$, ";") End If '// Convert the return value to a more understandable value if possible. Select Case True Case Strcompare(strReturn$, RT_TYPE_VOID, 5) = 0 strReturn$ = "void" Case Strcompare(strReturn$, RT_TYPE_BYT, 5) = 0 strReturn$ = "byte" Case Strcompare(strReturn$, RT_TYPE_CHR, 5) = 0 strReturn$ = "char" Case Strcompare(strReturn$, RT_TYPE_DBL, 5) = 0 strReturn$ = "double" Case Strcompare(strReturn$, RT_TYPE_FLT, 5) = 0 strReturn$ = "float" Case Strcompare(strReturn$, RT_TYPE_INT, 5) = 0 strReturn$ = "int" Case Strcompare(strReturn$, RT_TYPE_LNG, 5) = 0 strReturn$ = "long" Case Strcompare(strReturn$, RT_TYPE_SHT, 5) = 0 strReturn$ = "short" Case Strcompare(strReturn$, RT_TYPE_BLN, 5) = 0 strReturn$ = "boolean" End Select Call logger.LogXMLTagValue(True, True, "ReturnType", strReturn$) Set jmeth = jmClxn.GetNext() Call logger.CloseTag("Method") Next i '// Close the Methods tag. Call logger.CloseTag("MethodDetails") '// Record the details of the "properties" of the Java class passed. Call logger.AddXMLTag(True, "PropertyDetails") Set jpClxn = pjClass.GetClassProperties() Set jprpty = jpClxn.GetFirst() intCount% = jpClxn.Count For i = 1 To intCount% lngModifier& = jprpty.Modifier lngLSType& = jprpty.Type Call logger.AddXMLTag(True, "Property") Call logger.LogXMLTagValue(True, True, "Name", jprpty.PropertyName) Call logger.LogXMLTagValue(True, True, "Modifier", Cstr(lngModifier&)) If lngModifier& = PUBLIC_CONSTANT Then Call logger.LogXMLTagValue(True, True, "IsConstant", "True") If Isobject(jprpty.GetValue()) Then Set jObj = jprpty.GetValue() strReturn$ = jObj.getClass().getName() strReturn$ = Replace(strReturn$, ".", "/") '// just to be conistent, convert the package separator to a forward slash Call logger.LogXMLTagValue(True, True, "Value", "[JavaObject] " & strReturn$) Delete jObj Else Call logger.LogXMLTagValue(True, True, "Value", Cstr(jprpty.GetValue())) End If Else Call logger.LogXMLTagValue(True, True, "IsConstant", "False") End If '// Record the LS datatype as an understandable string (vs. a number). Select Case lngLSType& Case LS_TYPE_STR Call logger.LogXMLTagValue(True, True, "LSDataType", "String") Case LS_TYPE_BLN Call logger.LogXMLTagValue(True, True, "LSDataType", "Boolean") Case LS_TYPE_BYT Call logger.LogXMLTagValue(True, True, "LSDataType", "Byte") Case LS_ 92. Tool to search log.nsf databaseThis database will help you to search log.nsf for a specific error message or string for a given period of time and display the result in one document. It is designed to help support person to view specific error occurrences on a given server without opening multiple log documents. This database is based mainly on this one: http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/c93e73615e56607f85256f810054c34a?OpenDocument Except the UI, you can now search for mail routing events and replication events This database is much faster than the tool form the admin console93. Get the date/time a note was added (i.e., by replication) to its parent database . . .Private Type timeDateTYPEinnards(0 To 1) As Long End Type Declare Function W32OSLoadString Lib "nnotes" Alias "OSLoadString" ( _ Byval hMod As Long, _ Byval stringCode As Integer, _ Byval retBuff As Lmbcs String, _ Byval buffLen As Integer _ ) As Integer Declare Private Function W32NSFNoteOpen Lib "nnotes" Alias "NSFNoteOpen" ( _ Byval hDb As Long, _ Byval noteID As Long, _ Byval openFlags As Integer, _ hNote As Long _ ) As Integer Declare Private Function W32NSFNoteClose Lib "nnotes" Alias "NSFNoteClose" ( _ Byval hNote As Long _ ) As Integer Declare Private Function W32NSFNoteGetInfo Lib "nnotes" Alias "NSFNoteGetInfo" ( _ Byval hNote As Long, _ Byval noteMember As Integer, _ retValu As Any _ ) As Integer Declare Private Function W32ConvertTIMEDATEToText Lib "nnotes" Alias "ConvertTIMEDATEToText" ( _ Byval intlFmt As Long, _ Byval txtFmt As Long, _ timeDate As timeDateTYPE, _ Byval retBuff As Lmbcs String, _ Byval maxBuffLen As Integer, _ actBuffLen As Integer _ ) As Integer Public Function getAddedToFileDate(pndtAddedInThisFile As NotesDateTime, plngHDb As Long, Byval pstrNoteID As String) As Boolean '// +++ GLOBAL VARIABLES +++ '// Constants: '// none '// '// Class instances: '// none '// '// 09/23/2004 - Dallas Gimpel '// '// DESCRIPTION: '// This function serves as a wrapper for obtaining the date/time a given Note was added to '// to its parent database via calls to the C API. The date/time "added" may be the same as '// the date the note was created but it can also be the date/time the note was received by '// way of replication. Once value is retrieved, the date/time value is written out to the '// NotesDateTime object passed. If an API error is encountered, the function attempts to '// re-throw the error in a more friendly manner via the "getAPIErrorDesc" function. '// '// INPUT: '// plngHDb - Long, an API handle to the target document's parent database '// pstrNoteID - String, the Note ID of the target document '// '// OUTPUT: '// pndtAddedInThisFile - NotesDateTime, receives date/time the given note was added to its database '// Function returns a boolean - true unless an error is encountered, otherwise false On Error Goto errorHandler Const NOTE_ADDED_TO_FILE% = 13 Const BUFF_LENGTH% = 32 * 3 Dim lngHNote As Long Dim tdStruct As timeDateTYPE Dim intRetCode As Integer Dim intStringLength As Integer Dim strErrTxt As String Dim strRetBuff As String * BUFF_LENGTH getAddedToFileDate = False pstrNoteID$ = "&H" & pstrNoteID$ intRetCode% = W32NSFNoteOpen(plngHDb&, Clng(pstrNoteID$), 0, lngHNote&) If Not(intRetCode% = 0) Then Call getAPIErrorDesc(intRetCode%, strErrTxt$) Error intRetCode%, strErrTxt$ End If intRetCode% = W32NSFNoteGetInfo(lngHNote&, NOTE_ADDED_TO_FILE, tdStruct) If Not(intRetCode% = 0) Then Call getAPIErrorDesc(intRetCode%, strErrTxt$) Error intRetCode%, strErrTxt$ End If intRetCode% = W32ConvertTIMEDATEToText(0&, 0&, tdStruct, strRetBuff$, BUFF_LENGTH, intStringLength%) If Not(intRetCode% = 0) Then Call getAPIErrorDesc(intRetCode%, strErrTxt$) Error intRetCode%, strErrTxt$ End If Set pndtAddedInThisFile = New NotesDateTime(Left$(strRetBuff$, intStringLength%)) getAddedToFileDate = pndtAddedInThisFile.IsValidDate functionExit: If lngHNote& > 0 Then Call W32NSFNoteClose(lngHNote&) End If Exit Function errorHandler: Msgbox "Error " & Err & ": " & Error & " encountered at line " & Erl & " of " & Getthreadinfo(1) & ".", , "Error encountered . . ." Print "Error " & Err & ": " & Error & " encountered at line " & Erl & " . . ." Resume functionExit End Function Private Sub getAPIErrorDesc(pintRetCode As Integer, pstrErrMsg As String) '// +++ GLOBAL VARIABLES +++ '// Constants: '// '// '// Class instances: '// '// '// 08/09/2002 - Dallas Gimpel '// '// DESCRIPTION: '// This sub takes the unmodified return code returned by an api call and "decodes" it '// into a less cryptic error number. It then returns the text associated with the given '// error number by making an api call which loads the text into a string variable. If '// no text is returned for the given error, it defaults to "unknown error". '// '// INPUT: '// pintRetCode - Integer, the original return code as returned from the api call '// '// OUTPUT: '// pintRetCode - Integer, modified by "Anding" the error mask to it to produce a "kinder & gentler" error '// pstrErrMsg - String, the text of the error message as returned by the api Const NULL_HANDLE = 0& Const ERROR_MASK = &H3fff '// see globerr.h Const BUFFER_SIZE% = 255 Const UNKOWN_ERR_DESC$ = "unknown error" Dim intLength As Integer pstrErrMsg$ = String$(BUFFER_SIZE + 1, 0) pintRetCode% = pintRetCode% And ERROR_MASK intLength% = W32OSLoadString(NULL_HANDLE, pintRetCode%, pstrErrMsg$, BUFFER_SIZE) If intLength% > 0 Then '// if we got a valid error description back, use it pstrErrMsg$ = Fulltrim(pstrErrMsg$) Else pstrErrMsg$ = UNKOWN_ERR_DESC End If End Sub 94. Set new Homeserver ButtonPlace this code in a button and send it to the user. If the user click on the button the home/mailserver will be set correctly in his location document.95. Goal Seek / Regula Falsi methodI needed to implement the equivalent of an Excel GoalSeek is Lotus. Okay so imagine you have two forms, a "Machine" and an "Item" - an Item being linked to a Machine using the Machine's DocUNID. The Items each have a calculated value and the Machine has a balance which is calculated from the sum of the Item's values minus the cost of the machine, we want to change a each Item's value until it causes the Machine's balance to equal zero (with some limits). So here is the LotusScript agent which does the job - hope someone else may one day stumble upon this and find it handy (Disclaimer: I'm an admin with a little programming experience, so any problems with the code, please comment :) ) edit: Attached code.96. Agent to set document readers acl for selected documentsName: Set Document ReadersLast Modification: 09/24/2007 07:50:15 AM Comment: [Not Assigned] Shared Agent: Yes Type: LotusScript State: Enabled Trigger: Manually From Actions Menu Acts On: Selected documents LotusScript Code: Option Public Option Declare %INCLUDE "lsconst.lss" Sub Initialize ' Set the $Readers field just like it's set when edited using the security tab of the Document Properties box ' for each items selected in the view ' check to see it item value already exists before adding to list ' use names must be in full cannonical format ' group names are just the name Dim workspace As New NotesUIWorkspace Dim session As New NotesSession Dim db As NotesDatabase Dim collection As NotesDocumentCollection Dim doc As NotesDocument Dim docChanged As Boolean Dim fieldValues As Variant Dim statusMessage As String Dim count As Long Dim nameCount As Integer Dim picklist As Variant ' get names to set $Readers field to ' display names selection dialog here picklist = workspace.PickListStrings( PICKLIST_NAMES, True ) If Elements(picklist) <= 0 Then statusMessage = "Do you want to allow all readers and above to read the selected documents?" Else statusMessage = "Do you want to allow only these names to have read access to the selected documents??" End If If Messagebox(statusMessage, MB_YESNO + MB_DEFBUTTON2, "Set Document Reader ACL") = IDNO Then Exit Sub End If ' set document acl for each document selected Set db = session.CurrentDatabase Set collection = db.UnprocessedDocuments Set doc = collection.GetFirstDocument() count = 0 While Not(doc Is Nothing) ' for each document selected count = count + 1 If SetReaders(doc, picklist) Then statusMessage = "Set document access for " & doc.Form(0) & " document " & Cstr(count) & " of " & Cstr(collection.Count) Else statusMessage = "Unable to set document access for " & doc.Form(0) & " document " & Cstr(count) & " of " & Cstr(collection.Count) End If Print statusMessage Set doc = collection.GetNextDocument(doc) Wend End Sub Function SetReaders(doc As notesdocument, values As Variant) As Boolean ' forces the specified values into the documents $Readers field, setting access to the document ' if values contains only "" in one element, remove the $Readers field which sets access to all readers and above On Error Goto errHand SetReaders = False ' assume field change fails ' parameter validation If doc Is Nothing Then Exit Function End If Dim item As NotesItem Set item = doc.GetFirstItem( "$Readers" ) If Not item Is Nothing Then ' if $Readers exists, we're replacing it so get rid of it item.Remove End If If Elements(values) <= 0 Then ' removing $Readers sets access to all readers and above Call doc.Save( True, False) Exit Function End If ' build name list Dim fieldValues As Variant Redim fieldValues(1) ' minimum of 2 values in the list fieldValues(0) = "LocalDomainAdmins" ' always have these two in the access list fieldValues(1) = "LocalDomainServers" ' so we can't lock ourselves out of the document fieldValues = Arrayappend( fieldValues, values ) values = Fulltrim(Arrayunique(fieldValues, 5)) ' remove duplicate names and empty elements Set item = New NotesItem(doc, "$Readers", values, READERS) ' Field Flags = SUMMARY READ-ACCESS NAMES item.IsNames = False ' remove NAMES attribute from Field Flags = SUMMARY READ-ACCESS item.IsSigned = True ' add SIGN to Field Flags = SIGN SUMMARY READ-ACCESS Call doc.Save( True, False) SetReaders = True ' $Readers field update worked errExit: On Error Goto 0 Exit Function errHand: Msgbox "error at line " & Erl & ": " & Error Resume errExit End Function Function Elements (aList As Variant) As Long 'count the number of elements in a list and return it 'LS equivalent to @Elements If Isempty(aList) Then Elements = 0 Else Dim x As Long x = 0 If Not aList(0) = "" Then Forall vals In aList x = x + 1 End Forall End If Elements = x End If End Function 97. I want to create meaning full Unique ID for CRM project. For Contact ID and Org. Id98. Add html via template system to a notes-only DBThis is a simple template system, to add webrendering to any 'notes only' database. The DB is a small projekt to add a upload to our webpage and notes-net (put Files into notesDB, give URL to someone outside or doclink to someone inside -> we have a 15MB limit for Mail :-)), that part is in german and not yet fully tested (as is the rest of the DB) :-) This DB has stolen code from: * OpenLog -> Error Logging* Michel Van der Meiren (blog.lotusnotes.be) and Jake Howlett(http://www.codestore.net) -> WebSession class and some other ideas * Michael Woehrer (http://sw-guide.de/lotus-notes-domino/document-library/) -> with his DocLib DB I learned LotusScript and domino programming :-) and this DB still has some elements around from that DB. Thanks a lot :-) Any feedback, bugreports, ideas more than welcome: jasc@gmx.net 99. Get Tempfolder FunctionThis Function get the tempfolder on a Win32 or Linux OS --------- Function GetTempDir As StringDim Session As New NotesSession Select Case Session.Platform Case "Windows/32","Windows/16","MS-DOS" GetTempDir = Environ("TEMP") Case "Linux","UNIX" GetTempDir = ("\var\tmp") End Select End Function 100. Create Folder + Subfolder FunctionWith this function you can create all the folders (Windows OS) which are in a given string. V1.1 Checks now if the folder exist. If it doesn´t the script will create it.101. Get all Folder and Subfolder from a FolderThis function get all the foldernames including the subfolders from a initial folder102. Get Subfolder from a FolderThis code get all the foldernames from a given path. ----------- Dim pathName As StringpathName = "C:\test" ' ^^^ initialfolder Dim fileName As String ' The Filename Dim FolderArray() As Variant ' The Array with all folders Dim FolderCounter As Long ' The FolderCounter FolderCounter = 0 Print "FileFunction [Start]---------------------------------------------------" fileName = Dir$(pathName+"\*.*",16) Do While fileName <> "" If Getfileattr(pathName+"\"+fileName) = 16 And Not filename = "." And Not filename = ".." Then Redim Preserve FolderArray(FolderCounter) ' if we have a folder in the fileName Var. then add it to the array Print pathName+"\"+fileName FolderArray(FolderCounter) = pathName+"\"+fileName FolderCounter = FolderCounter +1 End If fileName = Dir$() Loop Print "FileFunction [Ende]---------------------------------------------------" 103. Apache HTTPClient facade example.Sample application that encapsulates the apache commons HTTP Client (http://commons.apache.org/httpclient/) for use in Domino Applications. See http://palmerweb.blogspot.com for the blogs about setting up eclipse and implementing the examples.104. OSHelper class for some common OS operations . . .This is just a helper class (as the name suggests) that I thought might be useful for others. The class performs a handful of common operating system operations using LS2J. Public methods: IsPathValid - boolean, true if the specified path exists. CreatePath - boolean, true if the specified path can be created or already exists. GetRootDirectories - boolean, returns true if root directories can be retrieved. Results are written to the String array parameter. GetLocalIPAddress - boolean, returns true if the local machine's ip address can be retrieved. Results are written to the String parameter. GetLocalMachineName - boolean, returns true if the local machine's name can be retrieved. Results are written to the String parameter. GetTimeInMillis - boolean, returns true if the local machine's time can be retrieved in milliseconds. Results are written to the Double parameter. Sample usage: Dim osHelper As OSHelperDim dblTime As Double Dim strValu As String Dim strDriveArray() As String Set osHelper = New OSHelper() If Not(osHelper.IsPathValid("c:\my stuff")) Then MsgBox {The path "c:\My Stuff" is not valid.}, , "Results . . ." End If If osHelper.CreatePath("c:\My Music\Pink Floyd") Then MsgBox {The path "c:\My Music\Pink Floyd" has been created.}, , "Results . . ." End If If osHelper.GetRootDirectories(strDriveArray) Then MsgBox {Drive letters are: } & Chr(13) & Join(strDriveArray, Chr(13)), , "Results . . ." End If If osHelper.GetLocalIPAddress(strValu$) Then MsgBox {IP Address is: } & strValu$, , "Results . . ." End If If osHelper.GetLocalMachineName(strValu$) Then MsgBox {Machine name is "} & strValu$ & {" . . .}, , "Results . . ." End If If osHelper.GetTimeInMillis(dblTime#) Then MsgBox {Local machine's time in millis: } & dblTime#, , "Results . . ." End If Option Declare Uselsx "*javacon" Public Class OSHelper Private jSess As JavaSession '+++ CLASS CONSTRUCTOR +++ Sub New() Set Me.jSess = New JavaSession() End Sub '+++ CLASS DESTRUCTOR +++ Sub Delete() If Not(Me.jSess Is Nothing) Then Set Me.jSess = Nothing End If End Sub '+++ PUBLIC METHODS +++ Public Function IsPathValid(pstrPath As String) As Boolean On Error Goto errorHandler Const JCLASS_NAME = "java/io/File" Const JNI_CLASS_SIGNATURE = "(Ljava/lang/String;)V" Dim jClss As JavaClass Dim jObjFile As JavaObject IsPathValid = False If Len(Trim(pstrPath$)) = 0 Then Goto thisExit End If Set jClss = Me.jSess.GetClass(JCLASS_NAME) Set jObjFile = jClss.CreateObject(JNI_CLASS_SIGNATURE, pstrPath$) IsPathValid = jObjFile.exists() thisExit: '// Dereference Java objects in reverse order of creation. Set jObjFile = Nothing If Not(jClss Is Nothing) Then Delete jClss End If Exit Function errorHandler: Call Me.processError() Resume thisExit End Function Public Function CreatePath(pstrPath As String) As Boolean On Error Goto errorHandler Const JCLASS_NAME = "java/io/File" Const JNI_CLASS_SIGNATURE = "(Ljava/lang/String;)V" Dim jClss As JavaClass Dim jObjFile As JavaObject CreatePath = False If Len(Trim(pstrPath$)) = 0 Then Goto thisExit End If Set jClss = Me.jSess.GetClass(JCLASS_NAME) Set jObjFile = jClss.CreateObject(JNI_CLASS_SIGNATURE, pstrPath$) If jObjFile.exists() Then CreatePath = True Else CreatePath = jObjFile.mkdirs() End If thisExit: '// Dereference Java objects in reverse order of creation. Set jObjFile = Nothing If Not(jClss Is Nothing) Then Delete jClss End If Exit Function errorHandler: Call Me.processError() Resume thisExit End Function Public Function GetRootDirectories(pstrRootDirsOut() As String) As Boolean On Error Goto errorHandler Const JCLASS_NAME = "java/io/File" Const JNI_CLASS_SIGNATURE = "(Ljava/lang/String;)V" Const JMETHOD_NAME = "listRoots" Const JNI_METHOD_SIGNATURE = "()[Ljava/io/File;" Dim jClssFile As JavaClass Dim jmethListRoots As JavaMethod Dim intCount As Integer Dim strDir As String Dim varRootDirs As Variant GetRootDirectories = False Set jClssFile = Me.jSess.GetClass(JCLASS_NAME) Set jmethListRoots = jClssFile.GetMethod(JMETHOD_NAME, JNI_METHOD_SIGNATURE) varRootDirs = jmethListRoots.Invoke() If Isarray(varRootDirs) Then intCount% = -1 Redim pstrRootDirsOut(0 To Ubound(varRootDirs)) As String Forall jObjFile In varRootDirs strDir$ = "" strDir$ = jObjFile.toString() If Len(strDir$) > 0 Then intCount% = intCount% + 1 pstrRootDirsOut(intCount%) = strDir$ End If Set jObjFile = Nothing '// clean up each object as we go to avoid crashes End Forall Erase varRootDirs Redim Preserve pstrRootDirsOut(0 To intCount%) As String GetRootDirectories = True End If thisExit: '// Dereference Java objects in reverse order of creation. varRootDirs = Null If Not(jClssFile Is Nothing) Then Delete jClssFile End If Exit Function errorHandler: Call Me.processError() Resume thisExit End Function Public Function GetLocalIPAddress(pstrIPAddrOut As String) As Boolean On Err 105. Notes Client event examplesSample database with as much events as possible writing into the status bar to see in which sequence the events fire. Use LogStatusBar=1 in Notes.ini log lot them106. Press a Button on Pressing Enter in the Notes CLIENTDisclaimer: I put this together out of articles I found searching the web. I had not seen these capabilities put together like this for the Notes Client. === Thanks to being able to execute Javascript in the client in Notes 6.5, there is an easy way to have someone type some text in a field and press enter, then trigger something, like a search or whatever. Look at the JS Header, onLoad, onFocus, and onBlur events. Note, too, that the buttons in this case need names entered on the HTML tab. Using the onFocus and onBlur events of the fields also allows you to only trap the Enter key for a particular field. Have fun!107. Categorized Web Views Using Ext FrameworkDomino Ajax EngineVersion 0.0.2 Gavin Luscombe (gavin_luscombe@hotmail.com) This code is licensed under the Lesser GNU (LGPL) open source license version 2.1. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. http://www.gnu.org/licenses/lgpl.html An example of extending the Ext framework (http://extjs.com) to render Domino views/outlines. What's New ?: 0.0.2 - Implemented workaround for issue with DXL export for action bar 0.0.1 - First Release Credits ∙ Credit to Jack Ratcliff and Rich Waters for the inspiration and some of the code used within. Also credit to authors of any code I may have borrowed from forums such as notes.net and openntf.org - this is an opportunity from me to give a little back. ∙ Thanks to Jerry Carter for a workaround to the DXL export truncation for the action bars About + Implemented ∙ Views - flat & categorised ∙ Column Sorting on flat views - works on categorised views, but there are some know issues ∙ Column alignment - Ext currently does not separate header alignment from column alignment, so DAE uses the column alignment for rendering ∙ Preview pane - very basic implementation at present ∙ Opening of documents in new tabs - very basic implementation at present ∙ Outlines ∙ Icons ∙ Outline Hierarchy - Not Implemented ∙ Action Bars - a lot of work needs to take place to make these functional ∙ Forms - documents currently render with their default forms, and titles do not appear on the tabs as documents are opened ∙ Column view switching ∙ Calendar views ∙ Categorised views with totals columns have known issues ∙ Custom Themes/Icons are not supported in this version - you can ignore them when setting up your application configuration documents ∙ Everything else 108. Export all GIF and JPG FileResources from a databaseThis code exports all GIF / JPEG ImageResources from a given database into an existing directory. I am using DXL, the DOMParser and 2 tempfiles, so the code is not optimized for speed. DestinationDirectory must exist., the images as well as the tempfiles are created in DestinationDirectory. Tried with Notes 7.0.2 but should work for Notes 6.x as well. Don't expect an optimized code. I had to get something in place fast and for a very special need. Take the code as an example to be adapted/optimized for your needs.109. ReportGenerator ClassA class for creating rich-text reports and displaying them in a few different ways. It includes code to deal with the problem of paragraphs getting too long, and conversely, the problem of having too many paragraphs. Basically, when you want to have a line break in your report, the class only starts a new paragraph if you specify it has to. Otherwise it uses line break, unless the paragraph is getting too long, in which case it starts a new paragraph. Or to put it more succinctly, you get the longest possible report (functionality!) with the smallest possible number of paragraphs (performance!). Use the attached sample database, whose About document contains full instructions and which includes a sample agent that uses the class. UPDATE: I have added functions to support the use of predefined tables in your report. The tables may be in a Page design element or anywhere else (but there's special code to support the use of pages. Since tables have a 255-row limit, we automatically insert multiple tables if you ask for more rows than that.110. Zip File and Reattach itThis example detach a file from a NotesRichtextItem, zip this file & reattach it to the NotesRichtItem111. Create JSON from any notesdocument - New versionThis database is used to create JSON code from any notesdocuments, you specify what database to use, what documents to find in the database and what fields to be outputted as JSON format. Screenshot and more information se : http://www.notessidan.se/A55B53/blogg.nsf/plink/TADN-744D2C Enjoy.112. Auto-generate Setters and Getters for LS Class VariablesHere's the problem. You're using object-oriented LotusScript to create Classes and Objects. Like a good OO boy/girl, you're declaring all your Class variables as Private and then writing Setters and Getter Properties to allow access to them. Truth is though, most of the Setters and Getters that you write simply offer direct read/write access to those variables anyway, and writing them all out is such a pain! You could cheat and declare the class variables as public (go sit in the corner and put that "D" hat on), or you could have a Notes form generate them for you. Below is the code for a button that will take this: private m_MyVar1 as stringprivate m_MyVar2 as Variant private m_MyVar3 as Integer private m_MyVar4() as string and generate these: Public Property Get MyVar1 as String MyVar1 = me.m_MyVar1 End Property Public Property Set MyVar1 as String me.m_MyVar1 = MyVar1 End Property Public Property Get MyVar2 as Variant MyVar2 = me.m_MyVar2 End Property Public Property Set MyVar2 as Variant me.m_MyVar2 = MyVar2 End Property .. and so on. To set this up, create a Notes form in any database and put two Text fields on it. These should be: "Input" = multi-value Text field. Set the multi-value options tickboxes to use NewLine for both display and input. "Output" = single value Text field Create a button on the form and paste the Button code below into it's LS Click event. Create a new document from the form and paste your Class variable declarations into the Input field. Click the button. The Setters and Getters will be created in the Output field. You can then copy and paste these into your Class definition code. Cheers, - Mike ' ***********************************************************8 ' Button code Dim session As New NotesSession Dim ws As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim doc As NotesDocument Dim inputVar As Variant Set uidoc = ws.CurrentDocument Set doc = uidoc.document Call doc.ComputeWithForm(False, False) inputVar = doc.Input If inputVar(0) = "" Then Messagebox "No input found" Exit Sub End If %REM Assumptions are that class variables will declared thus private m_MyVar1 as string private m_MyVar2 as Variant private m_MyVar3 as Integer private m_MyVar4() as string and so on. We use the Split function to create a variant array (tempVar) of 4 members. These will be tempVar(0) = the word "Private". tempVar(1) = the variable's name tempVar(2) = the word "as" tempvar(3) = the variable's type. You need two text fields on a form: "Input" = multi-value Text field. Set the multi-value options tickboxes to use NewLine. "Output" = single value Text field %END REM Dim outputString As String Dim tempString As String Dim tempVar As Variant Dim variableName As String Dim setgetVariableName As String Dim variableType As String Dim NL As String outputString$ = "" Dim classVariablePrefix As String classVariablePrefix$ = "m_" NL$ = Chr$(13) & Chr$(10) ' True for Windoze only. Should change for Mac or Linux clients. Forall inputLine In inputVar tempVar = Split(inputLine, " ") variableName = Trim(tempVar(1)) variableType = Trim(tempVar(3)) If Instr(variableName, "(") > 0 Then ' must be an array, so need to declare the set and get as Variant variableName$ = Strleft(variableName$, "(") variableType$ = "Variant" End If If Instr(variableName$, classVariablePrefix$) > 0 Then setgetVariableName$ = Strrightback(variableName$, classVariablePrefix$) Else setgetVariableName$ = variableName$ End If outputString$ = outputString$ & "public property get " & setgetVariableName$ & " as " & variableType$ & NL$ outputString$ = outputString$ & Chr$(9) & setgetVariableName$ & " = me." & variableName$ & NL$ outputString$ = outputString$ & "End Property" & NL$ outputString$ = outputString$ & "public property set " & setgetVariableName$ & " as " & variableType$ & NL$ outputString$ = outputString$ & Chr$(9) & " me." & variableName$ & " = " & setgetVariableName$ & NL$ outputString$ = outputString$ & "End Property" & NL$ & NL$ End Forall doc.Output = outputString Call uidoc.reload ' *********************************************** 113. ASND Better Date-Based View Approach - InternationalizedI took Sean Burgess's SNTT post "Date based views that don’t perform like dogs" (http://www.phigsaidwhat.com/Phigmentb/phigment.nsf/dx/sntt--date-based-views-that-dont-perform-like-dogs.htm?opendocument) and a subsequent suggestion in the comments about ensuring it would work for non-US date formats, and came up with this bit of sample code that show's a complete solution. Figured I'd better put it here so I'll be able to find it later on :-).114. AJAX NotesView for WebI have created a project for this code: http://www.openntf.org/Projects/pmt.nsf/ProjectLookup/NotesView2115. Create and show an MS Excel Graph in a Lotus Notes DialogThis animation show what you can expect when you download the database [<img src=http://farm1.static.flickr.com/219/492859476_3644c51464_o.gif>] Thomashttp://www.notessidan.se 116. Agent to fix Server conf. docs when they are copied.If you copy a server config doc. it can happen, that Mail rules from one Server Configuration document unexpectedly appear in other Server Configuration documents. Why is this happening and how can I prevent it? This type of behavior will happen when you copy a Server Configuration document to create a Server Configuration document for a different server. This is because of the way the CFGDOCUNID field is computed. This field is a computed when composed field that captures the UNID of the original Server Configuration document when it is first created. With the attached Agent you can correct the CFGDOCUNID field. Simply add this agent to your Server adressbook. Select the conf. doc. you wish to fix and run this agent. ATTENTION: You should remove existing rules for the server conf. doc or these rules will be lost. The reason for this is, that they are connected with the CFGDOCUNID from the server conf. doc. and this CFGDOCUNID field should be normaly the UNID.117. Agent to remove all empty foldersSub InitializeDim session As New NotesSession Dim ws As New NotesUIWorkspace Dim askme As Variant Dim vc As NotesViewEntryCollection Dim db As NotesDatabase Dim view As notesview Dim views As Variant Dim x As Long Dim msg As String Dim Entrycount As Long Print msg & "Looking For Empty Folders " Set db = session.CurrentDatabase views = db.Views msg = "FOUND " & Cstr(0) & " - " x = 0 Forall v In views If Not ( Left(v.name,1) = "(" Or Left(v.name,1) = "$" ) Then Set vc = v.Allentries Entrycount = vc.Count If v.Isfolder And Entrycount = 0 Then Redim Preserve viewarray(x) As String viewarray(x) = v.Name x = x +1 msg = "FOUND " & Cstr(x) & " - " & v.Name End If Print msg & " looking at " & v.Name End If End Forall askme = ws.Prompt(PROMPT_OKCANCELLISTMULT, _ "Un Select all the Folders you want to Keep", _ "Un Select All of the empty Folders you want to Keep.", _ viewarray,viewarray) If Isempty(askme) Then Messagebox "User canceled or No empty folders found ", , "No folders selected" Else Forall ask In askme Set view = db.GetView(ask) If Not ( view Is Nothing) Then Call view.Remove End If End Forall Messagebox "Folders have been removed. Close and reopen the datebase to see the changes.", , "Folders Deleted" End If End Sub 118. @DoWhile formula to check string dataIf you are new to use @DoWhile() function of R7, this example may be helpful! This formula codes will check for non-numeric e-mail address input through a click button.119. Export to PDFThis codw will help to Export Data from Lotus to PDF format., But there is some class need to add in the agent , Because that class are not in the Lotus. Before use you need to add all the class file of Itext Jar class. ( Just Search (itext-2.0.1) free vession. ) import lotus.domino.*; import java.io.*; import java.util.*; import java.awt.*; import java.math.*; import java.text.*; import java.lang.*; import java.awt.*; import java.awt.event.*; import com.lowagie.text.*; import com.lowagie.text.pdf.*; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Rectangle; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.text.Chunk; import com.lowagie.text.Font; import com.lowagie.text.FontFactory; import com.lowagie.text.Phrase; import com.lowagie.text.Image; import com.lowagie.text.html.HtmlWriter; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.RandomAccessFileOrArray; import com.lowagie.text.pdf.codec.TiffImage; import com.lowagie.text.Element; import com.lowagie.text.PageSize; public class createPOPDFAgent extends AgentBase{Frame frame; Label l; PdfPCell cell; Paragraph p1; String tiff_file; String imTiff_file; String pdf_file; String strInPutXMLData; String strOutPutImage; String PdfWriteDirBase; String PdfWriteDir; String path; Locale locale = Locale.US; public void NotesMain (){ String richTextField = null; lotus.domino.Document lnDoc = null; int imageId = 1; String docUNID = null; try{ Session session = getSession(); AgentContext agentContext = session.getAgentContext(); Database db = agentContext.getCurrentDatabase(); lnDoc = agentContext.getDocumentContext(); NoteCollection nc = db.createNoteCollection(false); nc.buildCollection(); if(lnDoc != null) { nc.add(lnDoc); } //Export to file docUNID = lnDoc.getUniversalID(); // Create a frame to show progress frame = new Frame(); l = new Label("Collecting Form Data."); frame.add(l, "Center"); frame.setSize(400, 100); frame.show(); l.setText("Collecting Form Data."); addButton(); //Get PDF Data //Get Form Information l.setText("Collecting Form Data.."); addButton(); String strForm = lnDoc.getItemValueString("Form"); String strGetCreatedDate = lnDoc.getItemValueString("CreatedDate"); String strGetJDFContact = lnDoc.getItemValueString("JDFContact"); String strGetTagline = lnDoc.getItemValueString("tagline"); String strGetMemo = lnDoc.getItemValueString("Memo"); //Get Distributor Information l.setText("Collecting Form Data..."); addButton(); String strGetDistName = lnDoc.getItemValueString("CompanyName"); String strGetDistContactName = lnDoc.getItemValueString("OppContactName"); String strGetDistContactEmail = lnDoc.getItemValueString("OppContactEmail"); String strGetDistAddy = lnDoc.getItemValueString("StreetAddress1"); String strGetDistCity = lnDoc.getItemValueString("StreetCity"); String strGetDistState = lnDoc.getItemValueString("StreetState"); String strGetDistZip = lnDoc.getItemValueString("StreetZip"); String strGetDistContactPhone = lnDoc.getItemValueString("OppContactPhone"); String strGetDistContactFax = lnDoc.getItemValueString("OppContactFax"); //Get MFG Information l.setText("Collecting Form Data...."); addButton(); String strGetMfgName = lnDoc.getItemValueString("Manufacturer"); String strGetMfgFax = lnDoc.getItemValueString("ManufacturerFaxNumber"); String strGetMfgPhone = lnDoc.getItemValueString("ManufacturerPhoneNumber"); String strGetMfgContactName = lnDoc.getItemValueString("ManufacturerContact"); String strGetMfgContactEmail = lnDoc.getItemValueString("ManufacturerContactEmail"); //Get Item Data String strGetB2 = lnDoc.getItemValueString("B2"); String strGetQ2 = lnDoc.getItemValueString("Q2"); String strGetD2 = lnDoc.getItemValueString("D2"); String strGetP1 = lnDoc.getItemValueString("P1"); double dGetN1 = lnDoc.getItemValueDouble("N1"); String strGetN1 = NumberFormat.getNumberInstance(locale).format(dGetN1); double dGetC1 = lnDoc.getItemValueDouble("C1"); String strGetC1 = NumberFormat.getNumberInstance(locale).format(dGetC1); double dGetST1 = lnDoc.getItemValueDouble("ST1"); String strGetST1 = NumberFormat.getNumberInstance(locale).format(dGetST1); l.setText("Starting PDF Creation."); addButton(); PdfWriteDirBase = "C:\\Temp\\"; PdfWriteDir = "\\PDF\\"; String strPDFDirectory = PdfWriteDirBase + PdfWriteDir; boolean exists = (new File(strPDFDirectory)).exists(); if (exists) { System.out.println("Directory: Does exsist"); } else { System.out.println("Directory: Does not exsist"); boolean success = (new File(strPDFDirectory)).mkdirs(); if (!success) { System.out.println("Directory: Not able to create directory " + strPDFDirectory); } } //PDF creation session.setEnvironmentVar("POPDFDirectory", "", true); path = PdfWriteDirBase + PdfWriteDir + "\\" + "Quote for - " + strGetDistName + ".pdf"; session.setEnvironmentVar("POPDFDirectory", path, true); File Pd Форумы о Lotus Notes/Domino:
Интенет эфир о Lotus Notes. Блоги и форумы1. Shadow Database Scanner 7.11MSSQL, ORACLE, IBMDB2, MiniSQL, MySQL и Lotus Domino.2. Panda Security for Domino Servers Медиа-пакPanda Security for Domino Servers способен обнаруживать в памяти и в режиме реального времени вирусы, черви, троянцы, шпионское и рекламное ПО, фишинг, дозвонщики и хакерские утилиты, скрытые в почтовом сервере IBM Lotus Domino°. Цельная, плотная и утойчивая интеграция с роутером и БД документов IBM Lotus Domino° благодаря технологии Extension Manager.3. IBM Lotus Domino with BlackBerry Enterprise Server: Performance best practicesThis article is designed to act as a guide and reference paper for configuring BlackBerry Enterprise Server with IBM® Lotus® Domino®. It focuses on the load implications of running BlackBerry Enterprise Server within a Lotus Domino mail environment. It is designed to highlight areas where this load can be controlled and minimized.4. Ошибки Lotus (calendar, Monitor, Access)1. Из Лотуса были удалены несколько пользователей в связи с их увольнением. Похоже у кого то из сотрудников на удаленных пользователей были заведены рассылки или еще что то в календаре. Теперь каждый день выдает ошибки (штук 40 на разных удаленных пользователей): SchedMgr: Error processing calendar profile document (NoteID: NT000008FA) in database mail\ххх.nsf: Cannot find user in Domino Directory. Как от этого избавиться или узнать у кого стоят такие настройки рассылки.2. Можно ли как то избавиться от ошибок вида: "Monitor Error in Database F:\Lotus\Domino\Data\mail\ххх.nsf: Entry not found in index" ; "ATTEMPT TO ACCESS DATABASE roaming\ххх\names.nsf by ууу was denied" ; 3. Переодически возникает ошибка "Error compacting names.nsf: Database is currently in use by you or another user" , но базу в это время 23.00 никто не использует. Что можно сделать и как? Если кто знает решение отпишитесь пожалуйста. Заранее спасибо. 5. Лицензирование OfficeMediaПомогите, пожалуйста, разобраться с юридическими тонкостями лицензирования OfficeMedia.Наша организация имеет лицензию на OfficeMedia без ограничения количества пользователей (unlimited). Никаких других документов (договоров, лиц. соглашений), кроме прилагаемой лицензии, я найти не смогла. Установлен и работает один комплект баз OfficeMedia. Участники документооборота (пользователи) - как сотрудники нашей организации, так и наши подведомственные организации (самостоятельные юридические лица). Вопрос: Необходимо ли подведомственным организациям приобретать лицензии на работу с нашими базами документооборота? Подчеркиваю - речь идет не об организации самостоятельного документооборота в этих организациях, а только об обращении сотрудников этих организаций к базам нашей системы документооборота. Как вообще определяется термин "пользователь" с вашей точки зрения - это сотрудник конкретного юр. лица - владельца лицензии, либо любой человек (физ. лицо, сотрудники др. юр. лиц и т.п.)? Может у кого-то есть интертрастовское лицензионное соглашение на этот продукт? Или договор, если в нем описаны условия использования данного продукта. Буду признательна за любую информацию. 6. Cardiris 4 ProС помощью нескольких кликов мыши возможно обновить содержание вашей электронной записной книжки, непосредственно на вашем pocket PC или в вашем любимом менеджере Outlook, Outlook Express, ACT!, Palm OS, Lotus Notes and GoldMine.7. Выпуск рассылки Бюллетень Lotus Notes CodeStore No 81 от 2008-10-06 от 06-10 ...Вышел новый выпуск рассылки "Бюллетень "Lotus Notes CodeStore" No 81 от 2008-10-06".8. Panda Security for Domino Servers Лицензии для органов государственной и ...Panda Security for Domino Servers способен обнаруживать в памяти и в режиме реального времени вирусы, черви, троянцы, шпионское и рекламное ПО, фишинг, дозвонщики и хакерские утилиты, скрытые в почтовом сервере IBM Lotus Domino°. Цельная, плотная и утойчивая интеграция с роутером и БД документов IBM Lotus Domino° благодаря технологии Extension Manager.9. Protea AntiVirus Tools Avast version- Просматривается вся почта, проходящая через Lotus Domino для вирусов.10. Oxygen Phone Manager II для телефонов Nokia Lite Русская*синхронизировать записную книжку и календарь мобильного телефона с корпоративной базой данных, или Microsoft Outlook и Lotus Notes.11. Private Folders & PickListВечер добрый, многоуважаемый All.Имеем следующий код: Код Function GetPriceDocuments(sPriceName As String, sPriceDate As String, bMultipleSelection As Boolean) As NotesDocumentCollection Смысл данной функции достаточно тривиальный. Создаём юзверьскую папку, меняем её дизайн на нужный нам, затем наполняем эту папку подходящими под наши условия элементами прайса. После чего используя PickListCollection показываем нашу папку пользователю для того чтобы он отметил необходимы(е/й) элемент(ы) прайса. Всё бы хорошо, но, к сожалению пришлось написать ненавистные мной две строчки, помеченные как ***. Суть проблемы: только что созданную папку _нельзя_ вывести на экран PickList'ом, Lotus нечеловечески ругается фразой "Entry not in design list". Пробовал всякое, никак не смог побороть. Может быть кто-то уже наступал на эти грабли и нашёл способ обойти их?On Error Goto Error_ ' Нижеследующий On Error необходим для того, чтобы корректно отработался Refresh, ' на случай, если какое-то из полей заполнено некорректно. On Error 4412 Goto Exit_ Dim uDocCollection As NotesDocumentCollection Set uDocCollection = uLifeDB.Search("", Nothing, 0) Dim sUserFolder As String Dim uFolder As NotesView sUserFolder = "(" & Left(uSession.UserName, 30) & ")Price" Set uFolder = uLifeDB.GetView(sUserFolder) If (uFolder Is Nothing) Then Call uLifeDB.EnableFolder(sUserFolder) Evaluate({@UpdateViewDesign("} & sUserFolder & {";"} & "VPrice" & {");}) Set uFolder = uLifeDB.GetView(sUserFolder) If (uFolder Is Nothing) Then Messagebox "ERROR: " & "Не могу создать папку [" & sUserFolder & "]" Goto Exit_ Else *** Messagebox "ERROR: " & "Пожалуйста, перезагрузите клиента Lotus Notes, перед тем как создавать проекты." *** Goto Exit_ End If End If Call uFolder.AllEntries.RemoveAllFromFolder(sUserFolder) Dim sFormula As String sFormula = |SELECT Form = "FPrice"| sFormula = sFormula & | & (| & |sPriceTopName = "| & Replace(sPriceName, |"|, |\"|) & |"| If (sPriceDate <> "") Then sFormula = sFormula & " & " & |nPriceDate = | & sPriceDate End If sFormula = sFormula & |)| Dim uDateTime As NotesDateTime Set uDateTime = New NotesDateTime("") Dim uCollection As NotesDocumentCollection Set uCollection = uDB.Search(sFormula, uDateTime, 0) Call uCollection.PutAllInFolder(sUserFolder) Dim uUIWorkspace As New NotesUIWorkspace Set uDocCollection = uUIWorkspace.PickListCollection( _ PICKLIST_CUSTOM, _ bMultipleSelection, _ uLifeDB.Server, _ uLifeDB.FilePath, _ sUserFolder, _'"VPrice", _ "Выбор позиции из прейскуранта", _ "Выберите цену (черные строки)")', _ '|2. АНО "Лабораторные испытания"|) Call uFolder.AllEntries.RemoveAllFromFolder(sUserFolder) Exit_: Set GetPriceDocuments = uDocCollection Exit Function Error_: Messagebox sError & Error$ & " (#" & Trim(Str(Err())) & ": line: " & Trim(Cstr(Erl())) & ")" _ & " in subroutine " & Cstr(Getthreadinfo(LSI_THREAD_PROC)) _ & " from subroutine " & Cstr(Getthreadinfo(LSI_THREAD_CALLPROC)), MB_ICONSTOP, "Error" Resume Next End Function 12. ACCPAC FAXserve 7.0 for Win (Includes 5 Mailboxes )Решения FAXserve позволяют работать на платформах Microsoft NT/2000 и Novell NetWare и поддерживают интеграцию с системами групповой работы Microsoft Exchange, IBM Lotus Notes, Novell GroupWise и любыми почтовыми системами SMTP.13. Dr.Web для IBM Lotus Domino Антивирус + Антиспам Многопользовательские лицензииВысокоэффективное решение для обработки и фильтрации на вирусы и спам входящего и исходящего трафика на платформе IBM Lotus Domino под управлением Windows Server 2000/2003. Подробнее о "Dr.Web для IBM Lotus Domino Антивирус + Антиспам Многопользовательские лицензии"14. Итоги недели: 30 сентября - 5 октябряЕсть повод порадоваться и представителям бизнес-сектора пользователей iPhone: лучшее решение для коллективного бизнеса от IBM - Lotus Notes (soft/utiliti/ibm-vipustila-veb-prilozhenie-lotus-notes-dlya-iphone.html) теперь доступно в виде веб-приложения для iPhone.15. Kaspersky Total Space Security Лаборатория КасперскогоАнтивирус Касперского для Lotus Notes/Domino16. Kaspersky Enterprise Space Security Лаборатория КасперскогоОбработка сообщений, баз данных и других объектов серверов Lotus Domino;17. Изменение контекстного менюПодскажите, можно ли в программе удалить из контекстного меню представления стандартные функции (вроде copy, cut, move to folder и др.)? И можно ли изменить порядок вывода этого меню?18. Неподдерживаемая версия файла учетной записи.Вобщем вопрос.Где и при каких обстоятельствах это регулируется при регистрации через Администратор я нашел. Но проблема в том, что регистрация пользователей идет по кнопке через NotesRegistration. Можно ли как то программно ставить Maximum compatible with all releases (630 bits)? Или где это зашито, что бы перешить? Волею судеб некотормы пользователям нужно работать в 5 версии лотуса. Я так понимаю к коду это вряд ли привязано. Ибо один код на разных серверах, в разных доменах. Профили серверов идентичные вроде. По крайней мере, та часть, на которую указывает хэлпа. 19. женская фригидность миф или реальностьв чем секрет20. Adding Graphics to Documents, Spreadsheets, and PresentationsThis video covers tools that are common to all three productivity tools, and shows how to add graphics into documents, spreadsheets, and presentations using different methods. Watch the video.21. Creating and using a real-time port monitoring application powered by IBM Lotus Sametime instant messagingLearn how to create a port checker application that, when combined with IBM® Lotus® Sametime®, can provide instant notification of outages in your environment. The Lotus Sametime toolkits can be used in powerful ways to create customized applications that harness the power of Lotus Sametime.22. Re: Поменять Template name сразу у нескольких баз_http://forum.sysfaq.ru/index.php?showtopic=11462 продолжение тута23. Поменять Template name сразу у нескольких базДобрый день.Как можно поменять "Template name" сразу у нескольких баз скопом ? 24. Поменять Template name у нескольких баз сразуДобрый день.Как можно поменять "Template name" сразу у нескольких баз скопом ? 25. A useful new document in the Designer WikiThanks to Paul Hannan, who posted a document in the Designer Wiki describing how to create dynamic radio buttons and checkboxes in an XPage. I encourage you all to go explore this wiki, a new develop ...26. Domino Blog - editing default theme and tag libraryThe Lotus Notes Domino Blog template works out of the box, and provides all that is needed to get started with blogging using a "default theme": You can however edit the look and feel however you27. добавление участников встречи, отправка приглашений на встречуЗдравствуйте!Я пишу веб-службу на C# для Lotus Domino 6.5. Встречу создаю примерно так:
Вопросы такие: 1) Как добавить участников встречи? 2) Как выслать приглашения участникам? Спасибо! 28. Ищется для тестов Nokia Intellisync Wireless EmailМожет кто поделится, очень надо.29. Vote for technical content ideas on IdeaJam!:: Abstract not available ::30. Harness the power of XPages in Lotus Domino DesignerNow available on developerWorks - a new tutorial called "Harness the power of XPages in Lotus Domino Designer." From the abstract: One of the latest additions to the Domino Web developers' toolkit o ...31. Integration of IBM Lotus Connection 1.0.1 with IBM Tivoli Access Manager V6.0This article describes the step by step procedure for integrating IBM Lotus Connections with IBM Tivoli Access Manager V 6.0. It is intended to help administrators protect the features of IBM Lotus Connections via the Tivoli reverse proxy solution known as WebSEAL and provide the convenience of Single Sign On using LTPA cookie mechanism.32. Re: сортировка более чем по одному полю или группировка + сортировкасоздать в папке колонку с категоризацией (группировка) и следующую зделать колонку по которой будет сортировка(зделать её сортировочонй)33. Антивирусное ПО для Lotus DominoДобрый день.Подобной темы в этом форуме не нашел (а если таковая имеется, то просьба не пинать ) Предлагаю здесь постить отзывы о различных продуктах для защиты от вирусов под Domino. ESET NOD32 for Lotus Domino. Сидел на данном продукте с два года. Весьма не понятный оказался продукт. Из себя антивирус представляет набор баз, которые копируютя в папку DATA. http://forum.sysfaq.ru/index.php?act=attach&type=post&id=5320 Отдельно на сервере устанавливается обычный ESET NOD32 для Windows 2003, подкидывается ключик с "лицензиями" и этот движок видимо использовался для сканирование. Говорю видимо, так как даже суппорт мне не смог ответить какой механизм работы данного продукта, на каком этапе происходит проверка, каким образом считаются лицензии (по всей видимости никакого подсчета не ведется). Частенько наблюдал картину, антиврус который установлен на сервере под виндой орал что обнаржил вирус в nSMTP.exe и просил разрешения удалить его или поместить в карантин. Вот так выглядит главная страничка антивируса. http://forum.sysfaq.ru/index.php?act=attach&type=post&id=5321 Кроме настроек действий, выполняемых антивирусом, есть фишка , которое носит громкое название Mail Filter Setup, а по сути жалкое и убогое подобие серверных правил, причем еще и не работающее. http://forum.sysfaq.ru/index.php?act=attach&type=post&id=5322 Самые главное настройки и собственное единственные http://forum.sysfaq.ru/index.php?act=attach&type=post&id=5324 А вот так выглядит карантинная база. http://forum.sysfaq.ru/index.php?act=attach&type=post&id=5325 Вот и весь антивирус, который "вродебы" работает. 34. Проблема с сертификатом пользователяв общем трабла в том, что при регистрации нового пользователя в поле дата создания ключа (Current key creation date) стоит дата ваще не та, например сегодня 1.10.2008, а там 20.12.2008. При этом дата на сервере стоит нормальная, с датой на компе котором я юзаю lotus admina тоже все впорядке. Не пойму в чем дело. Из за этого не могу настроить клиента юзеру, потому что вылазиет окно типа Срок действия сертификата истек.35. Устанавливается ли на Xp то что скрыто под темой 6.5.6 Fp21. Встанет ли под XP следующее(спратано под темой 6.5.6 Fp2 см. форум):title=IBM Lotus Domino Server 6.5.6 for Windows 2000, 2003 English(C99HWEN); title=IBM Lotus Domino Server 6.5.6 Fix Pack 2 for Windows 2000/2003(C16VSEN); File Name: clients_656.exe? 2. Какие приложения устанавливает файл clients_656.exe? Растолкуйте пожалуйста. Мне необходимо научится разрабатывать приложения подобные приложениям электронного документооборота. Как я понимаю придется самостоятельно освоить и установку и администрирование т.к дома за меня это ни кто не зделает. Думаю что лучше начать именно с версии 6.5x по причине того что есть книга по администрированию "Domino 5 & 6. Администрирование сервера" Кирклэнд Р. и на работе установлен сервер и клиент 6.5.3. Хотелось бы узнать мнение профи, прошедших путь изучения данного продукта IBM. На данный момент мой уровень примерно таков, Delphi+MsSql, win32-средне, сети-поверхностно. 36. Best Practices for multi cultural templatesTemplate Development guideline for localization consideration Avoid using concatenation string Issue: The full sentence will be tagged into the separated terms in the DGW glossary if it con37. Ищу дистриб почт.клиента Lotusnotes 6/6,5 RuМужики, помогите плиз, очень над ..На этом форуме нашел ссылку но она не фачит! |#^#]>http://forum.codeby.net/?showtopic=19620|#^#]> title=IBM Lotus Notes Client 6.5.6 for Windows 95, 98, 2000, XP Russian(C120HRU) File Name: C120HRU.exe Size: 150MB ]]>http://www.sendspace.com/file/5blepf]]> - сцылка не работает уже давно походу 38. Архивация с сервера на серверДобрый день!Появилась необходимость настройки архивации почты с сервера на сервер. Для этого настроил политику (Explicit),создал документ Program c параматрами lo compact -a mail Однако в логах на сервере - источнике видим : 29.09.2008 04:06:44 Archiving documents from mail\user.nsf (user) 29.09.2008 04:06:46 Error archiving documents from mail\user.nsf: You are not authorized to use the server on remote server 29.09.2008 04:06:46 Compacting mail\user.nsf (user) 29.09.2008 04:06:48 Compacted mail\user.nsf, 0K bytes recovered (0%) то же самое при попытке запуска данной команды с консоли : 29.09.2008 10:04:48 Error archiving documents from mail\user: You are not authorized to use the server on remote server Однако, если убрать политику архивирования, то архивирование и сжатие запускается (если настроено в клиенте - с сервера на сервер) Буду очень рад если поможете мне с решением данной проблемы Все сервера - LD 6.5.4 Все в одном домене 39. Виснет Web сервер.Извените не знаю как сформулировать грамотно, но надеюсь будет понятно. Сервер Domino 6.5.4. Пользователи имеют только WEB доступ к серверу. Каждое утро виснет сервер, вернее виснет только та его часть которая отвечает за предоставление информации по WEB интерфейсу. Пользователи не могут отобразить\получить документы с сервера, в тоже время я используя для соединение клиент Notes свободно, без всяких тормозов, просматриваю эти данные. Как можно разобраться в проблеме? Как выявить причины проблемы?40. Lotus Notes без DominoРебята, помогите, пожалуйста новичку.Необходимо настроить lotus notes просто для отправления и получения почты. При этом используя не domino, а серверы pop.mail.ru и smtp.mail.ru. Проблема в том, что письма принимаются, но не отправляются. В сводке репликации выдается ошибка "Не удается найти путь к серверу. Проверьте сетевое подключение." Видимо он ищет домино, но в конфигурации клиента и параметрах расположения везде указано не использовать домино. Подскажите, пожалуйста. в чем может быть проблема? Версия программы 8.0. 41. Есть ли вариант 301 редиректа для Lotus?Прошу прощения, если что-то будет некорректно в моей формулировке, но я совсем новичок (если не сказать больше).Ситуация следующая. Есть три доменных имени site1, site2 и site3. "Сайтом" по сути является site1, который написан в Lotus. два других доменных имени просто закреплены за тем же IP-шником. В результате поисковые системы видят первый сайт как основной, а два других - как его зеркала. Это плохо. Закрыть два других сайта мы не можем, так как они тоже приносят определенный дополнительный трафик. На Apache существует решение данной проблемы в виде так называемого 301 редиректа, который говорит поисковому роботу, что данный сайт перемещен "на постоянное место жительства" по другому адресу. Есть ли аналогичный вариант постоянной переадрессации с одного домена на другой для Lotus? На данный момент у нас получилось установить только 302 редирект. но он не устраивает поисковые системы. т.к. это временная переадрессация, и поисковый робот по-прежнему продолжает индексировать site2 и site3 и рассматривать их как зеркала. ОЧЕНЬ НУЖНА ВАША ПОМОЩЬ!!! 42. сортировка более чем по одному полю или группировка + сортировкаДобрый деньLТ 8.х необходимо выполнять группировку писем, по одному из полей с сортировкой по другому, как реализовать ? Заранее спасибо. 43. Has Twitter flown into your life?I get the whole social networking thing (which is a good thing because I work on Connections.) I see the benefit of connecting in every which way, with shared bookmarks, blogs, wikis, and activities. ...44. Customer tips on improving Connections user helpThe best part about getting out of the office is getting into the real world of how customers use our products. This week I had the pleasure of helping out at the Lotus Leadership Alliance conference ...45. News from the Lotus Leadership Alliance ConferenceThe IDC team was well-represented at the recent LoLA conference in Fort Lauderdale. This conference brings together customers who want to lend their vision to help ensure that the Lotus and Portal so ...46. Удаление документов в почтеМожет немного глупый вопрос но все же:У пользователей удаление доков в почте по разному - у одних - выделил, delete, f9 , у других просто выделил, delete. Где это настраивается? Ищу уже второй день 47. Присвоение нескольких значения полю Reader на LotusscriptЗдраствуйте. Вопрос может и глупый, но ничего сделать не могу и форум весь перерыл ничего такого не нашел. Мне надо на LotusScript присвоить значения треж лотус имен полю ReaderDos(тип Readers) в событии QuerySave нового документа. Я пытался сделать так tmpText = "User1/org ; User2/org" uidoc.FieldSetText("ReaderDos";tmpText) Полю ридерс эти значения присвайваются, но эти пользователи документ не видят Делал так tmpText = "User1/org" & Chr(10) & Chr(13) & "User2/org" uidoc.FieldSetText("ReaderDos";tmpText) и так uidoc.FieldAppendText("ReaderDos"; "User1/org") uidoc.FieldAppendText("ReaderDos"; "User2/org") Ничего не помогает, я так понимаю, я что то делаю совсем неправильно, помогите срочно надо..... Спасибо Блиц-опрос
Вакансии для специалистов1. Lotus Notes--Description--Lotus Notes / Domino DeveloperRequired Skills:�XTwo to three years of programming in Lotus Notes / Domino�XA four-year bachelor*s degree (or equivalent education and experience)�X...2. Lotus NotesInterview Type * Phone Interview followed by In Person InterviewShort Description: Work with Oracle PL/SQL resources to restore or rewrite Lotus Notes update processes from Oracle to Lotus Notes datab...3. Lotus Notes DeveloperShort Description: Work with Oracle PL/SQL resources to restore or rewrite Lotus Notes update processes from Oracle to Lotus Notes databases. Complete Description: With full competency, devises or mod...4. Lotus Notes Apps Developer***Our client is actively looking for Sr Lotus Notes Developer******For faster response please submit your resume with contract rate on W2/1099**************Messaging and Directory Operations * Lotus ...5. Lotus Notes AdministratorDESCRIPTION: Support and daily maintenance activities for Lotus Notes and Blackberry servers, Lotus Notes clients, and Blackberry devices. Will provide the Helpdesk with assistance in troubleshooting ...6. Lotus NotesLocation: Springfield, ILLength: 6 months (with possible extensins)Rate: All inclusive Hourly Rate. (Client does not pay expenses) The cleint is upgrading their Lotus Notes Application to Office 2007....7. Lotus Notes DeveloperThis is a 5 month CONTRACT in the Springfield, IL area.Our direct client is looking for a Lotus Notes Developer to join their team immediately.Project description:We are upgrading the DOI Complaints s...8. Lotus Notes DeveloperFunctional expert in the area of Lotus Notes Development and Support. - 5+ yrs Development experience- Designer and Team Studio- Administrator experience a plus- Supervision and leadership abilities- ...9. Lotus Notes/Domino AdministratorSeeking a Lotus Notes/Domino Administrator with 3-5 years of experience with Release 6/7/8 on AIX,Solaris and Windows platforms. Experience with Lotus Notes/Domino R7, Lotus Notes Development and Reme...10. Project Manager w/Lotus Notes MigrationW-2 CANDIDATES ONLY!!Project Description: The position will play a key project management role in the conversion to Domino 8. This includes all standard project management processes, tools and executi...11. Lotus Notes/Domino ArchitectW-2 CANDIDATES ONLY!Project Description: This position is to architect the Domino design of the international sites and dedicated servers for the new BNY Mellon Domino environment. - Knowlegde of Domi...12. Junior Lotus Notes AdministratorW-2 CANDIDATES ONLY!Project Description: Candidate will be responsible for security administration of Lotus Notes ids and will support a large number of users in Europe and the United States. Will als...13. LOTUS NOTES DEVELOPERWe need a strong Lotus Notes Developer with Manager Access in Production for our direct client in Pittsburgh, PA for 6 months project.***Please send me the resumes of the right match to the requiremen...14. Need Email Administrator (Lotus Notes/Exchange)Strategic Staffing Solutions is currently looking for an Email Administrator for one of our largest clients in Houston, Texas.This individual must have solid experience with both Lotus Notes and Excha...15. Lotus Notes / Oracle Developer!!!!!!!!!!! Contract to Hire !!!!!!!!!!!!!!!!Candidate MUST HAVE:5+ years experience in Lotus Notes 3+ years of Oracle programming experience (MUST)Location: San Jose, CA or Los Angeles, CAThis projec...16. Lotus Notes / Domino DeveloperOur client is has an immediate need for a qualified Lotus Notes development professional.In this role, you will be responsible for detailed technical design and development of applications using exist...17. Lotus Notes Domino DeveloperWe are searching for 2 Domino Developers to join our growing team! We have 2 positions open, and are currently meeting with candidates that have a good, solid background in Lotus Notes development. If...18. LOTUS NOTES DOMINO EXPERT WANTEDOur client is in need of a Lotus Notes Domino Systems Administrator to assist with a week project. The week project is scheduled to assist the team while two of the IT Managers are on vacation.To be c...19. Lotus Notes Support TechnicianMUST BE US CITIZENAs the Lotus Notes Support Technician you will be responsible for overseeing the Lotus Notes e-mail environment in a large corporate setting (6000+ mail boxes).Position Description:*...20. Lotus Notes DeveloperOne of the Major Financial Institutions in Phoenix,AZ is looking for a Lotus Notes Developer with following skills and experience:Will work in small motivated teams to analyze, design, code, test, and...21. Lotus Domino - Analyst/Programmer/DeveloperJob Title: Lotus Domino - Analyst/Programmer/Developer Job: Permanent, Full Time Location: Reading, Berkshire Salary: £30k  £40k + Flexible Benefits Responses to: Fahmida.afrin@profiles-uk.com Our client, a world-leading technology and outsourcing..., Salary: £30k à£40k + Flexible Benefits...22. Lotus Notes Administrator (75%) / Developer (25%)--Description--Lotus Notes Administrator Systemtec is actively seeking an experienced Lotus Notes Administrator (75%) / Developer (25%) for a contract to hire opportunity in Columbia, SC. Primary Obje...23. Lotus Notes--Description--Lotus Notes / Domino DeveloperRequired Skills:�XTwo to three years of programming in Lotus Notes / Domino�XA four-year bachelor*s degree (or equivalent education and experience)�X...24. Lotus Notes Developer--Description--Seeking a Lotus Notes Developer for a 5 month contract position located in Springfield, IL. The company is a Direct Client of ours and is a great opportunity. Project descriptionThe fol...25. Lotus Notes Administrator R7.0 IT Information : CW_CA_LOTUS - $1000 Referral RewardJob Title: Lotus Notes Administrator R7.0 IT Information : CW_CA_LOTUSShort Description: Lotus Notes Administrator R7.0 IT Information Technology Server Domino Provide system admiLocation: Valencia, C...26. Project Manager w/Lotus Notes MigrationW-2 CANDIDATES ONLY!!Project Description: The position will play a key project management role in the conversion to Domino 8. This includes all standard project management processes, tools and executi...27. LOTUS NOTES DEVELOPERWe need a strong Lotus Notes Developer with Manager Access in Production for our direct client in Pittsburgh, PA for 6 months project.***Please send me the resumes of the right match to the requiremen...28. Lotus Notes Developer with .NET(US Citizen Only), Atlanta, GAThis is an fully funded and immediate opening:Position: Lotus Notes DeveloperLocation: Atlanta, GADuration: Long TermStart Date: ImmediateSalary: $65K/AnnumUS Citizens who are clearable.Citizenship is...29. Lotus Notes Developer (.Net)Our client, a leading government contractor is in search of a seasoned Lotus Notes Developer with .Net development experience. This position is slated as a 3-6 month contract to hire opportunity.*Cand...30. Lotus Notes DeveloperOne of our clients is looking for a Lotus Notes Developer to work aspart of a team for application development, analysis of existingapplications, operations, maintenance and support.The main responsib...31. Lotus Notes API developerLotus Notes API DeveloperBinary Tree is an IBM Premier Business Partner and a Nationally Managed Microsoft Gold Certified Business Partner and we are looking for a Lotus Notes API Developer to add to ...32. Sr. Lotus Notes Admin.Must have strong notes R6/R8, calendering and scheduling. Domino on Linux and roaming user support a must Sr. Lotus Notes/Domino Admin Description:Candidate will be responsible for daily monitoring an...33. Senior Lotus Notes Administrator - R8 on LinuxOur client is seeking a Senior Lotus Notes Administrator on a contract basis at their offices in Cambridge, MA. The expected duration of the contract is 3 to 6 months with a strong possibility of rene...34. Lotus Notes AdministratorCIBER is currently recruiting for a Sr. Lotus Notes/Domino Admin for a role in Cambridge, MA. A successful candidate will be responsible for daily monitoring and support of the Notes servers in a 7x24...35. Lotus Notes DeveloperStable company is currently looking for a Lotus Notes Developer. Candidates must have 3+ years of Lotus Notes Development experience and JavaScript experience. Any experience working with SQL, DB2 or ...36. Lotus Notes/Domino AdministratorSeeking a Lotus Notes/Domino Administrator with 3-5 years of experience with Release 6/7/8 on AIX,Solaris and Windows platforms. Experience with Lotus Notes/Domino R7, Lotus Notes Development and Reme...37. Lotus Notes DeveloperThis is a 5 month CONTRACT in the Springfield, IL area.Our direct client is looking for a Lotus Notes Developer to join their team immediately.Project description:We are upgrading the DOI Complaints s...38. Lotus NotesLocation: Springfield, ILLength: 6 months (with possible extensins)Rate: All inclusive Hourly Rate. (Client does not pay expenses) The cleint is upgrading their Lotus Notes Application to Office 2007....39. Quickr/IBM Lotus Notes Domino Web DeveloperQuickr/IBM Lotus Notes Domino Website developer to work on a high-profile project for a government client. The Quickr/Website developer will participate in the identification of functional requirement...40. Lotus Notes Developers - Washington DC (US Citizens only!)FOR IMMEDIATE CONSIDERATION, SEND YOUR RESUMES DIRECTLY TO rgupta@izarinc.comLotus Notes Developers Washington, DCTemp-to-perm positionIZAR Associates is an IT Consulting & Staffing company. Currently...RTFM Читаем Справку (help.nsf)1. Автоматическое удаление сохраненных Web-страниц | Справка Lotus Notes 72. Автоматическое удаление приглашений на собрания из папки "Входящие" | Справка Lotus Notes 73. Автоматическая обработка приглашений на собрания | Справка Lotus Notes 74. Автоматизация выполнения задач с помощью простых агентов | Справка Lotus Notes 75. <Имя> отсутствует в адресной книге. OK - пропустить; "Отмена" - стоп. | Справка Lotus Notes 76. Атрибуты HTML-тегов для серверов Domino | Справка Lotus Notes 77. Архивация почтовых сообщений для освобождения места | Справка Lotus Notes 78. Архивация документов базы данных | Справка Lotus Notes 79. Архивация | Справка Lotus Notes 710. Адресация почты | Справка Lotus Notes 711. Выключение режима отображения в папке "Входящие" ответных сообщений, относящихся к приглашениям на собрания | Справка Lotus Notes 712. Выделение сообщений цветом и значками "Кому" и "Копия" | Справка Lotus Notes 713. Вывоз Notes за пределы США | Справка Lotus Notes 714. Выбор сертификата по умолчанию | Справка Lotus Notes 715. Выбор папки | Справка Lotus Notes 7Закладки о Lotus Notes1. IBM Lotus Notes/Lotus iNotes 8.5 and Domino 8.5 - Public Beta 2008/10/06 19:21:482. Code in Globals of Subforms for PerformanceFrom the e-office Domino weblog - Also check for leading spaces in $$ScriptName item of subform note3. Sort collation item not removed when you remove sort options for a column or when you delete a columnIBM Technote4. Ed Brill5. IBM developerWorks : Performance6. Putting the right spin on Domino server performance (Part 1)This article covers some common misconceptions about Domino performance statistics such as Mem.Allocated and Pages/Sec, and recommends some new features not yet in widespread use (although they should be).7. Configuration documents - fast and reliableTo store the configuration of Notes applications, there are to obvious possibilities and a third, not so obvious one, combining the benefits of the other alternatives.8. assonos blog :: SnTT: Starting Batch Files with Program Documents9. Notes/Domino 6 and 7 Forum+ abs+10. IPhone: IBM iNotes Ultralite Brings Lotus Access to iPhones11. Domino Blog - editing default theme and tag library12. Lotus Notes Knowledge Depot: Error: 'Some documents were not archived...' when trying to archive13. Die Konferenz für IBM Lotus Notes & Domino IT Manager, Administration und Entwicklung14. IBM、iPhone向けNotes「Lotus iNotes」発表 - ITmedia News15. IBM Lotus Notes Domino IT Contract Management software,UKBasic offer Lotus Notes Domino Contract Management software for IT Helpdesks. Manage contracts and suppliers effectively with IT Contract Management software, based in Nottingham, Midlands, UK16. Whoa, Domino: IBM Lotus Notes Comes To iPhone17. OpenNTF.org - Lotus Notes and Domino Open Source Community18. 企業のコラボレーション基盤を考える - スペシャル - ZDNet Japan19. Форумы и обсуждения о ПО Lotus Notes КомпасИспользуя в своей деятельности ПО Lotus Notes, часто приходится прибегать к коллективному разуму. Не всегда есть рядом тот гуру, к которому можно обратиться с вопросом. Ниже указаны места где можно найти таких гуру. Специалистов по программированию и администрированию в Lotus Notes/Domino. Также собираются и пополняются материалы для улучшения поиска необходимой информации.Источники знаний. Сайты с книгами
Книги и документация по Lotus Notes/Domino1. IBM Lotus Notes and Domino 8 Reviewer's GuideRedpaper, published: Fri, 28 Dec 2007
- New productivity tools for users With Lotus Notes and Domino 8, world class business e-mail and collaboration take an exciting step forward, offering new approaches to enhance efficiency and creativity, while extending the value of current investments. 2. Implementing IBM Lotus Domino 7 for i5/OSRedbook, published: Mon, 2 Apr 2007
- Guidelines for deploying and administering Domino 7 on i5/OS With the introduction of IBM Lotus Notes and Domino 7, IBM Lotus continues to set the standard for innovation in the messaging and collaboration market that Lotus defined two decades ago. 3. Lotus Notes Access for SAP SolutionsRedpaper, published: Tue, 27 Feb 2007
- Out-of-the-box SAP integration for your Lotus Notes users IBM Lotus Notes access for SAP solutions can provide even greater business value for companies using both Lotus Notes software and SAP enterprise systems. Lotus Notes. Видео и изображения1. iNotes running on iPhonefrankps posted a photo: I have just connected to the latest version of Lotus Domino server in our test environment. I can't wait to the servers in production get updated! 2. No-View NotesDocument Lookup, UNID Logic, & Environment VarsIBM Lotus Notes/Domino Application development technique allowing for logic-driven NotesDocument Universal ID assignment and Domino View-free NotesDocument lookups. An added bonus of using Lotus Notes Client Environment Variables allows us to streamline the @Password-HASH evaluations. Example: http://www.dominoguru.com/pages/noview_UNID_envvar_example.html Author: christoohey 3. MessageSolution Enterprise Email Archive Lotus Notes SupportMessageSolution Enterprise Email Archive for Domino Server provides seamless integration with Lotus Notes. End-users can easily search, restore, and view their archived email directly from within their Lotus Notes client. Author: messagesolution 4. Lotus Notes 8 Case Study - ISW & SDSCase Study where ISW (http://www.isw.com.au), an Australian IBM Premier Partner team with their customer SDS (http://www.sds.asn.au), the administrative arm of the Anglican Church in Australia, to talk about their reasons for investing in IBM Lotus Notes 8 and the IBM Lotus Enhanced Collaboration offering. Overviews the demands of Generation Y and Web 2.0 and the efforts SDS are making to leverage IBM technologies and Open Standards to meet their organisational objectives. Author: abrownaustas 5. Introducing PocketMac for iPhone...Discover PocketMac for iPhone, the new software which syncs Entourage, Lotus Notes, and Meeting Maker. It also makes a complete backup of your text messages and call logs. Author: PocketMacVideo 6. XPage Ajax Type AheadThis movie demonstrates how to use type ahead function provided by XPage that is a new design element of Lotus Domino Designer 8.5. Author: munesora
По вопросам спонсорства, публикации материалов, участия обращайтесь к ведущему рассылку LotusDomiNotes |
В избранное | ||