I've made an xdp whose fields match an xsd. Now if the xml that populates the form looks like this:
<a>
<a1>1000</a1>
<a2>credit</a2>
<a>
<a>
<a1>1400</a1>
<a2>debit</a2>
<a>
...I would like the data in field a1 to be preceded by a minus-sign IF and only if a2 for the same record equals the string "credit".
The problem is that I cannot seem to get a hold of the record pointer/current record during population. I'm looking for something along the (js-)lines of:
a1::someEvent
if ($record.a2 === "credit") this.rawValue = "-" + $record.a1;
I'm looking for a 'hygienic' solution that doesn't involve dumping a2 into a hidden field.
Any clues?
Solved! Go to Solution.
Views
Replies
Total Likes
Hi,
If you have a field bound to element a1 then you can use the dataNode property to reference the bound value, so dataNode.parent.a2.value will reference the "credit" / "debit" value, so in the calculate event you could have;
if (this.dataNode.parent.a2.value === "credit")
this.rawValue = "+"+this.rawValue;
else
this.rawValue = "-"+this.rawValue;
This might be a problem when you submit the form so an alternative would be to update the display picture and display a "+" or "-" literal, maybe in the docReady event.
if (this.dataNode.parent.a2.value === "credit")
this.format.picture.value = "num{'+'z,zz9.99}";
else
this.format.picture.value = "num{'-'z,zz9.99}";
Good luck
Bruce
Views
Replies
Total Likes
This code works in the form:ready event:
if (this.a2.rawValue == "debit")
{
var val = parseInt(this.a1.rawValue);
val = val * -1;
this.a1.rawValue = val.toString();
}
Terry
Views
Replies
Total Likes
I might have been a bit fuzzy in my first post, but there are no fields named a1 and a2. Just xml tags. There is however one field that holds the data of a1, which should be negative if the corresponding xml records a2 equals "credit".
I don't want to write stuff into hidden fields, meaning I'd like to solve it without the value of a2 ever entering the form.
Views
Replies
Total Likes
Hi,
If you have a field bound to element a1 then you can use the dataNode property to reference the bound value, so dataNode.parent.a2.value will reference the "credit" / "debit" value, so in the calculate event you could have;
if (this.dataNode.parent.a2.value === "credit")
this.rawValue = "+"+this.rawValue;
else
this.rawValue = "-"+this.rawValue;
This might be a problem when you submit the form so an alternative would be to update the display picture and display a "+" or "-" literal, maybe in the docReady event.
if (this.dataNode.parent.a2.value === "credit")
this.format.picture.value = "num{'+'z,zz9.99}";
else
this.format.picture.value = "num{'-'z,zz9.99}";
Good luck
Bruce
Views
Replies
Total Likes
Nice find Bruce! Works like a charm!
I thought I know the XFA specs pretty well, but how on earth did you find out about using dataNode as a property of this? According to my understanding, it shouldn't even exist (and doesn't from what I've seen in the XFA specs).
It seems that regardless of what event I'm hooking into, the render engine calls the script an extra time on an empty record, resulting in an error (that a2 is null). It's easy enough to filter the occurence out by doing:
var n = this.resolveNode("dataNode.parent.a2");
if (n !== null && n.value === "credit") { ... }
Although I'm still curious as to why...
Views
Replies
Total Likes
Hi,
I forgot it wasn't documented, it is mentioned in the http://partners.adobe.com/public/developer/en/xml/Adobe_XML_Form_Object_Model_Reference.pdf document but only in the examples. So think it is safe to use (and wont be dropped in a future release) ... at least I've used it a lot.
I have noticed an extra empty record being processed at times but I didn't have that problem this time, haven't found a pattern either, just tried it in Designer ES2 preview mode using Reader X and it was ok.
Sometimes I would love to see the Reader source code.
Glad to be able to help.
Bruce
Views
Replies
Total Likes
Hi again Bruce,
I've searched through the XML Form Object Model Reference you linked to, but still cannot find any references to an object called 'dataNode'. I'm thinking another official approach would be to access the dataWindow object, which should keep track of the current record. Alas...
Views
Replies
Total Likes
I see what you mean, am sure I've seen it somewhere but at the moment can only find it in one of John Brinkman's examples, so have asked him if it is supported, http://blogs.adobe.com/formfeed/2008/10/data_binding_with_predicates.html.
Lets hope, Bruce
Looks like we are good to go with the dataNode property. This is the response from John Brinkman,
As far as I’m concerned, the dataNode property should be documented and reliable. I’ll log a bug.
Good job, and thanks for all your help!
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies