“Tell adminp process mailpolicy” generates errors without additional information

Today I encountered an issue when triggering the console command “tell adminp process mail poliy” .

AdminP processed the command but ended displaying

adminp1

While it is clear from the output that a problem exists, there is not enough information to determine how to correct the issue.

So I searched the KnowledgeBase and found a technote describing the issue. According to this technote, setting ADMINP_VERBOSE_POLL_TASK=1 in the notes.ini should give a more verbose output. But no way; the setting did not have any effect. I’m not sure, if the value of 1 is only valid for a Domino 7.x server. I’m running Domino 8.5 with HF1 installed.

I found out, that you have to use ADMINP_VERBOSE_POLL_TASK=2 on Domino 8.5 to get a more verbose output.


Clearing DBIID ??

Found several “Clearing DBIID” in the log of a recently updated server. The IBM Lotus Software Knowledgebase explains this entries as follows:

The entry is a new logging message specific to cases where a server (and database) use the transaction logging feature. The feature was introduced in Domino releases 8.0.2 and 8.5. The feature will also be included in Domino 7.0.4.

Read the full technote here.


BUG: Compress Design – Use With Caution

I a recent post I wrote that under some circumstances a database compact on a Domino 8.5 server can corrupt java applets in the database design.

Today, IBM support confirmed this as a bug:

Hello,

I was able to reproduce the issue you reported following your steps to
recreate.
This seems like a bug alright. I am going to create a new Software Problem
Report on this issue which will be brought to the attention of Level 3.

Notes 8.5 and Traveler 8.5 Multilingual

Lotus Notes Standard and Basic Client 8.5 and Lotus Notes Traveler 8.5 are available on Passport Advantage in the following languages:

Catalan, Chinese Simplified, Chinese Traditional, French, German, Italian, Japanese, Korean, Portuguese Brazilian, Spanish

You cannot find these downloads? Well, you have to open the IBM Lotus Notes and Domino 8.5 Multiplatform Japanese eAssembly(CR89HJA) category 🙂


Domino 8.5 and Compact

After upgrading 2 production servers to Domino 8.5 yesterday, I found this entry on the console when running a compact -c on the users mail mailfiles.

increasedby

I have seen this on several databases, but the amount of KB (  ~ + 11MB ) surprised me. Can someone explain this behaviour, pls?

All databases had ODS48 format with LZ1 compression and design and document compression enabled.


Notes 8.5 –> Compress Images

In Notes 8.5 you can automatically compress images pasted into documents.  Note that bitmap (.bmp) images that are imported into a Notes document are compressed; bitmap images that are pasted into a Notes document are converted to .gif or .jpg format.

Choose “File -> Preferences -> Basic Notes Client Configuration”, and then choose the appropriate setting under ‘Additional options’

The Notes 8.5 Release Notes says that the setting is selected by default but in the beta it isn’t!


A New Look

After installing Domino 8.5 Beta 2 and reading Jack Dausmann’s post “ND8.5 Beta 2 with XPages Baked In To Templates” I immediately created a new discussion application on the server and opened it in the browser.

The new GUI looks great and using xPages and css it can be easily modified to match a company’s corporate design. Even a company logo can be added by simply attaching the logo to the applications configuration document.

You have sliders for authors and tags and view pagination. I encountered one problem with tags. I tried to add an additional tag and saved the document. I reopened the document and the modification was lost. I created a new document and added two tags delimited by comma. The tags appeared in the tag list; but as a single tag. Seems that the field is not configured as a multi value field. I’ll check this after the Notes 85 Beta2 client download has finished …


IBM Lotus Notes Traveler 8.5

With Lotus Notes / Domino 8.5, a new version of Lotus Notes Travel(l)er will also be available. Here is a list new features for the IBM Lotus Notes Traveler 8.5.

Mobile device security policies

An administrator can now define mobile device security policies, along with other Lotus Notes Traveler application settings. The Lotus Notes Traveler client will monitor the device security settings, and if they are not compliant with the policy, an administrator defined action is taken.

Remote wipe

If a mobile device is lost or stolen, an administrator can issue a remote wipe command to remove all sensitive data from the device. You have the option to remove the Lotus Notes Traveler application and data or restore the device to the factory default.

Improved web server configuration support

The Lotus Notes Traveler server no longer requires the use of Internet Site documents for the Domino HTTP server configuration. This will eliminate a number of integration problems with other web applications that reside on the same Domino web server and that could not support Internet Site documents. Lotus Notes Traveler server will continue to support Internet Site Documents if they are already in use on the Domino Server.

Name Lookup

The name lookup feature of Lotus Notes® Traveler allows mobile users to search for and find information about users in the Domino® directory, or remote directories if directory assistance is configured. The name lookup feature can be accessed by selecting Lookup Name on the tools menu of the Lotus Notes Traveler client. By default, name lookup returns the first 25 results for a given query and returns names, telephone numbers, and e-mail addresses. You do have the option to customize the name lookup feature to best fit your needs.

Rich Text mail support

Rich text email can now be displayed on Window Mobile 6 devices, including support for fonts, tables and text color.

