On Tue, May 28, 2013 at 2:08 PM, Erik Huelsmann <[email protected]> wrote:
> 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?
>
Maybe in the community guide?
Best Wishes,
Chris Travers
>
> 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
>
>
------------------------------------------------------------------------------
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