public async Task <IEnumerable <string> > GetFilteredSkusAsync(ItemsFilter filter, Mark mark = null) { if (mark.IsBlank()) { mark = Mark.CreateNew(); } try { ChannelAdvisorLogger.LogStarted(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo(), methodParameters: filter.ToJson())); filter.Criteria.PageSize = 100; filter.Criteria.PageNumber = 0; var skus = new List <string>(); while (true) { filter.Criteria.PageNumber += 1; var itemResponse = await AP.CreateQueryAsync(ExtensionsInternal.CreateMethodCallInfo(this.AdditionalLogInfo)).Get(async() => { ChannelAdvisorLogger.LogTraceRetryStarted(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo(), methodParameters: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndResultForRetry) ? null : filter.ToJson())); var getFilteredSkuListResponse = await this._client.GetFilteredSkuListAsync (this._credentials, this.AccountId, filter.Criteria, filter.SortField, filter.SortDirection).ConfigureAwait(false); ChannelAdvisorLogger.LogTraceRetryEnd(this.CreateMethodCallInfo(mark: mark, methodResult: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndResultForRetry) ? null : getFilteredSkuListResponse.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndResultForRetry) ? null : filter.ToJson())); return(getFilteredSkuListResponse); }).ConfigureAwait(false); ChannelAdvisorLogger.LogTrace(this.CreateMethodCallInfo(mark: mark, methodResult: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndReturnsForTrace) ? null : itemResponse.ToJson(), additionalInfo: this.AdditionalLogInfo())); if (!this.IsRequestSuccessful(itemResponse.GetFilteredSkuListResult)) { continue; } var pageSkus = itemResponse.GetFilteredSkuListResult.ResultData; if (pageSkus == null) { ChannelAdvisorLogger.LogEnd(this.CreateMethodCallInfo(mark: mark, methodResult: skus.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: filter.ToJson())); return(skus); } skus.AddRange(pageSkus); if (pageSkus.Length == 0 || pageSkus.Length < filter.Criteria.PageSize) { ChannelAdvisorLogger.LogEnd(this.CreateMethodCallInfo(mark: mark, methodResult: skus.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: filter.ToJson())); return(skus); } } } catch (Exception exception) { var channelAdvisorException = new ChannelAdvisorException(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo()), exception); ChannelAdvisorLogger.LogTraceException(channelAdvisorException); throw channelAdvisorException; } }
/// <summary> /// Determines whether request was successful or not. /// </summary> /// <param name="status">Result status</param> /// <param name="message">Result message</param> /// <param name="messageCode">Result message code</param> /// <param name="logError">Need to log error message</param> /// <returns> /// <c>true</c> if request was successful; otherwise, <c>false</c>. /// </returns> private bool IsRequestSuccessfulCommon(ResultStatus status, string message, int messageCode, bool logError = true) { var isRequestSuccessful = status == ResultStatus.Success && messageCode == 0; if (!isRequestSuccessful && logError) { ChannelAdvisorLogger.LogTrace(string.Format("CA Api Request for '{0}' failed with message: {1}", this.AccountId, message)); } return(isRequestSuccessful); }
private void CheckFulfillmentStatus <T>(List <T> orders, Mark mark = null) where T : OrderResponseItem { var refundedOrderIds = GetRefundedOrderIds(orders); if (refundedOrderIds.Count == 0) { return; } int pageSize; if (!this._pageSizes.TryGetValue("High", out pageSize)) { pageSize = 50; } var cancelledOrderIds = new List <int>(); var ordersParts = ItemsService.ToChunks(refundedOrderIds, pageSize); ChannelAdvisorLogger.LogStarted(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo(), methodParameters: refundedOrderIds.ToJson())); foreach (var part in ordersParts) { var ordersFulfillment = AP.CreateQuery(ExtensionsInternal.CreateMethodCallInfo(this.AdditionalLogInfo)).Get(() => { var results = this._fulfillmentServiceClient.GetOrderFulfillmentDetailList(this._fulfillmentServiceCredentials, this.AccountId, part.ToArray(), null); CheckCaSuccess(results); var resultData = results.ResultData ?? new FulfillmentService.OrderFulfillmentResponse[0]; return(resultData); }); ChannelAdvisorLogger.LogTrace(this.CreateMethodCallInfo(mark: mark, methodResult: ordersFulfillment.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: part.ToJson())); var cancelledOrderIdsPart = ordersFulfillment.Where(o => o.FulfillmentList.All(fulfillment => fulfillment.FulfillmentStatus == "Canceled")).Select(o => o.OrderID); cancelledOrderIds.AddRange(cancelledOrderIdsPart); } ChannelAdvisorLogger.LogEnd(this.CreateMethodCallInfo(mark: mark, methodResult: cancelledOrderIds.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: refundedOrderIds.ToJson())); CancelOrders(orders, cancelledOrderIds); }
private async Task CheckFulfillmentStatusAsync <T>(List <T> orders, Mark mark = null) where T : OrderResponseItem { var refundedOrderIds = GetRefundedOrderIds(orders); if (refundedOrderIds.Count == 0) { return; } int pageSize; if (!this._pageSizes.TryGetValue("High", out pageSize)) { pageSize = 50; } var ordersParts = ItemsService.ToChunks(refundedOrderIds, pageSize); ChannelAdvisorLogger.LogStarted(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo(), methodParameters: refundedOrderIds.ToJson())); var cancelledOrderIds = (await ordersParts.ProcessInBatchAsync(3, async part => { var ordersFulfillment = await AP.CreateQueryAsync(ExtensionsInternal.CreateMethodCallInfo(this.AdditionalLogInfo)).Get(async() => { var results = await this._fulfillmentServiceClient.GetOrderFulfillmentDetailListAsync(this._fulfillmentServiceCredentials, this.AccountId, part.ToArray(), null).ConfigureAwait(false); CheckCaSuccess(results.GetOrderFulfillmentDetailListResult); var resultData = results.GetOrderFulfillmentDetailListResult.ResultData ?? new FulfillmentService.OrderFulfillmentResponse[0]; return(resultData); }).ConfigureAwait(false); ChannelAdvisorLogger.LogTrace(this.CreateMethodCallInfo(mark: mark, methodResult: ordersFulfillment.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: part.ToJson())); return(ordersFulfillment.Where(o => o.FulfillmentList.All(fulfillment => fulfillment.FulfillmentStatus == "Canceled")).Select(o => o.OrderID)); }).ConfigureAwait(false)).SelectMany(x => x).ToArray(); ChannelAdvisorLogger.LogEnd(this.CreateMethodCallInfo(mark: mark, methodResult: cancelledOrderIds.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: refundedOrderIds.ToJson())); CancelOrders(orders, cancelledOrderIds); }
private void CheckCaSuccess(APIResultOfArrayOfShipmentResponse result) { if (result.Status != ResultStatus.Success) { throw new ChannelAdvisorException(result.MessageCode, result.Message); } ChannelAdvisorException exceptionToThrow = null; foreach (var shipmentResponse in result.ResultData) { if (!shipmentResponse.Success) { ChannelAdvisorLogger.LogTrace(string.Format("Error encountered while marking order shipped: {0}", shipmentResponse.Message)); if (exceptionToThrow == null) { exceptionToThrow = new ChannelAdvisorException(shipmentResponse.Message); } } } if (exceptionToThrow != null) { throw exceptionToThrow; } }
public IEnumerable <string> GetFilteredSkus(ItemsFilter filter, Mark mark = null) { if (mark.IsBlank()) { mark = Mark.CreateNew(); } try { ChannelAdvisorLogger.LogStarted(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo(), methodParameters: filter.ToJson())); filter.Criteria.PageSize = 100; filter.Criteria.PageNumber = 0; filter.DetailLevel.IncludeClassificationInfo = true; filter.DetailLevel.IncludePriceInfo = true; filter.DetailLevel.IncludeQuantityInfo = true; var filteredSkus = new List <string>(); while (true) { filter.Criteria.PageNumber += 1; var itemResponse = AP.CreateQuery(ExtensionsInternal.CreateMethodCallInfo(this.AdditionalLogInfo)).Get( () => { ChannelAdvisorLogger.LogTraceRetryStarted(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo(), methodParameters: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndResultForRetry) ? null : filter.ToJson())); var apiResultOfArrayOfString = this._client.GetFilteredSkuList ( this._credentials, this.AccountId, filter.Criteria, filter.SortField, filter.SortDirection); ChannelAdvisorLogger.LogTraceRetryEnd(this.CreateMethodCallInfo(mark: mark, methodResult: apiResultOfArrayOfString.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndResultForRetry) ? null : filter.ToJson())); return(apiResultOfArrayOfString); }); ChannelAdvisorLogger.LogTrace(this.CreateMethodCallInfo(mark: mark, methodResult: !this.LogDetailsEnum.HasFlag(LogDetailsEnum.LogParametersAndReturnsForTrace) ? null : itemResponse.ToJson(), additionalInfo: this.AdditionalLogInfo())); if (!this.IsRequestSuccessful(itemResponse)) { filteredSkus.Add(null); continue; } var items = itemResponse.ResultData; if (items == null) { ChannelAdvisorLogger.LogEnd(this.CreateMethodCallInfo(mark: mark, methodResult: filteredSkus.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: filter.ToJson())); return(filteredSkus); } filteredSkus.AddRange(items); if (items.Length == 0 || items.Length < filter.Criteria.PageSize) { ChannelAdvisorLogger.LogEnd(this.CreateMethodCallInfo(mark: mark, methodResult: filteredSkus.ToJson(), additionalInfo: this.AdditionalLogInfo(), methodParameters: filter.ToJson())); return(filteredSkus); } } } catch (Exception exception) { var channelAdvisorException = new ChannelAdvisorException(this.CreateMethodCallInfo(mark: mark, additionalInfo: this.AdditionalLogInfo()), exception); ChannelAdvisorLogger.LogTraceException(channelAdvisorException); throw channelAdvisorException; } }
public async Task DoDelayUnexpectedAsync(TimeSpan time, int attempt) { ChannelAdvisorLogger.LogTrace(string.Format(@"Wait by reason of error 1 (Unexpected) {0} minute(s). Attempt: {1}", time.Minutes, attempt)); await Task.Delay(time).ConfigureAwait(false); }