Tuesday, June 09, 2009

'Input Enabled' formula does not export in DXL using native exporter

Today we faced with funny problem in LN 6.5.4 (I'm sure the same behavior in any another version of 6.5.X)

We do export of some LN elements and when we import it back we discovered that Input Enabled formula disappear. I checked our DXL file and found that formula was non there. Then I used simple way to check where was the problem, I create simple form, put there 1 field with Input Enabled formula and using Tools\DXL Utilities\Exporter export it to file. There was no Input Enabled formula at all. Funny issues but now we have to rewrite some places.

FYI: This works correct in R7 and ++

Monday, June 08, 2009

JavaScript libraries and reference sites

Got it from BestPracticesWebAppDevDomino8.pdf

Ajaxian.com
a site dedicated to improving Web development

devguru.com
- A another site for Web development information

Dojo
http://www.dojotoolkit.org/

jQuery

http://jquery.com
A fast, concise, JavaScript Library that simplifies working with HTML documents

JSON.org
http://json.org
The home page for JSON information

MooTools
http://mootools.net
A compact, modular, OO JavaScript framework that is designed for the intermediate to advanced JavaScript developer

Prototype
http://www.prototypejs.org/

script.aculo.us
script.aculo.us
Provides an easy-to-use, cross-browser user interface

Yahoo UI
http://developer.yahoo.com/yui
Provides a set of utilities and controls, written in JavaScript

EXT
http://extjs.com
Provides for a cross-browser UI libraries


Some useful links:

Web development tools
http://www.ibm.com/developerworks/wikis/display/dominoappdev/Web+development+tools

Web development resources
http://www.ibm.com/developerworks/wikis/display/dominoappdev/Web+development+resources

Domino resources
http://www.ibm.com/developerworks/wikis/display/dominoappdev/Domino+resources

isNumeric for web

as I think the best approach to check value in web for IsNumeric is:

function IsNumeric(inputVal,sErrorMsg) {
if (isNaN(parseFloat(inputVal))) {
alert(sErrorMsg)
return false;
}
return true
}

I also used such approach, but I don't like it anymore
function IsNumeric(expression) {
var nums = "0123456789";
if (expression.length==0)return(false);
for (var n=0; n <>
if(nums.indexOf(expression.charAt(n))==-1)return(false);
}

return(true);
}

Thursday, February 12, 2009

overload of methods/functions in Lotus Script

I make overload for any methods/functions using next approach. It is quite simple and useful from my point of view

Sub new(key As Variant)
Select Case Typename(key)
Case "STRING":
call newForString(key) or do code
Case "NOTESDOCUMENT
call newForNotesDocument(key) or do code
Case "EMPTY
call newForEmpty(key) or do code
End Select

EncryptOnSend, how can we send encrypted email even if "aim-user" does not have a key to read it?

I was facing with interesting problem, have to send encrypted email to user even if user does not have a key to open/read encrypted email. Let's say in case if I user does not have the key to read/open encrypted email I would like to send him just a message with confirmation that he received an email that was encrypted by userA. So, my main point is to catch users which do not have key to read/open encrypted emails in moment when I send these emails.
Right now Domino automatically UNencrypt emails for users which do not have a key to read/open them.
From help: EncryptOnSend property
To encrypt a document when mailed, this method looks for the public key of each recipient in the Domino Directory. If it cannot find a recipient's public key, the method sends an unencrypted copy of the document to that recipient. All other recipients receive an encrypted copy of the document.

Wednesday, February 11, 2009

how we can check LIST for empty

Today I was faced with small issue, I realised that I don't know how to check LIST variable for empty. Really, I was so confused. I've done it using next approach, but to be honest I don't like it. If anybody knows better approch, please share it here!

...
isValid = False
Forall x In myList
isValid = True
Exit Forall
End Forall
...

Wednesday, February 04, 2009

How to disable autorunning SameTime in 8.5

After I installed LN 8.5 each time when I run LN8.5 the sametime run also. I don't like this because I don't use it. So if you want to disable it you should add/change variable in notes.ini:

IM_ENABLE_SSO=0

0 - means it will not run (or perhaps will not show icon in system tray)
1 - means it will run together with LN (or perhaps will show icon in system tray).

What I also did

Create file setup.txt and put next content there
IM.Server=fakeservername
IM.Port=80
IM.Protocol=1

then in notes.ini add line:
ConfigFile=SETUP.TXT

Tuesday, January 20, 2009

Transfer file to WebService and Encode/Decode base64 string

I had a task where I should give opportunity to user send file to WebService written on Java. File always should come as decode base64 string, and in WebService I should decode string to normal (it should be DXL content as result) and then import it in a special database, so I had small problem with decode/encod (dont know why but it was happen). So here this simple exmplae how to do it


public class Base64Test {
public static void main(String[] args) throws IOException {
String str = "my string";

String s = new BASE64Encoder().encode(str.getBytes("UTF-8"));
byte[] bytes = new BASE64Decoder().decodeBuffer(s);
String result = new String(bytes, "UTF-8");
System.out.println(result);
}
}

Saturday, December 20, 2008

Debug Lotus Notes applications

I would like to present which approaches I use during debugging LN applications. I would be happy if anybody add new interesting approaches.

[@Formula]

- @Prompt and @StatusBar – the easiest way to debug code written on @Formula
- Field Debug_Fld := value_debug
- @MailSend – for code that runs on server (sch. agents)
- notes.ini - I don't like this approach because of size of variables

Example
strA := "ABC"; strB := "DEF";
strC := strA + strB;
@Prompt([ok]; "strC";"strC = " + strC);
@StatusBar("strC = " + strC);
Field Debug_FieldName := strC;
@MailSend("username";"";""; "debug strC"; ""; "strC = " + strC);


[Lotus Script]
- Lotus Script Debugger as tool for debugging
- Print, MsgBox, NotesLog, Stop, on erorr goto errh

Example
Dim strA As String
Dim strB As String
Dim strC As String
strA = "ABC"
strB = "DEF"
strC = strA & strB
Print "strC = " & strC
Msgbox "strC = " & strC
Stop 'enable debugger require
Dim currentLog As New NotesLog( “debug log 1" )
Call currentLog.OpenFileLog( "c:\log.txt" )

Call currentLog.LogAction( "strC = " & strC)
Call currentLog.Close

[Schedule Agents]

- remote debugger (it is easy to enable it if you read help)
- send an email, msgbox (log.nsf), noteslog

[JavaScript]
- alert(value);
- try – catch();
- Microsoft script debugger \ Mozilla firebug \ Chrom debugger

Lets catch the next simple error

Example
code on the button use call function add, the body of function below
function add(frm){
var i1 = frm.Number1.value;
var i2 = frm.Number2.value;
var fld = frm.total;
fld.value = i1 + i2;
}

when we call function we will see next error:
what it could be? it does not provide us enough information (I think so). Now enable ie debugger
click Yes
Now we see where is error, but still could not understand "why?"
Now we are definitely close to solve the problem, we see that we did not take "number" field. Why we did not take number field? yes because of small first letter. We should wrote Number but not number.

[Java]
- Java debug console (System.out.println(“text”);
- Try / catch with NotesError and NotesException classes
- Remote java debugging with Eclipse

also I would like to recomend you external LN application
openlog.nsf

Thursday, December 18, 2008

How we can copy ReplicaID to clipboard

Approach #1. Just make double click on triangle of Address bar, and you will get ReplicaID of database.

Approach #2. Open properties on document and look on "Meta" tab.