gpt4 book ai didi

c# - Web 服务一次只让我获得 1000 行,但总数超过 30000

转载 作者:太空狗 更新时间:2023-10-30 00:57:48 24 4
gpt4 key购买 nike

我正在使用 Netsuite 提供的一些网络服务 https://system.netsuite.com/help/helpcenter/en_US/Output/Help/SuiteFlex/WebServices/STP_searchMore.html#1087957

它一次只能获取 1000 行,然后我需要对下一组 1000 行执行第二次搜索,依此类推。有一些示例代码,但它只返回第二组行,我不确定如何获得第三、第四等。

到目前为止我的代码是:

private void getAllCustomers()
{
// Instantiate a search object for customers.
CustomerSearch custSearch = new CustomerSearch();
CustomerSearchBasic custSearchBasic = new CustomerSearchBasic();


// Search the customer status which is a list field (16,13,15)
String statusKeysValue = "16,13,15";
SearchMultiSelectField status = null;
if (statusKeysValue != null && !statusKeysValue.Trim().Equals(""))
{
status = new SearchMultiSelectField();
status.@operator = SearchMultiSelectFieldOperator.anyOf;
status.operatorSpecified = true;
string[] nskeys = statusKeysValue.Split(new Char[] { ',' });

RecordRef[] recordRefs = new RecordRef[statusKeysValue.Length];
for (int i = 0; i < nskeys.Length; i++)
{
RecordRef recordRef = new RecordRef();
recordRef.internalId = nskeys[i];
recordRefs[i] = recordRef;
}
status.searchValue = recordRefs;
custSearchBasic.entityStatus = status;
}

custSearch.basic = custSearchBasic;

// Invoke search() web services operation
SearchResult response = _service.search(custSearch);

// Process response
if (response.status.isSuccess)
{
// Process the records returned in the response
// Here I get the first 1000 records
processGetAllCustomersResponse(response);

// Since pagination controls what is returned, check to see
// if there are anymore pages to retrieve.

SearchResult seachMoreResult = searchMore(response);

if (seachMoreResult != null)
{
// Process response
if (seachMoreResult.status.isSuccess)
{
// Here I get the next 1000 records
processGetAllCustomersResponse(seachMoreResult);

// My problem now is to get the third set of 1000 customers, then the fourth and so on till I got all 34500 something
}
else
{

}

}
}
else
{

}
}

private SearchResult searchMore(SearchResult response)
{
// Keep getting pages until there are no more pages to get
while (response.totalRecords > (response.pageSize * response.pageIndex))
{
return _service.searchMore(response.pageIndex + 1);
}

return null;
}

在 processGetAllCustomersResponse 中,我只是将行插入另一个工作正常的数据库(除了没有获得我想要的所有行)。

最佳答案

我编写了这个替代 NetSuite 提供的示例的方法。此示例根据创建日期检索 TimeBill。

    /// <summary>
/// Return the list of time bills whose last modified date is within
/// the indicated date range.
/// </summary>
/// <param name="from">Required from date</param>
/// <param name="to">Optional to date</param>
/// <returns>List of time bills</returns>
public IEnumerable<TimeBill> GetTimeBills(DateTime from, DateTime to)
{
_log.Debug(String.Format("Enter TimeBill(DateTime from='{0}', DateTime to='{1}')", from, to));

// Build search criteria.
TimeBillSearch search = new TimeBillSearch();
TimeBillSearchBasic searchBasic = new TimeBillSearchBasic();
SearchDateField searchDateField = new SearchDateField();
searchDateField.@operator = SearchDateFieldOperator.within;
searchDateField.operatorSpecified = true;
searchDateField.searchValue = from;
searchDateField.searchValueSpecified = true;
searchDateField.searchValue2 = to;
searchDateField.searchValue2Specified = true;
searchBasic.dateCreated = searchDateField;
search.basic = searchBasic;

return this.Get<TimeBill>(search);
}

/// <summary>
/// Perform a paged search and convert the returned record to the indicated type.
/// </summary>
private IEnumerable<T> Get<T>(SearchRecord searchRecord)
{
_log.Debug("Enter Get<T>(SearchRecord searchRecord)");

// This is returned.
List<T> list = new List<T>();

// The suitetalk service return this.
SearchResult result = null;

using (ISuiteTalkService service = SuiteTalkFactory.Get<SuiteTalkService>())
{
do
{
// .search returns the first page of data.
if (result == null)
{
result = service.search(searchRecord);
}
else // .searchMore returns the next page(s) of data.
{
result = service.searchMoreWithId(result.searchId, result.pageIndex + 1);
}

if (result.status.isSuccess)
{
foreach (Record record in result.recordList)
{
if (record is T)
{
list.Add((T)Convert.ChangeType(record, typeof(T)));
}
}
}
}
while (result.pageIndex < result.totalPages);
}
return list;
}

关于c# - Web 服务一次只让我获得 1000 行,但总数超过 30000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4310284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com