Как сопоставить список документов в WEBMethods?

Я хочу сопоставить массив, который в WebMethods является списком документов. Я думал, что вы могли бы просто отобразить эту переменную без отображения всех дочерних элементов. Я сделал это, и в PassArea ничего не отображается. (PassArea — это массив данных, который впоследствии отправляется в программу мэйнфрейма.)

     A           -->         B
       Field1                 F1
       Field2                 F2
       field3                 F3

Документ — это A, а входной документ в программу Natural — это B. --> — это ссылка, которая соединяет их вместе.

У меня нет изображения, которое я мог бы показать, потому что оно раскрыло бы некоторую информацию о компании.


person Community    schedule 27.08.2014    source источник
comment
Я позабочусь о размещении снимка экрана. документ списка в другой документ списка. Но я обнаружил, что вы не можете просто сопоставить каждое поле, которое у вас есть, со списком документов, который затем сопоставляет все экземпляры в полях.   -  person    schedule 29.08.2014


Ответы (2)


Если имена полей списка документов «A» отличаются от имен полей списка документов «B», то нет, вы не можете сопоставить список документов «A» со списком документов «B». WebMethods не знает, какое поле из A соответствует какому полю из "B".

Вам нужно будет сделать следующее:

  1. LOOP по списку документов "A"
  2. Сопоставьте каждое поле «A» с общим документом, содержащим те же поля, что и список документов «B».
  3. Добавить общий документ в список документов "B"
  4. Отбросьте общий документ.

Скриншот шага 2

Шаг №2 скриншот

Скриншот шага 3

Снимок экрана шага 3

person TchiYuan    schedule 02.09.2014

Существует множество способов сопоставления массивов документов. Но прежде чем создать его, рассмотрите следующие записи:

  1. Techcommunity SoftwareAG — влияние на производительность приложения appendToDocumentList
  2. quest4apps.com — причина, по которой следует избегать appendToDocumentList

Согласно подсказке #2, существует 6 способов ранжирования следующим образом: от самого быстрого к самому медленному (но я приведу пример первых трех, потому что последние три явно медленные, которых следует избегать):

1. Цикл Java: цикл, выполняемый через службу Java.

  • Самый простой способ создать java-сервис — сначала сопоставить ввод-вывод. ввод-вывод-документ
  • Щелкните правой кнопкой мыши и нажимайте Создать код, пока не появится диалоговое окно Создать код для реализации службы Выберите параметр Для реализации этой службы   Сгенерированный сервис И сервис создан
  • Просто переставьте код в это:
public static final void mappingDocuments(IData pipeline) throws ServiceException {

    // pipeline
    IDataCursor pipelineCursor = pipeline.getCursor();
    
    // Instantiate input A
    IData[] A = IDataUtil.getIDataArray(pipelineCursor, "A");
    
    // Initiate output B
    IData[] B = new IData[A.length];
    
    if (A != null)
    {
        for (int i = 0; i < A.length; i++)
        {
            // Populate the Field in doc A
            IDataCursor ACursor = A[i].getCursor();
            String Field1 = IDataUtil.getString(ACursor, "Field1");
            String Field2 = IDataUtil.getString(ACursor, "Field2");
            String Field3 = IDataUtil.getString(ACursor, "Field3");
            ACursor.destroy();
            
            // Create IData[i] and cursors finally put all Fields into B[i] variable output
            B[i] = IDataFactory.create();
            IDataCursor BCursor = B[i].getCursor();
            IDataUtil.put(BCursor, "F1", Field1);
            IDataUtil.put(BCursor, "F2", Field2);
            IDataUtil.put(BCursor, "F3", Field3);
            BCursor.destroy();
    
            // OR JUST USE CLONE BELOW IF YOU DON'T HAVE ANY MODIFICATION INSIDE THE VARIABLE
            // B[i] = IDataUtil.clone(A[i]);
        }
    }
    pipelineCursor.destroy();
    
    // Finally to put the B Map(IData) to output.
    // Actually you can use only single pipelineCursor throughout all code but it's just for readable
    IDataUtil.put(pipelineCursor, "B", B);
    pipelineCursor.destroy();
        
}
  • Результат resultJavaService

2. Неявный цикл: для простых списков одинакового размера вы можете связать их напрямую на шаге MAP.

  • Создать потоковую службу и входной и выходной документ
  • Создать шаг карты
  • Выберите оба документа в цикле ForEach. Для каждого

3. Явный цикл: использование шага LOOP и его выходного массива.

  • Создать потоковую службу и входной и выходной документ
  • Создать шаг LOOP
  • Измените свойства LOOP, входной массив = A; выходной массив=В; и создайте карту на шаге LOOP Свойства цикла
  • Сопоставьте все параметры в A и B MapAtoB

Надеюсь, это поможет...

person Ivan Herlambang    schedule 04.12.2017
comment
Вся компиляция, сборка и тестирование выполняются в версии webMethods 9.12. - person Ivan Herlambang; 04.12.2017