Lotus Traveler Access

It is now possible to explicitly limit who can and cannot access the Lotus Notes Traveler service on the Domino server. An administrator can define which users or groups of users that are allowed to use the service and which ones cannot.

Device management

A new Domino application database, LotusTraveler.nsf, shows information about the users and their devices that are using the Lotus Traveler service within the Domino Administration client for the current Domino server.

For further information follow this link.


AutoPopulateGroup – Scheduled Agent

In yesterdays post about how to automatically populate a group document, I published code to do the job in the foreground only. One of my blog readers complained about this. Maybe I was to naive to think that even an unexperienced java developer like me could modify the given code to run on a scheduled basis on the server.

Well, here is the code for an scheduled agent.

import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Vector; 

public class LDAPSearchWithFilter extends AgentBase { 

	private static String fldMembers = "Members";

    	public void NotesMain() { 

    	try {
        	Database _db;
        	Document _doc;
        	Session session = getSession();
        	AgentContext agentContext = session.getAgentContext();
        	_db = agentContext.getCurrentDatabase(); 

        	Agent ag1 = agentContext.getCurrentAgent(); 

        	String ldapCF = "com.sun.jndi.ldap.LdapCtxFactory";
        	String ldapURL = "ldap://localhost:389/";
        	String ldapBaseDN = "";
        	String ldapUserID = "";
        	String ldapPassword = ""; 

        	Hashtable env = new Hashtable(4);
        	env.put(Context.INITIAL_CONTEXT_FACTORY, ldapCF);
        	env.put(Context.PROVIDER_URL, ldapURL + ldapBaseDN);
        	env.put(Context.SECURITY_PRINCIPAL, ldapUserID);
        	env.put(Context.SECURITY_CREDENTIALS, ldapPassword); 

      	DocumentCollection _dc = _db.getAllDocuments();
      	Document doc = _dc.getFirstDocument();

      	while (doc != null) {
        	String searchCriteria = doc.getItemValueString("SelectionCriteria");
        	DirContext ctx = new InitialDirContext(env);
        	SearchControls ctls = new SearchControls();
		NamingEnumeration answer = ctx.search("", searchCriteria, ctls);
		PopulateGroup (answer, doc);
     		ctx.close();
        	doc = _dc.getNextDocument();
		} // end of while
	  } // end of try
		catch (Exception e) {
    		e.printStackTrace(); }
	} // end of Main 

	public static void PopulateGroup(NamingEnumeration col, Document doc) { 

    	try {
    	Item item = doc.getFirstItem(fldMembers);
    	Vector v = new Vector();
    	String result;
	if (col.hasMore()) {
        	while (col.hasMore()) {
            	  SearchResult sr = (SearchResult)col.next();
            	  result = (String)sr.getName();
                  v.addElement(result.replace(',','/'));
           	} // end of while
		  doc.replaceItemValue(fldMembers, v);
    		  doc.save(true);
		} // end of if
    	} // end of try
	catch (NamingException e) {
    		e.printStackTrace(); }
	catch (Exception e) {
    		e.printStackTrace(); }
	} // end of PopulateGroup
} // end of class

AutoPopulateGroup (If You Do Not Run Domino 8.5)

A few days ago, I wrote about a new feature of Domino 8.5 to automatically populate groups via a LDAP selectioncriteria. This is a great feature and I have successfully tested it on my sandbox server.
Since we run Domino 8.0.1 on our productive servers, we cannot use this very useful feature. …

But, with a few lines of JAVA and Lotusscript code, you can build your own solution to auto populate groups. Here is what I came out with.

I’ve created a subform with two fields and a button.

  • HiddenMembers, Text, hidden
  • SelectionCriteria, Text, editable

The “Populate Group” button contains the following code

'/* Declaration
Const fldMEMBERS = "Members"
Const fldHIDDEN = "HiddenMembers"
Const agntDOLDAP = "AutoPopulateGroup"

Sub Click(Source As Button)
	Dim s As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim db As NotesDatabase
	Dim agent As NotesAgent
	Dim doc As NotesDocument
	Dim uidoc As NotesUIDocument
	Dim searchResultItem As NotesItem
	Dim paramid As String 

	Set db = s.CurrentDatabase
	Set uidoc = ws.CurrentDocument
	Set doc = uidoc.Document
	Set agent = db.GetAgent(agntDOLDAP)
	Call doc.save(True, False)
	paramid = doc.NoteID
	Call agent.RunOnServer(paramid)
	Delete doc
	Set doc = db.GetDocumentByID(paramid) 

	Set searchResultItem = doc.getFirstItem(fldHIDDEN)
	Call uidoc.FieldSettext( fldMEMBERS,  "")
	Forall values In searchResultItem.Values
		Call uidoc.FieldAppendText(fldMEMBERS,  values)
		Call uidoc.FieldAppendText(fldMEMBERS, Chr(10))
	End Forall
	Call uidoc.Refresh
	doc.Remove(True)
End Sub

Like in Domino 8.5 you’ll have to run LDAP on your server. To access LDAP and do a search according to the SelectionCriteria, you need an agent with the following piece of Java code.

