【问题标题】:SAP Enterprise Service WorkspaceSAP 企业服务工作区
【发布时间】:2012-05-29 22:34:09
【问题描述】:

我正在尝试在 .Net/C# 中使用其中一些服务。某些服务可以很容易地使用,但与其他服务相比,我遇到了误导性错误

这是代码的一部分:

        input.AcademicProgramOfStudySelectionByName = new AcademicProgramOfStudyByNameQueryMessage_syncAcademicProgramOfStudySelectionByName();
        input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName.languageCode = "DE";

我在第二行收到错误“对象引用未设置为对象实例”。 但我已经在第一行创建了对象!

相同的代码可以在其他服务中使用!

【问题讨论】:

    标签: c# .net service sap enterprise


    【解决方案1】:

    你创建了对象 input.AcademicProgramOfStudySelectionByName,但您没有创建其成员 input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName。看起来,类AcademicProgramOfStudyByNameQueryMessage_syncAcademicProgramOfStudySelectionByName 的构造函数没有填充其成员AcademicProgramOfStudyName。因此,当您尝试将值分配给 AcademicProgramOfStudyName 的成员并且该实例是 NULL 时,您会遇到异常。

    示例代码:

        AcademicProgramOfStudyByNameQueryResponse_InClient client = 
            new AcademicProgramOfStudyByNameQueryResponse_InClient(); 
    
    
        client.ClientCredentials.UserName.UserName = "XX";
        client.ClientCredentials.UserName.Password = "YY";
    
        AcademicProgramOfStudyByNameQueryMessage_sync input =
            new AcademicProgramOfStudyByNameQueryMessage_sync();
    
    
        input.AcademicProgramOfStudySelectionByName = new AcademicProgramOfStudyByNameQueryMessage_syncAcademicProgramOfStudySelectionByName();
    
        // this is the member that currently is still NULL and has to be created:
        input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName = new <insert whatever class is needed here>
    
        // now this should work without throwing an exception
       input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName.languageCode = "DE";
    
        AcademicProgramOfStudyByNameResponseMessage_sync output = 
            new AcademicProgramOfStudyByNameResponseMessage_sync(); 
    
        output = client.AcademicProgramOfStudyByNameQueryResponse_In(input);
    

    【讨论】:

    • 感谢您的回答,但我想知道为什么我在此服务中没有收到相同的错误: input.CustomerSimpleSelectionByNameAndAddress = new CustomerSimpleByNameAndAddressQueryMessage_syncCustomerSimpleSelectionByNameAndAddress(); input.CustomerSimpleSelectionByNameAndAddress.CustomerAddressCityName = "ANYCiTY";
    • 没有看这些类的构造函数我不能说。课程从哪里来?第三方库、自动创建的服务代理类、自建类?
    • 它们是在我使用 C#(添加服务引用)使用服务时自动生成的,我以下面的示例为导向 sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/…
    • 当它们被自动创建时,您必须自己创建这些成员实例。我认为自动生成的代码不会为您做到这一点。
    • 对不起,但这是非常简单的基本 oop,我不知道该解释什么。你只是选错了班级。您需要创建一个声明为 AcademicProgramOfStudyName 类型的对象。 AcademicProgramOfStudyName 是其他班级的成员在这里根本不重要。所以看一下该成员的定义,创建适当的对象并完成它。
    【解决方案2】:

    真的很奇怪。看到这个比较: 在这段代码中我得到了错误

            AcademicProgramOfStudyByNameQueryResponse_InClient client = 
                new AcademicProgramOfStudyByNameQueryResponse_InClient(); 
    
    
            client.ClientCredentials.UserName.UserName = "XX";
            client.ClientCredentials.UserName.Password = "YY";
    
            AcademicProgramOfStudyByNameQueryMessage_sync input =
                new AcademicProgramOfStudyByNameQueryMessage_sync();
    
    
            input.AcademicProgramOfStudySelectionByName = new AcademicProgramOfStudyByNameQueryMessage_syncAcademicProgramOfStudySelectionByName();
            input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName.languageCode = "DE";
    
            AcademicProgramOfStudyByNameResponseMessage_sync output = 
                new AcademicProgramOfStudyByNameResponseMessage_sync(); 
    
            output = client.AcademicProgramOfStudyByNameQueryResponse_In(input);
    

    在这段代码中我没有!!

            CustomerSimpleByNameAndAddressQueryResponse_InClient client =
              new CustomerSimpleByNameAndAddressQueryResponse_InClient();
    
            client.ClientCredentials.UserName.UserName = "XX";
            client.ClientCredentials.UserName.Password = "YY";
    
            CustomerSimpleByNameAndAddressQueryMessage_sync input = new CustomerSimpleByNameAndAddressQueryMessage_sync();
    
            input.CustomerSimpleSelectionByNameAndAddress = new CustomerSimpleByNameAndAddressQueryMessage_syncCustomerSimpleSelectionByNameAndAddress();
            input.CustomerSimpleSelectionByNameAndAddress.CustomerAddressCityName = "Berlin";
    
            CustomerSimpleByNameAndAddressResponseMessage_sync output = new CustomerSimpleByNameAndAddressResponseMessage_sync();
    
            output = client.CustomerSimpleByNameAndAddressQueryResponse_In(input);
    

    【讨论】:

    • 是的,当然,仔细看看你在那里做什么。示例 1:input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName.languageCode 是另一个对象的成员,而在示例 2 中 input.CustomerSimpleSelectionByNameAndAddress.CustomerAddressCityName 是 CustomerSimpleSelectionByNameAndAddress 的简单字符串成员。如果在访问其成员之一之前创建对象 input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName,则示例 1 中的错误将消失。
    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多