Gegevensgerichte API’s data-oriented-apis

Met gegevensgeoriënteerde API's kunt u het volledige datamodel beheren.

Overzicht van het datamodel overview-of-the-datamodel

Adobe Campaign biedt geen specifieke lees-API per entiteit (geen functie getRecipient of getDelivery, enz.). Met de methoden QUERY & WRITER-gegevens lezen en wijzigen hebt u toegang tot de gegevens van het model.

Met Adobe Campaign kunt u verzamelingen beheren: met query's kunt u een set gegevens herstellen die in de gehele basis zijn verzameld. In tegenstelling tot toegang in SQL-modus, retourneren Adobe Campaign API's een XML-structuur in plaats van gegevenskolommen. Adobe Campaign maakt dus samengestelde documenten met alle verzamelde gegevens.

Deze werkende wijze biedt geen één-op-één afbeelding tussen de attributen en de elementen van de documenten van XML en de kolommen van de lijsten in het gegevensbestand aan.

XML-documenten worden opgeslagen in MEMO-tekstvelden van de database.

Beschrijving van het model description-of-the-model

U moet bekend zijn met het Adobe Campaign-gegevensmodel om de velden van de database in uw scripts te kunnen verwerken.

Voor een presentatie van het gegevensmodel raadpleegt u de Beschrijving gegevensmodel Adobe Campaign.

Query en schrijver query-and-writer

