Can you be more specific?

The general Perl object you probably want to use is
LedgerSMB::DBObject::Menu and since this inherits from LedgerSMB::DBObject,
the simplest way to do this is to create a user defined function in
PostgreSQL.  From there it is very straight-forward to pull that data into
LedgerSMB as an array of hashrefs by using either $request->call_procedure
if you want to use enumerated arguments, or $menu->exec_method if you want
to use mapped arguments.  In essence you can use a user defined function as
a named query.

For example, if I wanted to select some information for the current logged
in user, I might:

CREATE OR REPLACE FUNCTION custom_get_some_info()
returns setof menu_item language sql as $$

      SELECT u.position, u.id, u.level, u.path, to_args(array[ua.attribute,
ua.value))
        FROM user_menu u
        JOIN user_menu_attribute ua ON u.id = ua.node_id
       WHERE u.login = SESSION_USER;
$$;

Note that you can also RETURN TABLE(....) and this will work as advertised.

Then from Perl you could add to a custom/menu.pl, the right namespace
(LedgerSMB::Scripts::menu) and a modified version of the expanding_menu.pl.
 Unfortunately for now, the best thing to do would be to just copy/paste
the function in there and then modify it.  To call the procedure and get a
list of hash refs it is as simple as:

@new_menu_items = $request->call_procedure(procname =>
'custom_get_some_info');

or alternatively

@new_menu_items = $menu->exec_method(funcname => 'custom_get_some_info');

If you have to pass additional info to the function it is a little more
complex than this, but with more info I can provide more info on how to do
that in the framework.  The big difference between call_procedure (which
works from either $request or $menu) is that it takes enumerated arguments,
while exec_method maps in arguments from current object properties.

Best Wishes,
Chris Travers
------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may
_______________________________________________
Ledger-smb-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ledger-smb-devel

Reply via email to