Suchvorgang mit seitenweise abgerufenen Suchergebnissen ausführen

Verwenden Sie die Methode "search(DataObject)" und das Datenobjekt "PageControl", um die Anzahl der Elemente zu definieren, die zu einem beliebigen Zeitpunkt im Verlauf eines Suchvorgangs zurückgegeben werden.

Informationen zu diesem Vorgang

Die Seitengröße wird von "PageControl" angegeben. Ein Cookie, das für einen späteren Aufruf verwendet wird, wird von "PageResponseControl" zurückgegeben. Wenn Sie sich dafür entscheiden, den Abruf der seitenweise abgerufenen Suchergebnisse nicht fortzusetzen, müssen Sie die Seitengröße mit Hilfe des Cookies auf 0 setzen. Der Server von Virtual Member Manager bereinigt daraufhin die verbleibenden Ergebnisse.
Wenn Sie bei einem Suchvorgang die Funktion für die seitenweise abgerufenen Suchergebnisse verwenden möchten, nehmen Sie den folgenden Mustercode in Ihren Anwendungscode auf, und ersetzen Sie die kursiv gedruckten Variablen durch die tatsächlichen Werte, die Sie für diese Entität verwenden möchten:
public static Map getControlMap(DataGraph dataGraph)
{
        Map ctrlMap = new HashMap();
        List controls = dataGraph.getRootObject().getDataObject(SchemaConstants.DO_ROOT).getList(
                SchemaConstants.DO_CONTROLS);
        if (controls != null) {
            for (int i = 0; i < controls.size(); i++) {
                DataObject control = (DataObject)controls.get(i);
                String type = control.getType().getName();
                if (ctrlMap.get(type) == null) {
                    ctrlMap.put(type, control);
                }
            }
        }
        return ctrlMap;
} 
DataObject root = SDOHelper.createRootDataObject();
		
				DataObject searchCtrl = root.createDataObject(DO_CONTROLS, WIM_NS_URI, DO_SEARCH_CONTROL);
				searchCtrl.getList(PROP_PROPERTIES).add("uid");
		searchCtrl.getList(PROP_PROPERTIES).add("sn");  
				searchCtrl.setString(PROP_SEARCH_EXPRESSION, "//entities[@xsi:type='PersonAccount' and uid='SalesPerson*']");
				searchCtrl.getList(PROP_SEARCH_BASES).add("o=Sales,cn=users,dc=yourco,dc=com");
				DataObject pageCtrl = root.createDataObject(DO_CONTROLS, WIM_NS_URI, DO_PAGE_CONTROL);
		
				pageCtrl.setInt(PROP_SIZE, 2);
		boolean first = true;
		byte[] cookie = null;
		DataObject returnDO = null;
		int pageCount = 0;
		while (first || cookie != null) {
			first = false;
			pageCount++;
						if (cookie != null)
			{
								pageCtrl.setBytes(PROP_COOKIE, cookie);
								pageCtrl.setInt(PROP_SIZE, 3);
				searchCtrl.delete();
			}
			SDOUtils.printDataGraph(INPUT_DATAGRAPH, root);
			returnDO = service.search(root);
						SDOUtils.printDataGraph(OUTPUT_DATAGRAPH, returnDO);
			List entities = returnDO.getList(SchemaConstants.DO_ENTITIES );
			Map ctrlMap = getControlMap(returnDO);
						DataObject responseCtrl = (DataObject)ctrlMap.get(DO_PAGE_RESPONSE_CONTROL);
			if (responseCtrl != null) {
								cookie = responseCtrl.getBytes("cookie");
			} else {
				cookie = null;
			}
		}

Beispiele für Eingabe- und Ausgabedatengraphen

Für das dargestellte Beispiel sieht der Eingabedatengraph wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" 
    xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:controls xsi:type="wim:SearchControl" 
                expression="//entities[@xsi:type='PersonAccount' and uid='SalesPerson*']">
      <wim:properties>uid</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:searchBases>o=Sales,cn=users,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
    <wim:controls xsi:type="wim:PageControl" size="2"/>
  </wim:Root>
</sdo:datagraph>
Der resultierende Ausgabedatengraph für den ersten Aufruf in diesem Beispiel sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:sdo="commonj.sdo" 
               xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson3,ou=US,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="13ae346f-1e4c-40cd-8896-1c7f0b2b3079" 
                      uniqueName="uid=SalesPerson3,ou=US,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson3</wim:uid>
      <wim:sn>SalesPerson3Sn</wim:sn>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson2,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="a3f9e8a1-117a-4252-840f-6d0cb079a7fb" 
                      uniqueName="uid=SalesPerson2,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson2</wim:uid>
      <wim:sn>SalesPerson2Sn</wim:sn>
    </wim:entities>
    <wim:controls xsi:type="wim:PageResponseControl" 
                  cookie="57494D53656172636843616368654E616D6574696D653A31313239353538343136383636"
        totalSize="4"/>
  </wim:Root>
</sdo:datagraph>
Der Eingabedatengraph für den zweiten Aufruf in diesem Beispiel sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:sdo="commonj.sdo" 
               xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:controls xsi:type="wim:PageControl" 
             cookie="57494D53656172636843616368654E616D6574696D653A31313239353538343136383636"
        size="3"/>
  </wim:Root>
</sdo:datagraph>
Der resultierende Ausgabedatengraph für den zweiten Aufruf in diesem Beispiel sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:sdo="commonj.sdo" 
               xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson1,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="e7db8c0e-d2b3-43fe-be14-1475125606f4" 
                      uniqueName="uid=SalesPerson1,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson1</wim:uid>
      <wim:sn>SalesPerson1Sn</wim:sn>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson4,ou=US,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="a2d1be42-212e-44f0-8396-0bfc2d7d346d" 
                      uniqueName="uid=SalesPerson4,ou=US,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson4</wim:uid>
      <wim:sn>SalesPerson4Sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Lesen Sie hierzu auch die Informationen im Thema Mustercode für die Ausführung eines Suchvorgangs mit seitenweise abgerufenen und sortierten Suchergebnissen.



Rechtliche Hinweise | Feedback