In het volgende introductieschema worden uitwisselingen op laag niveau beschreven voor lezen (ExecuteQuery) en schrijven (Writer) tussen database en klant (webpagina's of Adobe Campaign-clientconsole).

ExecuteQuery executequery

Voor kolommen en voorwaarden kunt u Query's gebruiken.

Hierdoor kunt u de onderliggende SQL isoleren. De querytaal is niet afhankelijk van de onderliggende engine: sommige functies worden opnieuw toegewezen, waardoor meerdere SELECT SQL-orders kunnen worden gegenereerd.

Raadpleeg voor meer informatie hierover Voorbeeld van de methode 'ExecuteQuery' van schema 'xtk:queryDef'.

De ExecuteQuery methode wordt weergegeven in ExecuteQuery (xtk:queryDef).

Schrijven write

Met schrijfopdrachten kunt u eenvoudige of complexe documenten schrijven met items in een of meer tabellen van de basis.

Met de Transactionele API's kunt u aansluitingen beheren via de updateOrInsert opdracht: met één opdracht kunt u gegevens maken of bijwerken. U kunt ook samenvoeging van wijzigingen configureren (samenvoegen): in deze modus kunt u gedeeltelijke updates toestaan.

De structuur van XML biedt een logische mening van de gegevens aan en laat u de fysieke structuur van de SQL lijst negeren.

De methode Write wordt voorgesteld in Write/WriteCollection (xtk:session).

ExecuteQuery (xtk:queryDef) executequery--xtk-querydef-

Deze methode laat u vragen van gegevens uitvoeren verbonden aan een schema. Het neemt een authentificatietekenreeks (moet worden het programma geopend) en een document van XML beschrijvend de vraag die als parameters moet worden voorgelegd. De retourparameter is een XML-document dat het resultaat bevat van de query in de indeling van het schema waarnaar de query verwijst.

Definitie van de methode "ExecuteQuery" in het schema "xtk:queryDef":

<method name="ExecuteQuery" const="true">
  <parameters>
    <param desc="Output XML document" name="output" type="DOMDocument" inout="out"/>
  </parameters>
</method>
NOTE
Dit is een const-methode. De invoerparameters worden in een XML-document opgenomen in de indeling van het schema "xtk:queryDef".

Indeling van het XML-document van de invoerquery format-of-the-xml-document-of-the-input-query

De structuur van het XML-document van de query wordt beschreven in het schema "xtk:queryDef". In dit document worden de clausules van een SQL-query beschreven: "select", "where", "order by", "group by", "have".

<queryDef schema="schema_key" operation="operation_type">
  <select>
    <node expr="expression1">
    <node expr="expression2">
    ...
  </select>
  <where>
    <condition expr="expression1"/>
    <condition expr="expression2"/>
    ...
  </where>
  <orderBy>
    <node expr="expression1">
    <node expr="expression2">
    ...
  </orderBy>
  <groupBy>
    <node expr="expression1">
    <node expr="expression2">
    ...
  </groupBy>
  <having>
    <condition expr="expression1"/>
    <condition expr="expression2"/>
    ...
  </having>
</queryDef>

Een subquery ( <subquery> ) kan worden gedefinieerd in een <condition> element. De syntaxis voor een <subquery> element is gebaseerd op de syntaxis van een <querydef>.

Voorbeeld van een <subquery> : </subquery>

<condition setOperator="NOT IN" expr="@id" enabledIf="$(/ignored/@ownerType)=1">
  <subQuery schema="xtk:operatorGroup">
     <select>
       <node expr="[@operator-id]" />
     </select>
     <where>
       <condition expr="[@group-id]=$long(../@owner-id)"/>
     </where>
   </subQuery>
</condition>

Een query moet verwijzen naar een beginschema in het menu schema kenmerk.

Het gewenste type bewerking wordt ingevoerd in het dialoogvenster bewerking en bevat een van de volgende waarden:

  • get: haalt een record uit de tabel op en retourneert een fout als de gegevens niet bestaan,
  • getIfExists: haalt een record uit de tabel op en retourneert een leeg document als de gegevens niet bestaan,
  • selecteren: maakt een cursor die meerdere records retourneert en een leeg document retourneert als er geen gegevens zijn,
  • aantal: retourneert een gegevenstelling.

De XPath wordt syntaxis gebruikt om gegevens te vinden die op het inputschema worden gebaseerd. Raadpleeg voor meer informatie over XPails Gegevensschema's.

Voorbeeld met de bewerking get example-with-the--get--operation

Haalt de achternaam en voornaam van een ontvanger ("nms:ontvanger"-schema) op met een filter in de e-mail.

<queryDef schema="nms:recipient" operation="get">
  <!-- fields to retrieve -->
  <select>
    <node expr="@firstName"/>
    <node expr="@lastName"/>
  </select>

  <!-- condition on email -->
  <where>
    <condition expr="@email= 'john.doe@aol.com'"/>
  </where>
</queryDef>

Voorbeeld met de bewerking 'select' example-with-the--select--operation

Retourneert de lijst met ontvangers die zijn gefilterd op een map en het e-maildomein met een sortering in aflopende volgorde op de geboortedatum.

<queryDef schema="nms:recipient" operation="select">
  <select>
    <node expr="@email"/>
    <!-- builds a string with the concatenation of the last name and first name separated by a dash -->
    <node expr="@lastName+'-'+@firstName"/>
    <!-- get year of birth date -->
    <node expr="Year(@birthDate)"/>
  </select>

  <where>
     <condition expr="[@folder-id] = 1234 and @domain like 'Adobe%'"/>
  </where>

  <!-- order by birth date -->
  <orderBy>
    <node expr="@birthDate" sortDesc="true"/> <!-- by default sortDesc="false" -->
  </orderBy>
</queryDef>

Expressies kunnen eenvoudige velden of complexe expressies zijn, zoals rekenkundige bewerkingen of het samenvoegen van tekenreeksen.

Als u het aantal records dat moet worden geretourneerd wilt beperken, voegt u de opdracht lineCount aan de <querydef> element.

Om het aantal verslagen te beperken die door de vraag aan 100 zijn teruggekeerd:

<queryDef schema="nms:recipient" operation="select" lineCount="100">
...

Om de volgende 100 verslagen terug te winnen, stel de zelfde vraag opnieuw in werking, toevoegend startLine kenmerk.

<queryDef schema="nms:recipient" operation="select" lineCount="100" startLine="100">
...

Voorbeeld met de bewerking 'count' example-with-the--count--operation

Om het aantal verslagen op een vraag te tellen:

<queryDef schema="nms:recipient" operation="count"">
  <!-- condition on the folder and domain of the email -->
  <where>
    <condition expr="[@folder-id] = 1234" and @domain like 'Adobe%'"/>
  </where>
</queryDef>
NOTE
Ook hier gebruiken we de voorwaarde uit het vorige voorbeeld. De <select> en worden geen clausules gebruikt. </select>

Gegevensgroepering data-grouping

U kunt als volgt e-mailadressen ophalen waarnaar meerdere keren wordt verwezen:

<queryDef schema="nms:recipient" operation="select">
  <select>
    <node expr="@email"/>
    <node expr="count(@email)"/>
  </select>

  <!-- email grouping clause -->
  <groupby>
    <node expr="@email"/>
  </groupby>

  <!-- grouping condition -->
  <having>
    <condition expr="count(@email) > 1"/>
  </having>

</queryDef>

De query kan worden vereenvoudigd door de groupBy rechtstreeks kenmerk aan het veld dat moet worden gegroepeerd:

<select>
  <node expr="@email" groupBy="true"/>
</select>
NOTE
Het is niet langer nodig de <groupby> element.

Bracketing in omstandigheden bracketing-in-conditions

Hier volgen twee voorbeelden van haakjes op dezelfde voorwaarde.

  • De eenvoudige versie in één expressie:

    code language-none
    <where>
      <condition expr="(@age > 15 or @age <= 45) and  (@city = 'Newton' or @city = 'Culver City') "/>
    </where>
    
  • De gestructureerde versie met <condition> elementen:

    code language-none
    <where>
      <condition bool-operator="AND">
        <condition expr="@age > 15" bool-operator="OR"/>
        <condition expr="@age <= 45"/>
      </condition>
      <condition>
        <condition expr="@city = 'Newton'" bool-operator="OR"/>
        <condition expr="@city = 'Culver City'"/>
      </condition>
    </where>
    

Het is mogelijk de operator 'OR' te vervangen door de operator 'IN' wanneer er verschillende voorwaarden gelden voor hetzelfde veld:

<where>
  <condition>
    <condition expr="@age IN (15, 45)"/>
    <condition expr="@city IN ('Newton', 'Culver City')"/>
  </condition>
</where>

Deze syntaxis vereenvoudigt de query wanneer meer dan twee gegevens in de voorwaarde worden gebruikt.

  • Koppelingen 1-1 of N1: als de tabel de externe sleutel heeft (de koppeling begint in de tabel), kunnen de velden van de gekoppelde tabel worden gefilterd of rechtstreeks worden opgehaald.

    Voorbeeld van een filter op het maplabel:

    code language-none
    <where>
      <condition expr="[folder/@label] like 'Segment%'"/>
    </where>
    

    U kunt als volgt de velden van de map ophalen uit het schema "nms:ontvanger":

    code language-none
    <select>
      <!-- label of recipient folder -->
      <node expr="[folder/@label]"/>
      <!-- displays the string count of the folder -->
      <node expr="partition"/>
    </select>
    
  • De verbindingen van de inzameling (1N): het filtreren op de gebieden van een inzamelingstabel moet via worden uitgevoerd BESTAAT of BESTAAT NIET operator.

    Om de ontvangers te filtreren die aan de de informatiedienst van de "Krantenbrief"zijn geabonneerd:

    code language-none
    <where>
      <condition expr="subscription" setOperator="EXISTS">
        <condition expr="@name = 'Newsletter'"/>
      </condition>
    </where>
    

    Directe herwinning van de gebieden van een inzamelingsverbinding van <select> clausule wordt niet geadviseerd omdat de vraag een kardinaal product terugkeert. Deze wordt alleen gebruikt wanneer de gekoppelde tabel slechts één record bevat (voorbeeld <node expr="">).

    Voorbeeld op de verzamelingskoppeling "Abonnement":

    code language-none
    <select>
      <node expr="subscription/@label"/>
    </select>
    

    Het is mogelijk om een sublijst op te halen die de elementen van een inzamelingsverbinding in bevat <select> clausule. De XPath van de gebieden waarnaar wordt verwezen zijn contextueel van het inzamelingselement.

    Het filteren ( <orderby> ) en beperking ( <where> ) kunnen worden toegevoegd aan het verzamelingselement.

    In dit voorbeeld retourneert de query voor elke ontvanger de e-mail en de lijst met informatiediensten waarop de ontvanger zich abonneert:

    code language-none
    <queryDef schema="nms:recipient" operation="select">
      <select>
        <node expr="@email"/>
    
        <!-- collection table (unbound type) -->
        <node expr="subscription">
          <node expr="[service/@label]"/>
          <!-- sub-condition on the collection table -->
          <where>
            <condition expr="@expirationDate >= GetDate()"/>
          </where>
          <orderBy>
            <node expr="@expirationDate"/>
          </orderBy>
        </node>
      </select>
    </queryDef>
    

De parameters van de component 'where' en 'select' binden binding-the-parameters-of-the--where--and--select--clause

Door de binding van parameters kan de engine de waarden instellen van de parameters die in de query worden gebruikt. Dit is zeer nuttig, aangezien de motor voor het ontsnappen van waarden verantwoordelijk is, en er het extra voordeel van een geheime voorgeheugen voor de parameters is die moeten worden teruggewonnen.

Wanneer een vraag wordt geconstrueerd, worden de "gebonden"waarden vervangen door een karakter (? in ODBC, #[index]# in postgres…) in de tekst van de SQL-query.

<select>
  <!--the value will be bound by the engine -->
  <node expr="@startDate = #2002/02/01#"/>
  <!-- the value will not be bound by the engine but visible directly in the query -->
  <node expr="@startDate = #2002/02/01#" noSqlBind="true"/>
</select>

Als u wilt voorkomen dat een parameter wordt gebonden, moet het kenmerk "noSqlBind" worden gevuld met de waarde "true".

IMPORTANT
Als de vraag "orde-door"of "groep-door"instructies omvat, zullen de gegevensbestandmotoren niet waarden kunnen "binden". U moet het @noSqlBind= "waar"attribuut op "selecteren"en/of "waar"instructies van de vraag plaatsen.

Tip voor het samenstellen van query's: query-building-tip-

Om met de syntaxis van een vraag te helpen, kunt u de vraag schrijven gebruikend de generische vraagredacteur in de de cliëntconsole van Adobe Campaign ( Tools/ Generic query editor… ). Dit doet u als volgt:

  1. Selecteer de gegevens die u wilt ophalen:

  2. Definieer de filtervoorwaarde:

  3. Voer de vraag uit en druk CTRL+F4 om de code van de vraagbron te bekijken.

Documentindeling uitvoeren output-document-format

De retourparameter is een XML-document in de indeling van het schema dat aan de query is gekoppeld.

Voorbeeld van een terugkeer van het "nms:ontvanger"schema op "krijgt"verrichting:

<recipient email="john.doe@adobe.com" lastName"Doe" firstName="John"/>

Bij een "select"-bewerking is het geretourneerde document een opsomming van elementen:

<!-- the name of the first element does not matter -->
<recipient-collection>
  <recipient email="john.doe@adobe.com" lastName"Doe" firstName="John"/>
  <recipient email="peter.martinez@adobe.com" lastName"Martinez" firstName="Peter"/>
  <recipient...
</recipient-collection>

Voorbeeld van een document dat wordt geretourneerd voor bewerking van het type "count":

<recipient count="3"/>

Alias alias

Met een alias kunt u de locatie van gegevens in het uitvoerdocument wijzigen. De alias moet een XPath op het overeenkomstige gebied specificeren.

<queryDef schema="nms:recipient" operation="get">
  <select>
    <node expr="@firstName" alias="@firstName"/>
    <node expr="@lastName"/>
    <node expr="[folder/@label]" alias="@My_folder"/>
  </select>
</queryDef>

Retourneert:

<recipient My_folder="Recipients" First name ="John" lastName="Doe"/>

In plaats van:

<recipient firstName="John" lastName="Doe">
  <folder label="Recipients"/>
</recipient>

Voorbeeld van SOAP-berichten example-of-soap-messages

  • Query:

    code language-none
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <SOAP-ENV:Envelope xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ns='http://xml.apache.org/xml-soap' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
      <SOAP-ENV:Body>
        <ExecuteQuery xmlns='urn:xtk:queryDef' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
          <__sessiontoken xsi:type='xsd:string'/>
          <entity xsi:type='ns:Element' SOAP-ENV:encodingStyle='http://xml.apache.org/xml-soap/literalxml'>
            <queryDef operation="get" schema="nms:recipient" xtkschema="xtk:queryDef">
              <select>
                <node expr="@email"/>
                <node expr="@lastName"/>
                <node expr="@firstName"/>
              </select>
              <where>
                <condition expr="@id = 3599"/>
              </where>
            </queryDef>
          </entity>
        </ExecuteQuery>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
  • Reactie:

    code language-none
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <SOAP-ENV:Envelope xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ns='http://xml.apache.org/xml-soap' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
      <SOAP-ENV:Body>
        <ExecuteQueryResponse xmlns='urn:xtk:queryDef' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
          <pdomOutput xsi:type='ns:Element' SOAP-ENV:encodingStyle='http://xml.apache.org/xml-soap/literalxml'>
            <recipient email="john.doe@adobe.com" lastName"Doe" firstName="John"/>
          </pdomOutput>
        </ExecuteQueryResponse>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    

Write/WriteCollection (xtk:session) write---writecollection--xtk-session-

Deze services worden gebruikt om een entiteit ("Write"-methode) of een verzameling entiteiten ("WriteCollection"-methode) in te voegen, bij te werken of te verwijderen.

De bij te werken entiteiten zijn gekoppeld aan een gegevensschema. De invoerparameters zijn een verificatietekenreeks (moet worden aangemeld) en een XML-document met de gegevens die moeten worden bijgewerkt.

Dit document wordt aangevuld met instructies voor het configureren van de schrijfprocedures.

De aanroep retourneert geen gegevens, behalve fouten.

Definitie van de methoden "Write" en "WriteCollection" in het schema "xtk:session":

<method name="Write" static="true">
  <parameters>
    <param name="doc" type="DOMDocument" desc="Difference document"/>
  </parameters>
</method>
<method name="WriteCollection" static="true">
  <parameters>
    <param name="doc" type="DOMDocument" desc="Difference collection document"/>
  </parameters>
</method>
NOTE
Dit is een "statische" methode. De invoerparameters worden opgenomen in een XML-document in de indeling van het schema dat moet worden bijgewerkt.

Overzicht overview

De afstemming van gegevens werkt op basis van de definitie van de sleutels die zijn ingevoerd in het bijbehorende schema. De schrijfprocedure zoekt naar de eerste in aanmerking komende sleutel op basis van de gegevens die in het invoerdocument zijn ingevoerd. De entiteit wordt ingevoegd of bijgewerkt op basis van haar bestaan in de database.

De sleutel van het schema van de te bijwerken entiteit wordt voltooid op basis van het xtkschema kenmerk.

De verzoeningssleutel kan dus worden afgedwongen met de _key kenmerk met de lijst met XPails die de sleutel vormen (gescheiden door komma's).

Het is mogelijk het type activiteit af te dwingen door de _operation kenmerk met de volgende waarden:

  • insert: forceert de opname van de record (de verzoeningssleutel wordt niet gebruikt),
  • insertOrUpdate: werkt de record bij of voegt deze in, afhankelijk van de afstemmingssleutel (standaardmodus);
  • update: werkt de record bij; doet niets als de gegevens niet bestaan,
  • delete: verwijdert de records,
  • none: wordt alleen gebruikt voor het afstemmen van koppelingen, zonder update of invoeging.

Voorbeeld met de methode 'Write' example-with-the--write--method

Een ontvanger bijwerken of invoegen (impliciete bewerking "insertOrUpdate") met e-mailadres, geboortedatum en plaats:

<recipient xtkschema="nms:recipient" email="john.doe@adobe.com" birthDate="1956/05/04" folder-id=1203 _key="@email, [@folder-id]">
  <location city="Newton"/>
</recipient>

Een ontvanger verwijderen:

<recipient xtkschema="nms:recipient" _operation="delete" email="rene.dupont@adobe.com" folder-id=1203 _key="@email, [@folder-id]"/>
NOTE
Voor een verwijderingsbewerking moet het invoerdocument alleen de velden bevatten waaruit de afstemmingssleutel bestaat.

Voorbeeld met de methode WriteCollection example-with-the--writecollection--method

Bijwerken of invoegen voor verschillende ontvangers:

<recipient-collection xtkschema="nms:recipient">
  <recipient email="john.doe@adobe.com" firstName="John" lastName="Doe" _key="@email"/>
  <recipient email="peter.martinez@adobe.com" firstName="Peter" lastName="Martinez" _key="@email"/>
  <recipient ...
</recipient-collection>

Voorbeeld 1 example-1

De map koppelen aan een ontvanger op basis van de interne naam (@name).

<recipient _key="[folder/@name], @email" email="john.doe@adobe.net" lastName="Doe" firstName="John" xtkschema="nms:recipient">
  <folder name="Folder2" _operation="none"/>
</recipient>

De kenmerken "_key" en "_operation" kunnen worden ingevoerd op een gekoppeld element. Het gedrag op dit element is hetzelfde als op het hoofdelement van het invoerschema.

De definitie van de sleutel van de hoofdentiteit ("nms:ontvanger") bestaat uit een veld van een gekoppelde tabel (element <folder> schema "xtk:folder") en e-mail.

NOTE
De bewerking "none" die in het mappenelement is ingevoerd, definieert een afstemming in de map zonder update of invoeging.

Voorbeeld 2 example-2

Het bijwerken van het bedrijf (verbonden lijst in "cus:bedrijf"schema) van een ontvanger:

<recipient _key="[folder/@name], @email" email="john.doe@adobe.net" lastName="Doe" firstName="John" xtkschema="nms:recipient">
  <company name="adobe" code="ERT12T" _key="@name" _operation="update"/>
</recipient>

Voorbeeld 3 example-3

Een ontvanger aan een groep toevoegen met de groeprelatietabel ("nms:rcpGrpRel"):

<recipient _key="@email" email="martin.ledger@adobe.net" xtkschema="nms:recipient">
  <rcpGrpRel _key="[rcpGroup/@name]">
    <rcpGroup name="GRP1"/>
  </rcpGrpRel>
</recipient>
NOTE
De definitie van de sleutel is niet ingevoerd in het dialoogvenster <rcpgroup> element omdat een impliciete sleutel die op de groepsnaam wordt gebaseerd in het "nms:group"schema wordt bepaald.

XML-verzamelingselementen xml-collection-elements

Door gebrek, moeten alle inzamelingselementen worden bevolkt om de de inzamelingselementen van XML bij te werken. Gegevens uit de database worden vervangen door gegevens uit het invoerdocument. Als het document alleen de elementen bevat die moeten worden bijgewerkt, moet u het kenmerk "_operation" invullen voor alle verzamelingselementen die moeten worden bijgewerkt om een samenvoeging met de XML-gegevens van de database te forceren.

Voorbeeld van SOAP-berichten example-of-soap-messages-1

  • Query:

    code language-none
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <SOAP-ENV:Envelope xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ns='http://xml.apache.org/xml-soap' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
      <SOAP-ENV:Body>
        <Write xmlns='urn:xtk:persist' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
          <__sessiontoken xsi:type='xsd:string'/>
          <domDoc xsi:type='ns:Element' SOAP-ENV:encodingStyle='http://xml.apache.org/xml-soap/literalxml'>
            <recipient xtkschema="nms:recipient" email="rene.dupont@adobe.com" firstName="René" lastName="Dupont" _key="@email">
          </domDoc>
        </Write>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
  • Reactie:

    code language-none
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <SOAP-ENV:Envelope xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ns='http://xml.apache.org/xml-soap' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
      <SOAP-ENV:Body>
        <WriteResponse xmlns='urn:' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
        </WriteResponse>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    

    Retourneren met fout:

    code language-none
    <?xml version='1.0'?>
    <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
      <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
          <faultcode>SOAP-ENV:Server</faultcode>
          <faultstring xsi:type="xsd:string">Error while executing the method 'Write' of service 'xtk:persist'.</faultstring>
          <detail xsi:type="xsd:string">PostgreSQL error: ERROR:  duplicate key violates unique constraint &quot;nmsrecipient_id&quot;Impossible to save document of type 'Recipients (nms:recipient)'</detail>
        </SOAP-ENV:Fault>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1