Как найти количество каждого элемента из быстрых книг с помощью QBFC

Я импортирую данные об элементах из быстрых книг в свой собственный проект, используя QBFC.

используя код: 1 я могу найти, сколько предметов в быстрых книгах.

У меня есть требование найти количество каждого типа элемента из быстрых книг.

Но используя код: я не могу найти, сколько предметов в конкретных предметах (например: Serive)

Код: 1

IORItemRet itemRet = default(IORItemRet);
IORItemRetList itemRetList = default(IORItemRetList);
IResponse response = responseSet.ResponseList.GetAt(0);
if ((response.Detail != null))
{
    itemRetList = (IORItemRetList)response.Detail;
    if ((itemRetList != null))
    {
        int i = 0;
        for (int j = 0; j <= itemRetList.Count - 1; j++)
        {
        }
    }
}

Код: 2

IItemServiceRet itemSeriveRet = default(IItemServiceRet);
IItemServiceRetList itemServiceRetList = default(IItemServiceRetList);
IResponse response = responseSet.ResponseList.GetAt(0);
if ((response.Detail != null))
{
    itemServiceRetList = (IItemServiceRetList)response.Detail;  //Com object Error
    if ((itemServiceRetList  != null))
    {
        int i = 0;
        for (int j = 0; j <= itemServiceRetList.Count - 1; j++)
        {
        }
    }
}

//Ошибка COM-объекта

Невозможно привести COM-объект типа «System.__ComObject» к типу интерфейса «Interop.QBFC10.IItemServiceRetList». Эта операция завершилась неудачно, так как вызов QueryInterface компонента COM для интерфейса с IID "{C53D1081-9FE4-4569-9181-A9D7E0155907}" завершился сбоем из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) .

Позвольте мне теперь, как найти количество каждого элемента из быстрых книг


person Kavitha    schedule 25.02.2013    source источник
comment
Какой тип запроса вы отправляете? ItemQueryRq?   -  person Rich C    schedule 26.03.2013


Ответы (1)


В вашем коде кажется, что вы проверяете этот ответ. Деталь не равна нулю. Но проверяете ли вы также значение response.StatusCode и responseType? Если вы получаете сообщение об ошибке, возможно, вы получаете ответ, который может не реализовывать интерфейс IORItemRetList. См. приведенный ниже код из Экранного справочника.

IResponse response = responseList.GetAt(i);
//check the status code of the response, 0=ok, >0 is warning
if (response.StatusCode >= 0)
{
  //the request-specific response is in the details, make sure we have some
  if (response.Detail != null)
  {
    //make sure the response is the type we're expecting
    ENResponseType responseType = (ENResponseType)response.Type.GetValue();
    if (responseType == ENResponseType.rtItemQueryRs)
    {
      //upcast to more specific type here, this is safe because we checked with response.Type check above
      IORItemRetList OR = (IORItemRetList)response.Detail;
      WalkOR(OR);
    }
  }
}

Обратите внимание в комментариях к приведенному выше коду:

это безопасно, потому что мы проверили с помощью response.Type check выше

В Руководстве для программистов SDK (стр. 107) говорится:

... объект ответа, который является ответом на запрос, содержит объект списка Ret, который может содержать несколько объектов Ret. Объект ответа, не являющийся ответом на запрос, содержит только один объект Ret и нет списка Ret. Это различие имеет решающее значение, когда дело доходит до обработки данных ответа.

Как только вы настроите проверки интерфейса, ваш цикл for должен работать правильно.

person Rich C    schedule 25.03.2013