Few steps to include Full Text index and Search on ERP5 portal. ('monnerat',) Howto create a Full Text Index text/html None monnerat en None 2005-12-12 18:47:30 2005-12-12 18:46:22 () 0 %PDF-1.4 %äüöß 2 0 obj << /Length 3 0 R /Filter /FlateDecode >> stream x]Kهg5x/.U)"IfY*~fvt}ן.) o_~{/Os<]׿vw~J~4ǟƗJQy}©Шt}UNIO Wzf1%Лdx3Sg>΄3p%3)W|}S̙!Gm!2 dϜf5>11`z׫Gg5u%{B!*Uy !:aGgvB:-?s*C_x([NI6ј0@d~7jӂX~NEFM1E141dʊUdcqBhnlP//#K?%^ZgQDI7eA\CHM@a҃R4k7,^1 twYoD@G}k'%_SF[lOUi|v9Ր > Zk $̨ !1Ȱ>mE4l-!:`-dJmw̃H,.q`#`DsfHh W0iF'~gOZEO\7qC g;Ya(r޴бgӎ=k{)|Xhfbe-(]L8. vpQCjW {dG_7V,8FD=s_5p" `.r۪남[DYQ;' p*[%ygFi̬. s2hۃ"(As7[f cڪ1H 0#Y1E=1z+aK8N9DbjrC'hts\"MMB uxKCZ(8C\REHh5!bҊэD+eώ*Z p0ا`i[،v\abmߦi {lj$^Dޡ@Q7l3 F2Ĺ2}H846x: 0-~q<~Q%B9c672dYaT Iڌpt?[`55SLpB#пcC =XK0U?t] B<'*݂rxcٞ*pvm2a_VygȈd$=ؠMYKXk8 gRyoQ*h3wR EA^iYcGƆ13L3: flQ4c1U֦ɴ~-C8q877ڄV#P a,8)4)MPŤ| 4BU^l-t8yǰ6j& Yi|@1ҸqIpo">:\^S>ưG=X2Xnj\y[Y;Qqƞ;oiEV`9J;i݃ hGЖU"H H"FG,Rc3XH=١Q!C$F3vAybHt˥ݍJn:TaIOM ݤ#?Z]MƵ~nj4T)e`w|1ahȜA<(rC7"N2] GN.%ߒo0*J_vqv9ܐ(r AN5}9d# W$ [ZpZ Zh*-$ӷhbRw:q~}!зm%hgPMҬO>Q>1/*#2sOUc~T/DOk=8NW|LcsIMc_ia_n *LSc#,d{Diו Vغ"wy#V>vxtouEcVkj<6Zbaݍ#N_"hͺEH)'<hd\Żխck| nvb"q'Vv.:SU`1wXң'鍺rBl#۝f;PrY_`=1f 1v<#%v4>[vǀdTu-n\V0v2jMd+{+؟IoR)B4V6cGN_j.xyt ]I H<α xqkLaɂ9;#ͥSLY^!'kcl=ιȟw%vFW =љoR<\~Cac'c[ ti%%9Vӈ~:b!R\`{F +_3BڠFcUX㙣\Nl'3GW4OT%H@ܓ'(PyGwu wBjNÅ*Z5BU^!¶?X 8RnqeGXPpq6 997mh5l^:M_,6I)p(U(`uOaEqسt&Ǹ N<)uk_>8";>>b8-G,̖nQ6J^ T{ҡʝrWT>rf] 6] ւl]p&Ϭ``L1ݞ<[(8 tO[8Bu$A6.ha"|Ѡݧ%2Ү!j[Չsieq25-{z(ɼ̰JjwáU]t̮8Mv3ā^]07bwIYKn ^@!w xCUT8o¸HCy1x1H^ߺbGBëi\ K"Xo]+5<B]KKF=Et0v?^=iS.HyLx|ڋo|>.'x8-M7hW{F !TWСVqw}`>. 7jYK#ˉgrIa]X.WHR|}$Z-+A}d%ep3B&l l׹ZNyP2^#v'kӥBӣ'C^.O}3uzȵ"驥5~gM [5gg"*ΊWgt$9Bv(ٙu\ucWјK_֘QG2gi'ur,$=/]rn=vɒ$ȵ 7xtw+ۊVzlfK5gk!tBB t\g|.4.7V/>s⬒_ƊrGLcZODR]oû_5^Tb).1ljZpe8r@Žߢ;eЊ'=;|z}檥N`>qC} Mu֥ٞ.ś q f /ǿ*?|]vhW}+p ҵ)=anE4Qb`wIJI~0,E•H*ždL@D<8&p+cs5^Ɛ!]6&$+ˏ7e'NQ^ӎ~sZ>;Q{n7D Je/!'endstream endobj 6 0 obj 2750 endobj 8 0 obj << /Length 9 0 R /Filter /FlateDecode >> stream xZɎ7 ?9@ `h49;p ~أbI=lYj/RM_'5|;%y7_pS92}b'mo;wWwxDG#Hfy>ЈQFI Fx@#qẌZG\ZF^H9c2r*@)dS.\d`Hށ ^h NWrb ^}CbjԴ*HgXUk\w'J)x uw[9`zZN N#g@oPNĕ9F@G#ˮhՒ(vU`TUG17Z n^h }U{FK:'(fZЀ|ѪQ*AL*apx5J9PbW%=Uё{g%{bɴ}okM؂\XR⼼/+'^x-~3>C)'W@uuÃ$E*5l $I鶗۫AӪ$PVQy!cX$;Mժ}K~6J%enM+, Cl\o2/[s|uv ]OD*60Eh,NlMٺ.фTz} $yqP?Ê잢Sa1YI +Q.UhBPh04O\Gyқ?(c$ _L,».&go5"=Zy#m\h5Ѣ:Ag)x7l8>Iɦ'wsFVzq{႓bawowM{qv`>##i|;z)~aW:kV[t֘X2)lɔt(`D3b0F1=f}qW璚4oOenB\etJQTН^XVHB‡vЅ{Wb?~T˕T~NSC.˟N? T̸]GFXƋ 9(on~WE&^3x-[hb®0ҰMį Eo|9=gM^Cp!M陿2$5A0j"`O ZcZA6PWpTÌTME-jk~gaWE -l9 X[{x}RD~ir<3zsʥ1Cnm/ q1Ӂ-r$xbM}iԳk5ode\&ʦChi6w\Ĕ>94Ҁ C_'ƥl1FeGTap96 pcIRy3r~F[n}/H9i7X`’>L> stream xz xT{L2̈́$$pIfd&$ diLf&h̄)%[BkMEeb0)V]mVҵ)u[\K2Ι=j$!1|થ-'It}hJ-١ABDu6O$$ۭEs1pa+.Rn_!y$ߋ󒶀9?lyG^]7eybc%BqvR|I|9 kѡ"%P%..^b0NJK  7w 6{4[& ⾆ o /x7VgA?hy׊yKvr^ArчB p F^&B#O ϢM3@hWcGoGq-r~"Oe[ߐH79O՜%7%CIC8A.f{ =F$,A(&S:!=ǸCHv@+@/n\M9)aX vYҫ!JޖNhHjNqlbi: ^re6_q.Ius3^5 *X;(م3B&i!{S$m>ifh,B99Mx&$, $J"hb 46>k&LeNG%uW4u0nXXp6OV6JUuC%.6!2[+0Ol#(D+⤭9r|x.1>>\2ɘg,3浊d$ #}9VRqdkLR`?1 Q֐f8Ȓ#eesɜK Jc^z1-c޼ y .z-o~{/=!̖{/oh6 7ϡJ7$bsV~xD89&AJ5d^j ,fJKό ΕyL'P)_ ࣧ܁qȜ^(Te6L7O'ߟ@n%ģ7FC|ly/B7ah+bjN2@wof=IOz& %TC|ئΣ#Tp9?ZfDy騻tt@&FW> _׎gy_~JO ~2 >xg [nҾue/Ξ- DLڮNV v.%D_'q 8X0اﳯ&M^v s$'{㈨ъ"~e%å [=t2(t#Z+ `^IN(;-.^N+'LӞ|(G(̿f^iځ[zwC#㷅jݱ__=$z%nwd}'>(*Mr֜kF`^@fZd#3u=y+9= L2Ŭd6R7\ق2gL&h~w=pwOpCypmkK˚y=c/ͪ|nkpݝ ̘a>&܊=5z$.I?k$.p1;&\h `,R"3,T 4%^[ŭi{fůlܸ:՛NulɿU{!ZE昧$v'2C=`S&&m#J"s J y(+NG)Po|4̆G-eX| iZO,?ۧہdcDLd 8^hɊxmBUƺt5%ΘeOzm\z]sf|^Gv 1}D}U>qN >@mMԔxDV#P,SjuڔS#KFXMeMXsVD*іJJK% 2M^,kٔe˦.Y6 .Kۥw%fNқ;7wZ^X/ѱrq}׾L . W]g\t:08C:1+<˲1oj'gAU{Vʞz*ϵ[/whcx/oq6,YVFhψ)AHۯzz$I) O3+MeJg](,y⌣Z.eO?Mqcwdx -Fji7y؋se.NCbZwS8m8GidNoU3< V=ykӊN,*i䌌4-oLgܷ7oڋ+>N[[:Bx7^(.q劂);7,(Zk&9-zʒ $7bt/[.JH.t>3T |j߭xgi*'xGػS!~upZ8iD߈vqk)_H?'k 6I!]6fcv-(L *Dp}:qPI7We%h2֑:7ߪVI񓰐1gdu,}:~PE_PL(TZ0a:֑ auG&S hƟqR?U!oKkD%̓:ro$ y>leK[lgTa {B=rʍNX eya_ǍE 1L:x"u;cXCrSch6xFcD&.;ܦsJ ,{E[LWEu|(rXFG&dݨGWf!ij5yF50_ĭHy (rqnnWtqB*xؾ4g;"h2>0O~;h5Ȍ曂9 L3B<*_5⌦;]ǫk:٘)+ W؏> ע`֎R/ꕛ[bH 1ZյИ^YpTD_^iNnx=m&5m]=v 7Nnt%hLye1XOVqY ;>ud|f+e1^+YuXQZ#sٵZVqT*q5aSE_r9x 1>fbG5F-ř/Ww-(1M)6YZj1LfZTglu6 ]#}V>T⋕[DBP7F ɡR̟Jϴ䫊ejxTJbuLs#?2߁+ ʏʍN5PˣU? ǡk({ EgM>&*/7fy%d4^ՓѹZvD5TsN݈8Z[Q}PUd*yDt+,7VSx/ azD>+`6:5X,,*kx-Z9Ǻ1BZUc2,Uj~,ot_w(GSjac /;ڿxƹO$ֿǟco7ԱwQӘ;ftjN@7i}{'GoۈÕw7a7+wp얢#MۡS} sg*DY=oL[*h~I51~EKG[ ]ewNxKMxD}2C6g y |VKB!lY")g)ŧˋT?c-XW4|E0@)\ #>p6 \>!u%^8?]./#y)Υ`M0?ȒN_>-PxTSp~t~=AU:r3Nb8N;zwp/(}Qz{*[E>xPz)l3Nk%IG(J0P8+04D륗.`tp=4}0k^_(aOq %G-GP#}Ga̭.;JY1QG Axz^ |vlO\qC7]> Rی(l-cFB四-6OoPؔ wR蠰B{$QjOODé6! SR@}3%#fBJV Rh-LCM4MrQh"i8)lu ܔ ݒ fܜ7%f4XCa5UYҪRpPh`pfhPuj"B +lҊE`Hlܚ)-Pj7TjP (UBŀl-)R4gsdIˀpge9BΖ%Kaـ`6(,E^% )!enn麕¢4i!+a~iJ?("a)=w L98 R &IEiP4ajMd&fn8Bi6kBY,͢0 S0\*5)P@!?%Eʧ'IyA.ܕ0 5OCa*b;B6F%; PȢIa2J\ERF9"H3$ȟJ F0(إ$'J))`!Y. KCb, 艞B|@GA4t.4A@" wm9+ endstream endobj 16 0 obj 7471 endobj 17 0 obj << /Type /FontDescriptor /FontName /EAAAAA+BitstreamVeraSansMono-Roman /Flags 5 /FontBBox [ -4 -235 604 928 ] /ItalicAngle 0 /Ascent 928 /Descent -235 /CapHeight 928 /StemV 80 /FontFile2 15 0 R >> endobj 18 0 obj << /Length 332 /Filter /FlateDecode >> stream x]Mn0Hta@ !$H,Cjː/$Q 78*ceȢw߫F= +`gB2mxGqazF*,€c 3${;# D@S7l (OR"AbRAy-y(O _r8ǤyHJp8XKrC endstream endobj 19 0 obj << /Type /Font /Subtype /TrueType /BaseFont /EAAAAA+BitstreamVeraSansMono-Roman /FirstChar 0 /LastChar 22 /Widths [ 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 ] /FontDescriptor 17 0 R /ToUnicode 18 0 R >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Italic /Encoding /WinAnsiEncoding >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Bold /Encoding /WinAnsiEncoding >> endobj 23 0 obj << /F1 22 0 R /F2 20 0 R /F3 21 0 R /F4 19 0 R >> endobj 24 0 obj << /Font 23 0 R /ProcSet [ /PDF /Text ] >> endobj 1 0 obj << /Type /Page /Parent 14 0 R /Resources 24 0 R /MediaBox [ 0 0 595 842 ] /Group << /S /Transparency /CS /DeviceRGB /I true >> /Contents 2 0 R >> endobj 4 0 obj << /Type /Page /Parent 14 0 R /Resources 24 0 R /MediaBox [ 0 0 595 842 ] /Annots [ 12 0 R 13 0 R ] /Group << /S /Transparency /CS /DeviceRGB /I true >> /Contents 5 0 R >> endobj 7 0 obj << /Type /Page /Parent 14 0 R /Resources 24 0 R /MediaBox [ 0 0 595 842 ] /Annots [ 10 0 R 11 0 R ] /Group << /S /Transparency /CS /DeviceRGB /I true >> /Contents 8 0 R >> endobj 14 0 obj << /Type /Pages /Resources 24 0 R /MediaBox [ 0 0 595 842 ] /Kids [ 1 0 R 4 0 R 7 0 R ] /Count 3 >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [108.7 536.5 238.5 550.5] /A << /Type /Action /S /URI /URI (mailto:rmonnerat@gmail.com) >> >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [133.5 522.5 297.8 536.5] /A << /Type /Action /S /URI /URI (http://monnerat.objectis.net/) >> >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [56.7 729.5 133.5 743.5] /A << /Type /Action /S /URI /URI (http://localhost:9080/erp5/portal_skins/custom/ftsearch_results_template/manage_workspace) >> >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [384.7 743.4 538.6 757.4] /A << /Type /Action /S /URI /URI (http://localhost:9080/erp5/portal_skins/custom/ftsearch_results_template/manage_workspace) >> >> endobj 25 0 obj << /Type /Catalog /Pages 14 0 R >> endobj 26 0 obj << /Author /Creator /Producer /CreationDate (D:20051212154237Z') >> endobj xref 0 27 0000000000 65535 f 0000017770 00000 n 0000000021 00000 n 0000003863 00000 n 0000017957 00000 n 0000003890 00000 n 0000006725 00000 n 0000018174 00000 n 0000006752 00000 n 0000008635 00000 n 0000018565 00000 n 0000018777 00000 n 0000018992 00000 n 0000019266 00000 n 0000018391 00000 n 0000008662 00000 n 0000016241 00000 n 0000016267 00000 n 0000016522 00000 n 0000016939 00000 n 0000017255 00000 n 0000017373 00000 n 0000017492 00000 n 0000017609 00000 n 0000017697 00000 n 0000019541 00000 n 0000019602 00000 n trailer << /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <6E391F407FC8ECF28950E6484F692EC5> <6E391F407FC8ECF28950E6484F692EC5> ] >> startxref 19872 %%EOF How - t o create a Full Text Index on ERP5 author: Rafael Monnerat Al t e r Compatibility Table Go to /instance_name / p o r t a l _ c a t a l o g / e r p 5 _ m y s q l ( in ZMI) and acess and run ( test) the Z SQL Method 'z0_drop_compatibility'. This DROP the compatibility table on mysql. In same folder, modify the Z SQL Method 'z_create_compatibility'. Add the index and alter the Table Type. The new end of file will be: KEY `review_state ` (`review_state ` ) , FULLTEXT(`SerachableText ` ) } TYPE=MyISAM Run ( test) the ZSQLMethod to create the table. Edit catalog properties Go to /instance_name / p o r t a l _ c a t a l o g / e r p 5 _ m y s q l ( in ZMI ) and edit the properties ( properties tab ). With CRTL press, mark these options: s q l_ c a t a l o g _ o b j e c t _ l i s t s q l_ s e a r c h _ t a b l e s s q l_ c a t a l o g _ f u l l_ t e x t _ s e a r c h _ k e y s z_c a t a l o g _ c o m p a t i b i l i t y _li s t co m p a t i b i li t y Se r a c h a b l e T e x t co m p a t i b i li t y .Se a r c h a b l e T e x t Now the ERP5 use the compatibility table to catalog all objects too. Add Full Text Search to Portal T h e normal portal Search Box don't do the full text Search. The portal needs a new Z SQL Method. This is just a simple and pratical example. Cr e a t e ZSQL Method In portal_catalog contents, create a Z SQL METHOD with name 'FTSearch' and argument 'SearchableText'. The code is: SELECT catalog.path, catalog.uid, catalog.title, catalog.portal_type, catalog.description FROM compatibility , catalog WHERE compatibility.uid = catalog.uid AND MATCH (`SearchableText ` ) AGAINST () Doing search and show the results In folder portal_skin / c u s t o m add a ZPT with name 'ftsearch_results_tem p l a t e ' and the code: < h t m l metal:use - m a c r o = " c o n t e x t / m a i n _ t e m p l a t e / m a c r o s / m a s t e r " > < m e t a l : s l o t metal:fill- sl o t = " h e a d e r " i18n:domain = " c m f _ d e f a u l t " > < h 1 i18n:translate = " " > S e a r c h Results < / h 1 > < / m e t a l: sl o t > < d i v class = " D e s k t o p " > < m e t a l : s l o t metal:fill- sl o t = " m a i n " i18n:domain = " c m f _ d e f a u l t " > < t a b l e class = " S e a r c h R e s u l t s " tal:define = " b a t c h python:here.portal_catalog.FTSearch(SearchableText = r e q u e s t . S e a r c h a b l e T e x t )" > T i t l e < / t h > T y p e < / t h > T i t l e < / s p a n > ( N o title)< / s p a n > T y p e < / t d > & n b s p ; < / t d > D e s c r i p t i o n < / e m > < e m tal:condition = " p y t h o n : n o t ( i t e m [ 4 ] )" i18n:translate = " " > ( N o description)< / e m > < / t d > < / t a ble > < / m e t a l: sl o t > < / div > Alter navagation_box T o finish alter the navegation_box in portal_skin / e r p 5 _ h t m l _ s t y l e . Put on line 177 the new method: title="Search" alt="Search" name=" tsearch_results_template:method f " O n l y the button do the search, if you press enter you don't do the execute these metho d . About the Mysql FULLTEXT index you cam find more information on reference guide on mysql site. I'm use the default config, but you can modify to improve y o u r search. AB OU T Au t h o r : Rafael Monnerat M ai l : rmonnerat@gmail.com We b S i t e : http: / / m o n n e r a t . o b j e c t i s . n e t ( In portuguese) Do c u m e n t source ( .odt ) on my website ( erp5 section ). Mail me for any question or use the lists! How - t o create a Full Text Index on ERP5
author: Rafael Monnerat Al t e r Compatibility Table Go to /instance_name / p o r t a l _ c a t a l o g / e r p 5 _ m y s q l ( in ZMI) and acess and run ( test) the Z SQL Method 'z0_drop_compatibility'. This DROP the compatibility table on mysql. In same folder, modify the Z SQL Method 'z_create_compatibility'. Add the index and alter the Table Type. The new end of file will be:
KEY `review_state ` (`review_state ` ) , FULLTEXT(`SerachableText ` ) } TYPE=MyISAM

Run ( test) the ZSQLMethod to create the table.

Edit catalog properties Go to /instance_name / p o r t a l _ c a t a l o g / e r p 5 _ m y s q l ( in ZMI ) and edit the properties ( properties tab ). With CRTL press, mark these options:

s q l_ c a t a l o g _ o b j e c t _ l i s t s q l_ s e a r c h _ t a b l e s s q l_ c a t a l o g _ f u l l_ t e x t _ s e a r c h _ k e y s

z_c a t a l o g _ c o m p a t i b i l i t y _li s t co m p a t i b i li t y Se r a c h a b l e T e x t co m p a t i b i li t y .Se a r c h a b l e T e x t

Now the ERP5 use the compatibility table to catalog all objects too.

Add Full Text Search to Portal T h e normal portal Search Box don't do the full text Search. The portal needs a new Z SQL Method. This is just a simple and pratical example. Cr e a t e ZSQL Method In portal_catalog contents, create a Z SQL METHOD with name 'FTSearch' and argument 'SearchableText'. The code is:

SELECT catalog.path, catalog.uid, catalog.title, catalog.portal_type, catalog.description FROM compatibility , catalog WHERE compatibility.uid = catalog.uid AND MATCH (`SearchableText ` ) AGAINST (<dtml - s q l v a r expr="SearchableText" type="string">)


Doing search and show the results In folder portal_skin / c u s t o m add a ZPT with name 'ftsearch_results_tem p l a t e ' and the code: < h t m l metal:use - m a c r o = " c o n t e x t / m a i n _ t e m p l a t e / m a c r o s / m a s t e r " > <body > < m e t a l : s l o t metal:fill- sl o t = " h e a d e r " i18n:domain = " c m f _ d e f a u l t " > < h 1 i18n:translate = " " > S e a r c h Results < / h 1 > < / m e t a l: sl o t > < d i v class = " D e s k t o p " > < m e t a l : s l o t metal:fill- sl o t = " m a i n " i18n:domain = " c m f _ d e f a u l t " > < t a b l e class = " S e a r c h R e s u l t s " tal:define = " b a t c h python:here.portal_catalog.FTSearch(SearchableText = r e q u e s t . S e a r c h a b l e T e x t )" > <thead > <tr > <th i18n:translate = " " > T i t l e < / t h > <th i18n:translate = " " > T y p e < / t h > </tr> </thead > <tbo d y tal:repeat = " i t e m batch"> <tr > <td > <a href = " " tal:attributes = " h r e f python:item[0]"> <span tal:condition = " p y t h o n : i t e m [ 2 ] " tal:replace = " p y t h o n : i t e m [ 2 ]" > T i t l e < / s p a n > <span tal:condition = " n o t : p y t h o n : i t e m [ 2 ]" tal:omit - t a g = " " i18n:translate = " " > ( N o title)< / s p a n > </a> </td> <td tal:content = " p y t h o n : i t e m [ 3 ] " i18n:translate = " " > T y p e < / t d > </tr> <tr > <td > & n b s p ; < / t d > <td colspan = " 3 " > <em tal:condition = " p y t h o n : i t e m [ 4 ]" tal:content = " p y t h o n : i t e m [ 4 ] " > D e s c r i p t i o n < / e m > < e m tal:condition = " p y t h o n : n o t ( i t e m [ 4 ] )" i18n:translate = " " > ( N o description)< / e m > < / t d > </tr> </tbody> < / t a ble > < / m e t a l: sl o t > < / div > </body > </html >


Alter navagation_box T o finish alter the navegation_box in portal_skin / e r p 5 _ h t m l _ s t y l e . Put on line 177 the new method:
title="Search" alt="Search" name=" tsearch_results_template:method f "

O n l y the button do the search, if you press enter you don't do the execute these metho d . About the Mysql FULLTEXT index you cam find more information on reference guide on mysql site. I'm use the default config, but you can modify to improve y o u r search.

AB OU T Au t h o r : Rafael Monnerat M ai l : rmonnerat@gmail.com We b S i t e : http: / / m o n n e r a t . o b j e c t i s . n e t ( In portuguese) Do c u m e n t source ( .odt ) on my website ( erp5 section ). Mail me for any question or use the lists!