Zum Inhalt springen

Komponente „Transferliste“

Übersicht

Die Übertragungslistenkomponente kann zur Entwurfszeit dynamisch eine Liste von Objekten generieren und es einem Benutzer ermöglichen, ein oder mehrere Objekte auszuwählen. Sie wird in Verbindung mit einer Listenobjektkomponente verwendet auf einer vorherigen Seite (Schritt) der Aktivität, um die Liste der Objekte zu definieren. Dieses Beispiel zeigt eine Übertragungsliste, die im LDAP Connector von Integration Studio verwendet wird Aktivität „Eintrag hinzufügen“:

Transferlistenbeispiel vom Integration Studio LDAP Connector

Komponenten-JSON

Als list-object Komponente, die dieser Übertragungsliste vorangeht, ist ein wesentlicher Teil ihrer Operation. Dieses JSON-Fragment enthält sowohl die list-object und die transfer-list Komponenten:

"addEntry": {
   "displayName": "Add Entry",
   "properties": [
      {
         "name": "list-object-page",
         "type": "pagination",
         "children": [
            {
               "name": "list-object",
               "displayName": "Select Structural Class",
               "type": "list-object",
               "use": {
                  "ui": {
                     "selectObjectLabel": "Selected Structural Class: ",
                     "tableHeaders": [
                        "Name"
                     ]
                  },
                  "discoveryType": "provided",
                  "orientation": "output",
                  "documentIdPath": "this"
               }
            },
            {
               "name": "continue",
               "displayName": "Continue on error",
               "type": "boolean",
               "defaultValue": false,
               "validators": [
                  {
                     "name": "required"
                  }
               ]
            }
         ]
      },
      {
         "name": "transfer-list-page",
         "type": "pagination",
         "children": [
            {
               "name": "transfer-list",
               "displayName": "Select Auxiliary Class",
               "type": "transfer-list",
               "widgetHint": "component:connector/transfer-list",
               "use": {
                  "ui": {
                     "mainTitle": "Object Classes",
                     "leftSubTitle": "Available Auxiliary Classes",
                     "rightSubTitle": "Selected Auxiliary Classes",
                     "showDefaultTypeIcons": false
                  }
               },
               "validators": [
                  {
                     "name": "min",
                     "args": [
                        0
                     ]
                  }
               ]
            }
         ]
      }
   ]
}

Im JSON, das die transfer-list können diese Eigenschaften konfiguriert werden:

  • type: Der Transferlistenkomponententyp muss "transfer-list".
  • mainTitle: Titel für die Transferliste.
  • leftSubTitle: Untertitel über der linken Liste.
  • rightSubTitle: Untertitel über der rechten Liste.
  • showDefaultTypeIcons: Wenn true, es werden Symbole für den LDAP Objekttyp angezeigt.
  • args: Definiert die Mindestanzahl von Feldern, die ausgewählt werden müssen, damit die Komponente gültig ist. Kann [0] Dadurch kann keine Auswahl gültig sein und der Benutzer kann mit dem nächsten Schritt fortfahren.

Komponentenerkennung

Der Connector soll die Liste der Objekte bereitstellen. Dies geschieht auf ähnliche Weise wie die List Object-Komponente(/connector-sdk/ui-components/complex-components/list-object-component#component-discovery) ermittelt seine Objektliste und die gleiche Methode in der Aktivität aufgerufen wird. Um den Aufruf dieser Methode zu unterscheiden, wenn er für eine Übertragungsliste aufgerufen wird, die einem Listenobjekt folgt, ändern Sie den Rückgabewert basierend auf dem Seitennamen des aufgerufenen Schritts. Wie in diesem Beispiel gezeigt, wird der Seitenname aufgelöst und dann verwendet, um die Bildung der Objektliste zu ändern:

@Override
public List<DiscoverableObject> getObjectList(
    DiscoverContextRequest<DiscoverableObjectRequest> objectListRequest) throws DiscoveryException {
  logger.info("Getting objectList for Activity: " + getName());
  List<DiscoverableObject> objectList = new ArrayList<DiscoverableObject>();
  try {
    LdapConnection ldapConnection = (LdapConnection) objectListRequest.getConnection();
    List<Properties> properties = objectListRequest.getRequest().getSelectionPath();
    String page = null;
    for (Properties property : properties) {
      if (property.getKey().equalsIgnoreCase(PROPERTY_NAME)) {
        page = property.getValue().toString();
        break;
      }
    }

    switch (page) {
      case LIST_OBJECT:
        objectList = ldapConnection.getObjectList(ObjectClassTypeEnum.STRUCTURAL);
        break;
      case TRANSFER_LIST:
        objectList = ldapConnection.getObjectList(ObjectClassTypeEnum.AUXILIARY);
        break;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
    String msg = Messages.getMessage(Messages.LDAP_CODE06_MSG,
        new Object[] {getName(), ex.getLocalizedMessage()});
    throw new DiscoveryException(Messages.LDAP_CODE06, msg, ex);
  }
  return objectList;
}

Komponentenausgabe

Die Übertragungsliste gibt ihre Ausgabe in Form einer JSON-Zeichenfolge an den Connector zurück. Diese Zeichenfolge muss wieder in ein Objekt umgewandelt werden, bevor sie verwendet werden kann. Dies geschieht im execute() Methode der Aktivität:

@Override
public void execute(ExecutionContext context) throws Exception {
  Map<String, String> functionalParam = context.getFunctionParameters();
  String transferList = functionalParam.get(TRANSFER_LIST);
  JSONObject transferListJsonObject;
  JSONArray selectedNameJsonArray;
  . . .
  try {
    transferListJsonObject = new JSONObject(transferList);
    selectedNameJsonArray = transferListJsonObject.getJSONArray(SELECTED_NAMES);
  } catch (JSONException e) {
    transferList = transferList.substring(transferList.indexOf('['), (transferList.indexOf(']') + 1));
    selectedNameJsonArray = new JSONArray(transferList.replaceAll("\\\\", ""));
  }
  . . .