Как загрузить XML в наборы данных при загрузке в динамической форме PDF (LiveCycle)?

Мне нужно предварительно заполнить поля динамического PDF, чтобы мои пользователи могли редактировать его и отправлять обратно.

Я использую тэг Adobe ColdFusion CFPDFFORM, который может загружать данные XML в PDF и создавать новый заполненный PDF. К сожалению, он также очищает тег, он полностью очищает его! Поэтому все выпадающие списки, связанные с наборами данных, не работают. Это код для привязки одного из них:

<bindItems ref="xfa.datasets.LOVFile.LOV.PreferenceLanguageList.PreferenceLanguage[*]" labelRef="$" valueRef="lic"/>

Поскольку я не контролирую работу тега CFPDFFORM, я нашел обходной путь. Используя LiveCycle Designer для кодирования, я сохраняю все данные, которые есть в , в переменную и загружаю их в наборы данных в form::initialize.

Кажется, что это прекрасно загружает наборы данных, так же, как они были до того, как cfpdform испортил их. После вызова loadXML() я могу прочитать наборы данных и получить идентичные результаты, как в исходном PDF с его тегом наборов данных, полным данных XML.

form1::initialize - (JavaScript, client)
//xfa.host.messageBox("loading xml to datasets");
xfa.datasets.nodes.namedItem("LOVFile").loadXML(LOVFile_var.value,0,1);
Page1.Header.debug.rawValue = xfa.datasets.LOVFile.LOV.PreferenceLanguageList.resolveNode("PreferenceLanguage[2]").value;

Проблема в том, что списки вниз все еще не работают, у них нет элементов для показа. Каким-то образом их привязка к наборам данных не обновляется?

Что-нибудь еще, что я должен сделать после loadXML()? Ссылка LiveCycle для bindItems гласит: "Связи между элементами списка и ссылочными данными активны. Любое изменение данных вызывает немедленное обновление элементов списка".

Любая помощь или указать в правильном направлении очень ценится.

ОБНОВИТЬ:

используя ответ Азатота, я могу добавить элемент в выпадающий список, используя данные из недавно загруженных наборов данных (после вызова loadXml()).

var oEyeColors = xfa.datasets.LOVFile.LOV.resolveNode("EyeColorList");
var numberOfNodes = oEyeColors.nodes.length;       

var thisValue = "";

for (var i=0; i < numberOfNodes ; i++){
    thisValue  = oEyeColors.nodes.item(i).value;
    if(thisValue == null){
        thisValue = "";
    }
    xfa.resolveNode("Page1.eyeColorDropDownList").addItem(thisValue.toString());

}

Это работает, но это не решение, которое я ищу. Должен быть способ JavaScript для установки bindItems раскрывающегося списка.

2 ответа

Я делаю то, что вы указываете с этим кодом:

xfa.datasets.loadXML(LOVFile_var.rawValue, false, false); 
xfa.datasets.saveXML();                                 
var yourXML = xfa.datasets.resolveNode("yourXMLRootNodeName");
var numberOfNodes = yourXML.nodes.length;       

for (var i=0; i < numberOfNodes ; i++)
    yourDropDown.addItem(yourXML.nodes.item(i).nodes.item(1).value); // this can change according to what you retrieve in your xml  

Скажите, сработало ли это для вас

Возможно это то что ты ищешь?

Предварительное заполнение раскрывающихся списков в динамических формах PDF из внутреннего источника данных с использованием LiveCycle ES2.5

http://www.adobe.com/devnet/livecycle/articles/prepopulating-dropdown-lists.html

Другие вопросы по тегам