如何在 Netsuite ERP 中使用 SOAP Web 服务获取客户列表?

How to get client list using SOAP Web Services in Netsuite ERP?

我是 SOAP Web 服务和 Netsuite ERP 的新手,我正在尝试在我的公司生成一份报告,我需要使用 Netsuite ERP 中可用的数据获取所有客户及其发票。我遵循了他们提供的 Java 和 Axis 教程以及他们的 ERP 示例应用程序,我在 Eclipse 中成功创建了一个 Java 项目,该项目使用 netsuite 2015-2 的 WSDL 并编译所需的 类 到 运行 示例应用程序。因此,我按照在他们的 CRM 示例应用程序中找到的一个示例来获取客户的信息,但唯一的问题是他们的示例方法需要您介绍客户的 ID。这是示例代码:

 public int getCustomerList() throws RemoteException,
                ExceededUsageLimitFault, UnexpectedErrorFault, InvalidSessionFault,
                ExceededRecordCountFault, UnsupportedEncodingException {
            // This operation requires a valid session
            this.login(true);

            // Prompt for list of internalIds and put in an array
            _console
                    .write("\ninternalIds for records to retrieved (separated by commas): ");
            String reqKeys = _console.readLn();
            String[] internalIds = reqKeys.split(",");

            return getCustomerList(internalIds, false);
        }


private int getCustomerList(String[] internalIds, boolean isExternal)
            throws RemoteException, ExceededUsageLimitFault,
            UnexpectedErrorFault, InvalidSessionFault, ExceededRecordCountFault {
        // Build an array of RecordRef objects and invoke the getList()
        // operation to retrieve these records
        RecordRef[] recordRefs = new RecordRef[internalIds.length];
        for (int i = 0; i < internalIds.length; i++) {
            RecordRef recordRef = new RecordRef();
            recordRef.setInternalId(internalIds[i]);
            recordRefs[i] = recordRef;
            recordRefs[i].setType(RecordType.customer);
        }

        // Invoke getList() operation
        ReadResponseList getResponseList = _port.getList(recordRefs);

        // Process response from get() operation
        if (!isExternal)
            _console.info("\nRecords returned from getList() operation: \n");

        int numRecords = 0;
        ReadResponse[] getResponses = getResponseList.getReadResponse();
        for (int i = 0; i < getResponses.length; i++) {
            _console.info("\n  Record[" + i + "]: ");

            if (!getResponses[i].getStatus().isIsSuccess()) {
                _console.errorForRecord(getStatusDetails(getResponses[i]
                        .getStatus()));
            } else {
                numRecords++;
                Customer customer = (Customer) getResponses[i].getRecord();
                _console.info("    internalId="
                        + customer.getInternalId()
                        + "\n    entityId="
                        + customer.getEntityId()
                        + (customer.getCompanyName() == null ? ""
                                : ("\n    companyName=" + customer
                                        .getCompanyName()))
                        + (customer.getEntityStatus() == null ? ""
                                : ("\n    status=" + customer.getEntityStatus().getName()))
                        + (customer.getEmail() == null ? ""
                                : ("\n    email=" + customer.getEmail()))
                        + (customer.getPhone() == null ? ""
                                : ("\n    phone=" + customer.getPhone()))
                        + "\n    isInactive="
                        + customer.getIsInactive()
                        + (customer.getDateCreated() != null ? ""
                                : ("\n    dateCreated=" + customer
                                        .getDateCreated().toString())));
            }
        }

        return numRecords;
    }

如您所见,此方法需要每个客户的内部 ID,我发现这没有用,因为我有很多客户,我不想传递每个客户的 ID。我阅读了他们的 API 文档(我发现它很难导航并且有点无用)并且我发现了一个名为 getAll() 的 Web 服务,它提供了给定 getAllRecord 对象的所有记录,该对象需要一个 getAllRecordType 对象。但是getAllRecordType对象不支持Customer实体,所以我无法通过这种方式获取ERP上的所有客户。

有没有一种简单的方法来获取我的 Netsuite ERP 中的所有客户(也许使用其他东西而不是他们提供的 SOAP Web 服务?我对这种情况感到绝望,因为我了解 Netsuite 的 Web 服务如何 API真是麻烦

谢谢!

您通常会使用搜索 select 客户列表。对于大客户,您通常不会定期获得所有客户。如果您正在尝试获取发票,您可能会发现通过搜索获取​​发票更为实用。

您写了"in your company"。您是否正在尝试编写某种应用程序?如果这是一个内部项目(即使不是),您可能会发现使用 SuiteScripts 在您的时间和沮丧程度方面更有效率。

我在 getCustomerList 方法中使用了以下代码:

        CustomerSearch customerSrch = new CustomerSearch();
        SearchResult searchResult = _port.search(customerSrch);
        System.out.println(searchResult.getTotalRecords());
        RecordList rl = searchResult.getRecordList();
        for (int i = 0; i <searchResult.getTotalRecords()-1; i++) {
            Record r = rl.getRecord(i);
            System.out.println("Customer # " + i);
            Customer testcust = (Customer)r;
            System.out.println("First Name: " + testcust.getFirstName());
        }