Dynamisches Feld im Controller-Mapping referenzieren?

Hilfe zu OTRS Problemen aller Art
Post Reply
danielwe
Znuny newbie
Posts: 9
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Dynamisches Feld im Controller-Mapping referenzieren?

Post by danielwe »

Hallo zusammen, diese Frage ergibt sich direkt aus meiner letzten Frage.

Folgendes Szenario: Mein Znuny erstellt über Webservices in Jira eine Aufgabe. Die URL des Jira-Controllers dazu sieht wie folgt aus:

Code: Select all

https://meinjira/rest/api/latest/issue
Jira antwortet darauf mit der ID der neu erstellten Aufgabe, diese speichere ich in Znuny im dynamischen Feld jiraIssueKey.

Jetzt möchte ich natürlich nicht, dass für jede Änderung in meinem Znuny-Ticket in Jira eine neue Aufgabe erstellt wird. Entsprechend muss der Invoker aus Znuny die vorhandene Jira-Aufgabe ändern. Jira erlaubt das, indem man dem Controller den zuvor zurückgegebenen Key übergibt. Also so:

Code: Select all

https://meinjira/rest/api/latest/issue/FOO-12
So weiß Jira, dass die der nächste Request die genannte Aufgabe Foo-12 ändern soll.

Znuny muss also im Controller-Mapping des Änderungs-Invokers Zugriff auf diesen Key bekommen, sprich ich muss im Controller-Mapping das dynamische Feld referenzieren. Laut der Doku geht das mal wieder ganz easy, nämlich, indem ich einen Doppelpunkt voranstelle. Vor was ich diesen Doppelpunkt stellen muss, ich nämlich nicht erwähnt. Feldname? Variablenname? Name meines Hundes?

Die folgenden Versuche habe ich gestartet:

Code: Select all

/issue/:jiraIssueKey
/issue/:DynamicField_jiraIssueKey
/issue/:OTRS_TICKETjiraIssueKey*_Value
Keines funktioniert. Die ausgehende Anfrage ersetzt nicht Feldnamen hinter dem Doppelpunkt durch den Wert sondern schickt das ganze einfach genau so raus. Jira bekommt von Znuny also das hier:

Code: Select all

https://meinjira/rest/api/latest/issue/:jiraIssueKey
Die Antwort darauf ist logischerweise ein Fehler.
Was mache ich falsch? Wie sieht der Sting aus, der mit die URL mit dem richtigen Wert füllt?

VG
Daniel
root
Administrator
Posts: 3961
Joined: 18 Dec 2007, 12:23
Znuny Version: Znuny and Znuny LTS
Real Name: Roy Kaldung
Company: Znuny
Contact:

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by root »

Hallo,

in das Controllermapping kommt Ticket_DynamicField_FELDNAME, also Ticket_DynamicField_jiraIssueKey

Mit dem _ nach Ticket wird die auf nächste Stufe in der Verschachtelung der Daten zugegriffen.

- Roy
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO

Use a test system - always.

Do you need professional services? Check out https://www.znuny.com/

Do you want to contribute or want to know where it goes ?
danielwe
Znuny newbie
Posts: 9
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by danielwe »

Hi,

danke schonmal für die schnelle Rückmeldung. Das funktioniert leider auch nicht. Ich habe folgendes versucht:

/issue/:Ticket_DynamicField_jiraIssueKey
/issue/Ticket_DynamicField_jiraIssueKey
controllermapping.png
Der ausgehende Request enthält leider auch keine Daten sondern nur den oben genannten String:

Debug:
Request params from outgoing data:

Code: Select all

$VAR1 = [
  '/issue/Ticket_DynamicField_jiraIssueKey',
  '{"content":"\\blabla
  }
];
[code]
You do not have the required permissions to view the files attached to this post.
root
Administrator
Posts: 3961
Joined: 18 Dec 2007, 12:23
Znuny Version: Znuny and Znuny LTS
Real Name: Roy Kaldung
Company: Znuny
Contact:

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by root »

