2013-04-19 2 views
0

Я использую WSO2 BPS and WSO2 DSS.
DSS имеет 2 services, как указано ниже:
(1) Возвращает список статусов и
(2) Вставляет запись в таблицу.Итерирующий ответ DSS в BPEL (WSO2 BPS)

Мне удалось вызвать обе службы DSS от BPEL Workflow. Но мне нужно добиться следующего.
Мой первый DSS вернет «Список статуса». Я должен повторить (используя 'forEach' or 'while' или ...) ответ и выбрать конкретный узел (StatusDescription) и использовать его для следующего вызова DSS. Мой первый ответ DSS ниже.

<Response xmlns="http://ws.wso2.org/dataservice"> 
    <Status> 
     <StatusId>1</StatusId> 
     <StatusDescription>Active</StatusDescription> 
    </Status> 
    <Status> 
     <StatusId>2</StatusId> 
     <StatusDescription>Inactive</StatusDescription> 
    </Status> 
</Response> 

Может кто-нибудь предложить учебник или фрагмент кода, который будет проходить через выше ответ DSS? то есть My bpel:finalCounterValue будет «2», так как в вышеупомянутом XML есть 2 «состояния».

Спасибо заранее.

+0

Нет причин для повторения операций BPEL. Просто используйте обычное выражение XPath в задании. Что-то вроде ' $ VariableName/* [child :: StatusId = 2]/StatusDescription' (опуская пространства имен) должно сделать трюк. – joergl

+0

Вы правы, joergl. Но вышеупомянутый ответ - это всего лишь образец. В реальности число статусов может отличаться (динамическое). Итак, я должен изучить другой вариант. Благодарю. –

ответ

1

Я нашел способ итерации узлов. Ниже приведен фрагмент кода.

<bpel:forEach parallel="no" counterName="Counter" name="ForEach"> 
      <bpel:startCounterValue> 
       <![CDATA[1]]> 
      </bpel:startCounterValue> 
      <bpel:finalCounterValue>     
       <![CDATA[count($GetStatusPLResponse.parameters/ns:Status)]]> 
      </bpel:finalCounterValue> 
      <bpel:scope> 
       <!-- Some activity goes here. Say Assign or Invoke or .... --> 
      </bpel:scope> 
     </bpel:forEach> 

count доступный метод под пространством имен xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" помогает нам найти количество узлов ('Status').
Метод count возвращает значение '2', и поэтому 'forEach' выполняет итерацию дважды.

Счастливого обучения.

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