selectline-software / selectline-api

Apache License 2.0
25 stars 5 forks source link

Journale nach Anlegen per API nicht sichtbar #113

Closed blex97 closed 3 years ago

blex97 commented 3 years ago

Hallo,

folgende Fälle beim Anlegen von identischen Journal-Einträgen zu einer Rechnung per API, zugeordnet über die Belegnummer wobei die Nummer per Stichprobe aus der UI stammt:

  1. Eintrag wird angelegt und ist nach "Aktualisieren" in der UI sichtbar
  2. Eintrag wird angelegt und ist nach "Aktualisieren" nicht in der UI sichtbar
  3. Eintrag wird nicht angelegt weil Dokument nicht gefunden wird, entsprechend die Antwort:

    Details => "Das zugehörige Dokument konnte nicht gefunden werden.", Message => "Die gesuchte Resource konnte nicht gefunden werden. Nähere Informationen sind in den Details enthalten.", ResponseCode => "80-010"

Wie ist dieses Verhalten zu erklären, die Rechnungs-Dokumente unterscheiden sich erkennbar nicht. Das Verhalten ist konsistent.

Die Fälle aus 2 sind nirgendwo in der UI sichtbar, nur über die Liste der Journaleinträge per API verfügbar.

Die Fälle aus 3 sind, so weit erkennbar, auch nicht in der Gesamtliste der per API angeforderten Rechnungen enthalten. Es ist kein Grund erkennbar warum diese Rechnungen nicht geliefert werden. In der Gesamtliste aller Dokument per API scheinen mehr Rechnungen enthalten zu sein als in der Liste der nur Rechnungen, aber auch nicht alle, eher deutlich weniger. Ist das möglich? documentListFilter.items ist jeweils sicher ausreichend hoch gesetzt.

In dem System gibt es 2 Mandanten, einer mit deutlich mehr Rechnungen als der andere. Nach Stichproben funktioniert es bei dem mit wenig Rechnungen immer.

Ich will eigentlich nur zu einer bekannten Rechnungs(nummer) zuverlässig in der UI verfügbare Journaleinträge erstellen, wie kann ich das erreichen?

vielen Dank für die Unterstützung

MatthiasGuse commented 3 years ago

Hallo, welche Version setzen Sie ein?

blex97 commented 3 years ago

Hallo Herr Guse,

das ist Version 21.1.1 Build 303561

MatthiasGuse commented 3 years ago

Auch Sie bitte ich an dieser Stelle das noch einmal mit der aktuellsten Version zu testen.

Mit der Version 21.1.2 wurde ein Fehler behoben, der undefinierte Abbrüche zur Folge haben konnte. Aktuell ist die Version 21.1.4 verfügbar.

Viele Grüße

blex97 commented 3 years ago

Hallo,

inzwischen steht mir Version 21.2.2 zur Verfügung.

Nach ersten Tests ist das Verhalten unverändert, d.h. es funktioniert weiterhin nicht einen Journaleintrag per API anzulegen den man auch in der UI sehen könnte.

vgl. Beschreibung "Eintrag wird angelegt und ist nach "Aktualisieren" nicht in der UI sichtbar"

vielen Dank für die Unterstützung

MatthiasGuse commented 3 years ago

Hallo,

können Sie bitte ein Beispiel zur Verfügung stellen, wie Sie den Eintrag anlegen?

Viele Grüße

blex97 commented 3 years ago

Hallo Herr Guse,

unten beispielhaft Pseudocode. Vorausgeschickt nochmal verdeutlicht dass es mit diesem Code die genannten Fälle gibt, zwei davon sind: 1. Eintrag wird angelegt und ist nach "Aktualisieren" in der UI sichtbar, 2. Eintrag wird angelegt und ist nach "Aktualisieren" nicht in der UI sichtbar. Fall 2 ist ganz deutlich häufiger. Sonst gilt auch weiter was im Ursprungsticket beschrieben wurde.

var base_url = 'https://xxxxxxxx/slmobileApi/'; var filename = '/tmp/test.pdf'; var mimetype = 'application/pdf';

