Hi,

In the "two-level push", the Data Adapter of the second level is actually independent from the Data Adapter of the first level.
The second level adapter is in fact a Data Adapter on its own, and does not need to be related to the first level Data Adapter.
It is only the first level Data Adapter which needs to know the ItemNames of the second level Data Adapter, in order to manage the list of "keys" referring to the second level ItemNames.
For example, you may have a Data Adapter which publishes the data of the population for each city. Each city is identified by an ItemName and this IteemName must be unique.
So, if you have two distinct cities with the same name, you cannot use the name of the city as ItemName, but you have to relay on a unique city identifier. A unique city id may be something like state.city, stated there cannot be two cities with the same name in the same state, or can be any other type of id.
The first level Data Adapter publishes for each list, also identified by a unique ItemName which in our example can be the state name, the commands that indicate how to progressively modify a list of cities.
Each published ItemEvent of the first level Data Adapter has two field: the “key” field containing the key that unequivocally identifies the Item of the second level Data Adapter, i.e. the city id, and the “command” field containing the command value “ADD”, “UPDATE” or “DELETE”.
You can find more info in "General Concepts", and look at the Portfolio Demo as an example of "two-level push", and the source code of the Portfolio Demo HTML Client on GitHub.

hth,
Marco