【问题标题】:NPE using QBOVendorService使用 QBOVendorService 的 NPE
【发布时间】:2013-07-22 18:14:09
【问题描述】:

我正在尝试使用 QBOVendorService 查询供应商,但没有运气。 我正在按如下方式创建服务:

       QBOVendorService vService = QBServiceFactory.getService(context, QBOVendorService.class);

上下文是有效的 PlatformSessionContext。我知道平台会话上下文很好,因为我可以使用它获取有关用户的信息。当我尝试时

           vService.addVendor(context, vendor);

我最终得到一个 NPE,比如我的 vService 为空。如果 QBOVendorService 失败,我不应该得到一个错误初始化吗?由于 intuit 开发者论坛已关闭,有没有好地方可以找到更多使用此功能的示例?

【问题讨论】:

    标签: java intuit-partner-platform


    【解决方案1】:

    我正在分享一个示例代码 sn-p。替换您的 OAuth 令牌和 relamId。它应该可以正常工作。

    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Iterator;
    import java.util.List;
    
    import com.intuit.ds.qb.QBIdType;
    import com.intuit.ds.qb.QBVendor;
    import com.intuit.ds.qb.QBVendorQuery;
    import com.intuit.ds.qb.QBVendorService;
    import com.intuit.ds.qb.QBInvalidContextException;
    import com.intuit.ds.qb.QBObjectFactory;
    import com.intuit.ds.qb.QBServiceFactory;
    import com.intuit.ds.qb.impl.QBRecordCountImpl;
    import com.intuit.ds.qb.qbd.QBDRecordCountService;
    import com.intuit.ds.qb.qbd.QBDServiceFactory;
    import com.intuit.platform.client.PlatformSessionContext;
    import com.intuit.platform.client.PlatformServiceType;
    import com.intuit.platform.client.security.OAuthCredentials;
    import com.intuit.ds.qb.QBSyncStatusRequest;
    import com.intuit.ds.qb.QBSyncStatusRequestService;
    import com.intuit.ds.qb.QBSyncStatusResponse;
    import com.intuit.sb.cdm.NgIdSet;
    import com.intuit.sb.cdm.ObjectName;
    import org.slf4j.Logger;
    
    // QBD API Docs - https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0500_quickbooks_windows/0600_object_reference/vendor
    // QBO API Docs - https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0400_quickbooks_online/vendor
    // JavaDocs     - http://developer-static.intuit.com/SDKDocs/QBV2Doc/ipp-java-devkit-2.0.10-SNAPSHOT-javadoc/
    
    public class CodegenStubVendorall {
        final PlatformSessionContext context;
    
        public CodegenStubVendorall(PlatformSessionContext context) {
            this.context = context;
        }
    
        public void testAdd() {
            final List<QBVendor> entityList = new ArrayList<QBVendor>();
            try {
                QBVendorService service = QBServiceFactory.getService(context, QBVendorService.class);
    
                //Your Code 
                //Use Vendor POJO for creating Vendor
    
                }
            } catch (QBInvalidContextException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
        public static void main(String args[]) {
            PlatformSessionContext context = getPlatformContext();
            CodegenStubVendorall testObj = new CodegenStubVendorall(context);
            testObj.testAdd();
        }
    
        public static PlatformSessionContext getPlatformContext() {
    
            String accesstoken = "rplce_your_application_token";
            String accessstokensecret = "rplce_your_application_token";
            String appToken = "rplce_your_application_token";
            String oauth_consumer_key = "rplce_your_application_token";
            String oauth_consumer_secret = "rplce_your_application_token";
            String realmID = "123456";
            String dataSource = "QBO";
    
            PlatformServiceType serviceType;
            if (dataSource.equalsIgnoreCase("QBO")) {
                serviceType = PlatformServiceType.QBO;
            } else {
                serviceType = PlatformServiceType.QBD;
            }
    
            final OAuthCredentials oauthcredentials = new OAuthCredentials(
                    oauth_consumer_key, oauth_consumer_secret, accesstoken,
                    accessstokensecret);
    
            final PlatformSessionContext context = new PlatformSessionContext(
                    oauthcredentials, appToken, serviceType, realmID);
    
            return context;
        }
    }
    

    您可以尝试使用 ApiExplorer 工具来验证您的 OAuth 令牌并检查创建供应商 API 端点。

    链接 - https://developer.intuit.com/apiexplorer?apiname=V2QBO

    请告诉我进展如何。

    谢谢

    【讨论】:

    • 看起来我的问题是由于使用“QBOVendorService”而不是“QBVendorService”。谢谢你的例子。现在我遇到了与“QBPurchaseOrderService”相同的问题,并且我没有看到与该版本不同的“QBO”版本。有什么想法吗?
    • QBO 不支持PurchaseOrder。参考文档 - developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/… 如果它回答了您的 2 个问题,那么请随时接受答案 :) 谢谢
    • 这是否意味着 IPP 开发套件不支持或根本不支持?
    • QBO 完全不支持。 Devkit 为 QBD 和 QBO API 提供了一个通用接口。由于 QBD 支持它,因此您在 devkit 中获得了 QBPurchaseOrder。 QBD 支持的实体链接 - developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/…
    • 非常感谢您提供的重要信息。最后一个问题。我看到在V3 api下,将来会支持采购订单。有什么方法可以判断这可能是什么时候?
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多