var doc_journal = { 'JournalLinkInformation' => { 'LinkType' => 'document', 'DocumentType' => 'R', 'DocumentNumber' => 'RE210002', },

'Date' => datetime_now, 'ContactKind' => 'Notiz', 'Label' => 'label', 'Text' => 'lorem ipsum' };

sub journal_create(doc) { var token = login(); var payload = doc;

var url     = base_url + "/" + "Journals";

var data    = fetch_data({
    'url'       => url,
    'header'    => [
        "Authorization : LoginId token"
    ],
    'post_data' => doc,
    'timeout'   => 20,
    'format'    => 'json',
    'method'    => 'post'
});

return data->{'JournalIdentifier'};

}

sub journal_post_attachment(journal_identifier, file, mimetype) { var token = login();

var url = base_url + "/" + "Journals" + "/" + journal_identifier + "/" + "Attachments";

my $form = WWW::Curl::Form->new();
$form->formaddfile($file, 'description', $mimetype);

var opt = {
    'header' => [
        "Authorization : LoginId token"
    ],
    'timeout'       => 20,
    'data'          => form,
    'format'        => 'json',
    'content_type'  => 'multipart/form-data'
};

var data = HTTP::POST(url, opt);      

}

var journal_identifier = journal_create(doc_journal);

if (journal_identifier) { journal_post_attachment(journal_identifier, filename, mimetype); }

vielen Dank für die Unterstützung

MatthiasGuse commented 3 years ago

Hallo,

hier kommen wir leider so nicht weiter. In unseren eigenen Anwendungen nutzen wir diese Funktionalität der API ebenfalls. Hier sind uns solche Effekte nicht bekannt.

Um das weiter nachvollziehen zu können, sehe ich aktuell nur den Weg einen direkten Versuchsvergleich mit Ihrer Anwendung und Postman durchzuführen. In unserer bereitgestellen Postmancollection ist ein Beispiel zum, Übertragen von Anhängen enthalten. So können Sie die identischen Daten per Postman bzw. mit Ihrer Anwendung übertragen und das Ergebnis, sowie die Antworten vergleichen. Ich denke nur so kommt man dem Problem näher.

Mehr kann ich leider aktuell nicht unterstützen.

Viele Grüße

VivienSchuboth commented 3 years ago

Guten Tag blex97,

ich wollte mal nachhaken, ob Ihnen der Vergleich Ihrer Anwendung mit den Postman-Beispielen geholfen hat. Konnten Sie das Problem inzwischen ausfindig machen?

Beste Grüße, Vivien Schuboth

blex97 commented 3 years ago

Hallo Frau Schuboth ,

danke für Ihre Nachfrage.

Hatte inzwischen Gelegenheit mit Postman zu testen, leider mit dem Ergebnis wie vorher, d.h. Journal wird angelegt ist aber in der UI nicht sichtbar, trotz Aktualisierung der UI, den Beleg mehrfach neu geöffnet etc.

Der Versuch war ein Journal (ohne Attachment) anzulegen, das klappt ohne Problem:

Create Journal, Body:

{
  "Date": "2021-08-19T09:18:32.835Z",
  "StatusId": 1,
  "Label": "testPOSTMAN",
  "Text": "test",
  "JournalLinkInformation": {
    "LinkType": "document",
    "DocumentType": "R",
    "DocumentNumber": "RE200023"
  }
}

=>

{
    "JournalIdentifier": "5cec18ae-51cb-42f6-808c-a44a1c94d041"
}

Beim Auslesen des Eintrags wird folgendes geliefert:

