Smart_names в XPath как правильно использовать, чтобы работали?

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11
Вот например задается wfp и его значение берется из xml файла.
1624426741635.png


1624424656545.png

или
1624426812604.png

1624426023078.png

В "редакторе" эти выражения работают. Т.е. редактор показывает результат этого пути, выделяя выбранное значение в xml файле.
1624427079975.png

В ходе же выполнения workflow - ничего не работает, wfp оказывается пустым . Такое ощущение, что эти смартнеймы в xpath просто игнорируются.
 
Последнее редактирование:

ACTPOHOM

12 лет на форуме
Сообщения
2 907
Реакции
1 118
из скринов ничего не понятно. Сам wfp.row_for.... что в себе несет, и лог посмотрите из Тасков он доступен
 

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11
из скринов ничего не понятно. Сам wfp.row_for.... что в себе несет, и лог посмотрите из Тасков он доступен

В логе написано "tkupd_28:4)roblem resolving(value) for file_name : xpath:/sborka/file_ruchei/file_name[<<wfp.N/>>]/text()"
Т.е. как я понял тут и написано, что он не распознал запись:

1624857679632.png

wfp.N - это просто число. Значение этому параметру присваивается в ходе выполнения wf.

В самом редакторе (Edit XPath Expression) это выражение работает. Т.е. редактор честно показывает результат этого выражения.:
1624859243447.png

1624859318381.png




Если записать без wfp.N т.е. вот так:
1624857915814.png

то все работает.



В реальной же задаче у меня
есть wfp.row_for_shtanc_forma. Этому параметру присвоено название штанцформы.
И вот используя
1624859728145.png

мне нужно выдернуть из xml файла необходимое значение. Но не выдергивается. Эта строчка при выполении wf не распознается.
Если записать прямо без использования wfp.row_for_shtanc_forma
1624859935136.png

тогда все работает
 

Вложения

  • 1624858384213.png
    1624858384213.png
    5.8 КБ · Просм.: 15
  • 1624859062404.png
    1624859062404.png
    44.1 КБ · Просм.: 15

eugeny

12 лет на форуме
Сообщения
482
Реакции
96
А у вас точно созданы в воркфлоу переменные? В данном случае "N".
 

Вложения

  • Screenshot_17.jpg
    Screenshot_17.jpg
    119.4 КБ · Просм.: 19

eugeny

12 лет на форуме
Сообщения
482
Реакции
96
В реальной же задаче у меня
есть wfp.row_for_shtanc_forma. Этому параметру присвоено название штанцформы.
И вот используя
Посмотреть вложение 144320
мне нужно выдернуть из xml файла необходимое значение. Но не выдергивается. Эта строчка при выполении wf не распознается.
Если записать прямо без использования wfp.row_for_shtanc_forma
Посмотреть вложение 144321
тогда все работает

перед тикетом где вы получаете wfp.row_for_shtanc_forma поставьте тикет(wait for action) и выведите там значение wfp.row_for_shtanc_forma. Это самый простой тестер пееременных в потоке )).
 

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11
перед тикетом где вы получаете wfp.row_for_shtanc_forma поставьте тикет(wait for action) и выведите там значение wfp.row_for_shtanc_forma. Это самый простой тестер пееременных в потоке )).
Да я в качестве тестера просто создаю xml файл с этим wfp.row_for_shtanc_forma. И там видно какое значение ему в итоге присвоилось и присвоилось ли вообще.
 
Последнее редактирование:

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11
А у вас точно созданы в воркфлоу переменные? В данном случае "N".
Точно создана. Я проверял при помощи вывода в xml файл ее значений. Да этот wfpN и в других местах используется.
 

ACTPOHOM

12 лет на форуме
Сообщения
2 907
Реакции
1 118
@Akro ну я бы посоветовал вот что. Сделать WP перед этим тикетом, и передавать в строчку Xpath Целиковый смарт из WP а не фрагментами, возможно он не умеет частями понимать смарты и Xpath запрос.
 
Последнее редактирование:

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11
@Akro ну я бы посоветовал вот что. Сделать WP перед этим тикетом, и передавать в строчку Xpath Целиковый смарт из WP а не фрагментами, возможно он не умеет частями понимать смарты и Xpath запрос.
Я в попытках найти решение так тоже делал. Загонял целиком всю поисковую строчку в wfp и использовал ее потом в xpath. Результат тот же самый. Увы, но не работает. Я бы уже решил, что в xpath в АE в принципе нельзя использовать смартнеймы, но в редакторе он вполне понимает что от него хотят, да и сама по себе возможность добавлять смартнеймы говорит, что их использование предусмотрено.
 

