如何在 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());
}
我是 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());
}