{
    "JournalLinkInformationList": [
        {
            "RecordId": 3968,
            "JournalID": "5cec18ae-51cb-42f6-808c-a44a1c94d041",
            "Blobkey": "QR",
            "YearMonth": null,
            "TargetRecordId": 8744,
            "TakenFromPreviousYear": false,
            "IsMasterRecord": true
        }
    ],
    "ROW": 1,
    "Identifier": "5cec18ae-51cb-42f6-808c-a44a1c94d041",
    "Date": "2021-08-19T11:18:32.837+02:00",
    "ContactKindIdentifier": 0,
    "ContactKind": "Notiz",
    "StatusId": 1,
    "Cycle": "None",
    "CategoryId": 0,
    "Label": "testPOSTMAN2",
    "Text": "test",
    "IsPrivateContact": false,
    "ResponsiblePerson": null,
    "StatusLabel": "<kein>",
    "CategoryLabel": null,
    "MetaData": null,
    "CustomFields": null
}

Es scheint also nicht direkt ein API-Problem zu sein. Über die UI lässt sich btw problemlos ein neuer Eintrag erstellen.

Vielen Dank für Ihre Unterstützung.

VivienSchuboth commented 3 years ago

Guten Tag,

da wir dieses Problem intern nicht nachstellen können, würde ich Sie bitten, uns eine Datensicherung an die normale Support-E-Mail-Adresse der SelectLine zu schicken. Bitte verweisen Sie explizit auf den GitHub-Eintrag und lassen es an mich weiterleiten.

Somit können wir erneut prüfen, ob dieses Fehlverhalten anhand Ihrer Daten reproduzierbar ist. Falls das der Fall ist, würden wir sofort prüfen können, woran es liegt und den Fehler zeitig eintakten können.

Danke für Ihre Hilfe!

Mit freundlichen Grüßen, Vivien Schuboth

blex97 commented 3 years ago

Hallo Frau Schuboth,

vielen Dank für Ihr Angebot die Daten zu überprüfen.

Vorab noch zwei Fragen dazu:

Vielen Dank für Ihre Unterstützung.

VivienSchuboth commented 3 years ago

Guten Tag,

die E-Mail-Adresse lautet support@selectline.de

Ich bitte zu beachten, dass Ihre Datensicherung nicht direkt an diese E-Mail-Adresse gesendet werden kann. Diese muss auf den Ihnen zugewiesenen FTP-Server hochgeladen werden. Bitte erfragen Sie sich über diese E-Mail-Adresse zunächst solch einen Server.

Zu Ihrer nächsten Frage konnte ich herausfinden, dass eine Supportdatensicherung nur die Datenbanken für das ausgewählte Programm enthält. Das bedeutet, dass eine Supportdatensicherung aus der Warenwirtschaft keine Jahresdatenbanken enthält. Dokumente werden dabei ebenfalls nicht gesichert, jedoch weiterhin alle Personendaten.

Beste Grüße, Vivien Schuboth

blex97 commented 3 years ago

Hallo Frau Schuboth,

vielen Dank für Ihre Erklärung. Nach Klärung der Datenschutzaspekte hab ich mich für die weiteren Schritte an Ihren Support gewendet, die Supportdatensicherung liegt jetzt vor.

Vielen Dank für Ihre Unterstützung.

VivienSchuboth commented 3 years ago

Guten Tag blex97,

nachdem ich mir Ihre Datensicherung ansehen konnte, war mir der Fehler leider mit diesen Daten nicht nachstellbar. Wie Sie es selbst bereits geschrieben haben, lassen sich Journale und zu diesen auch Anhänge problemlos per API anlegen. Abrufbar über die Oberfläche der Warenwirtschaft (Dialoge: Liste von Journalen, Tab Journal in den jeweiligen Belegen) sind diese daraufhin auch.

Ein Fehlverhalten konnte ich daraus leider nicht ableiten. Aber dank der Datensicherung kamen auch neue Ideen, woran es vielleicht liegen könne.

Haben Sie vielleicht aktive Filter in den jeweiligen Dialogen oder gar Permanentfilter konfiguriert und aktiviert? Dazu können Sie ebenfalls SHIFT + F12 drücken, sobald Sie in der Auflistung stehen, in der Ihnen die Daten fehlen. Wenn Sie uns das sich öffnende Fenster Datenbank-Statement über das Forum zuschicken könnten, würden wir es auch gern für Sie überprüfen.

