Hi Chris,

Should we add the technical "how to" you documented below somewhere on the
ledgersmb.org site, or maybe in docs in the development tree?

Bye,


Erik.


On Tue, May 28, 2013 at 4:14 AM, Chris Travers <[email protected]>wrote:

> 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
>
>
------------------------------------------------------------------------------
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with <2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1
_______________________________________________
Ledger-smb-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ledger-smb-devel

Reply via email to