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.

Wednesday, December 10, 2008

Difference between call of Sub/Functional

Actually I was surprised today when I saw this, please check both scenarios:
In one scenario Call addone(i) it transmit I as reference in another one addone(i) - ByVal

Sub Click(Source As Button)
Dim i As Integer
Dim j As Integer
i = 1
For j = 0 To 10
Call addone(i) | addone(i)
Next

Print "i = " & i
End Sub

Sub addone(i As Integer)
i = i + 1
End Sub

Monday, December 01, 2008

MS ListView Control in LN


In one of our project we used MS ListView Control to show the data in one table. So here what we did. If you want try this approach also, you should do next steps:
Go to designer, create new form
click on menu: Create\Object and choose MS ListView Control.
Set name to this object and then you can do what you wish with this control, some code:

Dim control As Variant
Dim lwItem As Variant
Set control = source.getObject("ListView")
Set lwItem = control.ListItems.add(1, "a1", "fio2", 0)
Set lwItem = control.ListItems.add(2, "a2", "fio3", 0)
Set lwItem = control.ListItems.add(3, "a3", "fio4", 0)
Set lwItem = control.ListItems.add(4, "a4", "fio5", 0)
Call control.refresh()