User Tools

Site Tools


newdevs:angular_making_calls

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
newdevs:angular_making_calls [2023/12/12 19:12] – [Reading data from the database] fix copy/pasta sandbergjanewdevs:angular_making_calls [2024/03/28 23:16] (current) – [NetService example] sandbergja
Line 81: Line 81:
 ===== Reading data from the database ===== ===== Reading data from the database =====
  
-Let's start out with a simple PcrudService request:+==== PcrudService example ====
  
    this.pcrud.search(    this.pcrud.search(
Line 110: Line 110:
  
 The above assumes that you have injected the ''PcrudService'' as ''this.pcrud'' earlier in the file. The above assumes that you have injected the ''PcrudService'' as ''this.pcrud'' earlier in the file.
 +
 +==== NetService example ====
 +
 +Some interfaces need data in very specific formats, or need to use complicated JOINs
 +when querying the database.  In these cases, a nice approach is to create a custom
 +OpenSRF method in Perl and use the angular NetService to call it.  In this example,
 +we're calling the 'open-ils.acq.purchase_order.retrieve' OpenSRF method to gather a
 +ton of information about the purchase order with ID #1.  Refer to the OpenSRF method's
 +documentation to know which parameters you need to send with your request.
 +
 +    this.net.request(
 +        'open-ils.acq',
 +        'open-ils.acq.purchase_order.retrieve',
 +        this.auth.token(),
 +        1, {
 +            flesh_provider: true,
 +            flesh_notes: true,
 +            flesh_po_items: true,
 +            flesh_po_items_further: true,
 +            flesh_price_summary: true,
 +            flesh_lineitem_count: true
 +        }
 +    ).subscribe(po => console.log(po));
 +    
 +The above assumes that you have injected the ''NetService'' as ''this.net'' and the ''AuthService'' as ''this.auth'' earlier in the file.
 +
 ===== Updating data in the database ===== ===== Updating data in the database =====
 +==== PcrudService example ====
  
-Examples coming soon+The basic workflow for updating data in the database is to:
  
 +  - Retrieve the object you wish to change.
 +  - Make your changes in memory.
 +  - Use the Pcrud service's ''update'' method to save the change to the database.
  
 +
 +The following example retrieves the item with ID #1, changes its barcode to 1234567 in memory, then saves the updated barcode to the database:
 +
 +    this.pcrud.retrieve('acp', 1)
 +        .pipe(switchMap((item) => {
 +            item.barcode('1234567');
 +            return this.pcrud.update(item);
 +    })).subscribe();
 +
 +Notice that we use the rxjs ''switchMap'' operator to switch our observable halfway through, from a `retrieve` call to an `update` call.  This helps us to avoid nesting RxJs subscriptions within each other, which can get very complicated to troubleshoot.
 +
 +
 +==== NetService example ====
 +
 +Here is an example of refreshing the contents of an automatically-generated carousel (the one with ID 201):
 +
 +    this.net.request('open-ils.actor',
 +                  'open-ils.actor.carousel.refresh',
 +                  this.auth.token(),
 +                  201).subscribe(() => {
 +        alert('I feel so refreshed now!');
 +    });
 ===== Deleting data in the database ===== ===== Deleting data in the database =====
  
-Examples coming soon+==== PcrudService example ====
  
 +As with updating objects, you will need to retrieve an object and have a copy in memory before you can delete it.  The following example searches for all shelving locations called "Microfilm" and then deletes them, one by one:
 +
 +  this.pcrud.search('acpl',
 +                     {name: 'Microfilm'})
 +       .pipe(switchMap((location) => {
 +           return this.pcrud.remove(location);
 +       })).subscribe();
 +
 +
 +==== NetService example ====
 +
 +Here's an example of deleting record bucket #13 from the database, along with all its bucket entries (assuming the currently logged in user has the DELETE_CONTAINER permission):
 +
 +   this.net.request('open-ils.actor',
 +                    'open-ils.actor.container.full_delete',
 +                    this.auth.token(),
 +                    'biblio',
 +                    13).subscribe(() => {
 +        alert('Your bucket is gone!');
 +    });
 ===== Troublsehooting OpenSRF calls in your browser ===== ===== Troublsehooting OpenSRF calls in your browser =====
  
newdevs/angular_making_calls.1702426345.txt.gz · Last modified: 2023/12/12 19:12 by sandbergja

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

© 2008-2022 GPLS and others. Evergreen is open source software, freely licensed under GNU GPLv2 or later.
The Evergreen Project is a U.S. 501(c)3 non-profit organization.