Как получить заказы из компонента ordertools в atg или как проверить api orderlookup droplet
Я пытаюсь упорядочить API-интерфейс дроплета looklookup, передавая некоторые параметры. Я предполагаю, что обязательные параметры - это userId и organisationIds, которые я передал, и, кроме того, я также передал параметр "state". Все эти параметры передаются через запрос, а затем метод обслуживания. of droplet вызывается. Но сервисный метод ничего не возвращает. Моя цель состоит в том, чтобы проверить, получает ли эта капелька ожидаемый набор заказов или нет. Мы можем использовать invoker droplet, но я пробовал таким образом, но это не сработало, может быть, я что-то пропустил. Пожалуйста, помогите мне! это мой код, когда я пытался использовать 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);
}
Приведенный выше пример является только частью кода.
это код, когда я попытался с помощью капельного инвокера
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);
}
в первом случае я не знаю, как получить заказы, используя API Orderlookup напрямую, а во втором случае, хотя я знаю, как его использовать, я все еще не могу!! пожалуйста, помогите мне.. спасибо заранее
3 ответа
Вы не должны использовать капли в классах Java, они должны использоваться только внутри страниц JSP. Документация OrderLookup с примером, чтобы использовать его на странице JSP находится здесь.
Если вы хотите получать заказы или любые другие данные, хранящиеся в хранилище, вам следует использовать API хранилища с RQL (Repository Query Language). Пример получения данных из репозитория вы можете найти здесь, а грамматику RQL здесь.
Спасибо за ваше мнение. Хорошая новость в том, что мы можем вызывать капли из любого другого 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");
здесь "результат" - это выходной параметр, который устанавливает эта капля. И пользователь, который я жестко закодировал как "публикацию", которую я создал. Не обращайте внимания на созданный мной класс servletTestUtils, который не имеет большого отношения к теории капель здесь:)
Я предполагаю из вашего примера кода и тот факт, что вы упоминаете DropletInvoker, что вы пишете модульный тест, и что это не функциональный код.
Если это функциональный код, вам действительно не следует вызывать каплю из другого компонента Nucleus. Капля существует только для использования на странице JSP. Если вам нужна функциональность капли в Java-коде, вы должны преобразовать каплю в службу, которая содержит основную логику, и каплю, которая просто действует как фасад для службы, позволяя вызывать ее со страницы.
В случае с OrderLookup
смотри капля, тебе не нужно ничего переделывать. Сервис для использования должен быть OrderManager
или же OrderTools
в зависимости от того, что вам нужно. Обратите внимание, что между объектами Order и элементами репозитория Order есть разница, и вы должны предпочесть использовать объекты order - поэтому используйте только репозиторий Order напрямую, если это действительно необходимо.