I have a simple publisher creation policy in a SAP driver prototype that looks like this:

<rule>
<description>User</description>
<conditions>
<and>
<if-class-name mode="nocase" op="equal">User</if-class-name>
</and>
</conditions>
<actions>
<do-set-default-attr-value name="Full Name" write-back="false">
<arg-value>
<token-op-attr name="Given Name"/>
<token-text xml:space="preserve"> </token-text>
<token-op-attr name="Surname"/>
</arg-value>
</do-set-default-attr-value>
<do-set-dest-attr-value name="CN">
<arg-value>
<token-op-attr name="Full Name"/>
<token-text notrace="true" xml:space="preserve"> - </token-text>
<token-association/>
</arg-value>
</do-set-dest-attr-value>
</actions>
</rule>

Two steps: 1. create full name attribute from givenname and surname, if not present already, then set CN to "fullname - <associaction>" for uniqueness. Now here's the trace (taken from designer 3.0 simulator):

SRV_SAPHR-MQ1 :
<nds dtdversion="3.5" ndsversion="8.x">
<source>
<product version="?.?.?.?">DirXML</product>
<contact>Novell, Inc.</contact>
</source>
<input>
<add class-name="User" qualified-src-dn="o=dirXML Test\ou=Users\cn=User1" src-dn="o=dirXML Test\ou=Users\cn=User1">
<association>12345678</association>
<add-attr attr-name="CN">
<value type="string">12345678</value>
</add-attr>
<add-attr attr-name="Surname">
<value type="string">Surname1</value>
</add-attr>
<add-attr attr-name="Given Name">
<value type="string">Given1</value>
</add-attr>
<add-attr attr-name="Full Name">
<value type="string">Fullname1</value>
</add-attr>
</add>
</input>
</nds>
SRV_SAPHR-MQ1 :Applying policy: %+C%14CObject Naming%-C.
SRV_SAPHR-MQ1 : Applying to add #1.
SRV_SAPHR-MQ1 : Evaluating selection criteria for rule 'User'.
SRV_SAPHR-MQ1 : (if-class-name equal "User") = TRUE.
SRV_SAPHR-MQ1 : Rule selected.
SRV_SAPHR-MQ1 : Applying rule 'User'.
SRV_SAPHR-MQ1 : Action: do-set-default-attr-value("Full Name",write-back="false",token-op-attr("Given Name")+" "+token-op-attr("Surname")).
SRV_SAPHR-MQ1 : Action: do-set-dest-attr-value("CN",token-op-attr("Full Name")+" - "+token-association()).
SRV_SAPHR-MQ1 : arg-string(token-op-attr("Full Name")+" - "+token-association())
SRV_SAPHR-MQ1 : token-op-attr("Full Name")
SRV_SAPHR-MQ1 : Token Value: "Fullname1".
SRV_SAPHR-MQ1 : token-text(" - ")
SRV_SAPHR-MQ1 : token-association()
SRV_SAPHR-MQ1 : Token Value: "12345678".
SRV_SAPHR-MQ1 : Arg Value: "Fullname1 - 12345678".
SRV_SAPHR-MQ1 :Policy returned:
SRV_SAPHR-MQ1 :
<nds dtdversion="3.5" ndsversion="8.x">
<source>
<product version="?.?.?.?">DirXML</product>
<contact>Novell, Inc.</contact>
</source>
<input>
<add class-name="User" qualified-src-dn="o=dirXML Test\ou=Users\cn=User1" src-dn="o=dirXML Test\ou=Users\cn=User1">
<association>12345678</association>
<add-attr attr-name="CN">
<value type="string">12345678</value>
</add-attr>
<add-attr attr-name="Surname">
<value type="string">Surname1</value>
</add-attr>
<add-attr attr-name="Given Name">
<value type="string">Given1</value>
</add-attr>
<add-attr attr-name="Full Name">
<value type="string">Fullname1</value>
</add-attr>
<add-attr attr-name="CN">
<value>Fullname1 - 12345678</value>
</add-attr>
</add>
</input>
</nds>

So I end up with two values for CN, where I would expect only one. do-set-dest-attr-value does not behave any different from do-add-dest-attr-value here, where I always thought it to be the equivalent of do-strip-op-attr + do-add-dest-attr-value (add operations) or do-clear-dest-attr + do-add-dest-attr-value (modify operations).

Did I have this wrong all the time it just works as designed, is it a designer simulator issue or really the silly bug I take it for?

Cheers, Lothar