3

以下は、UPS配送ラベルを生成するためのコードです。これは、UPS開発者キットで提供されている.netサンプルに基づいています。私の問題は、下の太字で強調表示されている行にあります。「System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。」というエラーがスローされます。

私が知っているのは、UPS APIがラベルへのリンクを返すようにする場合は、このLabelLinksIndicatorが必要であるということです。それ以外の場合は、出荷の詳細は返されますが、ラベルは返されません。UPSドキュメントの関連セクションは、私の質問の下部にあります。

このエラーを克服するために何をする必要がありますか?LabelLinksIndicatorに渡す必要のある値は、ドキュメントからはわかりません。1、true、および空の文字列を渡してみました。いずれの場合も同じエラー。エラーメッセージは、現在ではないオブジェクトをインスタンス化する必要があることを示しているようです。ただし、何をインスタンス化するかがわかりません。残念ながら、WebおよびUPS.comで入手できる情報はまばらです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Foo.Web.UPSWebReference;


namespace Foo.Web.Auth
{
    public partial class UPS : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["id"] != null)
            {
                try
                {
                    ShipService shpSvc = new ShipService();
                    ShipmentRequest shipmentRequest = new ShipmentRequest();
                    UPSSecurity upss = new UPSSecurity();
                    UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
                    upssSvcAccessToken.AccessLicenseNumber = "foo";
                    upss.ServiceAccessToken = upssSvcAccessToken;
                    UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
                    upssUsrNameToken.Username = "foo";
                    upssUsrNameToken.Password = "foo";
                    upss.UsernameToken = upssUsrNameToken;
                    shpSvc.UPSSecurityValue = upss;
                    RequestType request = new RequestType();
                    String[] requestOption = { "nonvalidate" };
                    request.RequestOption = requestOption;
                    shipmentRequest.Request = request;
                    ShipmentType shipment = new ShipmentType();
                    shipment.Description = "Ship webservice example";
                    ReturnServiceType rtn = new ReturnServiceType();
                    rtn.Code = "8";
                    rtn.Description = "Description";

                    ShipperType shipper = new ShipperType();
                    shipper.ShipperNumber = "foo";
                    PaymentInfoType paymentInfo = new PaymentInfoType();
                    ShipmentChargeType shpmentCharge = new ShipmentChargeType();
                    BillShipperType billShipper = new BillShipperType();
                    billShipper.AccountNumber = "foo";
                    shpmentCharge.BillShipper = billShipper;
                    shpmentCharge.Type = "01";
                    ShipmentChargeType[] shpmentChargeArray = { shpmentCharge };
                    paymentInfo.ShipmentCharge = shpmentChargeArray;
                    shipment.PaymentInformation = paymentInfo;
                    foo.Web.UPSWebReference.ShipAddressType shipperAddress = new foo.Web.UPSWebReference.ShipAddressType();
                    String[] addressLine = { "301 166th Street" };
                    shipperAddress.AddressLine = addressLine;
                    shipperAddress.City = "Jersey City";
                    shipperAddress.PostalCode = "07310";
                    shipperAddress.StateProvinceCode = "NJ";
                    shipperAddress.CountryCode = "US";
                    shipperAddress.AddressLine = addressLine;
                    shipper.Address = shipperAddress;
                    shipper.Name = "ABC Associates";
                    shipper.AttentionName = "ABC Associates";
                    ShipPhoneType shipperPhone = new ShipPhoneType();
                    shipperPhone.Number = "1234567890";
                    shipper.Phone = shipperPhone;
                    shipment.Shipper = shipper;
                    ShipFromType shipFrom = new ShipFromType();
                    foo.Web.UPSWebReference.ShipAddressType shipFromAddress = new foo.Web.UPSWebReference.ShipAddressType();
                    String[] shipFromAddressLine = { "100 82nd Street" };
                    shipFromAddress.AddressLine = addressLine;
                    shipFromAddress.City = "New York";
                    shipFromAddress.PostalCode = "10024";
                    shipFromAddress.StateProvinceCode = "NY";
                    shipFromAddress.CountryCode = "US";
                    shipFrom.Address = shipFromAddress;
                    shipFrom.AttentionName = "Mr.ABC";
                    shipFrom.Name = "ABC Associates";
                    shipment.ShipFrom = shipFrom;
                    ShipToType shipTo = new ShipToType();
                    ShipToAddressType shipToAddress = new ShipToAddressType();
                    String[] addressLine1 = { "Some Street" };
                    shipToAddress.AddressLine = addressLine1;
                    shipToAddress.City = "Roswell";
                    shipToAddress.PostalCode = "30076";
                    shipToAddress.StateProvinceCode = "GA";
                    shipToAddress.CountryCode = "US";
                    shipTo.Address = shipToAddress;
                    shipTo.Address.ResidentialAddressIndicator = "1"; //dan
                    shipTo.AttentionName = "DEF";
                    shipTo.Name = "DEF Associates";
                    ShipPhoneType shipToPhone = new ShipPhoneType();
                    shipToPhone.Number = "1234567890";
                    shipTo.Phone = shipToPhone;
                    shipment.ShipTo = shipTo;
                    ServiceType service = new ServiceType();
                    service.Code = "03"; 
                    service.Description = "Ground";
                    shipment.Service = service;
                    PackageType package = new PackageType();
                    package.Description = "Deliver to Warehouse";
                    PackageWeightType packageWeight = new PackageWeightType();
                    packageWeight.Weight = "10";
                    ShipUnitOfMeasurementType uom = new ShipUnitOfMeasurementType();
                    uom.Code = "LBS";
                    packageWeight.UnitOfMeasurement = uom;
                    package.PackageWeight = packageWeight;
                    PackagingType packType = new PackagingType();
                    packType.Code = "02";
                    package.Packaging = packType;

                    PackageType[] pkgArray = { package };
                    shipment.Package = pkgArray;
                    LabelSpecificationType labelSpec = new LabelSpecificationType();

                    LabelImageFormatType labelImageFormat = new LabelImageFormatType();
                    labelImageFormat.Code = "GIF";
                    labelSpec.LabelImageFormat = labelImageFormat;
                    string userAgent = Request.UserAgent; 
                    labelSpec.HTTPUserAgent = userAgent; 
                    shipmentRequest.LabelSpecification = labelSpec;

                    **shipmentRequest.Shipment.ShipmentServiceOptions.LabelDelivery.LabelLinksIndicator = "1";**

                    shipmentRequest.Shipment = shipment;


                    System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

                    ShipmentResponse shipmentResponse = shpSvc.ProcessShipment(shipmentRequest);



                    Response.Redirect(shipmentResponse.ShipmentResults.LabelURL.ToString());

ここに画像の説明を入力してください

4

3 に答える 3

4

私は問題が何であるかを理解しました。私は最初にインスタンスを新しくする必要がありました

ShipmentTypeShipmentServiceOptions shipServOpt = new ShipmentTypeServiceOptions();

LabelDeliveryType labelDel = new LabelDeliveryType();

次に、LabelLinksIndicator要素を設定します

labeldel.LabelLinksIndicator = "";

次に、オプションを出荷インスタンスに割り当てます

shipment.ShipmentServiceOptions = shipServOpt;

ShipmentServiceOptionsTypeはShipmentTypeServiceOptionsと同じではないことに注意してください。これはしばらく私をつまずかせました。

UPS様、これをお読みの場合は、ドキュメントを改善し、より完全なコード例のセットを提供することを検討してください。

于 2011-08-24T13:59:57.740 に答える
2

次の行まで何も割り当てていないため、shipmentRequest.Shipmentはnullのように見えます。したがって、shipmentRequest.Shipment.ANYTHINGを実行することはできません。それらを切り替えて、

shipmentRequest.Shipment = shipment;    
shipmentRequest.Shipment.ShipmentServiceOptions.LabelDelivery.LabelLinksIndicator = "1"; 
于 2011-08-22T21:08:04.870 に答える
2

<LabelLinksIndicator/>要素は、XMLの場合と同様に渡される必要があります。<LabelLinksIndicator>1</LabelLinksIndicator>サンプルでは、​​どちらが無効であるかを送信します。

于 2011-08-22T23:44:40.083 に答える