Hauptmenü

XML in Dynamisches Feld

Begonnen von ChristianLoeschner, 29.08.2024 13:55:54

⏪ vorheriges - nächstes ⏩

ChristianLoeschner

Hallo zusammen.

Ich komme mal wieder mit einer neuen Problemstellung um die Ecke^^.

Also ich habe eine API-URL (SharePoint). über die frage ich eine Dokumentenbibliotheke ab und bekomme im XML Format u.a. die Namen aller enthaltenen Dokumente zurück.
Meine Absicht ist es, dies "irgendwie" in einem KIX Formular in einem Dynamischen Feld vorzuhalten.
Mein Ansatz war jetzt, das über Assets zu lösen. Nun stehe ich vor dem Hindernis, dass ich nicht genau weiß, wie ich diese xml Daten (regelmäßig) in KIX importiere und abgleichen kann.
Kann mir hier jemand weiterhelfen, oder hat eine bessere Idee?

Liebe Grüße
Christian

Frank Niethardt

Hallo Christian,

grundsätzlich gibt es einen Variablenfilter mit dem du dein XML in eine Perl Datenstruktur umbauen kannst, mit der KIX etwas anfangen kann.

${VariablenName|XMLUtil.FromXML}
Wenn du jetzt KIX Connect hast, kannst du mit der "XSL Transformation" alles mögliche draus machen. Ohne KIX Connect hättest du die Variante das ganze in ein JSON zu wandeln und über jq weiterzuverarbeiten.

Aber wenn du eine API URL ansprichst, gehe ich davon aus, dass zu Connect::Webservice hast. Du musst dann nur einen Job mit Typ "Synchronisation" schreiben, in dem du neue Versionen der entsprechenden Assets anlegst.

Soviel zur Theorie. Aber der Use Case erschließt sich mir noch nicht ganz.

Viele Grüße
Frank

ChristianLoeschner

#2
Servus,
ja ich habe das komplette Paket.
Gefordert wurde von mir:
In einer Ticketmaske sollen Dokumente ausgewählt werden, die in einer SP Dokumentenbibliotheke gespeichert sind.

Zur API URL: ich habe die API URL von SharePoint. Ich habe allerdings noch keine Vorstellung, wie ich das jetzt in KIX rein bekomme...
Leider bin ich da auch aus der Dokumentation nicht so ganz schlau geworden.. Gut, ist halt auch ein sehr spezielles Problem..

Die genaue Absicht ist folgende:
Ich möchte, dass diese SharePoint API abgerufen wird (also qualsi mit einem Job in KIX) und mir dann Assets erstellt/aktualisiert.

Könntest du mir beschreiben, wie genau ich das jetzt angehen könnte?

ChristianLoeschner

Mein aktueller Ansatz wäre jetzt ein Job mit einem Webhook Extended und anschließend einem XSL-Transformation...

Dazu gleich eine zusätzliche Frage... ich habe versucht, in der SysConfig den Wert von WebUserAgent::DisableSSLVerification von 1 auf 0 zu stellen, da ich aktuell immer die Meldung bekomme "Certificate verify failed". allerdings lässt sich dieser Wert nicht konfigurieren. Der ist ausgegraut.. Beziehungsweise... Bedeutet 1 jetzt "aus" oder "an" ? ^^

Frank Niethardt

Moin Christian,

also Disable auf 1 sollte bedeuten, dass es schon deaktiviert ist. ;)

Mit dem Webhook Extended habe ich persönlich noch keine Erfahrung, wir haben das Paket erst ein paar Tage. Allerdings haben wir Connect Baramundi und das funktioniert beim Ergebnis genauso. Wo ich jetzt in die Doku reinschaue, ist das gar nicht schlecht beschrieben.

"Es wird ein strukturiertes Objekt zurückgegeben, welches HTTPCode, Status, Content, Header (Key-Value-Paare) und Result mit dem Ergebnis als JSON-Objekt enthält." Im Beispiel ist das ${RMResult}.

Das verfütterst du an die XSL-Transformation. Am besten einfach das Beispiel kopieren, Debug anschalten und schauen, wie deine Datenstrukturen aussehen. Und dann fängt das Gebastel mit XSLT 1.1 an. Davon allein kann man graue Haare bekommen... ;)
Mit den speziellen Erweiterungen in der XSLT von KIX kann man sich Parameter besorgen, die man wiederum braucht, um ein JSON zusammenzustellen, das am Ende in ein "Asset erstellen oder aktualisieren" Makro geschickt wird. 

Minimal musst du dabei wohl die AssetID, ClassID und eine Version mit den eigentlichen Asset-Daten reinreichen. Hier als Beispiel eine XSLT mit der ich bestimmte Assets deaktiviere:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:KIX="urn:KIX">
  <xsl:template match="/RootElement">
    <root>
      <xsl:variable name="DeplStateID">
            <xsl:value-of select="KIX:DeploymentStateGetIDByName('Inactive')"/>
      </xsl:variable>
     

      <AssetID>
        <xsl:value-of select="AssetID"/>
      </AssetID>
      <ClassID>
        <xsl:value-of select="ClassID"/>
      </ClassID>
      <Version>
        <DeplStateID>
          <xsl:value-of select="$DeplStateID"/>
        </DeplStateID>
      </Version>

    </root>
  </xsl:template>
</xsl:stylesheet>

Dies wird dann bei uns als ${_NewVersion} gespeichert und als ${_NewVersion|JSON} in die "Asset erstellen oder aktualisieren" reingereicht.

Bei die wären dort dann eben die Dateinamen und was auch immer die Asset Klasse noch braucht.

Ich hoffe das hilft irgendwie weiter...