In Notes 8.5.1, it's easier to change text color in e-mails (or other Notes documents), with a new toolbar icon! Just select the text you'd like to change, and then click the text color icon in the
As Notes/Domino developers we're used to being able to display icons in Views fairly easily. You just tick a box on the column properties and make sure the column value equals a number, which ties to the icon you want to show.
Not sure why I bored you with that bit. You all knew that already, didn't you.
Flex Alternative
How do we do implement a column icon in Flex though? Using a custom column renderer, that's how.
First thing to do is create a new custom Component. I created a file in Flex Builder at /src/net/codestore/flex/ColumnIconRenderer.mxml. The content of the file is below:
<?xml version="1.0" encoding="utf-8"?><mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" verticalAlign="middle" horizontalAlign="center"><mx:Script> <![CDATA[ import net.codestore.flex.IconLibrary; [Bindable] private var _columnName:String; public function set columnName(colName:String):void{ _columnName = colName; } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); var tmp:Class = IconLibrary[data[_columnName].toString().toUpperCase()+'_ICON']; if (tmp is Class){ img.visible=true; img.source = tmp; } else { //Icon doesn't exist in library img.visible = false; } } ]]> </mx:Script><mx:Image id="img" /></mx:Box>
The component is nothing more than a Box with an Image in the middle of it. We use the (very useful) method updateDisplayList which (as I understand it) gets called each time Flex renders or refreshes the display. In this method we look for an icon resource that matches the name specified in the column to which the renderer is tied. If the IconLibrary (more on that tomorrow) doesn't contain the icon specified we just hide the image.
Here's an example of the XML I'm sending to the Contact Manager database to use an Icon Column:
Notice the parts I've highlighted. I've defined a column called "Attachments" to go at the end of the view, which is of type "icon" and is tied to the <file_icon> node of each document. For any document that has an attachment the value will be paper_clip and the result looks like this:
The only other part to this is that you need to apply this new custom column renderer to the column of the grid. To do this, in the ActionScript that loads the XML and creates all the columns there's the following bit of code:
if (column.hasOwnProperty("@type") && column.@type=="icon"){var iconRenderer:ClassFactory = new ClassFactory(net.codestore.flex.ColumnIconRenderer); iconRenderer.properties = { columnName: column.valueOf()}; col.itemRenderer = iconRenderer; col.width=20; col.resizable=false;
}
In this bit of code the column object represents the <column> node I mentioned above, where type="icon". Notice that we're passing column.valueOf() to the columnName property of the renderer. The valueOf() the column node will be "file_icon" in this case and tells the renderer which child node to get its value from for each document.
All we need to do then is set the column's width and make it fixed. Hey, presto. It works.
It goes without saying, you're not limited to one type of icon per column or one icon column per view. You can have as many columns showing as many different icons as you choose -- just like in Notes! The beauty of this componentized, server-based XML approach being that it's all controlled from within your NSF and doesn't involve re-compiling any Flash SWFs.
Admin 2010 and Lotus Developer 2010 are coming to Boston, May 12-14. This year's presentations will include information on upgrading to 8.x, DAOS, XPages, and more. Sign up by February 19 to save $300.
POWER TOOLS 6.0 IS A SET OF 90 ADMINISTRATIVE UTILITIES FOR LOTUS NOTES & DOMINO Power Tools simplifies management of the Notes/Domino environment by automating routine tasks. Power Tools can manage or monitor mail files, groups, ACLs, agents, LOG.NSF, templates and more.
To include an icon in a Flex component you can simply embed it like below:
<mx:LinkButton label="Button with an Icon" icon="@Embed('../images/anicon.png')" />
While this works, it can get messy and cumbersome maintaining the set of icon files. Especially if you change your folder structure and all embedded images break. Not only that but if you embed the same icon in more than one place it takes up extra space (or so I believe) as each instance of the image is stored separately in the SWF.
A better idea is to have an icon library. This an idea I've adapted from this one. Once you get used to using a "library" there's no going back.
Here's the folder structure for the Contact Manager app. Notice the folder structure for the net/codestore/flex package, which contains all the reusable custom components I've come up with, such as the View, SearchField and FileManager.
Within this "codestore" package is a resources folder, which contains an icons folder, which, in turn, contains the silk folder with all 700+ Silk icons from FamFamFam.
Then there's the IconLibrary.as file, which looks a bit like this:
package net.codestore.flex
{ Bindable public class IconLibrary { Embed (source="resources/icons/silk/disk.png")] public static const SAVE_ICON:Class; [Embed (source="resources/icons/silk/bullet_disk.png")] public static const SAVE_SMALL_ICON:Class; [Embed (source="resources/icons/silk/cross.png")] public static const CROSS_ICON:Class; [Embed (source="resources/icons/silk/exclamation.png")] public static const ERROR_ICON:Class; [Embed (source="resources/icons/silk/error.png")] public static const WARNING_ICON:Class; [Embed (source="resources/icons/silk/information.png")] public static const INFO_ICON:Class; }}
What this gives us a quick and easy way to get to just the Silk icons we want. The LinkButton from above would now look like this:
<mx:LinkButton label="Button with an Icon" icon="{IconLibrary.CROSS_ICON}" />
No need to remember if they're there or what they're called as Flex provides us with type-ahead on the IconLibrary class. If the icon you're after isn't in the library you just add a new entry for it in the IconLibrary.as file. It's then available across the whole app.
Taking it Further
You're not limited to the Silk icons, of course. Remember the attachment manager component I talked about? Notice how each file has an associated icon:
To do this I added a set of icons to a "filetypes" folder you can see above -- one for each of the common files types. In the library code I then added a method called getIconForFileName() which looks a bit like this:
public static function getIconForFileType(type:String):Class{var icon:Class; type = type.toUpperCase(); if (type=="DOC" || type=="DOCX"){ icon = IconLibrary.FILE_DOC_ICON; } else if (type=="XLS" || type=="XLSX" ){ icon = IconLibrary.FILE_XLS_ICON; } else { icon = IconLibrary.FILE_DEFAULT_ICON; }return icon; } public static function getIconForFileName(fileName:String):Class{var tmp:Array = fileName.split("."); return getIconForFileType(tmp[tmp.length-1);
}
The Repeater that displays attachments on the form then has an easy way of getting an icon to show for the tile it represents.
You could take it even further than this if needed. I know I probably will.
It would be nice to have the sections of code that are protected from user, and simultaneously noncompiled and nonhided by hiding design. This would realize the reuse of code for the @-formulas. For example use these sections of code in:
Actions / Shared Actions (including in the hide formulas!);
Agents;
Columns / Shared Columns;
Fields / Shared Fields;
Computed Text;
formulas to insert the subform and so on - in any place where you can use @ formulas
In addition it would implement custom @-function (this is a long-standing pain developers)! To implement this idea, just need 2 things:
New element of design.
New @-formula, which can receive the code segment by the name of the element of design. Calculate the result could be using the @Eval. The new @-formula should work from Evaluate for use in Lotus Script.
It would be nice to have the sections of code that are protected from user, and simultaneously noncompiled and nonhided by hiding design. This would realize the reuse of code for the @-formulas. For example use these sections of code in:
Actions / Shared Actions (including in the hide formulas!);
Agents;
Columns / Shared Columns;
Fields / Shared Fields;
Computed Text;
formulas to insert the subform and so on - in any place where you can use @ formulas
In addition it would implement custom @-function (this is a long-standing pain developers)! To implement this idea, just need 2 things:
New element of design.
New @-formula, which can receive the code segment by the name of the element of design. Calculate the result could be using the @Eval. The new @-formula should work from Evaluate for use in Lotus Script.
There needs to be a way for IdeaSpace moderators to be able to moderate comments as well as ideas from the web UI. Just a simple graphic that will allow offensive/inappropriate comments to be removed from the view is all that is necessary. I have attached a mock up of what it could look like, not that I have actually implemented it. *wink wink*
Watched and subconsciously realized that something is wrong with our selection of "What's Hot"... Hot topics frozen :-)
I propose to form this set similar to the forums, that is, if the idea of adding comment or voted for it, then pick it up at the top!
IMHO, this is the easiest and best way to formation of hot ideas - good ideas will sometimes climb up, and people, who do not often come to the site, can see them and voted. Then they will see really important for us and priorities.
Domino processes the rules recursively so there is a chance of rules working againest each other. With that and the chance of mis-spelling or things just not working right.
It would be nice to be able to enter a url and have domino tell us what website docs/rules ect. apply to it.
Even if you could turn on logging for it so you could see how the server is prooessing the url.
Akira Sudoh has contributed a sample
for mail
retention customization for IBM Lotus iNotes. Mail Retention is one of the common
mailbox customization. This sample code demonstrates how you can create
the dialogbox that allows mailbox owners to mark ...
Auto-save of mail messages is easy to enable in recent versions of the Notes client - it's in user preferences.
Howver, it's not just mail messages that would benefit from auto-saving during editing - blog posts, wiki entries, application forms and so on are all at risk should the Notes client crash, hang or the machine itself lose power etc.
As far as I am aware, auto-save can be turned on within the Designer client by altering the form properties (correct me if I'm wrong, developers), but this is beyong 99% of users and most admins too.
So, can I suggest that auto-saving of new entries/comments etc is made possible by default in all bundled templates (including DominoBlog), and then it is enabled/disabled from Application Properties or Advanced Propoerties?
Since R8, the Mail view has had a nifty refresh icon, that is clever enough to know to kick off a replication process if a local replica is being used.
However, that tool seems to only be available in the Mail db.
I'd like it to be available in every database/application - and to be intelligent as to whether a simple refresh or replication is required. It would be relevant to 90% of the DBs I access - particularly blogs, forums, wikis etc.
The behavior is, once you do a spell check, save the email as draft and go back to that email later you should not have to re-check the words you already have signed off on.
Domino Express licenses are a very nifty way to get & deploy N/D for smaller customers.
BUT if you want to do something very simple, like have a backup server at a DR site that's 'hot' and ready, you enter a pretty complicated licensing situation.
Domino clustering is (honestly) one of the best selling points, esp when compared to the "business partner revenue cow" that is Exchange clustering.
For small, single server shops, we should make this very easy - even if there's a charge to upgrade the Express license to allow two-server clustering.
When using the "Show Calendars" option to import another user calendar into the existing calendar, All Day Events appear as standard calendar appointments if they are created under certain circumstances.