/ / Vorschau der anstehenden Rechnungen mit der Zuora SOAP API? - Zuora, Zuoraseife

Wie können Sie eine bevorstehende Rechnung mit der Zuora SOAP API anzeigen? - Zuora, Zuoraseife

Von der Zuora-Benutzeroberfläche aus kann ich eine Vorschau anzeigenAbonnement über eine praktische Schaltfläche "Vorschau". Ich würde gerne die gleiche Aktion mit der Zuora SOAP-API ausführen, so dass ich eine Vorschau der kommenden Rechnungen und einige Tests schreiben kann.

Bis jetzt ist meine Theorie, ein leeres zu schaffen Amendment mit PreviewOptions.enablePreviewMode=true um die Ergebnisse der Vorschau der Rechnung zu erhalten.

Relevante SOAP-Dokumente:


Dies hat teilweise funktioniert, aber es ist zurückgekehrt ein InvoiceData Objekt, aber zwei würden erwartet.

public List<InvoiceData> getInvoicePreview(String subscriptionId){

ID id = new ID();
id.setID(subscriptionId);

PreviewOptions previewOptions = new PreviewOptions();
previewOptions.setEnablePreviewMode(true);
previewOptions.setPreviewThroughTermEnd(true);

Calendar forever = new DateTime().plusDays(1000).toCalendar(Locale.getDefault());

// A null amendment
Amendment amendment = new Amendment();
amendment.setName("Draft amendment for preview");
amendment.setStatus("Draft");
amendment.setContractEffectiveDate(forever);
amendment.setSubscriptionId(id);
amendment.setType("TermsAndConditions");

AmendOptions amendOptions = new AmendOptions();

AmendRequest amendRequest = new AmendRequest();
amendRequest.setAmendments(new Amendment[]{amendment});
amendRequest.setAmendOptions(amendOptions);
amendRequest.setPreviewOptions(previewOptions);

Amend amend = new Amend();
amend.setRequests(new AmendRequest[]{amendRequest});

AmendResponse amendResults;


try {

ZuoraCredentials creds = credentialProvider.get();
ZuoraServiceStub stub = new ZuoraServiceStub(creds.zuoraApiEndpoint);
Login login = new Login();
login.setUsername(creds.zuoraApiUser);
login.setPassword(creds.zuoraApiPassword);
LoginResponse loginResponse = stub.login(login);
String session = loginResponse.getResult().getSession();
SessionHeader sessionHeader = new SessionHeader();
sessionHeader.setSession(session);
amendResults = stub.amend(amend, sessionHeader);
} catch (RemoteException e) {
throw new RuntimeException("Error executing Zuora API.", e);
} catch (UnexpectedErrorFault e) {
throw new RuntimeException("Error executing Zuora API.", e);
} catch (LoginFault e) {
throw new RuntimeException("Error executing Zuora API.", e);
}

AmendResult[] amendResult = amendResults.getResults();

printOut(amendResult);

return new ArrayList<InvoiceData>(Arrays.asList(amendResult[0].getInvoiceDatas()));
}

So sehen die Daten aus der Zuora UI aus

Abo-Rechnung Vorschau

Antworten:

2 für die Antwort № 1

Ich habe versucht, etwas Ähnliches für mich selbst zu erreichen subscribe() Anruf und endete damit, ein Ticket mit Zuora zu erhöhen. Sie sagten, dass es nicht unterstützt wird, aber Sie könnten das gleiche erreichen, indem Sie die InvoiceItem Aufzeichnungen.

Was ich getan habe, ist es, sie manuell zu gruppieren, basierend auf dem Beginn der Serviceperiode (ServiceStartDate) und summiere die Summen (z.B. ChargeAmount, TaxAmount). Es scheint korrekt zu funktionieren und Sie können den Gesamtbetrag zu Beginn jeder Periode erhalten.

Ich vermute, dass dies für die Änderungsanträge in gleicher Weise funktionieren wird, weil InvoiceData Datensatz wird in der gleichen wie für zurückgegeben subscribe().

Aktualisieren

  • Wir verwenden dies jetzt für Änderungen und es funktioniert genauso wie für Abonnentenanrufe.
  • Ein Problem, das wir gefunden haben, ist, dass Sie keine Vorschau über das Ende eines bestimmten Abonnements hinaus anzeigen können, aber wir können den Begriffstyp auf festlegen EVERGREEN wenn nötig bei der Vorschau (auch wenn das Abonnement sein soll TERMED wenn erstellt).