<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Openbravo blogs - Open Source ERP Software</title>
	
	<link>http://planet.openbravo.com</link>
	<description>Open Source ERP</description>
	<pubDate>Tue, 09 Feb 2010 13:24:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/openbravo-blogs" /><feedburner:info uri="openbravo-blogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Ismael Ciordia: Modularity Status Update and Road Map – February 18th</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/cjzYsbR-6qA/</link>
		<comments>http://iciordia.wordpress.com/2010/02/09/modularity-status-update-and-road-map-february-18th/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 13:24:23 +0000</pubDate>
		<dc:creator>Ismael Ciordia</dc:creator>
		
		<category><![CDATA[Openbravo]]></category>

		<guid isPermaLink="false">http://iciordia.wordpress.com/?p=39</guid>
		<description><![CDATA[Open to all Openbravo Community members, in this webinar you will learn main concepts, achievements  in 2009 and the plan going forward for 2010 related to Openbravo Modularity and Ecosystem. And you will have the opportunity to participate in an open discussion  about a couple of ideas that Openbravo team wants to promote in order [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=iciordia.wordpress.com&#38;blog=9919444&#38;post=39&#38;subd=iciordia&#38;ref=&#38;feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Open to all Openbravo Community members, in this webinar you will learn main concepts, achievements  in 2009 and the plan going forward for 2010 related to Openbravo Modularity and Ecosystem. And you will have the opportunity to participate in an open discussion  about a couple of ideas that Openbravo team wants to promote in order to improve collaboration.</p>
<p>Take a look at this <a href="http://forge.openbravo.com/plugins/espforum/view.php?group_id=100&amp;forumid=886716&amp;topicid=7009003" >post</a> for more details about the webinar.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/iciordia.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/iciordia.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/iciordia.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/iciordia.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/iciordia.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/iciordia.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/iciordia.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/iciordia.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/iciordia.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/iciordia.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=iciordia.wordpress.com&blog=9919444&post=39&subd=iciordia&ref=&feed=1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=cjzYsbR-6qA:e_hzacTCL1E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=cjzYsbR-6qA:e_hzacTCL1E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=cjzYsbR-6qA:e_hzacTCL1E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=cjzYsbR-6qA:e_hzacTCL1E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/cjzYsbR-6qA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=8304</wfw:commentRss>
		<feedburner:origLink>http://iciordia.wordpress.com/2010/02/09/modularity-status-update-and-road-map-february-18th/</feedburner:origLink></item>
		<item>
		<title>Richard Morley: Richard Morley at Openbravo 2010-02-09 10:46:00</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/aDGziUYHifM/way-that-transactions-are-reversed-in.html</link>
		<comments>http://richardatopenbravo.blogspot.com/2010/02/way-that-transactions-are-reversed-in.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 10:46:00 +0000</pubDate>
		<dc:creator>Richard Morley</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-1327978323135673867.post-4309457744685490112</guid>
		<description><![CDATA[The way that transactions are reversed in an ERP application is a big deal!It is important that the application allows reversal that is in line with local best practice and law.  Additionally, the way transactions are reversed can influence the level o...]]></description>
			<content:encoded><![CDATA[The way that transactions are reversed in an ERP application is a big deal!<br /><br />It is important that the application allows reversal that is in line with local best practice and law.  Additionally, the way transactions are reversed can influence the level of tax that a company pays or charges, especially when the tax is triggered by a threshold measured by the total movement on a particular account.<br /><br />In many countries the traditional mechanism for transaction reversal is a straightforward "contra" transaction.  This means that debit values in the original transaction are reversed with credit values, and vice versa for the reversal of credit values.  Using simple "T" accounts to illustrate this you would expect a contra reversal to look like this:<br /><b>Original Transaction:</b><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fv2RUNb6z6o/S3E_JH_dzmI/AAAAAAAAAKY/btaISL8UEN0/s1600-h/transaction_pic.png"><img src="http://1.bp.blogspot.com/_fv2RUNb6z6o/S3E_JH_dzmI/AAAAAAAAAKY/btaISL8UEN0/s320/transaction_pic.png" alt="" id="BLOGGER_PHOTO_ID_5436195651209514594" border="0" /></a><b>Contra Reversal:</b><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fv2RUNb6z6o/S3E-d1N8ZSI/AAAAAAAAAKI/cyYc2HVZEdE/s1600-h/contra_pic.png"><img src="http://3.bp.blogspot.com/_fv2RUNb6z6o/S3E-d1N8ZSI/AAAAAAAAAKI/cyYc2HVZEdE/s320/contra_pic.png" alt="" id="BLOGGER_PHOTO_ID_5436194907435590946" border="0" /></a>However, in some countries there is also a practice of reversing transactions using a "storno" transaction.  This means that debit values in the original transaction are reversed with negative debit values, and the credit values are reversed with negative credit values.  Using a storno transaction ensures that the total movement on an account is reduced by the reversal.  If the original transaction is reversed with a storno transaction we would expect to see the following:<br /><b>Storno Reversal:</b><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fv2RUNb6z6o/S3E_bxiegVI/AAAAAAAAAKg/dl28IKTrdGA/s1600-h/storno_pic.png"><img src="http://1.bp.blogspot.com/_fv2RUNb6z6o/S3E_bxiegVI/AAAAAAAAAKg/dl28IKTrdGA/s320/storno_pic.png" alt="" id="BLOGGER_PHOTO_ID_5436195971599860050" border="0" /></a>In this example you can see that the total movement on the accounts is reduced to zero.<br /><p>Many ERP applications support only one method or the other.  If they do support both methods then it tends to be a global parameter that sets the behaviour for the system as a whole. Openbravo supports both types of reversal and gives users granular control over how and when they use each reversal type.</p> <p>In Openbravo, users can control transaction reversal behaviour at a schema level using the “Allow negative” parameter.  This parameter controls the default reversal behaviour of all reversing transactions.  If the parameter is left blank then the default behaviour is "contra" reversal, and if it is "ticked" then "storno" is used as a default.</p> <p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3E_9lrMflI/AAAAAAAAAKo/WvZDtgnwIwk/s1600-h/Accounting_Schema.png"><img src="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3E_9lrMflI/AAAAAAAAAKo/WvZDtgnwIwk/s320/Accounting_Schema.png" alt="" id="BLOGGER_PHOTO_ID_5436196552530755154" border="0" /></a></p> <p>Additionally, this behaviour can be controlled at a document level.<br />For a specific Accounting Schema go to Account Schema Tables.<br />In this example we want to control the way that Invoices are reversed, so we select the "Invoice" document type.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3FAUT4t_2I/AAAAAAAAAKw/bh9Q0hJLQ_A/s1600-h/Account_Schema_Tables.png"><img src="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3FAUT4t_2I/AAAAAAAAAKw/bh9Q0hJLQ_A/s320/Account_Schema_Tables.png" alt="" id="BLOGGER_PHOTO_ID_5436196942892629858" border="0" /></a></p>  <p>Within the Invoice document type we select the "Documents" tab....</p> <p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fv2RUNb6z6o/S3FA6Q90M0I/AAAAAAAAAK4/H2LJB9VcVnM/s1600-h/Invoice.png"><img src="http://1.bp.blogspot.com/_fv2RUNb6z6o/S3FA6Q90M0I/AAAAAAAAAK4/H2LJB9VcVnM/s320/Invoice.png" alt="" id="BLOGGER_PHOTO_ID_5436197594943730498" border="0" /></a>...where we can then choose the Document Category for which we want to control the reversal behaviour (by setting the "Allow negative" parameter).<br /><br />In our example we want to set the behaviour of the AP Invoice.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fv2RUNb6z6o/S3FBczoZlpI/AAAAAAAAALA/yfc8wIrT8tw/s1600-h/Documents_tab.png"><img src="http://4.bp.blogspot.com/_fv2RUNb6z6o/S3FBczoZlpI/AAAAAAAAALA/yfc8wIrT8tw/s320/Documents_tab.png" alt="" id="BLOGGER_PHOTO_ID_5436198188364699282" border="0" /></a></p>We can test this by entering a normal AP Invoice and viewing the posting....<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3FCBhUgwoI/AAAAAAAAALI/lcA6qa8GAO8/s1600-h/transaction.png"><img src="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3FCBhUgwoI/AAAAAAAAALI/lcA6qa8GAO8/s320/transaction.png" alt="" id="BLOGGER_PHOTO_ID_5436198819104604802" border="0" /></a>When we use an AP Credit Memo to reverse the transaction above, if the "Allow negative" is not selected then we get a contra reversal.<br /><p>If we view the AP Credit Memo transaction we see the following:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3FCwCXyRbI/AAAAAAAAALQ/0AYvkMqYenE/s1600-h/contra.png"><img src="http://2.bp.blogspot.com/_fv2RUNb6z6o/S3FCwCXyRbI/AAAAAAAAALQ/0AYvkMqYenE/s320/contra.png" alt="" id="BLOGGER_PHOTO_ID_5436199618250687922" border="0" /></a></p>However, if the "Allow negative" is selected then we get a storno reversal using an AP Credit Memo, and when viewing the reversing transaction we see the following:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fv2RUNb6z6o/S3FDTeT36WI/AAAAAAAAALY/N_n-n7BhGxs/s1600-h/storno.png"><img src="http://4.bp.blogspot.com/_fv2RUNb6z6o/S3FDTeT36WI/AAAAAAAAALY/N_n-n7BhGxs/s320/storno.png" alt="" id="BLOGGER_PHOTO_ID_5436200227045894498" border="0" /></a>Finally, if a user want to have the choice of which reversal method they use, then it is a simple matter of configuring the default behaviour at a schema level so that the "Allow Negative" is not enabled.  This means that the exiting "AP Credit Memo" and "AR Credit Memo" documents will generate a contra reversal.<br /><p>Two new document types, the "AP Storno Credit Memo" and the "AR Storno Credit Memo", can then be added.  When creating them we ensure that the "Allow negative" parameter is selected during configuration. This will means that the user will then be able to do a contra reversal by using a "credit memo" and a storno using the "storno credit memo".</p><p><br /></p> Voila!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1327978323135673867-4309457744685490112?l=richardatopenbravo.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=aDGziUYHifM:b_G3eVnHxoY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=aDGziUYHifM:b_G3eVnHxoY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=aDGziUYHifM:b_G3eVnHxoY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=aDGziUYHifM:b_G3eVnHxoY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/aDGziUYHifM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=8299</wfw:commentRss>
		<feedburner:origLink>http://richardatopenbravo.blogspot.com/2010/02/way-that-transactions-are-reversed-in.html</feedburner:origLink></item>
		<item>
		<title>Adrián Romero: Prototyping with HTML 5 (2)</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/WsURKOMqQ-M/prototyping-with-html-5-2.html</link>
		<comments>http://adrianrcblog.blogspot.com/2010/02/prototyping-with-html-5-2.html#comments</comments>
		<pubDate>Wed, 03 Feb 2010 11:29:00 +0000</pubDate>
		<dc:creator>Adrián Romero</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-2382209162490985914.post-8179577682916019728</guid>
		<description><![CDATA[This blog post is just to announce the availability in the Openbravo forge of the prototype of the HTML 5 application based on Openbravo ERP web services I am working on. The project home page is Openbravo Mobile. And it is published the source code, a...]]></description>
			<content:encoded><![CDATA[This blog post is just to announce the availability in the <a href="http://forge.openbravo.com/">Openbravo forge</a> of the prototype of the HTML 5 application based on Openbravo ERP web services I am working on. The project home page is <a href="http://forge.openbravo.com/projects/openbravomobile">Openbravo Mobile</a>. And it is published the <a href="http://forge.openbravo.com/projects/openbravomobile/code">source code</a>, a deployable <a href="http://forge.openbravo.com/projects/openbravomobile/downloads">.war file</a> and an small <a href="http://forge.openbravo.com/projects/openbravomobile/wiki">wiki page</a> with instructions to install. Everything under the <a href="http://www.openbravo.com/legal/license.html">Openbravo Public License</a>.<br /><br />All comments are welcome in the <a href="http://forge.openbravo.com/projects/openbravomobile/forum">forum section</a>.<br /><br /><span>Disclaimer:</span> The project I am developing here is done in the personal investigation time I have reserved during development sprints and it is not in the roadmap of Openbravo ERP and there is not commitment from Openbravo to his partners, customers or community related to the availability or support of this project.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2382209162490985914-8179577682916019728?l=adrianrcblog.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=WsURKOMqQ-M:pWOfqxb1K34:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=WsURKOMqQ-M:pWOfqxb1K34:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=WsURKOMqQ-M:pWOfqxb1K34:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=WsURKOMqQ-M:pWOfqxb1K34:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/WsURKOMqQ-M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=8095</wfw:commentRss>
		<feedburner:origLink>http://adrianrcblog.blogspot.com/2010/02/prototyping-with-html-5-2.html</feedburner:origLink></item>
		<item>
		<title>Martin Taal: Integrating the Data Access Layer with Openbravo XSQL and ConnectionProvider</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/y6-X3M2frqk/integrating-data-access-layer-with.html</link>
		<comments>http://mtopenbravo.blogspot.com/2010/01/integrating-data-access-layer-with.html#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:55:00 +0000</pubDate>
		<dc:creator>Martin Taal</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-5606774739693012337.post-1223484020507332089</guid>
		<description><![CDATA[More and more developers are using the Data Access Layer (DAL) for coding business logic in the Openbravo application. I sometimes get questions related to how to integrate DAL constructs with standard Openbravo approaches like Stored Procedures and XS...]]></description>
			<content:encoded><![CDATA[<div>More and more developers are using the <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Concepts/Data_Access_Layer">Data Access Layer</a> (DAL) for coding business logic in the Openbravo application. I sometimes get questions related to how to integrate DAL constructs with standard Openbravo approaches like Stored Procedures and XSQL generated classes. </div><div>
<br /></div><div>As there are several options I felt it was time to spend a blog on this. In this blog I will discuss a number of 'good-to-know' classes which can be handy when you want to integrate DAL with the classic Openbravo approaches.</div><div>
<br /></div><div>The first one to cover is the probably the most important one: the <a href="https://code.openbravo.com/erp/devel/pi/file/94d1960e6863/src/org/openbravo/service/db/DalConnectionProvider.java">DalConnectionProvider</a>. The DalConnectionProvider can be used when you call utility methods which need a ConnectionProvider object. The great thing of the DalConnectionProvider is that it shares the same connection and transaction as the DAL itself. Let's take an example. This one is from the <a href="http://forge.openbravo.com/projects/massinvoicing">MassInvoicing</a> module, computing the DocumentNo for a new invoice:
<br />
<br /><span>// create a new invoice object
<br />final Invoice invoice = OBProvider.getInstance().get(Invoice.class);
<br />// set some properties for the invoice
<br />invoice.setOrganization(org);
<br />invoice.setBusinessPartner(bp);
<br />invoice.setInvoiceDate(invoiceDate);
<br />invoice.setAccountingDate(invoiceDate);
<br />// .... code truncated for clarity
<br />
<br />// now compute a documentno, in the same database transaction
<br />final String documentNo = Utility.getDocumentNo(conn, <span>
<br /></span></span><div><span><span>new DalConnectionProvider()</span>,</span> <span>vars, "", Invoice.TABLE_NAME, </span></div><div><span>invoice.getDocumentType().getId(), </span>
<br /></div><div><span>invoice.getDocumentType().getId(), false, true);</span>
<br /></div><span>invoice.setDocumentNo(documentNo);</span><span>
<br /></span>
<br />
<br />The above code creates an invoice and then calls a stored procedure using the DalConnectionProvider as the connect provider. As the same transaction is used any updates done by the stored procedure can be committed together with the rest of your work. As you can see the DalConnectionProvider is easy to work with as it does not need any extra parameters, you can create and use it directly.
<br />Sometimes it makes sense to call OBDal.getInstance().flush() before calling a stored procedure. This ensures that Hibernate has flushed all your changes to the database so that the stored procedure can see them.  Also read the remark at the end of this blog!
<br /></div><div>
<br /></div><div>The next two are somewhat related: <a href="https://code.openbravo.com/erp/devel/pi/file/94d1960e6863/src/org/openbravo/service/db/CallProcess.java">CallProcess</a> and <a href="https://code.openbravo.com/erp/devel/pi/file/94d1960e6863/src/org/openbravo/service/db/CallStoredProcedure.java">CallStoredProcedure</a>, they both call/run database logic in the database. The first, the CallProcess, can be used to call a process (defined in AD_PROCESS) directly. You can get a CallProcess by calling CallProcess.getInstance() (there is one instance shared by all threads). Again an example from the MassInvoicing module, calling the C_Order_Post process for a list of invoices:
<br />
<br /><span>// get an AD_Process instance, 111 is the C_Invoice_Post process
<br />final org.openbravo.model.ad.ui.Process process = OBDal.getInstance().get(org.openbravo.model.ad.ui.Process.class, "111");
<br />
<br />// iterate over the invoices and post them
<br />for (Invoice invoice : invoices) {
<br /></span><span> </span><span>
<br />final ProcessInstance processInstance = <span>CallProcess.getInstance().call(process,
<br /></span></span><div><span><span> invoice.getId(), new HashMap<string ,>&lt;String, String&gt;());</string></span></span>
<br /></div><span> </span><span> </span><span>    // the processInstance now contains the result
<br /></span><span> </span><span> </span><span>    final String errorMsg = processInstance.getErrorMsg();
<br /></span><span> </span><span> </span><span>    final Object result = processInstance.getResult();
<br /></span><span> </span><span> </span><span>    final String recordID = processInstance.getRecordID();
<br /></span><span> </span><span> </span><span>    // code truncated for clarity
<br />
<br />}</span>
<br />
<br />The last parameter in the CallProcess.call method is a map of parameters, these are placed in the ad_pinstance_para table. </div><div><div>
<br /></div></div><div>The CallStoredProcedure class makes it possible to call any stored procedure in the database in a java programmer friendly way. The nice thing of this class is that you can pass in actual java objects as parameters, so you don't need to worry about String conversions. The return is also a type-specific java object. This code snippet shows its usage (calling the C_Divide stored procedure):</div><div><span class="Apple-style-span"  ><span class="Apple-style-span"  >
<br /></span></span></div><div><span class="Apple-style-span"   ><span class="Apple-style-span">// set some parameters</span></span></div><div><span class="Apple-style-span"   ><span class="Apple-style-span">final List<object> parameters = new ArrayList();</object></span></span></div><div><span class="Apple-style-span"   >parameters.add(new BigDecimal("10.1"));</span></div><div><span class="Apple-style-span"   ><span class="Apple-style-span">parameters.add(new BigDecimal("2.0"));</span></span></div><div><span class="Apple-style-span"   ><span class="Apple-style-span">// the procedure name</span></span></div><div><span class="Apple-style-span"   ><span class="Apple-style-span">final String procedureName = "C_Divide";</span></span></div><div><span class="Apple-style-span"   ><span class="Apple-style-span">// calling the procedure and getting the result</span></span></div><meta equiv="content-type" content="text/html; charset=utf-8"><div><span class="Apple-style-span"   ><span class="Apple-style-span">final BigDecimal bigDecimal = (BigDecimal)CallStoredProcedure.getInstance().call(procedureName, parameters, null);</span></span></div><div><span>
<br /></span></div><div>The last one to discuss: the <a href="https://code.openbravo.com/erp/devel/pi/file/94d1960e6863/src/org/openbravo/erpCommon/utility/OBObjectFieldProvider.java">OBObjectFieldProvider</a> class makes it possible to wrap an Openbravo business object in a FieldProvider interface. The FieldProvider is used throughout the Openbravo system to wrap data read from the database (for example through a XSQL generated class). The OBObjectFieldProvider is useful when you read business objects through the DAL and need to pass them on to code expecting a FieldProvider.
<br /></div><div>
<br /></div><div>The discussed classes are all documented with javadoc describing the meaning of parameters and methods and you can ofcourse study the source code directly. </div><div>
<br /></div><div>Before concluding this blog, as a last tip: The DAL (Hibernate) queues actions to the database. So when updating the database through DAL and then calling a stored procedure using a DalConnectionProvider make sure to call OBDal.getInstance().flush() before calling the stored procedure. This flushes the queue to the database and ensures that the stored procedures sees your changes. Also when you want to work with the results from the stored procedure and read them back through the DAL read this <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Common_Issues,_Tips_and_Tricks#DAL_Queries_do_not_return_or_do_not_see_changes_in_the_database">tip</a>.</div><div>
<br /></div><div>As always I hope this is an interesting read, feedback is always welcomed. If you have any questions or remarks visit the <a href="http://forge.openbravo.com/plugins/espforum/browse.php?group_id=100&amp;forumid=549512">Openbravo forge forum</a> and post them there.</div><div>
<br /></div><div>Happy Coding!</div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5606774739693012337-1223484020507332089?l=mtopenbravo.blogspot.com' alt='' /></div></meta><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=y6-X3M2frqk:gSUUjKnFVF4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=y6-X3M2frqk:gSUUjKnFVF4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=y6-X3M2frqk:gSUUjKnFVF4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=y6-X3M2frqk:gSUUjKnFVF4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/y6-X3M2frqk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=8075</wfw:commentRss>
		<feedburner:origLink>http://mtopenbravo.blogspot.com/2010/01/integrating-data-access-layer-with.html</feedburner:origLink></item>
		<item>
		<title>Adrián Romero: Initial Data Load demostration - Feb 4th, 2010</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/HlA23Xmuhq4/initial-data-load-demostration-feb-4th.html</link>
		<comments>http://adrianrcblog.blogspot.com/2010/01/initial-data-load-demostration-feb-4th.html#comments</comments>
		<pubDate>Wed, 27 Jan 2010 16:09:00 +0000</pubDate>
		<dc:creator>Adrián Romero</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-2382209162490985914.post-7790449483297233364</guid>
		<description><![CDATA[Open to all Openbravo Community members, this webinar will demonstrate Openbravo modularity, will help you better understand development techniques, processes and tools you can use to create extension modules, and will show concrete functional solution...]]></description>
			<content:encoded><![CDATA[Open to all Openbravo Community members, this webinar will demonstrate Openbravo modularity, will help you better understand development techniques, processes and tools you can use to create extension modules, and will show concrete functional solutions to address specific requirements that might inspire you to create your own solutions.<br /><a href="http://www.openbravo.com/product/exchange/modules/initial-data-load/"><br /></a><a href="http://www.openbravo.com/product/exchange/modules/initial-data-load/">Initial Data Load</a> is focused to Openbravo ERP partners and customers that aims to reduce the time needed to deploy a fresh Openbravo ERP installation simplifying the import of all master data and operational data needed to start working with Openbravo ERP. This can save a lot of time in the deployment of Openbravo ERP.<br /><br />The <a href="http://www.openbravo.com/product/exchange/modules/initial-data-load/">Initial Data Load</a> module is a commercial module available in the <a href="http://www.openbravo.com/product/exchange/">Openbravo Exchange Marketplace</a> at no additional cost for Openbravo Professional subscribers.<br /><br />Take a look at this <a href="http://forge.openbravo.com/plugins/espforum/view.php?group_id=100&amp;forumid=886716&amp;topicid=7008455">post</a> for more details about the webinar.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2382209162490985914-7790449483297233364?l=adrianrcblog.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=HlA23Xmuhq4:ZW5JIDaDHPA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=HlA23Xmuhq4:ZW5JIDaDHPA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=HlA23Xmuhq4:ZW5JIDaDHPA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=HlA23Xmuhq4:ZW5JIDaDHPA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/HlA23Xmuhq4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=7999</wfw:commentRss>
		<feedburner:origLink>http://adrianrcblog.blogspot.com/2010/01/initial-data-load-demostration-feb-4th.html</feedburner:origLink></item>
		<item>
		<title>John Fandl: Launch of Openbravo Exchange: the ERP Marketplace</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/ipZ7GDbwGKk/launch-of-openbravo-exchange-erp.html</link>
		<comments>http://observationsonerp.blogspot.com/2010/01/launch-of-openbravo-exchange-erp.html#comments</comments>
		<pubDate>Tue, 26 Jan 2010 17:18:00 +0000</pubDate>
		<dc:creator>John Fandl</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-2706625739631185198.post-1018601998335414096</guid>
		<description><![CDATA[I have written in the past about Openbravo Forge, Openbravo's collaborative development environment, and now I'm pleased to announce the launch of Openbravo Exchange--the place to go for information about extension modules that are "ready for prime tim...]]></description>
			<content:encoded><![CDATA[<div>I have written in the past about <a href="http://observationsonerp.blogspot.com/2009/08/openbravo-forge-real-world.html">Openbravo Forge</a>, Openbravo's collaborative development environment, and now I'm pleased to announce the launch of <a href="http://exchange.openbravo.com/">Openbravo Exchange</a>--the place to go for information about extension modules that are "ready for prime time". If the Forge is the sausage factory, then the Exchange is the delicatessen, featuring a series of "ready-to-use" software packages that are catalogued and described with the end user in mind. :)</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8TwC09vMxok/S18nsbjCx4I/AAAAAAAAAJ0/oe56tLZTbKU/s1600-h/delicatessen.jpg"><img src="http://1.bp.blogspot.com/_8TwC09vMxok/S18nsbjCx4I/AAAAAAAAAJ0/oe56tLZTbKU/s320/delicatessen.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5431103319894574978" /></a><br /><div><br /></div><div>Here are the top things to know about Openbravo Exchange:</div><div><ul><li>Openbravo business partners now have an official, high-profile web site they can leverage to promote and monetize their Openbravo commercial extension modules and templates</li><li>All business partners are allowed evaluation-only access to all Exchange modules (so they can sell them on the author's behalf, and get a sales commission of course)</li><li>As an author, you don't have to worry about invoicing and collecting money--we do that, and you collect periodic author royalty payments!</li><li>Good zero-cost open source modules from anyone are also welcome, of course (nice way to get your name out there)</li><li>We are starting with a self-certification model, here are the <a href="http://forge.openbravo.com/plugins/mwiki/index.php/Openbravoforgesupport/Help/Selling/ProductCertification">certification criteria</a></li><li>You ain't seen nothin' yet! (this is just version 1.0, stay tuned for a more dynamic Exchange with reviews, ratings, etc.)</li></ul>If you are a business partner with Openbravo-based commercial software to sell through our channel, <a href="http://forge.openbravo.com/plugins/mwiki/index.php/Openbravoforgesupport/Help/Selling">here</a> are the steps to package and sell it.  If you are a business partner implementing solutions for your clients, check Openbravo Exchange before proposing to close functional gaps with a custom project--what your customer needs may already be available off-the-shelf, as a fully-tested package!  If you are new to Openbravo and interested in leveraging your development skills, the <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide">Openbravo ERP Developer's Guide</a> is the place to start. </div><div><br /></div><div>Here is the official <a href="http://www.openbravo.com/about-us/press-room/news/140/openbravo-launches-global-commercial-open-source-exchange-for-erp-solutions-and-extensions.php">press release</a>, which features the <a href="http://www.openbravo.com/product/exchange/modules/hotel-management-system/">Hotel Management System</a> from <a href="http://www.bonsaiinc.biz/home.html">Bonsai Consulting</a>--best of luck to you with this module, Ravi.  And happy developing and selling to all in the Openbravo community in 2010, as we unleash the <a href="http://observationsonerp.blogspot.com/2009/06/business-side-of-modularity-food-for.html">business of modularity</a>!</div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2706625739631185198-1018601998335414096?l=observationsonerp.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=ipZ7GDbwGKk:wy3JYsi6Vu4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=ipZ7GDbwGKk:wy3JYsi6Vu4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=ipZ7GDbwGKk:wy3JYsi6Vu4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=ipZ7GDbwGKk:wy3JYsi6Vu4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/ipZ7GDbwGKk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=7946</wfw:commentRss>
		<feedburner:origLink>http://observationsonerp.blogspot.com/2010/01/launch-of-openbravo-exchange-erp.html</feedburner:origLink></item>
		<item>
		<title>Priya Muthukumar: RM Updates : 2.50MP10 released, Quickstart-spain OBX automated, User manual to setup testing environment for openbravoERP, Scrum master less sprint.</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/I7oMNddVowI/rm-updates-250mp10-released-quickstart.html</link>
		<comments>http://pmpearl.blogspot.com/2010/01/rm-updates-250mp10-released-quickstart.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 08:50:00 +0000</pubDate>
		<dc:creator>Priya Muthukumar</dc:creator>
		
		<category><![CDATA[Openbravo]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-7657409735507515078.post-4204077872311690644</guid>
		<description><![CDATA[MaintancePack Release: 2.50MP10 is released. OBX and the update through the MMC is available exclusively for professional customers. The appliance, tarball are available for everyone.Quickstart-spain OBX:  Created new job to build QuickStart-spain obx ...]]></description>
			<content:encoded><![CDATA[<span><b><br />MaintancePack Release:</b> <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Release_Notes/2.50MP10">2.50MP10</a> is released. OBX and the update through the MMC is available exclusively for professional customers. The <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Release_Notes/2.50MP10#Download_Details">appliance</a>, <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Release_Notes/2.50MP10#Download_Details">tarball</a> are available for everyone.<br /><br /><b>Quickstart-spain OBX:</b>  Created new <a href="http://builds.openbravo.com/job/erp_devel_main-obquickstart-es/">job</a> to build QuickStart-spain obx with this automation we are ensure better quality through all the development cycle, which leads to stable release dates and high quality in solution.</span><span> Latest obx is available <a href="http://builds.openbravo.com/erp/quickstart.spain">here</a><br /><b><br />User manual:</b> Created <a href="http://wiki.openbravo.com/wiki/Release_Management/Testing_environments/Production_to_testing_replication_tool_user_manual">guide</a> on how to replicate the Openbravo ERP running in a production environment into a testing environment.<br /><span><br />Scrum master less sprint:</span> We successfully made this sprint with no scrum master, which means we shared the work of Scrum Master and we have two people from the team on rotation to represent Scrum-of-Scrum and ScrumMaster's meeting.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7657409735507515078-4204077872311690644?l=pmpearl.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=I7oMNddVowI:4zTl2dlCLs0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=I7oMNddVowI:4zTl2dlCLs0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=I7oMNddVowI:4zTl2dlCLs0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=I7oMNddVowI:4zTl2dlCLs0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/I7oMNddVowI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=7875</wfw:commentRss>
		<feedburner:origLink>http://pmpearl.blogspot.com/2010/01/rm-updates-250mp10-released-quickstart.html</feedburner:origLink></item>
		<item>
		<title>Richard Morley: </title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/DokQNP0txOM/there-are-many-new-things-in-ob-erp-2.html</link>
		<comments>http://richardatopenbravo.blogspot.com/2010/01/there-are-many-new-things-in-ob-erp-2.html#comments</comments>
		<pubDate>Tue, 19 Jan 2010 15:42:00 +0000</pubDate>
		<dc:creator>Richard Morley</dc:creator>
		
		<category><![CDATA[Openbravo ERP Payment Monitor]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-1327978323135673867.post-4511121244772649099</guid>
		<description><![CDATA[There are many new things in OB ERP 2.50 MP10, but I thought you would like to hear about one in particular...the Payment Monitor.The Payment Monitor provides users with a quick, single click, view of the latest payment information related to an invoic...]]></description>
			<content:encoded><![CDATA[There are many new things in OB ERP 2.50 MP10, but I thought you would like to hear about one in particular...the <b>Payment Monitor</b>.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fv2RUNb6z6o/S1XTTgHMcGI/AAAAAAAAAJw/Z46SC4n5o5Q/s1600-h/PaymentMonitorInvoice.png"><img src="http://2.bp.blogspot.com/_fv2RUNb6z6o/S1XTTgHMcGI/AAAAAAAAAJw/Z46SC4n5o5Q/s320/PaymentMonitorInvoice.png" alt="" id="BLOGGER_PHOTO_ID_5428477257856086114" border="0" /></a><br /><p>The <b>Payment Monitor</b> provides users with a quick, single click, view of the latest payment information related to an invoice.  If payment has been received in full then the status is now clearly shown as "Payment Complete".  If payment is still pending, then by clicking on the new <b>Payment Monitor</b> button on the invoice header, the payment monitor information displays the number of days until the due date of the next payment and the amount that needs to be paid on that date.    The user can also see how much has been paid, how much is pending and the last time the payment status was calculated.   This feature is particularly useful if an invoice has multiple due dates as the Payment Monitor tracks the invoice payment status for each payment.  The payment status can be updated automatically by a background process that automatically scans new invoices or manually (by clicking on the "Update Payment Monitor" button.</p><p>One of the great thing about this feature is that all of this information is available as filter criteria and exposed in the grid view. This makes the <b>Payment Monitor</b> a very handy and agile tool that allows users to manage collections very easily and could in many ways replace the Payments Report.</p> This new feature is a great example of functionality that is being added to improve the usability of Openbravo.  It is very "demonstrable" to partners and users (if you want to impress) and pre-empts most questions about how a user can see the payment status of an invoice.<br /><br />Please investigate this feature and add it to your arsenal of cool features that improve user productivity.  You can find out more information at <a send="true" href="http://wiki.openbravo.com/wiki/Functional_Documentation/Procurement_Management#Relationship_to_Financial_Management:_Payment_and_Payment_monitor" >http://wiki.openbravo.com/wiki/Functional_Documentation/Procurement_Management#Relationship_to_Financial_Management:_Payment_and_Payment_monitor</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1327978323135673867-4511121244772649099?l=richardatopenbravo.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=DokQNP0txOM:mlnvQEupotU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=DokQNP0txOM:mlnvQEupotU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=DokQNP0txOM:mlnvQEupotU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=DokQNP0txOM:mlnvQEupotU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/DokQNP0txOM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=7845</wfw:commentRss>
		<feedburner:origLink>http://richardatopenbravo.blogspot.com/2010/01/there-are-many-new-things-in-ob-erp-2.html</feedburner:origLink></item>
		<item>
		<title>Iván Perdomo: Development tips – Part I</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/w30pQoUweWo/</link>
		<comments>http://katratxo.wordpress.com/2010/01/15/development-tips-i/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 09:21:28 +0000</pubDate>
		<dc:creator>Iván Perdomo</dc:creator>
		
		<category><![CDATA[Openbravo]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=131</guid>
		<description><![CDATA[This is the first one of a series of posts about development tips that I use in a daily basis. I think that you can benefit from them, and speed up your daily work.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&#38;blog=6756513&#38;post=131&#38;subd=katratxo&#38;ref=&#38;feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>
This is the first one of a series of posts about development tips that I use in a daily basis. I think that you can benefit from them, and speed up your daily work. There are some one-line commands that you can use to execute several things in one shot. Those is targeting GNU/Linux users.
</p>
<h2>Speeding up Firefox</h2>
<p>
I have found a few tips that can improve its performance.</p>
<p><h3>Use different profiles</h3>
</p><p>
Add-ons could decrease the performance of your browser. One example of decreasing performance add-on is <a href="http://www.getfirebug.com/" >Firebug</a>. It&#8217;s just a great tool to debug JavaScript, CSS, HTML, monitor requests, etc, but it has a <a href="http://antennasoft.net/robcee/2009/12/15/firebug-and-the-jit/" >known issue</a>:
</p>
<blockquote><p>&#8220;&#8230; If you have Firebug installed you are probably not getting fast Javascript. Firebug doesn’t have to be active on your current page &#8230;&#8221;</p></blockquote>
<p>
That&#8217;s why is a <a href="http://www.youtube.com/watch?v=7p24bC8ZR3U#t=12m08s" >best practice</a> to use Firebug in a <a href="http://support.mozilla.com/en-US/kb/Managing+profiles" >different profile</a>.
</p>
<p>
I have a profile named &#8220;debug&#8221; where the only add-on installed is Firebug and made a simple bash script <em>ffbug</em> to open Firefox with that profile:
</p>
<p><pre class="brush: bash;">
#!/bin/bash
firefox -no-remote -P &quot;debug&quot; &amp;
</pre>
</p>
<p>
The -no-remote parameter allows you open a new instance of Firefox and not just a new window linked to the current running one. The -P is to define which profile you want to use.
</p>
<h3>VACUUM the SQLite databases</h3>
<p>
You can <a href="http://mozillalinks.org/wp/2009/07/vacuum-your-firefox-databases-for-better-performance/" >improve the performance of Firefox</a> by <a href="http://www.sqlite.org/lang_vacuum.html" >vacuum</a> your bookmarks, history, etc. databases.<br />
Close all your running Firefox instances and execute:
</p>
<p><pre class="brush: bash;">
~ $ for i in $(find -name '*.sqlite'); do sqlite3 $i VACUUM; done;
</pre>
</p>
<h2>Useful one-line commands</h2>
<h3>Updating the source code of the modules your working on</h3>
<p>
In some cases you work with several modules at the same time, and you want to get all the changes made by your colleagues. You can update your local repositories by executing this line inside your modules folder:
</p>

<pre class="brush: bash;">
for i in $(ls -1); do cd $i; hg pull -u; cd ..; done;
</pre>

<p>
Example of the output of this is:</p>
<pre>
~/src/openbravo/working/pi-reference/modules $ for i in $(ls -1); do cd $i; hg pull -u; cd ..; done;
pulling from https://code.openbravo.com/erp/mods/org.openbravo.base.seam
searching for changes
no changes found
pulling from https://code.openbravo.com/erp/mods/org.openbravo.client.freemarker/
searching for changes
no changes found
pulling from https://code.openbravo.com/erp/mods/org.openbravo.client.kernel/
searching for changes
no changes found
pulling from https://code.openbravo.com/erp/mods/org.openbravo.service.datasource
searching for changes
no changes found
pulling from https://code.openbravo.com/erp/mods/org.openbravo.service.json/
searching for changes
no changes found
pulling from https://code.openbravo.com/erp/mods/org.openbravo.userinterface.selector
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 13 changes to 13 files
13 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from https://code.openbravo.com/erp/mods/org.openbravo.userinterface.smartclient
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 3 changes to 3 files
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
</pre>

<p>
You can easily hack this line by executing another <a href="http://mercurial.selenic.com/" >Mercurial</a> command, e.g. See what&#8217;s the status on each repository:</p>
<pre class="brush: bash;">
for i in $(ls -1); do cd $i; hg st; cd ..; done;
</pre>

<h3>Update and build the latest pi</h3>
<p>
Assuming that you want to use the latest stable revision from pi, you can check <a href="http://builds.openbravo.com" >our continuous integration framework</a> and see what&#8217;s the latest revision that passed all the tests, then you can update your local repository to that revision and rebuild your system. Or you can copy this bash script (pi-update), and execute it inside your pi working copy:
</p>
<p><pre class="brush: bash;">
#!/bin/bash
REVISION=`wget -q -O - http://builds.openbravo.com/job/erp_devel_pi-full-pgsql/lastSuccessfulBuild/changes | awk -F: '/https:\/\/code\.openbravo\.com\/erp\/devel\/pi\/rev\// {print substr($3,0,12)}' | head -n1`
hg pull
echo &quot;Updating to rev $REVISION&quot;
hg up -r $REVISION
ant smartbuild -Dlocal=no
</pre>
</p>
<p>
This script uses <a href="http://www.gnu.org/software/wget/" >wget</a> and <a href="http://www.gnu.org/software/gawk/" >awk</a> to get the latest revision from the last successful build page, pulls all the changesets of PI and updates your working copy to the detected revision, then updates your database and compiles the application.
</p>
<h3>Cleanup your working copy</h3>
<blockquote cite="http://hgbook.red-bean.com/read/mercurial-in-daily-use.html">
<p>
The hg status command will tell you which files Mercurial doesn&#8217;t know about; it uses a “?” to display such files &#8230;
</p>
</blockquote>
<p>
I often want to clean my working copy and remove all unversioned files. You can rid of those file by executing: </p>
<pre class="brush: bash;">
 hg st -nu | xargs rm -rf
</pre>

<p>
That&#8217;s all folks! I&#8217;ll come back with more tips in the future. Disclaimer: I&#8217;m not a bash expert so I know that some of this commands could be simplified. I would also like to thank <a href="http://jpabloae.wordpress.com/" >iarwain</a> for simplifying some of this commands.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&blog=6756513&post=131&subd=katratxo&ref=&feed=1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=w30pQoUweWo:jdp40z2nA3w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=w30pQoUweWo:jdp40z2nA3w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=w30pQoUweWo:jdp40z2nA3w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=w30pQoUweWo:jdp40z2nA3w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/w30pQoUweWo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=7774</wfw:commentRss>
		<feedburner:origLink>http://katratxo.wordpress.com/2010/01/15/development-tips-i/</feedburner:origLink></item>
		<item>
		<title>Josep Mitjà: Openbravo reaches 1.5 million downloads</title>
		<link>http://feedproxy.google.com/~r/openbravo-blogs/~3/cBPvj5EmS6E/openbravo-reaches-15-million-downloads.html</link>
		<comments>http://redzezen.blogspot.com/2009/12/openbravo-reaches-15-million-downloads.html#comments</comments>
		<pubDate>Wed, 13 Jan 2010 16:28:00 +0000</pubDate>
		<dc:creator>Josep Mitjà</dc:creator>
		
		<category><![CDATA[community]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-4750802637797824669.post-6856448977604686363</guid>
		<description><![CDATA[Today we have reached an accumulated 1.5 M downloads.Cumulative downloads, and even better -monthly download rate-, is a great indicator of an open source project's interest. We are very proud to reach this figure after the first publication of code in...]]></description>
			<content:encoded><![CDATA[<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C3VW9-qKNGo/SzouZp4se0I/AAAAAAAAAMo/PU_uYSxzmMo/s1600-h/1500000_Openbravo_downloads.png"><img src="http://3.bp.blogspot.com/_C3VW9-qKNGo/SzouZp4se0I/AAAAAAAAAMo/PU_uYSxzmMo/s400/1500000_Openbravo_downloads.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5420696119769070402" /></a><br /><br />Today we have reached an accumulated 1.5 M downloads.<br /><br />Cumulative downloads, and even better -monthly download rate-, is a great indicator of an open source project's interest. We are very proud to reach this figure after the first publication of code in April 2006. I interpret it as a sign of our long-term commitment to becoming the leading ERP in the space.<br /><br />Also, since October 2006, Openbravo ERP has been on a monthly basis the open source ERP hosted in SourceForge with the highest download rate in the category. This is no less than 39 months in a row that the public has continued to choose Openbravo ERP over other alternatives. One download at a time, Openbravo is earning a solid reputation, and <a href="http://www.openbravo.com/customers/">customers</a> all over the world are joining in.<br /><br />Thanks again and keep in mind this is just the beginning!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4750802637797824669-6856448977604686363?l=redzezen.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=cBPvj5EmS6E:GarL6rie4kg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=cBPvj5EmS6E:GarL6rie4kg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?i=cBPvj5EmS6E:GarL6rie4kg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/openbravo-blogs?a=cBPvj5EmS6E:GarL6rie4kg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/openbravo-blogs?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/openbravo-blogs/~4/cBPvj5EmS6E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://planet.openbravo.com/?feed=rss2&amp;p=7762</wfw:commentRss>
		<feedburner:origLink>http://redzezen.blogspot.com/2009/12/openbravo-reaches-15-million-downloads.html</feedburner:origLink></item>
	</channel>
</rss>
