Search code examples
yodlee

Efficiently Retrieve Transactions and Holdings for an Item from Yodlee


Every night we need to pull all of the data (holdings and transactions) in the Yodlee database for our users and store it in our own database. From what I gather there seems to be no efficient way to do this. Option 2 of Yodlee TransactionView and ItemId indicates that I should call getItemSummaryForItem1 to retrieve the ItemSummary for an Item and then subsequently run a TransactionSearch to retrieve the transactions. This makes a lot of sense if you are ONLY wanting transactions. In which case I would run the following an getItemSummaryForItem1 call:

// Create Data Extent
DataExtent dataExtent = new DataExtent();
dataExtent.startLevel = 0;
dataExtent.startLevelSpecified = true;
dataExtent.endLevel = 0;
dataExtent.endLevelSpecified = true;

// Get ItemSummary
var ItemSummary = new DataService().getItemSummaryForItem1(_userContext, itemId, true, dataExtent);
[Then the TransactionSearch would follow]

This works great and runs really quickly, but in my scenario I want holdings as well. To retrieve holdings I need to change the endLevel of the DataExtent from a 0 to a 2. However when I do that the call takes an amazingly significant amount longer AND the ItemSummary comes back with all of the transactions, which is EXTREMELY inefficient.

Is there anyway to do what I want, pull transactions and holdings for an Item, efficiently? Based on the documentation I can't seem to find a way. Thanks in advance.


Solution

  • Yes, there is way to avoid this.

    Steps - 1)Don't set endLevel =2 and set endLevel =0

    2)The DataExtent also takes an array of extentLevels , so please set that with 1st element with value as 0(zero) and 2nd element as value 2.

    Sample SOAP XML

    <dex xmlns="">
     <startLevel>0</startLevel>
      <endLevel>0</endLevel>
       <extentLevels>
          <elements>0</elements>
          <elements>2</elements>
        </extentLevels>             
    </dex>
    

    Sample code -

    dataExtent.setStartLevel(0);
    dataExtent.setEndLevel(0);
    Integer[] array = {0,2};
    ArrayOfint levelArray = new ArrayOfint();
    levelArray.setElements(array);
    dataExtent.setExtentLevels(levelArray);
    

    You can also check the getItemSummaryForItem1 documentation at Youdlee's developer portal