2010-06-04 5 views
2

Я пытаюсь подключиться к FedEx, отправляющему webservice v8.FedEx Webservice для печати Несколько ярлыков доставки

Все работает нормально, когда у меня есть только один набор RequestedPackageLineItems. Когда я добавляю два элемента, я получаю следующую ошибку.

«Недопустимый номер пакета или неверный порядковый номер пакета».

Мой код выглядит следующим образом

ProcessShipmentRequest request = CreatePendingShipmentRequest(); 
ShipService service = new ShipService(); 
ProcessShipmentReply reply = service.processShipment(request); 
... 

private static ProcessShipmentRequest CreatePendingShipmentRequest() 
{ 
    ProcessShipmentRequest request = new ProcessShipmentRequest(); 

    request.WebAuthenticationDetail = new WebAuthenticationDetail(); 
    request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential(); 
    request.WebAuthenticationDetail.UserCredential.Key = "XXX"; 
    request.WebAuthenticationDetail.UserCredential.Password = "XXX";    
    request.ClientDetail = new ClientDetail(); 
    request.ClientDetail.AccountNumber = "XXX"; 
    request.ClientDetail.MeterNumber = "XXX"; 

    request.TransactionDetail = new TransactionDetail(); 
    request.TransactionDetail.CustomerTransactionId = "*** Ground Domestic Shipping Request v8 using C# ***"; 
    request.Version = new VersionId(); 

    //Inside this method I set request.RequestedShipment.PackageCount = "2"; 
    SetShipmentDetails(request); 
    SetPackageLineItems(request); 

    return request; 
} 

private static void SetPackageLineItems(ProcessShipmentRequest request) 
{     
    request.RequestedShipment.RequestedPackageLineItems = new RequestedPackageLineItem[2]; 
    request.RequestedShipment.RequestedPackageLineItems[0] = new RequestedPackageLineItem(); 
    request.RequestedShipment.RequestedPackageLineItems[0].SequenceNumber = "1"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Weight = new Weight(); 
    request.RequestedShipment.RequestedPackageLineItems[0].Weight.Value = 50.0M; 
    request.RequestedShipment.RequestedPackageLineItems[0].Weight.Units = WeightUnits.LB; 
    request.RequestedShipment.RequestedPackageLineItems[0].ItemDescription = "Item"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions = new Dimensions(); 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Length = "108"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Width = "5"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Height = "5"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Units = LinearUnits.IN; 

    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences = new CustomerReference[3]; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0] = new CustomerReference(); 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0].CustomerReferenceType = CustomerReferenceType.CUSTOMER_REFERENCE; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0].Value = "[LOT NUMBER]"; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[1] = new CustomerReference(); 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[1].CustomerReferenceType = CustomerReferenceType.INVOICE_NUMBER; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[1].Value = "45646"; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[2] = new CustomerReference(); 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[2].CustomerReferenceType = CustomerReferenceType.P_O_NUMBER; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[2].Value = "456446"; 

    request.RequestedShipment.RequestedPackageLineItems[1] = new RequestedPackageLineItem(); 
    request.RequestedShipment.RequestedPackageLineItems[1].SequenceNumber = "2"; 
    request.RequestedShipment.RequestedPackageLineItems[1].Weight = new Weight(); 
    request.RequestedShipment.RequestedPackageLineItems[1].Weight.Value = 50.0M; 
    request.RequestedShipment.RequestedPackageLineItems[1].Weight.Units = WeightUnits.LB; 
    request.RequestedShipment.RequestedPackageLineItems[1].ItemDescription = "Item"; 
    .... 
} 

ответ

3

Найдено, как это сделать.

Чтобы получить несколько меток доставки в один PDF-файл, процесс следующий.

  1. Создание запроса
  2. Заполните Информация о доставке
  3. сообщение и получить ответ.
  4. Сохраните этот повтор и массив байтов и MasterShippingID
  5. Создайте новый запрос и назначьте ему главный идентификатор доставки.
  6. Добавлен вес груза и размеры
  7. сообщение и получить ответ
  8. Сохранить массив байтов с другой
  9. Продолжайте, пока все поставки не генерируются (макс 200 в мастер доставки ид)
  10. Объединить все PDFs вернулся из FedEx в один pdf.
  11. Сделайте счастливый танец.
+0

Michael, Я вижу ваш ответ. Разве это не становится липким, когда вы делаете много пакетов в одном отправлении? Я имею в виду, если у вас есть 10 пакетов, значит ли это, что вам нужно 10 вызовов веб-службы? Разве нет способа объединить все это в один или два вызова? Спасибо – 2010-07-16 19:59:31

+0

Если вы можете найти способ, который был бы потрясающим, код из Fedex требует нескольких вызовов. Мне это кажется странным. Я отмечаю ваш ответ, потому что это будет лучший способ справиться с этим, на мой взгляд. –

+2

Если у вас 10 пакетов, вам нужно 10 вызовов веб-службы, да. Я знаю, что API, похоже, имеет место для нескольких позиций, но он просто не работает, и документация советует вам делать отдельные запросы (передавая главный идентификатор для запросов 2-10). Это действительно так глупо, но я не вижу, чтобы они меняли его в ближайшее время. Единственные улучшения, которые они, по-видимому, делают, - это случайное перераспределение и переименование элементов в схеме каждые несколько месяцев. (Просто взгляните на V9 и всхлип.) –

1

Простой подход, (хотя есть стоимость) - это Shiprush SDK. Он позволяет вам создать единый блок XML и позволить ShipRush делать все смешные вещи с помощью Fedex (или кто бы то ни было).

Они также поддерживают свой инструмент.

Смежные вопросы