ACTPOHOM

12 лет на форуме
Сообщения
2 907
Реакции
1 118
@Akro да, не реботает, удивительно, но факт.
 

Fragarach

Участник
Сообщения
97
Реакции
42
Я в попытках найти решение так тоже делал. Загонял целиком всю поисковую строчку в wfp и использовал ее потом в xpath. Результат тот же самый. Увы, но не работает. Я бы уже решил, что в xpath в АE в принципе нельзя использовать смартнеймы, но в редакторе он вполне понимает что от него хотят, да и сама по себе возможность добавлять смартнеймы говорит, что их использование предусмотрено.
Есть ещё один трудно объяснимый с точки зрения логики вариант - попробуйте string extract для значения wfp.row_for_shtanc_forma и именно его вставлять в рабочий поток. По логике это масло масляное но... временами это работает.
 
Последнее редактирование:

ACTPOHOM

12 лет на форуме
Сообщения
2 907
Реакции
1 118
Screenshot 2021-06-28 at 16.35.09.png

ну зачем вообще было разрешать там смарты, если они не поддерживаются
 
  • Спасибо
Реакции: Akro

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11

ACTPOHOM

12 лет на форуме
Сообщения
2 907
Реакции
1 118
@Akro Рано паниковать.
Для начала надо понять, какая основная цель.
Может не стоит уприться в этот смарт в xpath ?
 

Akro

Участник
Топикстартер
Сообщения
295
Реакции
11
@Akro Рано паниковать.
Для начала надо понять, какая основная цель.
Может не стоит уприться в этот смарт в xpath ?
Только что додумал как обойти эту проблему.
У меня задача была, чтобы из xml файла с базой данных по штанцформам выдергивать данные для конкретной штанцформы. Имя этой конкретно йштанц-формы величина переменная.
В общем дело решил так. В WF я выбираю, копирую и переименовываю базу данных именем нужной мне штанцформы. Т.е. была некая Shtanc.xml, а стала [wtf.Имя конкретной штанцформы].xml
А затем просто создал смартнейм, где [File] это собственно [wtf.Имя конкретной штанцформы].xml
1624948227424.png


Ну а дальше в WF
1624948400407.png
 

eugeny

12 лет на форуме
Сообщения
482
Реакции
96
Только что додумал как обойти эту проблему.
У меня задача была, чтобы из xml файла с базой данных по штанцформам выдергивать данные для конкретной штанцформы. Имя этой конкретно йштанц-формы величина переменная.
В общем дело решил так. В WF я выбираю, копирую и переименовываю базу данных именем нужной мне штанцформы. Т.е. была некая Shtanc.xml, а стала [wtf.Имя конкретной штанцформы].xml
А затем просто создал смартнейм, где [File] это собственно [wtf.Имя конкретной штанцформы].xml
Я решал подобную задачу путем перебора массивов. Т.е. через смарт парсишь XML и создаешь массив. Соответственно этих массивов может быть несколько. Потом на помощь приходит javascript: находишь значение в в нужном массиве (номер штанца), запоминаешь его индекс, и по этому индексу уже получаешь данные из другого массива.
Вот пример генерации названия цвета (три массива это парсинг XML):

Код:
function f ()
  {  var m=0;
    var names='<<@_XML_GetColors/>>'.split(';');
    var types='<<@_XML_GetColorsType/>>'.split(';');
    var books='<<@_XML_GetColorsBook/>>'.split(';');
    var newNames=Array('0'); var end; var panton="PANTONE ";
    for (var i=0; i<names.length;i++){
        m=0;
        if(types[i]=='process'){newNames.push(names[i]);m=1;}
        if(types[i]=='designer'){newNames.push(names[i]);m=1;}
        if(types[i]=='pantone'){ end=books[i].replace('pms1000',' ');
            end=end.toUpperCase();
            newNames.push(panton+names[i] +end); m=1;}
        if(m==0){newNames.push(names[i]);}
    }
  return newNames.join(';');
  }
 
  • Спасибо
Реакции: Akro