2012-05-23 3 views
2

Я пытаюсь использовать некоторые из этих сервисов в .Net/C#. Некоторые из Сервисов могут быть легко использованы, но с другими я получил ошибочной ошибкой.Рабочее пространство SAP Enterprise Service

это часть кода:

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

Я получаю на второй строке ошибка «Ссылка на объект не указывает на экземпляр объекта.» , но я создал объект в первой строке!

Тот же код работает в некоторых других сервисах!

ответ

0

вы создали объект 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); 
+0

спасибо за ответ, но я задаюсь вопросом, почему я не получаю ту же ошибку, например, в этой службе: input.CustomerSimpleSelectionByNameAndAddress = новый CustomerSimpleByNameAndAddressQueryMessage_syncCustomerSimpleSelectionByNameAndAddress(); input.CustomerSimpleSelectionByNameAndAddress.CustomerAddressCityName = "ANYCiTY"; – Rida

+0

, не глядя на конструктор этих классов, я не могу сказать. Откуда берутся классы? Сторонняя библиотека, автоматически создаваемые классы прокси-сервера, самосоздаваемые классы? –

+0

Они автоматически генерируются, когда я использую службу в C# (Добавить ссылку на службу), и я ориентирован на пример ниже http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/ library/uuid/905c28e4-38a9-2910-4db5-d39e4fcbf78b? QuickLink = index & overridelayout = true & 12309376286992 – Rida

0

это действительно странно. см это сравнение: В этом коде я получаю ошибку

 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); 
+0

да, конечно, поближе посмотрите, что вы там делаете. Пример 1: input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName.languageCode является членом другого объекта, тогда как в примере 2 input.CustomerSimpleSelectionByNameAndAddress.CustomerAddressCityName является простым членом строки CustomerSimpleSelectionByNameAndAddress. Если вы создадите объект input.AcademicProgramOfStudySelectionByName.AcademicProgramOfStudyName перед доступом к одному из его членов, ошибка в примере 1 исчезнет. –

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