как получить заказы из компонента ordertools в atg или как протестировать apl orderlookup droplet

1

iam пытается упорядочить API-интерфейс dropupup, передав некоторые параметры. Я предполагаю, что обязательные параметры - это идентификаторы userId и organisationIds, которые я прошел, и кроме того, я также передал параметр "состояние". Все эти параметры передаются через запрос, а затем метод обслуживания кавычки.Но метод обслуживания ничего не возвращает. Моя цель - проверить, действительно ли эта капля извлекает ожидаемый набор ордеров или нет. Мы можем использовать капли-вызов, но я пробовал этот путь, но он не работал, возможно, я что-то пропустил. Пожалуйста, помогите мне! это мой код, когда я пытался использовать API OrderLookUp

DynamoHttpServletRequest request = ServletUtil.getCurrentRequest();

    mTestService.setCurrentRequest(request);
    if (request == null) {
        mTestService.vlogError("Request is null.");
        Assert.fail("Request is null ");
    }
    else
    {
        Object droplet = mTestService
                .getRequestScopedComponent("OrderLookupDroplet");

        OrderLookupDroplet=(OrderLookup) droplet;
        request.setParameter("state", "submitted");
        request.setParameter("organisationIds", organizationIds);
        request.setParameter("userId", userId);
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        DynamoHttpServletRequest dynRequest = (DynamoHttpServletRequest) request;
        TestingDynamoHttpServletRequest wrappedRequest = new TestingDynamoHttpServletRequest(
                dynRequest, buffer);
        TestingDynamoHttpServletResponse wrappedResponce = new TestingDynamoHttpServletResponse(
                dynRequest.getResponse());
         OrderLookupDroplet.service(wrappedRequest, wrappedResponce);
    }

вышеуказанный образец является лишь частью кода.

это код, когда я попытался использовать капельку invoker

DropletInvoker invoker = new DropletInvoker(mNucleus);
        invoker.getRequest().setParameter("state", "submitted");
      //  String [] siteIds = {"siteA", "siteB"};
      //  invoker.getRequest().setParameter("siteIds", Arrays.asList(siteIds));
        String [] organizationIds = {"OrgA", "OrgB"};
        invoker.getRequest().setParameter("organizationIds", organizationIds);
        String [] orderIds = {"orderautouser001OrgA" , "orderautouser001OrgB"};
        invokeDroplet(invoker, "autouser001", orderIds);
......

protected void invokeDroplet(DropletInvoker pInvoker, String pUserId, String[] pOrderIds) throws Exception
  {
    Map<String, Object> localParams = new HashMap();
    localParams.put("userId", pUserId);
    DropletResult result = pInvoker.invokeDroplet("/atg/commerce/order/OrderLookup", localParams);
    RenderedOutputParameter oparam = result.getRenderedOutputParameter("output", 0);

    assertNotNull("'output' oparam was not rendered", oparam);

    assertEquals("Check totalCount.", pOrderIds.length, oparam.getFrameParameter("totalCount"));

    List<Order> orders = (List<Order>)oparam.getFrameParameter("result");
    assertEquals("Check order array length.", pOrderIds.length, orders.size());
    for (int index = 0; index < pOrderIds.length; index++) {
      boolean found = false;
      for (Order order: orders) {
        if (pOrderIds[index].equals(order.getId())) {
          found = true;
          break;
        }
      }
      assertTrue("Expected orderId " + pOrderIds[index] + " not found in result array", found);
    }

в первом случае я не знаю, как получить заказы напрямую, используя orderlookup api.... и во втором случае, хотя я знаю, как его использовать, iam все еще не работает !! пожалуйста, помогите мне. спасибо заранее

Теги:
atg
atg-droplet
atg-dust

3 ответа

1

Спасибо за то, что вы дали свое мнение. Хорошие новости - мы можем вызывать капли из любого другого API

OrderLookup droplet = (OrderLookup) sNucleus.resolveName("/atg/commerce/order/OrderLookup");
        ServletTestUtils utils = new ServletTestUtils();
        mRequest = utils.createDynamoHttpServletRequestForSession(sNucleus, null, null);
        ServletUtil.setCurrentRequest(mRequest);
        mResponse = new DynamoHttpServletResponse();
        mRequest.setResponse(mResponse);
        mResponse.setRequest(mRequest);
        mResponse.setResponse(new GenericHttpServletResponse());
        mRequest.setParameter("userId", "publishing");

        droplet.setSearchByUserId(true);
        droplet.service(mRequest, mResponse);
        ArrayList<Order> orders = (ArrayList<Order>) mRequest.getObjectParameter("result");

здесь параметр "result" является выходным параметром, который задает эта капля. И userId я жестко закодирован как "публикация", которую я создал. Созданный мной класс serletTestUtilsIgnore, который не имеет большого отношения к теории капель здесь :)

1

Вы не должны использовать капельки в java-классах, они должны использоваться только внутри jsp-страниц. Документация OrderLookup с примером hot для использования на странице jsp приведена здесь.

Если вы хотите получить заказы или любые другие данные, хранящиеся в репозитории, вы должны использовать API репозитория с RQL (языком запросов репозитория). Пример, как получить данные из хранилища, вы можете найти здесь и RQL грамматики здесь.

  • 0
    Он предназначен для тестирования. Как разработчик может убедиться, что разработанная им капля ведет себя так, как ожидалось? Требование не приводит к получению данных здесь, я знаю, что есть другие способы сделать это с RQL. В вопросе это четко упомянуто. например, как проверить orderlookup droplet. Я тоже ответил на свой вопрос.
0

Я предполагаю из вашего примера кода и того факта, что вы упоминаете DropletInvoker, что вы пишете unit тест, и что это не функциональный код.

Если это функциональный код, вы действительно, действительно, не должны вызывать капли из другого компонента Nucleus. Капля существует только для использования на странице JSP. Если вам нужна функциональность капли в Java-коде, вам необходимо реорганизовать капельку в службу, содержащую основную логику, и капли, которая просто действует как фасад для службы, чтобы позволить ей вызываться со страницы.

В случае капли OrderLookup вам не нужно ничего реорганизовать. Сервис, который нужно использовать, должен быть OrderManager или OrderTools зависимости от того, что вам нужно. Обратите внимание: существует разница между объектами заказа и элементами репозитория заказа, и вы должны предпочесть использовать объекты заказа - поэтому используйте только репозиторий заказов, если вам действительно нужно.

  • 0
    Спасибо за предложение. Да, это давно, и в то время у меня было меньше знаний об ATG. Капли могут быть вызваны из любого места. Позвольте нам сказать, что я должен провести системное тестирование, и вы просто не можете использовать страницу jsp. Потому что это пользовательский интерфейс и разработчик сайта может реализовать это в любом случае ... Мы можем разрешить дроплет и установить несколько параметров reuest. Фактически OrderLookupDroplet просто нуждается в userId, остальные параметры необязательны. Это снова устанавливает выходные параметры в запрос. Так что один раз после того, как я вызову дроплет Метод .service () я также могу получить выходные параметры. вот пример кода

Ещё вопросы

Сообщество Overcoder
Наверх
Меню