Features Download
From: Erik Huelsmann <ehuels-Re5JQEeQqe8AvxtiuMwx3w <at> public.gmane.org>
Subject: Developing custom LedgerSMB extension experience
Newsgroups: gmane.comp.finance.ledger.smb.devel
Date: Friday 9th March 2012 22:39:31 UTC (over 6 years ago)
Hi all,

For one of my businesses, I needed to create an application to store some
data on the services and products we provide. Basically, there would be one
central table with some references to a few other tables, mostly to provide
(short) selection lists. Also, there's one bigger complexity, because we
wanted to link to our customer data.

The customer data is all stored in LSMB, so, developing this database
inside LSMB's database seemed like a logical choice.

Since my colleague and I were completely unfamiliar with the web
development framework for LSMB, we first had a start with the tools we did
know. (Internally developed stuff, nothing particularly fancy.) However,
due to other priorities, things didn't quite roll forward as we wanted; it
was simply too much work to get it done.

Last week we scrapped our own development. As a replacement I started
looking at the tools that LSMB provides to get the same job done. Again,
without prior knowledge how this should be done, I simply studied the
budgetting module. I figured that if budgetting was an extension, we might
consider our own administration as an extension and that it should probably
work (roughly) the same way.

And it did: in 1,5 day I had our administration up and running, featuring a
data entry screen and a search screen. The current version of the data
entry screen searches and links to a customer only if it finds an exact
match. [Chris and I are working on functionality every module can use to
look up cross table references like these, so it'll be replaced by
something better soon.]

The steps I had to take were really simple:

* Develop 2 main stored procedures:
   - __search()
   - __save()
  and 1 stored procedure for each drop down in the data-entry screen:
   - __list_()
   - __list_()
   - ... etc...

* Create a class in LedgerSMB/DBObject/.pm
  which contains functions callable from perl and maps those
  to calls to the stored procedures in the database as simple as

  sub search {
   my ($self) = @_;
   my $results = $self->execmethod({funcname=>'__search'});

   return $results;

* Create two Template Toolkit template file for my module:
  - ./UI/services/entry.html
  - ./UI/services/search_criteria.html

* Create an LedgerSMB 'module' .pl, with three entry points:
  - edit
  - search
  - update

* Create a top level handler file by copying ./file.pl to ./.pl

* Add menu items

Basically, the out of the 1,5 days I've spent, most time was spent learning
what I had to do. The actual time spent coding was negligeable.

In summary: adding to or changing LedgerSMB can be extremely easy. It was a
refreshing surprise to me how easy. We'll definitely develop the rest of
our application using LedgerSMB's own framework and when it's done, we
might be able to donate it to the project.

Anyway, I hope the above inspires others to try it out themselves. If you
have any questions, both Chris and me will be glad to help you out!


CD: 5ms