Hi,

Also ich habe es mit einer 6.5.6 getestet, das ist aber der Webservice mit de 7.0 identisch.
Hier mein Controller-Mapping:
SCR-20240403-kpqt.png
und was bei eiem Webhookservice rauskommt:
SCR-20240403-kqad.png
Da wird der Wert 1234 aus dem Dynamischen Feld eingetragen in die URL.

Kannst Du deine Webservicekonfiguration hier hochladen? Wenn ja bitte ohne Zugangsdaten/persönliche Informationen.

- Roy
You do not have the required permissions to view the files attached to this post.
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO

Use a test system - always.

Do you need professional services? Check out https://www.znuny.com/

Do you want to contribute or want to know where it goes ?
danielwe
Znuny newbie
Posts: 9
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by danielwe »

Das ist tatsächlich sehr seltsam. Bei mir kommt im Webhook-Service nur der original-String an.
Hier die Screenshots mit der Konfig des Webservices. Generell nichts großartiges.
01.png
02.jpeg
03.jpeg
Die komplette Config hier. Es werden die folgenden dynamischen Felder benötigt:
jiraProjectKey
jiraIssueKey
juraIssueID

Code: Select all

---
Debugger:
  DebugThreshold: debug
  TestMode: '0'
Description: ''
FrameworkVersion: 7.0.15
Provider:
  Transport:
    Type: ''
