通过Zuora用户界面,我可以使用方便的“预览”按钮预览订阅。我希望使用Zuora执行相同的操作,这样我就可以预览即将出现的发票并编写一些测试。
到目前为止,我的理论是使用PreviewOptions.enablePreviewMode=true创建一个空的PreviewOptions.enablePreviewMode=true,以获得预览发票的结果。
相关SOAP文档:
这部分起作用了,但它返回了one 对象,但两个是预期的。
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()));
}以下是Zuora中的数据

发布于 2014-09-19 12:15:09
我一直试图在subscribe()电话中实现类似的目标,并最终向Zuora提出了一张罚单。他们说它不被支持,但是你可以通过聚合InvoiceItem记录来达到同样的目的。
我所做的是根据服务期(ServiceStartDate)的开始手动将它们组合在一起,并将总数(例如ChargeAmount、TaxAmount)相加。这似乎是正确的计算,你可以得到的总到期在每段时间开始。
我怀疑这将以同样的方式适用于修改,因为InvoiceData记录会以与subscribe()相同的方式返回。
更新
EVERGREEN (即使订阅在创建时是TERMED )。https://stackoverflow.com/questions/25438913
复制相似问题