Java QuickBooks空回调处理程序
我试图在QuickBook中执行批处理操作,但得到的却是null callbackhandlerJava QuickBooks空回调处理程序,java,quickbooks,Java,Quickbooks,我试图在QuickBook中执行批处理操作,但得到的却是null callbackhandler private static void AddBulkCustomer(DataService ds) throws FMSException{ BatchOperation bo = new BatchOperation(); Customer c1 = new Customer(); c1.setGivenName("Customer 3");
private static void AddBulkCustomer(DataService ds) throws FMSException{
BatchOperation bo = new BatchOperation();
Customer c1 = new Customer();
c1.setGivenName("Customer 3");
c1.setDisplayName("Disp Customer 3");
EmailAddress email = new EmailAddress();
email.setAddress("customer1@zzz.com");
c1.setPrimaryEmailAddr(email);
bo.addEntity(c1, OperationEnum.CREATE, "b3");
c1= null;
c1 = new Customer();
c1.setGivenName("Customer 4");
c1.setDisplayName("Disp Customer 4");
email = null;
email = new EmailAddress();
email.setAddress("customer2@z2zz.com");
c1.setPrimaryEmailAddr(email);
bo.addEntity(c1, OperationEnum.CREATE, "b4");
// String strQuery = " select * from customer where givenname ='"+c1.getGivenName()+"'";
// bo.addQuery(strQuery, "b3Query");
ds.executeBatchAsync(bo, new AsyncCallBackBatch());
}
Config.setProperty(Config.BASE_URL_QBO, "https://sandbox-quickbooks.api.intuit.com/v3/company");
用于异步回调操作
public class AsyncCallBackBatch implements CallbackHandler {
@Override
public void execute(CallbackMessage callbackMsg) {
System.out.println("asyncCallbackBatch is executing... ");
try {
System.out.println("QR = "+callbackMsg.getFMSException().toString());
BatchOperation BO = callbackMsg.getBatchOperation();
if (BO != null) {
List<String> bId = BO.getBIds();
for (String strBId : bId) {
if (BO.isFault(strBId)) {
Fault fault = BO.getFault(strBId);
System.out.println("asyncCallBackBatch Error Code : "+ fault.getError().get(0).getCode() + " "+ "Error : "
+ fault.getError().get(0).getDetail()+ ", Message : "+ fault.getError().get(0).getMessage());
} else if (BO.isEntity(strBId)) {
System.out.println("Batch having entity message.. ");
Customer cust = (Customer) BO.getEntity(strBId);
System.out.println("cust id : " + cust.getId()+ " CustName = " + cust.getGivenName());
} else if (BO.isQuery(strBId)) {
System.out.println("Batch having Query ... Parsing... ");
QueryResult qR = BO.getQueryResponse(strBId);
System.out.println("Query : " + qR.getTotalCount());
} else if (BO.isReport(strBId)) {
System.out.println("Batch having Report... ");
Report report = BO.getReport(strBId);
System.out.println(" " + report.getClass().getName());
} else {
System.out.println("Something went wrong... ");
}
}
}else{
System.out.println("Batch Operation terminated, reason: NULL callbackMsg ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
OAuthAuthorizer oAuth = new OAuthAuthorizer(consumerKey, consumerSecret, accessToken, accessTokenSecret);
//403352746
try {
Context context = new Context(oAuth, ServiceType.QBO, "403352746");
System.out.println("RealmID : "+context.getRealmID());
context.setCustomerRequestTimeout(99999);
System.out.println("TimeOut Set to = "+context.getCustomerRequestTimeout());
System.out.println("BASE_URL_QBO = "+Config.getProperty(Config.BASE_URL_QBO));
Config.setProperty(Config.BASE_URL_QBO, "https://sandbox-quickbooks.api.intuit.com/v3/company");
System.out.println("BASE_URL_QBO = "+Config.getProperty(Config.BASE_URL_QBO));
DataService ds = new DataService(context);
AddBulkCustomer(ds);
System.out.println("Operation Complete..");
} catch (Exception e) {
e.printStackTrace();
}
}
public类AsyncCallBackBatch实现CallbackHandler{
@凌驾
public void execute(CallbackMessage callbackMsg){
System.out.println(“asyncCallbackBatch正在执行…”);
试一试{
System.out.println(“QR=“+callbackMsg.getfmexception().toString());
BatchOperation BO=callbackMsg.getBatchOperation();
if(BO!=null){
List bId=BO.getBIds();
for(字符串strBId:bId){
如果(BO.isFault(strBId)){
故障故障=BO.getFault(strBId);
System.out.println(“asyncCallBackBatch错误代码:”+fault.getError().get(0.getCode()+”+“错误:”
+fault.getError().get(0.getDetail()+),消息:“+fault.getError().get(0.getMessage());
}否则,如果(实体(strBId)){
System.out.println(“具有实体消息的批处理”);
客户客户=(客户)BO.getEntity(strBId);
System.out.println(“客户id:+cust.getId()+”CustName=“+cust.getGivenName());
}else if(BO.isQuery(strBId)){
System.out.println(“具有查询的批处理…解析…”);
QueryResult qR=BO.getQueryResponse(strBId);
System.out.println(“查询:+qR.getTotalCount());
}否则如果(BO.isReport(strBId)){
System.out.println(“具有报告的批次…”);
报告=BO.getReport(strBId);
System.out.println(“+report.getClass().getName());
}否则{
System.out.println(“出了点问题…”);
}
}
}否则{
System.out.println(“批处理操作终止,原因:NULL callbackMsg”);
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
公共静态void main(字符串[]args){
OAuthAuthorizer oAuth=新的OAuthAuthorizer(consumerKey、ConsumerCret、accessToken、accessTokenSecret);
//403352746
试一试{
上下文=新上下文(oAuth,ServiceType.QBO,“403352746”);
System.out.println(“RealmID:+context.getRealmID());
setCustomerRequestTimeout(99999);
System.out.println(“超时设置为=“+context.getCustomerRequestTimeout());
System.out.println(“BASE_URL_QBO=“+Config.getProperty(Config.BASE_URL_QBO));
Config.setProperty(Config.BASE\u URL\u QBO,“https://sandbox-quickbooks.api.intuit.com/v3/company");
System.out.println(“BASE_URL_QBO=“+Config.getProperty(Config.BASE_URL_QBO));
DataService ds=新的DataService(上下文);
客户(ds);
System.out.println(“操作完成”);
}捕获(例外e){
e、 printStackTrace();
}
}
当我在execute方法中调试时,我得到的是Null BatchOperation。我不确定在沙盒环境中是否允许执行批处理操作。在与Quickbooks开发人员进行了大量测试和沟通后,我找到了解决方案,他们认为这对其他人会有帮助 在沙盒环境中,即使您将配置属性设置为沙盒URL,它仍然会在Callbackhandler中选择作为产品URL
private static void AddBulkCustomer(DataService ds) throws FMSException{
BatchOperation bo = new BatchOperation();
Customer c1 = new Customer();
c1.setGivenName("Customer 3");
c1.setDisplayName("Disp Customer 3");
EmailAddress email = new EmailAddress();
email.setAddress("customer1@zzz.com");
c1.setPrimaryEmailAddr(email);
bo.addEntity(c1, OperationEnum.CREATE, "b3");
c1= null;
c1 = new Customer();
c1.setGivenName("Customer 4");
c1.setDisplayName("Disp Customer 4");
email = null;
email = new EmailAddress();
email.setAddress("customer2@z2zz.com");
c1.setPrimaryEmailAddr(email);
bo.addEntity(c1, OperationEnum.CREATE, "b4");
// String strQuery = " select * from customer where givenname ='"+c1.getGivenName()+"'";
// bo.addQuery(strQuery, "b3Query");
ds.executeBatchAsync(bo, new AsyncCallBackBatch());
}
Config.setProperty(Config.BASE_URL_QBO, "https://sandbox-quickbooks.api.intuit.com/v3/company");
在这种情况下,他们称之为bug,目前您所能做的就是在PROD中创建一个试用帐户,然后测试它