Asynchroner Produktimport
URL des Webservice : https://sws.spartoo.de/mp/xml_import_products_async.phpDieser Webservice sollte auf die gleiche Weise verwendet werden wie xml_import_products
Der einzige Unterschied zu diesem Webservice ist, dass er die Produkte asynchron einbindet.
Wenn Sie diesen Webservice aufrufen, gibt er Ihnen eine URL zurück.
Wenn Sie diese URL aufrufen, erhalten Sie den Status der Dateiintegration.
Funktionsweise
Der asynchrone Import erfolgt in zwei Schritten:
- Übermittlung des Feeds: Rufen Sie den Webservice mit dem Parameter xml auf. Der Feed wird in eine Warteschlange gestellt und der Webservice antwortet sofort mit einer URL (Tag url), die die Kennung Ihres Imports enthält (Parameter export).
- Nachverfolgung und Abruf des Ergebnisses: Rufen Sie den Webservice mit dem Parameter export auf, bis Sie das Verarbeitungsergebnis erhalten (siehe Liste der Status unten).
Der Feed kann als rohes XML oder komprimiert im ZIP-Format gesendet werden: das ZIP-Format wird automatisch erkannt.
Liste der Parameter
Die Parameter dieses Webservice müssen unbedingt per POST übertragen werden| Parameter | Beschreibung |
|---|---|
| partenaire | Muss Ihre Benutzeridentifizierung enthalten: |
| xml | XML-Zeichenfolge die die Produktliste enthält |
Optionale Parameter, die in POST übertragen werden kann
| Paramètre | Beschreibung |
|---|---|
| Stärke_Beschreibung | Bitte eine 1 setzen wenn Sie die Update-Produktbeschreibungen aktivieren wollen: löschen der vorhandenen Beschreibungen, bearbeiten der Beschreibung eines Produktes, das nicht mehr am Lager ist (Null-Inventar Produkt), etc. |
| force_overwrite | Bitte die Zahl 1 einsetzen wenn Sie einen Integrationsfehler korrigieren möchten. Beachten Sie dass direkt im Anschluss der Katalog ohne overwrite zu gesendet werden muss. |
| Parameter | Schritt | Beschreibung |
|---|---|---|
| xml | 1 | Inhalt des Produkt-Feeds (rohes XML oder ZIP). Siehe untenstehende Formate. |
| export | 2 | Import-ID, die in Schritt 1 in der Antwort-URL zurückgegeben wurde. |
Format des XML-Parameters
Die Textfelder müssen durch CDATA Tags geschützt sein, wenn sie Sonderzeichen enthalten, durch die das XML ungültig wird.
Die Textfelder müssen durch CDATA Tags geschützt sein wenn Sie Sonderzeichen enthalten, durch die die XML-Datei ungültig wäre.
Format für ein Land
<root> <products> <product> <reference_partenaire>string</reference_partenaire> <product_name>string</product_name> <manufacturers_name>string</manufacturers_name> <product_sex>char</product_sex> <product_price>float</product_price> <product_quantity>int</product_quantity> <color_id>int</color_id> <product_style>int</product_style> <product_description>string</product_description> <product_color>string</product_color> <heel_height>float</heel_height> <country_origin>int</country_origin> <code_hs>int</code_hs> <size_list> <size> <size_name>string</size_name> <size_quantity>int</size_quantity> <size_reference>string</size_reference> <ean>string</ean> <code_hs>int</code_hs> <product_price>float</product_price> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales/> </discount> </size> <!-- ... Mehrere "size" Tags möglich ... --> </size_list> <product_composition>int</product_composition> <voering_composition>int</voering_composition> <first_composition>int</first_composition> <zool_composition>int</zool_composition> <photos> <url1>url</url1> <url2>url</url2> <url3>url</url3> <url4>url</url4> <url5>url</url5> <url6>url</url6> <url7>url</url7> <url8>url</url8> </photos> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales>0/1</sales> </discount> <extra_infos> <info> <id>int</id> <value>float</value> </info> <!-- ... Mehrere "info" Tags möglich ... --> </extra_infos> <selections> <selection>int</selection> <!-- ... Mehrere "selection" Tags möglich ... --> </selections> </product> <!-- ... Mehrere "product" Tags möglich ... --> </products> </root>
Format für mehrere Länder
<root> <products> <product> <reference_partenaire>string</reference_partenaire> <manufacturers_name>string</manufacturers_name> <product_sex>char</product_sex> <product_quantity>int</product_quantity> <color_id>int</color_id> <product_style>int</product_style> <heel_height>float</heel_height> <country_origin>int</country_origin> <code_hs>int</code_hs> <languages> <language> <code>string</code> <product_name>string</product_name> <product_description>string</product_description> <product_color>string</product_color> <product_price>float</product_price> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales /> </discount> </language> <!-- ... Mehrere "language" Tags möglich ... --> </languages> <size_list> <size> <size_name>string</size_name> <size_quantity>int</size_quantity> <size_reference>string</size_reference> <ean>string</ean> <code_hs>int</code_hs> <languages> <language> <code>string</code> <product_price>float</product_price> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales/> </discount> </language> <!-- ... Mehrere "language" Tags möglich ... --> </languages> </size> <!-- ... Mehrere "size" Tags möglich ... --> </size_list> <product_composition>int</product_composition> <voering_composition>int</voering_composition> <first_composition>int</first_composition> <zool_composition>int</zool_composition> <photos> <url1>url</url1> <url2>url</url2> <url3>url</url3> <url4>url</url4> <url5>url</url5> <url6>url</url6> <url7>url</url7> <url8>url</url8> </photos> <extra_infos> <info> <id>int</id> <value>float</value> </info> <!-- ... Mehrere "info" Tags möglich ... --> </extra_infos> <selections> <selection>int</selection> <!-- ... Mehrere "selection" Tags möglich ... --> </selections> </product> <!-- ... Mehrere "product" Tags möglich ... --> </products> </root>
Beschreibung der Felder der Eingangs-XML
| Tag | Beschreibung | Erforderlich |
|---|---|---|
| reference_partenaire |
Produktkennung des Händlers. Es ist die SKU, die ein Produkt einer Marke in einer bestimmten Farbe identifiziert Die Produktkennung darf nur alphanumerische Zeichen sowie die Zeichen - (Bindestrich) _ (Unterstrich) und . (Punkt). |
Ja |
| product_name |
Modellname Es darf nicht die Kategorie, Farbe oder Marke des Produkts enthalten Es sollte auch keine Zeichen oder HTML-Tags enthalten |
Nein |
| manufacturers_name | Markenname des Produkts | Ja |
| code_idu | Produkt-UDI-Code (siehe AGEC-Gesetz) | Nein |
| product_sex |
Geschlecht des Produkts > Siehe mögliche Werte |
Ja |
| product_price | Produktpreis in Euro (nicht erforderlich für die Preise der Größen) | Ja/ Nein |
| color_id |
Farbe für Menüfilter Wenn es nicht angegeben ist, wird das Produkt nicht angezeigt wenn ein Kunde einen Filter auf die Farbe verwendet > Siehe mögliche Werte |
Nein |
| product_style |
Produktkategorie > Siehe mögliche Werte |
Ja |
| product_description | Produktbeschreibung. Erscheint auf dem Produktblatt. | Nein |
| product_color | Freitextfeld für Farbe. Erscheint auf dem Produktblatt. | Nein |
| product_quantity |
Gesamtbestand eines Produkts Wird ignoriert, wenn ein oder mehrere size_quantity-Tags für das Produkt erkannt werden. Für One-Size-fits-all-Produkte ist ein product_quantity-Tag obligatorisch, wenn das size_quantity-Tag nicht ausgefüllt ist. |
Nein |
| size |
Liste der Größen und deren Bestand. Optional für Produkte ohne Größen ( Taschen / Accessoires ). Sonst ist es obligatorisch. |
Ja / Nein |
| Größenname |
Größenname > Siehe mögliche Werte |
Ja |
| Größe_Menge | Für jede Größe muss der Lagerbestand angegeben werden. Um ein Produkt zu deaktivieren, muss der Bestand auf 0 gesetzt werden. Wenn der Bestand bei 0 liegt, wird das Produkt deaktiviert und erscheint nicht mehr auf Spartoo. |
Ja |
| size_reference |
Produkthinweis auf Größe. Dieses Feld wird nur verwendet, um beim Export von Bestellungen oder Retouren zurückgegeben zu werden. Es empfiehlt sich, diese Referenz zu generieren, indem Sie die Felder reference_partner und size_name mit einem Unterstrich "_" verketten. |
Nein |
| ean | EAN von Produkt zu Größe Obligatorisch für den Logistikdienst |
Nein / Ja |
| Bilder |
Liste der Fotos und ihrer URL. Mindestens ein Foto ist Pflicht. Wir empfehlen mindestens 3 Fotos. Wir können maximal 8 Fotos integrieren. Das Foto wird nur einmal hochgeladen und dann auf unseren Servern gespeichert, nachdem es auf Spartoo-Abmessungen angepasst wurde. Fotos müssen im jpg-Format vorliegen, quadratisch und mindestens 500x500 Pixel groß sein. Wenn sie größer oder gleich 800 x 800 Pixel sind, wird es einen möglichen Zoom auf der Website geben. |
Ja |
| url1, url2 ... url8 |
Links zu Fotos Sie müssen uns einen Link zu jedem Foto zur Verfügung stellen. Der Dateiname darf nur alphanumerische Zeichen sowie die Zeichen „-“ (Bindestrich), „_“ (Unterstrich) enthalten und "." (Punkt). Leerzeichen und Akzentbuchstaben (z. B. é, à und ñ) sind nicht erlaubt. |
Ja |
| country_origin |
Herkunftsland des Produkts > Siehe mögliche Werte |
Nein |
| code_hs | Produktzollcode | Nein |
| Absatzhöhe | Absatzhöhe in Zentimetern (cm). Nur für Damenschuhe. Sie müssen einen Punkt verwenden, um die Einheit von den Dezimalstellen zu trennen (Beispiel: 1.5). | Nein |
| Produktzusammensetzung |
Zusammensetzung des Produktstamms. Nur für Schuhe und Taschen > Siehe mögliche Werte |
Nein |
| voering_composition |
Zusammensetzung der Produktauskleidung. Nur für Schuhe und Taschen > Siehe mögliche Werte |
Nein |
| first_composition |
Zusammensetzung der Einlegesohle des Produkts. Nur für Schuhe > Siehe mögliche Werte |
Nein |
| zool_composition |
Zusammensetzung der Laufsohle des Produkts. Nur für Schuhe > Siehe mögliche Werte |
Nein |
| Rabatt |
Ermöglicht es Ihnen, einen Rabatt auf das Produkt oder die Größe anzuwenden. Das Feld Preis im Feld Rabatt ist für den prozentualen Preisnachlass aus dem Feld Produktpreis. Das Feld price_discount des Felds discount betrifft den rabattierten Preisnachlass des Produkts.fixed. Der angezeigte prozentuale Rabatt wird berechnet. Wenn beide Felder vorhanden sind, hat das Feld price_discount Vorrang vor dem Feld rate. Wenn der Rabatt sofort gewährt wird, muss das Feld Startdatum nicht angegeben werden. Wenn das Tag sales angegeben ist, handelt es sich bei der Aktion um eine Verkaufsaktion. Ansonsten handelt es sich um eine klassische Promotion. Durch die Angabe dieses Parameters können Produkte während der Verkaufsperioden auf der Verkaufsseite vorhanden sein. |
Nein |
| zusätzliche_info |
Ermöglicht die Angabe zusätzlicher Informationen je nach Produkttyp. Jede Information besteht aus einer ID ( > Werte anzeigen ) und einem Wert in numerischer Form. |
Nein |
| Auswahl | Ermöglicht es Ihnen, die Nutzungskontexte des Produkts anhand einer Liste von IDs zu spezifizieren. Der Satz verfügbarer Kontexte wird hier bereitgestellt. |
Nein |
Beispiel XML-Parameter
<root> <products> <product> <reference_partenaire>98</reference_partenaire> <product_name><![CDATA[ALL STAR HI]]></product_name> <manufacturers_name><![CDATA[Converse]]></manufacturers_name> <product_sex>M</product_sex> <product_price>64.99</product_price> <product_quantity>5</product_quantity> <color_id>8</color_id> <product_style>10010</product_style> <product_description><![CDATA[Das Modell Chuck Taylor All Star von Converse ist ein außergewöhnliches Modell: Ein absolutes Must-Have. Dieser hohe Sneaker mit einem Schaft aus Stoff und einem klassischen unifarbenen Aufdruck ist zeitlos und immer modisch! ]]></product_description> <product_color><![CDATA[rot]]></product_color> <country_origin>73</country_origin> <code_hs>64059090</code_hs> <size_list> <size> <size_name>38</size_name> <size_quantity>4</size_quantity> <size_reference>98_38</size_reference> <ean>123456789011></ean> </size> <size> <size_name>39</size_name> <size_quantity>1</size_quantity> <size_reference>98_39</size_reference> <ean>123456789012></ean> </size> </size_list> <product_composition>4</product_composition> <photos> <url1>https://imgext.spartoo.com/photos/98/98/98_350_A.jpg</url1> <url2>https://imgext.spartoo.com/photos/98/98/98_350_B.jpg</url2> <url3>https://imgext.spartoo.com/photos/98/98/98_350_C.jpg</url3> <url4>https://imgext.spartoo.com/photos/98/98/98_350_D.jpg</url4> <url5>https://imgext.spartoo.com/photos/98/98/98_350_E.jpg</url5> <url6>https://imgext.spartoo.com/photos/98/98/98_350_F.jpg</url6> <url7>https://imgext.spartoo.com/photos/98/98/98_350_G.jpg</url7> <url8>https://imgext.spartoo.com/photos/98/98/98_350_H.jpg</url8> </photos> <discount> <startdate>1199170800</startdate> <stopdate>1204354800</stopdate> <rate>20</rate> </discount> </product> </products> </root>
Übertragung des Datenstroms über Dateien
Es ist auch möglich, den Feed (XML oder ZIP) über eine Datei zu übertragen. Dazu darf der Hauptteil der Anfrage nur die Datei enthalten.
Die verschiedenen Parameter (wie „partner“, „force_description“, „force_overwrite“ usw.) müssen zwingend in GET übermittelt werden.
Preise und Rabatte nach Größe
Die Preis- und Rabatt Tags nach Größe wurden eingeführt, um eine genaue Preisdifferenzierung innerhalb eines Produkts zu ermöglichen.Sie dürfen nur verwendet werden, wenn eine Größe einen vom allgemeinen Preis des Produkts abweichenden Preis hat..
Der auf Produktebene festgelegte Preis ist die wichtigste Referenz. Größenspezifische Tags sollen diesen Preis nur dann überschreiben, wenn eine Ausnahme erforderlich ist (z. B. Sondergrößen, Materialaufschläge, Teilauslaufmodelle usw.).
Es ist strengstens untersagt, Preis- oder Rabatt-Tags nach Größe zu verwenden, wenn alle Größen denselben Preis wie das Hauptprodukt haben. In diesem Fall muss der Preis nur auf der globalen Ebene des Produkts festgelegt werden.
Länderübergreifendes Format
Im länderübergreifenden Format ist das TagSie legt fest, in welchen Ländern das Produkt zum Verkauf angeboten wird, sowie dessen Namen, Beschreibung und Referenzpreis (product_price) für jedes Land. Dieser Preis muss unbedingt positiv sein.
Die in den Größen angegebenen
Fehlt das
Antwort auf Schritt 1: Feed-Übermittlung
Format der zurückgeschickten XML-Datei
<root> <url>string</url> <errors>int</errors> </root>
Beispiel:
<root> <url><![CDATA[https://sws.spartoo.com/mp/xml_import_products_async.php?partenaire=XXXX&export=123456]]></url> <errors>1</errors> </root>
Liste der Fehlercodes des Webservice
| Code | Beschreibung |
|---|---|
| 1 | Kein Parameterfehler |
| -1 | Der Parameter partenaire fehlt oder ist leer |
| -2 | Der Partnerparameter existiert nicht |
| -11 | Der Parameter xml fehlt oder ist leer |
| -15 | XML-Sytnaxfehler, überprüfen Sie Ihre XML-Datei |
| -428 | Ihr Kundenkonto wurde nun desaktiviert. Sie können nun keine weiteren Anfragen an den Webservice stellen. |
| -429 | Sie haben innerhalb der zur Verfügung stehenden Zeit zu viele Anfragen an den Webservice gestellt. |
Beschreibung der Felder der XML-Antwort
This webservice return you the url to call to get back the webservice responses. If there was an error, it will be printed in a status markup. Otherwise, you will get an xml contening the import result.
This result will be the same format as xml_import_products. Below is the list of statuses returned by the webservice:
| Status id | Status |
|---|---|
| 1 | Fichier pas encore traité |
| 2 | Aucune difference trouvé dans le fichier transferé |
| 3 | Resultat plus disponible |
| 4 | Erreur lors du transfert de fichier |
Antwort von Schritt 2: Verarbeitungsverfolgung
Solange die Verarbeitung nicht abgeschlossen ist, sendet der Webservice einen Status zurück:
<root> <status_id>int</status_id> <status>string</status> <errors>int</errors> </root>
| status_id | status | Bedeutung |
|---|---|---|
| 1 | Not Update Yet | Der Feed befindet sich in der Warteschlange oder wird gerade verarbeitet. Bitte versuchen Sie es später erneut. |
| 2 | No change found in file transfered. | Verarbeitung abgeschlossen: Es wurden keine Änderungen im Feed erkannt. |
| 3 | Result not available anymore | Der Feed wurde verarbeitet, aber die Ergebnisdatei ist nicht mehr verfügbar. |
| 4 | Error on file transfert | Der Feed konnte nicht gelesen werden: Bitte senden Sie ihn erneut. |
| 4 | Skipped cause newer file found | Feed ignoriert, da ein neuerer Feed gesendet wurde. |
Sobald die Verarbeitung abgeschlossen ist, sendet der Webservice direkt die Ergebnisdatei zurück: Sie hat das gleiche Format wie das Ergebnis des klassischen Imports (siehe unten).
Ergebnisformat
<root> <products> <product> <reference_partenaire>string</reference_partenaire> <status>string</status> <action>string</action> <errors> <error> <id>int</id> <description>string</description> <level>string</level> </error> <!-- ... Mehrere "error" Tags möglich ... --> </errors> </product> <!-- ... Mehrere "product" Tags möglich ... --> </products> <errors>int</errors> </root>
| Tag | Beschreibung |
|---|---|
| reference_partenaire | ID des Partnerproduktes |
| status | OK wenn das Produkt in die Datenbank eingefügt wird KO wenn das Produkt nicht eingefügt werden konnte |
Liste der möglichen Aktionen:
|
| errors |
Liste der Verarbeitungsfehler:
|
Liste der Fehlercodes
| Code | Level | Beschreibung |
|---|---|---|
| 1 | Fatal | Die Partnerreferenz ist nicht lang genug |
| 2 | Fatal | Die Partnerreferenz ist ungültig, Sie kann nur alphanumerische Zeichen enthalten |
| 3 | Warning | Produktname ist nicht angegeben |
| 4 | Fatal | Marke ist nicht angegeben |
| 5 | Fatal | Das Geschlecht ist ungültig, die einzigen gültigen Variablen sind: H , F , M, K , G , B |
| 6 | Fatal | Der Preis muss eine Zahl sein |
| 7 | Fatal | Der Preis muss positiv sein |
| 8 | Warning | Der Preis scheint sehr hoch zu sein ( > 1000€ ) |
| 195 | Fatal | Der neue Preis darf nicht mehr als xxx Zahlen überschreiten |
| 81 | Fatal | Der Produktpreis kann nicht höher als € 180 sein |
| 9 | Fatal | Die Anzahl muss einen ganze Zahl sein |
| 10 | Fatal | Die Anzahl muss positiv sein |
| 11 | Warning | Die Farbe xxx existiert nicht: Das Produkt wird mithilfe der Farbfilter nicht gefunden werden können |
| 13 | Fatal | Die Kategorie xxx existiert nicht |
| 14 | Warning | Die Produktbeschreibung ist leer |
| 15 | Warning | Die Farbfeld ist leer |
| 16 | Warning | Keine Größenliste: Benutzung der Einheitsgröße |
| 17 | Warning | Die Zusammensetzung ist zwar angegeben, aber ungültig |
| 18 | Fatal | Das Foto ist obligatorisch |
| 19 | Warning | Der Diskontsatz muss zwischen 0 und 100 liegen, der Rabatt wird nicht berücksichtigt |
| 20 | Warning | Die Größe xxx existiert nicht |
| 200 | Warning | Die Größe xxx existiert nicht für die Marke xxx. |
| 201 | Fatal | EAN-Code ist erforderlich |
| 202 | Fatal | Der EAN Code xxx der Referenz xxx in der Größe xxx wurde von der Referenz xxx bereits verwendet. |
| 205 | Fatal | Partnerreferenz zu lang |
| 23 | Warning | Das Foto xxx ist kleiner als 350x350: Es wird online eine schlechte Qualität aufweisen |
| 24 | Warning | Das Foto xxx ist kleiner als 350x350: Es wird online nicht angezeigt |
| 25 | Fatal | Größe xxx: Es ist nicht möglich, den Lagerbestand zu regulieren |
| 26 | Fatal | Ausverkauft: Das Produkt wird nicht kreiert werden |
| 27 | Fatal | Es ist unmöglich, Zugang zum Foto 1 zu bekommen (url xxx) |
| 28 | Warning | Es ist unmöglich, Zugang zum xxx zu bekommen (url xxx) |
| 30 | Fatal | Die Anzahl der Größe xxx ist zu hoch ( Maximale Anzahl : xxx) |
| 33 | Fatal | Ein Produkt dieser Art xxx gehört nicht zu dieser Kategorie xxx |
| 34 | Fatal | Das Wort xxx ist gesperrt und wird nicht angezeigt werden. |
| 35 | Fatal | Produktname zu lang, er darf nur den Namen des Modells enthalten. Fehler im Land/in den Ländern: xxx |
| 341 | Fatal | Das Wort xxx ist gesperrt und wird nicht in der Produktbeschreibung angezeigt werden. |
| 36 | Fatal | Das Produkt kann nicht importiert werden: Das Produkt weist eine Duplizierung der Größe/Farbe auf. |
| 37 | Fatal | Dieses Produkt enthält keine Sprachinformationen für eine aktive Website. |
| 32 | Fatal | Es wurden keine Informationen bezüglich diesem Produkt gefunden |
| 38 | Fatal | Die Größe xxx kann nur einmal verwendet werden, für die Referenz xxx |
| 39 | Warning | Die Partnerreferenz ist mehrmals im Feed vorhanden, Duplikate wurden ignoriert |
| 451 | Fatal | Kein Preis für die Größe xxx des Landes xxx. (für einen Preisnachlass erforderlich) |
| 452 | Warning | Enddatum des überschrittenen Discounts für die Größe xxx des Landes xxx. |
| 453 | Fatal | "rate" (xxx) ungültig für die Größe xxx des Landes xxx. |
| 454 | Fatal | "rate" (xxx) > 85% für die Größe xxx des Landes xxx. |
| 455 | Warning | Die Größe xxx mit einem Preis auf ein Land (xxx), das für das Produkt nicht definiert ist. |
| 456 | Warning | Die Größe xxx hat einen Preis auf xxx, der mit dem Gesamtpreis in diesem Land identisch ist. |
| 194 | Fatal | Der Nachlass bzw dem neuen Preis darf nicht die xxx% überschreiten |
Beispiele XML-Antwort
Beispielantwort auf einen KO-Aufruf eines Webdienstes :
<root> <products></products> <errors>-1</errors> </root>
Beispielantwort auf einen KO-Aufruf eines Webdienstes :
<root> <products> <product> <reference_partenaire>EEAJBCC</reference_partenaire> <status>KO</status> <action>not created</action> <errors> <error> <id>14</id> <description>Die Produktbeschreibung ist leer</description> <level>warning</level> </error> <error> <id>4</id> <description>Marke ist nicht angegeben</description> <level>fatal</level> </error> </errors> </product> <product> <reference_partenaire>KJHGFDS</reference_partenaire> <status>OK</status> <action>created</action> </product> </products> <errors>1</errors> </root>
XSD-Dateien
Mehrländer-XSD-Dateien
Saitoo Marketplace