Ich würde mich über Ihre Rückmeldung freuen.

Beste Grüße

blex97 commented 3 years ago

Hallo Frau Schuboth,

vielen Dank für Ihre Tests und Informationen.

Ich habe folgendes probiert:

Der reduzierte Test bezieht sich auf genau eine Rechnung. Anlegen vom Journal-Eintrag per API findet wie beschrieben mit Postman statt, das Anlegen ist laut API-Antwort erfolgreich. Die UI (Listen etc.) wird jeweils nach erwarteten Änderungen aktualisiert etc.

Dazu Beobachtungen und Fragen:

Vielen Dank für Ihre Unterstützung.

VivienSchuboth commented 3 years ago

Guten Tag blex97,

für eine schnelle Lösung würden wir uns mit Ihnen gerne zu einer Fernwartung treffen. In dieser würden wir uns mit Ihnen zusammensetzen, ihre Installation und Warenwirtschaft hinsichtlich der Einrichtung überprüfen und nach der Fehlerursache Ausschau halten. Diese Dienstleistung ist jedoch kostenpflichtig, sofern es kein Fehler der SelectLine API ist. Falls Sie dies wünschen, melden Sie sich gerne per Mail an unseren Support und vereinbaren mit uns zusammen einen Termin.

Beste Grüße

ThePholph commented 3 years ago

Hallo,

ich habe nur eine ganz triviale Frage zu dem Problem, die bisher noch nicht gestellt wurde:

In dem System gibt es 2 Mandanten, einer mit deutlich mehr Rechnungen als der andere. Nach Stichproben funktioniert es bei dem mit wenig Rechnungen immer.

Kann es sein, dass die Journale einfach im falschen Mandanten angelegt werden, dass Sie die WaWi im Mandant 1 geöffnet haben und dort kontrollieren, die Journale aber im Mandant 2 angelegt werden? Dazu bitte einfach mal im Sl.Mobile in der Benutzerverwaltung die Mandanten-Zuordnung prüfen.

Grüße

Daniel

blex97 commented 3 years ago

Hallo Daniel,

diese Frage war der Jackpot, vielen Dank :)

Die Einträge landen tatsächlich beim zweiten Mandanten, bzw. einer dortigen Rechnung mit identischer Rechnungsnummer (und gleichem Kunden...)

Das erklärt dann auch warum ich per API manche Rechnungen nicht finden konnte, aber in der UI sehen; beim anderen Mandaten.

"Sl.Mobile" sagt mir nichts, eine App? https://www.selectline.de/data/uploads/2017/06/Blickpunkt-SelectLine-Mobile.pdf

Auf die Einrichtung habe ich auch keinen Zugriff, kann nur die API nutzen.

Aber bedeutet das für einen API-Zugriff ist ein bestimmter in der Konfiguration festgelegter Mandant eingestellt den man beim Aufruf nicht setzen kann?

Würde das bedeuten man bräuchte pro Mandant andere Aufrufe, einen anderen Port, oder wie muss ich mir das praktisch vorstellen; oder anders gefragt, wie kann ich beim Aufruf entscheiden welchen Mandaten ich anspreche?

Alex

ThePholph commented 3 years ago

Hallo,

SL.Mobile ist der Oberbegriff, im Prinzip der Dienst für die mobilen Anwendungen von SelectLine inkl. der API. Hier wird in der Benutzerverwaltung dem jeweiligen API-User ein WaWi-User sowie der Mandant zugeordnet, dass bedeutet man benötigt pro Mandant wenigstens ein API-User. Es ist nicht möglich mit dem Login-Request den Mandanten zu wählen. Die Verwaltung von SL-Mobile ist unter https://<server>:<port>/slmobile erreichbar.

Sollte aber derjenige wissen, der SL.Mobile eingerichtet hat als Partner.

Grüße

Daniel

blex97 commented 3 years ago

Hallo Daniel,

danke für die ausführliche und genaue Antwort :) Damit kann ich mich an den Partner für die Einrichtung wenden.

Alex