Java QuickBooks空回调处理程序

Java 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");

我试图在QuickBook中执行批处理操作,但得到的却是null callbackhandler

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中创建一个试用帐户,然后测试它