import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Vector; 

public class LDAPSearchWithFilter extends AgentBase { 

	private static String fldTmpMembers = "HiddenMembers";

    	public void NotesMain() { 

    	try {
        Database _db;
        Document _doc;
        Session session = getSession();
        AgentContext agentContext = session.getAgentContext();
        _db = agentContext.getCurrentDatabase(); 

        Agent ag1 = agentContext.getCurrentAgent();
        String paramid = ag1.getParameterDocID();
        Document doc = _db.getDocumentByID(paramid); 

        String searchCriteria = doc.getItemValueString("SelectionCriteria"); 

        String ldapCF = "com.sun.jndi.ldap.LdapCtxFactory";
        String ldapURL = "ldap://localhost:389/";
        String ldapBaseDN = "";
        String ldapUserID = "";
        String ldapPassword = ""; 

        Hashtable env = new Hashtable(4);
        env.put(Context.INITIAL_CONTEXT_FACTORY, ldapCF);
        env.put(Context.PROVIDER_URL, ldapURL + ldapBaseDN);
        env.put(Context.SECURITY_PRINCIPAL, ldapUserID);
        env.put(Context.SECURITY_CREDENTIALS, ldapPassword); 

    try {
       	DirContext ctx = new InitialDirContext(env);
        	SearchControls ctls = new SearchControls();
		NamingEnumeration answer = ctx.search("", searchCriteria, ctls);
		PopulateGroup (answer, doc);
        	ctx.close(); 

	    		} catch(NamingException e) {
     	   		e.printStackTrace();
    		} 

	    } catch (Exception e) {
    		e.printStackTrace();
    }
} // end of Main 

public static void PopulateGroup(NamingEnumeration col, Document doc) { 

    try {
    Item item = doc.getFirstItem(fldTmpMembers);
    Vector v = new Vector();
    String result;    

	if (col.hasMore()) { 

        		while (col.hasMore()) {
            		SearchResult sr = (SearchResult)col.next();
            		result = (String)sr.getName();
                	v.addElement(result.replace(',','/'));
           	} // end of while

			doc.replaceItemValue(fldTmpMembers, v);
    			doc.save(true);
		}
    }
	catch (NamingException e) {
    		e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    			}
	} // end of PopulateGroup
} // end of class

Set the agent’s runtime security to “2”, to allow restricted operations. When you have all code in place, you can test the function by typing a selection criteria and clicking the button.

The members field in your form should now show all persons that have “serv01” as their mailserver.

Download sample database


Tweak The Auto-Populated Groups Feature In Domino 8.5

Yesterday I wrote about the new Auto-Populated Groups in Domino 8.5 . Today I want to show, how you can tweak this feature by just adding a new subform to names.nsf on the server and not using any additional code or modifying existing code to make the feature work.

As we learned yesterday, Domino uses LDAP and a LDAP Query to populate the members field in an auto-populated group.

In 8.5 Beta 1 you can only select the option “HomeServer” in the “Auto Populate Method” field which results in a fixed string in the “SelectionCriteria” field . This field is computed and you cannot modify its value.

We could easily make this field editable. But this means to modify the standard coding which is not always a good idea.

But you can achieve the aim in another way. Follow these steps

  • Create a new subform
  • Create a new field on the subform ( SelectionCriteria, Text, Editable )
  • Give it the name Custom and an alias starting with $AutoPopulate followed by a number of your choice ( i.e. 9999)
  • Save the subform

When you now create a new group, the “Auto Populate Method” field contains a new option … Custom. Magic, isn’t it ?

In fact it is not magic at all. When you open a group form in edit mode, the “Sub GenerateSubFormsList” in subform $GroupInheritableSchema reads all design elements  and fills the “SubformsList” field with the names of all subforms starting with $AutoPopulate as an alias.

Then the following formula shows the subform according to the choice you make as an auto populate method

@If(AutoPopulate="" | AutoPopulate="0";"";"$AutoPopulate" + AutoPopulate)

That’s it, folks!

By the way, this is a great example of how to write code that allows enhancements without changing the code.


Auto-Populated Groups in Domino 8.5

Domino 8.5 comes with a new feature to use predefined criteria to automatically determine and update group membership.

Complete these steps to set up an auto-populated home server group.

  • Set up a Home Server auto-populated group in a Group document.
  • Specify the update interval for auto-populated groups in the Domino Directory Profile document.

and ( this is not in the administrator help for 8.5 )

  • You must have LDAP enabled on the server.

Why LDAP ? Take a look at the “SelectionCriteria” field in the recently created group document.


The LS Editor Won’t Make It Into 8.5

After installing the Lotus Notes / Domino 8.5 Beta 1, I could not find any Lotusscript Class browser in the new Eclipse based Designer.

Then I found this blog entry by Julian Buss

There is no new LotusScript editor. And the new, Eclipse based and class browsing LotusScript editor will NOT make it in 8.5

Julians post links to another post by John Head in the IBM Lotus Notes/Domino 8.5 Public Beta Forum

… this was announced at Admin 2008. It just did not make it in time. It will come in a future release after 8.5 … not sure which they have targeted