RemoteSystem: Jira
Requester:
  ErrorHandling: {}
  ErrorHandlingPriority: []
  Invoker:
    JiraIssueCreate:
      Description: ''
      Events:
      - Asynchronous: '0'
        Event: TicketDynamicFieldUpdate_jiraProjectKey
      GetAllArticleAttachments: '1'
      MappingInbound:
        Config:
          DataInclude: []
          ForceArray: ''
          KeepAttributes: ''
          PostRegExFilter: ~
          PostRegExValueCounter: ~
          PreRegExFilter: ~
          PreRegExValueCounter: ~
          Template: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xsl:stylesheet
            version=\"1.0\" \r\n                xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
            \r\n                xmlns:date=\"http://exslt.org/dates-and-times\" \r\n
            \               extension-element-prefixes=\"date\">\r\n\t<xsl:output
            method=\"xml\" encoding=\"utf-8\" indent=\"yes\"/>\r\n\t<xsl:template
            match=\"RootElement\">\r\n\t\t<xsl:copy>\r\n\r\n            <OTRS_TicketHistoryAdd>\r\n
            \               <HistoryType>Misc</HistoryType>\r\n                <HistoryComment>Jira-Ticket
            erfolgreich erstellt.</HistoryComment>\r\n            </OTRS_TicketHistoryAdd>\r\n\r\n
            \           <OTRS_TicketDynamicFieldSet_jiraIssueID>\r\n               <xsl:value-of
            select=\"id\" />\r\n            </OTRS_TicketDynamicFieldSet_jiraIssueID>\r\n\r\n
            \           <OTRS_TicketDynamicFieldSet_jiraIssueKey>\r\n               <xsl:value-of
            select=\"key\" />\r\n            </OTRS_TicketDynamicFieldSet_jiraIssueKey>\r\n\r\n
            \       </xsl:copy>\r\n\t</xsl:template>\r\n</xsl:stylesheet>"
        Type: XSLT
      MappingOutbound:
        Config:
          DataInclude: []
          ForceArray: ''
          KeepAttributes: ''
          PostRegExFilter: ~
          PostRegExValueCounter: ~
          PreRegExFilter: ~
          PreRegExValueCounter: ~
          Template: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xsl:stylesheet
            version=\"1.0\"\r\n                xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\r\n
            \               xmlns:date=\"http://exslt.org/dates-and-times\"\r\n                extension-element-prefixes=\"date\">\r\n\t<xsl:output
            method=\"xml\" encoding=\"utf-8\" indent=\"yes\"/>\r\n\r\n\t<xsl:template
            match=\"RootElement\">\r\n\t\t<xsl:copy>\r\n\t\t\t<fields>\r\n\r\n\t\t\t\t<!--
            Jira-Fields -->\r\n\r\n\t\t\t\t<project>\r\n\t\t\t\t\t<key>ITWST</key>\r\n\t\t\t\t</project>\r\n\r\n\t\t\t\t<summary>\r\n\t\t\t\t\t<xsl:value-of
            select=\"//Ticket/Title\"/>\r\n\t\t\t\t</summary>\r\n\r\n\t\t\t\t<description>\r\n\t\t\t\t\t<xsl:value-of
            select=\"//Body\"/>\r\n\t\t\t\t</description>\r\n\r\n                <issuetype>\r\n\t\t\t\t\t<name>Task</name>\r\n\t\t\t\t</issuetype>\r\n\r\n
            \               <!-- Dynamische Felder Test \r\n                <customfield_10052>\r\n
            \                   <xsl:value-of select=\"//Ticket/DynamicField_jiraProjectKey\"
            />\r\n                </customfield_10052>-->\r\n\r\n\r\n\t\t\t\t<!--
            company Custom Fields for AVCSC -->\r\n\r\n                <!-- Artikeldaten
            -->\r\n                <customfield_10052>\r\n                    <xsl:for-each
            select=\"//Ticket/Articles\">\r\n                        <!--<xsl:value-of
            select=\".\"/><xsl:text>&#xA;</xsl:text>-->\r\n                        <![CDATA[From:]]><xsl:value-of
            select=\"From\"/>\r\n                        <![CDATA[To: ]]><xsl:value-of
            select=\"To\"/>\r\n                        <![CDATA[Bcc: ]]><xsl:value-of
            select=\"Bcc\"/>\r\n                        <![CDATA[Änderungsdatum: ]]><xsl:value-of
            select=\"ChangeTime\"/>\r\n                        <![CDATA[Betreff: ]]><xsl:value-of
            select=\"Subject\"/><xsl:text>&#xA;</xsl:text>\r\n                        <xsl:value-of
            select=\"Body\"/><xsl:text>&#xA;</xsl:text>\r\n                        <![CDATA[------------------------------------------------------]]><xsl:text>&#xA;</xsl:text>\r\n
            \                   </xsl:for-each>\r\n                </customfield_10052>\r\n
            \               \r\n                \r\n                \r\n                \r\n
            \               \r\n                \r\n                \r\n                \r\n
            \               \r\n                \r\n                \r\n                \r\n
            \               \r\n                <customfield_10053>Projekt</customfield_10053>\r\n
            \               <customfield_10033>2025-01-01</customfield_10033>\r\n
            \               <customfield_10034><xsl:value-of select=\"//Ticket/TicketID\"
            />\r\n                </customfield_10034><customfield_10035>Technische
            Lösungsbeschreibung</customfield_10035>\r\n                <customfield_10036>Kundenspezifische
            Lösungsbeschreibung</customfield_10036>\r\n                <customfield_10037>Testvorgaben</customfield_10037>\r\n
            \               <customfield_10049>Anhänge</customfield_10049>\r\n                <customfield_10029>#<xsl:value-of
            select=\"//Ticket/TicketNumber\" /></customfield_10029>\r\n                <customfield_10040>Patch</customfield_10040>\r\n
            \               <customfield_10041>Aufgabendaten</customfield_10041>\r\n
            \               <customfield_10042>Test Status</customfield_10042>\r\n
            \               <customfield_10047>Themenschwerpunkt</customfield_10047>\r\n
            \               <customfield_10051>\r\n                    <value>Nein</value>\r\n
            \               </customfield_10051>\r\n                <customfield_10045>Ursache</customfield_10045>\r\n
            \               <customfield_10046>Kategorie</customfield_10046>\r\n                <customfield_10048>Sonst
            Themenschwerpunkt</customfield_10048>\r\n                <customfield_10038>Testergebnis</customfield_10038>\r\n
            \               <!--<customfield_10052>Kommentare</customfield_10052>-->\r\n
            \               <customfield_10104>Feature</customfield_10104>\r\n                <customfield_10039></customfield_10039>\r\n
            \               <priority>\r\n                    <id>1</id>\r\n                </priority>\r\n\r\n\t\t\t</fields>\r\n\t\t\t<xsl:apply-templates/>\r\n\t\t</xsl:copy>\r\n\t</xsl:template>\r\n\t<!--
            Remove Ticket, Article, Attachment and CustomerUser elements -->\r\n\t<xsl:template
            match=\"content|TicketNumber|TicketID|DynamicField|Ticket|Article|Attachment|CustomerUser\"/>\r\n</xsl:stylesheet>"
        Type: XSLT
      Type: Ticket::Generic
    JiraIssueUpdate:
      Description: ''
      Events:
      - Asynchronous: '0'
        Event: ArticleCreate
      GetAllArticleAttachments: '0'
      MappingInbound:
        Config:
          DataInclude: []
          ForceArray: ''
          KeepAttributes: ''
          PostRegExFilter: ~
          PostRegExValueCounter: ~
          PreRegExFilter: ~
          PreRegExValueCounter: ~
          Template: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xsl:stylesheet
            version=\"1.0\" \r\n                xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
            \r\n                xmlns:date=\"http://exslt.org/dates-and-times\" \r\n
            \               extension-element-prefixes=\"date\">\r\n\t<xsl:output
            method=\"xml\" encoding=\"utf-8\" indent=\"yes\"/>\r\n\t<xsl:template
            match=\"RootElement\">\r\n\t\t<xsl:copy>\r\n            <OTRS_TicketHistoryAdd>\r\n
            \               <HistoryType>Misc</HistoryType>\r\n                <HistoryComment>Jira-Ticket
            erfolgreich aktualisiert.</HistoryComment>\r\n            </OTRS_TicketHistoryAdd>\r\n\r\n\t\t</xsl:copy>\r\n\t</xsl:template>\r\n</xsl:stylesheet>"
        Type: XSLT
      MappingOutbound:
        Config:
          DataInclude: []
          ForceArray: ''
          KeepAttributes: ''
          PostRegExFilter: ~
          PostRegExValueCounter: ~
          PreRegExFilter: ~
          PreRegExValueCounter: ~
          Template: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xsl:stylesheet
            version=\"1.0\"\r\n                xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\r\n
            \               xmlns:date=\"http://exslt.org/dates-and-times\"\r\n                extension-element-prefixes=\"date\">\r\n\t<xsl:output
            method=\"xml\" encoding=\"utf-8\" indent=\"yes\"/>\r\n\r\n\t<xsl:template
            match=\"RootElement\">\r\n\t\t<xsl:copy>\r\n\t\t\t<fields>\r\n\r\n\t\t\t\t<!--
            Jira-Fields -->\r\n\t\t\t\t\r\n\t\t\t\t<project>\r\n\t\t\t\t\t<key>ITWST</key>\r\n\t\t\t\t</project>\r\n\t\t\t\t\r\n\t\t\t\t<summary>\r\n\t\t\t\t\t<xsl:value-of
            select=\"//Ticket/Title\"/>\r\n\t\t\t\t</summary>\r\n\t\t\t\t\r\n\t\t\t\t<description>\r\n\t\t\t\t\t<xsl:value-of
            select=\"//Body\"/>\r\n\t\t\t\t</description>\r\n\t\t\t\t\r\n\t\t\t\t<issuetype>\r\n\t\t\t\t\t<name>Task</name>\r\n\t\t\t\t</issuetype>\r\n\r\n
            \               \r\n                <!-- Dynamische Felder Test -->\r\n
            \               <customfield_10052>\r\n                    <xsl:value-of
            select=\"//Ticket/DynamicField_jiraProjectKey\" />\r\n                </customfield_10052>\r\n
            \               \r\n\t\t\t\t<!-- company Custom Fields for AVCSC -->\r\n\r\n
            \               <customfield_10053>Projekt</customfield_10053>\r\n                <customfield_10033>2025-01-01</customfield_10033>\r\n
            \               <customfield_10034><xsl:value-of select=\"//Ticket/TicketID\"
            />\r\n                </customfield_10034><customfield_10035>Technische
            Lösungsbeschreibung</customfield_10035>\r\n                <customfield_10036>Kundenspezifische
            Lösungsbeschreibung</customfield_10036>\r\n                <customfield_10037>Testvorgaben</customfield_10037>\r\n
            \               <customfield_10049>Anhänge</customfield_10049>\r\n                <customfield_10029>#<xsl:value-of
            select=\"//Ticket/TicketNumber\" /></customfield_10029>\r\n                <customfield_10040>Patch</customfield_10040>\r\n
            \               <customfield_10041>Aufgabendaten</customfield_10041>\r\n
            \               <customfield_10042>Test Status</customfield_10042>\r\n
            \               <customfield_10047>Themenschwerpunkt</customfield_10047>\r\n
            \               <customfield_10051>\r\n                    <value>Nein</value>\r\n
            \               </customfield_10051>\r\n                <customfield_10045>Ursache</customfield_10045>\r\n
            \               <customfield_10046>Kategorie</customfield_10046>\r\n                <customfield_10048>Sonst
            Themenschwerpunkt</customfield_10048>\r\n                <customfield_10038>Testergebnis</customfield_10038>\r\n
            \               <!--<customfield_10052>Kommentare</customfield_10052>-->\r\n
            \               <customfield_10104>Feature</customfield_10104>\r\n                <customfield_10039></customfield_10039>\r\n
            \               <priority>\r\n                    <id>1</id>\r\n                </priority>\r\n\r\n\t\t\t</fields>\r\n\t\t\t<xsl:apply-templates/>\r\n\t\t</xsl:copy>\r\n\t</xsl:template>\r\n\t<!--
            Remove Ticket, Article, Attachment and CustomerUser elements -->\r\n\t<xsl:template
            match=\"content|TicketNumber|TicketID|DynamicField|Ticket|Article|Attachment|CustomerUser\"/>\r\n</xsl:stylesheet>"
        Type: XSLT
      Type: Ticket::Generic
  Transport:
    Config:
      AdditionalHeaders: ~
      Authentication:
        AuthType: BasicAuth
        BasicAuthPassword: MeinPasswort
        BasicAuthUser: MeinUser
      ContentType: JSON
      DefaultCommand: GET
      Host: https://jira-av.atlassian.net/rest/api/latest
      InvokerControllerMapping:
        JiraIssueCreate:
          Command: POST
          Controller: /issue
        JiraIssueUpdate:
          Command: POST
          Controller: /issue/:Ticket_DynamicField_jiraIssueKey
      SSLNoHostnameVerification: '0'
      Timeout: '120'
    Type: HTTP::REST
You do not have the required permissions to view the files attached to this post.
root
Administrator
Posts: 3961
Joined: 18 Dec 2007, 12:23
Znuny Version: Znuny and Znuny LTS
Real Name: Roy Kaldung
Company: Znuny
Contact:

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by root »

Hi,

ich bau das mal mit einer 7.0.15 nach.

- Roy
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO

Use a test system - always.

Do you need professional services? Check out https://www.znuny.com/

Do you want to contribute or want to know where it goes ?
danielwe
Znuny newbie
Posts: 9
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by danielwe »

Super, vielen Dank. :)
danielwe
Znuny newbie
Posts: 9
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Dynamisches Feld im Controller-Mapping referenzieren?

Post by danielwe »

Hi Roy, bist du hier schon weiter gekommen und hattest Zeit, dir das ganze mal anzuschauen? :)
Post Reply