代码之家  ›  专栏  ›  技术社区  ›  Michael Grassman

用于打印多个装运标签的联邦快递网络服务

  •  2
  • Michael Grassman  · 技术社区  · 15 年前

    当我只设置了一个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";
        ....
    }
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   Michael Grassman    14 年前

    找到了如何做到这一点。

    为了将多个装运标签放入一个pdf中,过程如下。

    1. 创建请求
    2. 创建一个新请求并为其分配主装运id。
    3. 增加了装运重量和尺寸
    4. 发布并获得回复
    5. 继续,直到生成所有装运(每个主装运id最多200个)
    6. 将联邦快递返回的所有pdf文件合并为一个pdf文件。
    7. 跳一支快乐的舞蹈。
        2
  •  0
  •   Jonesome Reinstate Monica    10 年前

    一个更简单的方法(尽管有成本)是Shiprush SDK。它可以让你构建一个单一的XML块,让ShipRush用fedex(或其他任何人)做所有有趣的事情。

    他们也支持他们的工具。

    推荐文章