首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取对象未设置错误的VS2017 Web参数

获取对象未设置错误的VS2017 Web参数
EN

Stack Overflow用户
提问于 2020-09-22 17:16:20
回答 1查看 67关注 0票数 0

我在Visual中编写了一个Windows应用程序,使用C#作为我们生产工厂的订购系统。我正在尝试实现一个SAP服务,为仓库创建传输订单,以了解交付什么材料。

我使用VisualStudio2017的本机Add引用导入WSDL。我已经在SOAP中测试过web服务,它可以工作。

我试图添加所需的字段,quantity字段有一个单元代码,并与其一起使用。在肥皂里它看起来像这样。

代码语言:javascript
复制
<RequiredQuantity unitCode="PCE">10</RequiredQuantity>

在Visual中,我实例化了我的传输顺序和请求,并试图添加参数,但我始终将对象引用设置为对象的实例。

代码语言:javascript
复制
private void btnOrderPallet_Click_1(object sender, EventArgs e) //ops leader tab
        {
            if (Properties.Settings.Default.UseWebServices == "Yes")
            {
                try
                {
                    QOE_CreateTO.TransferOrderCreate_InClient transferOrder = new QOE_CreateTO.TransferOrderCreate_InClient("HTTP_Basic_soap12");
                    transferOrder.ClientCredentials.UserName.UserName = "blah blah";
                    transferOrder.ClientCredentials.UserName.Password = "blah blah 123";

                    QOE_CreateTO.TransferOrderCreateRequest toRequest = new QOE_CreateTO.TransferOrderCreateRequest();

                    //working
                    toRequest.WarehouseID = "98W";
                    toRequest.MaterialNumberID = "7516000796";
                    toRequest.PlantID = "982W";
                    toRequest.StorageLocationID = "ADPP";

                    //not working
                    toRequest.RequiredQuantity.unitCode = "PCE";
                    toRequest.RequiredQuantity.Value = 10;

                    //not working either
                    var qty = toRequest.RequiredQuantity.Value;
                    var uc = toRequest.RequiredQuantity.unitCode;
                    qty = 10;
                    uc = "PCE";
                    toRequest.RequiredQuantity.unitCode = uc;
                    toRequest.RequiredQuantity.Value = qty;

                    //not working either
                    var rQty = toRequest.RequiredQuantity;
                    rQty.Value = Convert.ToDecimal(10);
                    rQty.unitCode = "PCE";
                    toRequest.RequiredQuantity = rQty;

                    //working
                    toRequest.SourceStorageTypeID = "801";
                    toRequest.SourceStorageBinID = "02-01-01";
                    toRequest.DestinationStorageTypeID = "PSA";
                    toRequest.DestinationStorageBinID = "PSA_REMAN";
                    toRequest.UnloadingPointName = "Reman Line";
                    toRequest.MovementTypeCode = "919";
                    toRequest.AutoCreationIndicator = true;

                    transferOrder.CreateTransferOrder(toRequest);
                }
                catch (Exception ex)
                {
                    Log.Error(...);
                }
            }
            else
            {
                
            }
        }

由于@JHBonarius要求提供更多细节,下面是来自对象浏览器的get/setter。

代码语言:javascript
复制
public partial class RequiredQuantity : object, System.ComponentModel.INotifyPropertyChanged {
        
        private string unitCodeField;
        
        private decimal valueField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute(DataType="token")]
        public string unitCode {
            get {
                return this.unitCodeField;
            }
            set {
                this.unitCodeField = value;
                this.RaisePropertyChanged("unitCode");
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlTextAttribute()]
        public decimal Value {
            get {
                return this.valueField;
            }
            set {
                this.valueField = value;
                this.RaisePropertyChanged("Value");
            }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if ((propertyChanged != null)) {
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }
    }

并来自公共部分班级:

代码语言:javascript
复制
        /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
    public RequiredQuantity RequiredQuantity {
        get {
            return this.requiredQuantityField;
        }
        set {
            this.requiredQuantityField = value;
            this.RaisePropertyChanged("RequiredQuantity");
        }
    }

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-22 20:53:54

看起来WSDL创建已经为您要设置的属性创建了一个“对象”。

代码语言:javascript
复制
public partial class RequiredQuantity : object

这似乎表明,在将该对象赋值给它包含的属性之前,您需要实例化该对象。

尝试:

代码语言:javascript
复制
//set object first
toRequest.RequiredQuantity = new RequiredQuantity();
toRequest.RequiredQuantity.unitCode = "PCE";
toRequest.RequiredQuantity.Value = 10;

或者,如果它不能解析新的引用,可以使用内置的工具来跟踪对象下的名称空间。这样,您就可以设置属性。正在发生的情况是,您似乎正在尝试设置未实例对象的子属性,因此出现了"object not set error“。

其他的可以工作,因为它们是简单的字符串,不包含子对象,因此WSDL创建者可以使它们成为简单的基类型。这个更复杂,因此需要在赋值之前创建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64014653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档