計算フィールドをドキュメントフィールドにバインドする方法を知っています。そして、JavaScriptを使用して計算フィールドを計算する方法を知っています。しかし、どうすれば両方を行うことができますか?
計算フィールドのJavaScriptは次のとおりです。
@Name("[ABBREVIATE]" ,@UserName());
それをdocument1.ReqNameフィールドにバインドするにはどうすればよいですか?
計算フィールドをドキュメントフィールドにバインドする方法を知っています。そして、JavaScriptを使用して計算フィールドを計算する方法を知っています。しかし、どうすれば両方を行うことができますか?
計算フィールドのJavaScriptは次のとおりです。
@Name("[ABBREVIATE]" ,@UserName());
それをdocument1.ReqNameフィールドにバインドするにはどうすればよいですか?
私は2つのフィールドを使用します:
たぶん私はポイントを逃しますが、なぜあなたは単に次のことをしませんか?
<xp:inputText id="inputText1" value="#{document1.Reader}">
<xp:this.defaultValue>
<![CDATA[#{javascript:@Name("[ABBREVIATE]",@UserName());}]]>
</xp:this.defaultValue>
</xp:inputText>
これは、ELごとにDocumentFieldにバインドされたテキストフィールドです。フィールドが空の場合、デフォルト値で計算されます。
素晴らしい!-要点を逃した。しかし、あなたはこれを試すことができます:
<xp:text escape="true" id="computedField3">
<xp:this.value>
<![CDATA[#{javascript:
if(@IsNewDoc()){
document1.replaceItemValue("Reader",@Name("[ABBREVIATE]",@UserName()));
}
return document1.getItemValue("Reader");}]]>
</xp:this.value>
</xp:text>
計算フィールドの値には、高度なデータバインディングを使用し、[式言語(EL)]を選択します。使用する式は、単に「document1.ReqName」(引用符なし)です。
この場合、私はバインドしません。他のすべてのコントロールをバインドします。この場合、保存アクションの前に、スクリプトを使用してドキュメントフィールドに直接手動で追加します。
だから次のようなもの:(私の仕事のコンプにないコードを許してください)
<eventhandler>
<actionGroup>
<script><![CDATA[#{javascript:
doc.replaceItemValue("ReqName", @Name("[ABBREVIATE]" ,@UserName()));
}]]><script>
<saveDocument></saveDocument>
</actionGroup>
</eventhandler>
<xp:text escape="true" id="computedFieldTest1">
[CDATA[#{javascript:
var userName = "Username: "+("Reader",@Name("[ABBREVIATE]",@UserName()));
currentDocument.replaceItemValue("computedFieldTest1",userName);
return userName;
}]]></xp:this.value>
</xp:text>