2015-08-13 26 views
1

我有兴趣在提交表单并将其链接到用户(即通过表单的必填字段中的电子邮件)时获取documentId。这个想法也是调用web服务并发送这两个字段来建立这种关系。现在,我想在一个领域看到这个价值。Orbeon获取documentId

首先,我发现我可以使用xxforms:instance('fr-parameters-instance')/document来实现这一点,但我没有成功。

在此之后,我看到现在(我用Orbeon 4.9)更改为fr:document-id()但目前看来,我仍然无法看到该文件ID形式的简单场here。 Bassically,是这样的:使用表单生成器创建

<xf:action ev:event="xforms-submit"> 
    <xf:setvalue ref="instance('fr-form-instance')/somefield" value="fr:document-id()"/> 
</xf:action> 

简单的例子:

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:ev="http://www.w3.org/2001/xml-events" 
    xmlns:xi="http://www.w3.org/2001/XInclude" 
    xmlns:xxi="http://orbeon.org/oxf/xml/xinclude" 
    xmlns:xxf="http://orbeon.org/oxf/xml/xforms" 
    xmlns:exf="http://www.exforms.org/exf/1-0" 
    xmlns:fr="http://orbeon.org/oxf/xml/form-runner" 
    xmlns:saxon="http://saxon.sf.net/" 
    xmlns:sql="http://orbeon.org/oxf/xml/sql" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:fb="http://orbeon.org/oxf/xml/form-builder"> 
<xh:head> 
    <xh:title>Send OrbeonID</xh:title> 
    <xf:model id="fr-form-model" xxf:expose-xpath-types="true"> 

     <!-- Main instance --> 
     <xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all"> 
      <form> 
       <section-1> 
        <control-1/> 
       </section-1> 
      </form> 
     </xf:instance> 

     <!-- Bindings --> 
     <xf:bind id="fr-form-binds" ref="instance('fr-form-instance')"> 
      <xf:bind id="section-1-bind" name="section-1" ref="section-1"> 
       <xf:bind id="control-1-bind" name="control-1" ref="control-1"/> 
      </xf:bind> 
     </xf:bind> 

     <!-- Metadata --> 
     <xf:instance xxf:readonly="true" id="fr-form-metadata" xxf:exclude-result-prefixes="#all"> 
      <metadata> 
       <application-name>Biit</application-name> 
       <form-name>SendOrbeonID</form-name> 
       <title xml:lang="en">Send OrbeonID</title> 
       <description xml:lang="en"/> 
       <singleton>false</singleton> 
      </metadata> 
     </xf:instance> 

     <!-- Attachments --> 
     <xf:instance id="fr-form-attachments" xxf:exclude-result-prefixes="#all"> 
      <attachments> 
       <css mediatype="text/css" filename="" size=""/> 
       <pdf mediatype="application/pdf" filename="" size=""/> 
      </attachments> 
     </xf:instance> 

     <!-- All form resources --> 
     <!-- Don't make readonly by default in case a service modifies the resources --> 
     <xf:instance id="fr-form-resources" xxf:readonly="false" xxf:exclude-result-prefixes="#all"> 
      <resources> 
       <resource xml:lang="en"> 
        <section-1> 
         <label>Untitled Section</label> 
        </section-1> 
        <control-1> 
         <label>Write something:</label> 
         <hint/> 
         <alert/> 
        </control-1> 
       </resource> 
      </resources> 
     </xf:instance> 

     <!-- Utility instances for services --> 
     <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all"> 
      <request/> 
     </xf:instance> 

     <xf:instance id="fr-service-response-instance" xxf:exclude-result-prefixes="#all"> 
      <response/> 
     </xf:instance> 

     <!-- Form is sent -->   
     <xf:action ev:event="xforms-submit"> 
      <xf:setvalue ref="instance('fr-form-instance')/section-1/control-1" value="fr:document-id()"/> 
     </xf:action>     

    </xf:model> 
</xh:head> 
<xh:body> 
    <fr:view> 
     <fr:body xmlns:xbl="http://www.w3.org/ns/xbl" 
       xmlns:oxf="http://www.orbeon.com/oxf/processors" 
       xmlns:p="http://www.orbeon.com/oxf/pipeline"> 
      <fr:section id="section-1-control" bind="section-1-bind"> 
       <xf:label ref="$form-resources/section-1/label"/> 
       <fr:grid> 
        <xh:tr> 
         <xh:td> 
          <xf:input id="control-1-control" bind="control-1-bind"> 
           <xf:label ref="$form-resources/control-1/label"/> 
           <xf:hint ref="$form-resources/control-1/hint"/> 
           <xf:alert ref="$fr-resources/detail/labels/alert"/> 
          </xf:input> 
         </xh:td> 
         <xh:td/> 
        </xh:tr> 
       </fr:grid> 
      </fr:section> 
     </fr:body> 
    </fr:view> 
</xh:body> 
</xh:html> 

Theorically,如果我fill up输入字段,并按下提交或保存按钮,该字段必须与文档更新ID。但我无法看到任何价值。

回答

0

最后,我发现发送文档Id的方式正在改变Orbeon中按钮的行为。

在保存为草稿按钮:

<property as="xs:string" name="oxf.fr.detail.process.save-draft.*.*"> 
    save 
    then send("oxf.fr.detail.save-draft.success") 
    then success-message("save-draft-success") 
    recover error-message("database-error") 
</property> 

,并定义send行动的地方之外Orbeon:

<property as="xs:boolean" name="oxf.fr.detail.new.accept-post.*.*" value="true" /> 
<property as="xs:string" name="oxf.fr.detail.save-draft.success.uri.*.*" value="http://localhost:8080/get-id.jsp?document={xxf:instance('fr-parameters-instance')/document}"/> 
<property as="xs:string" name="oxf.fr.detail.save-draft.success.method.*.*" value="post"/> 

JSP页面get-id.jsp现在每次执行用户保存草稿的形式,但浏览器不会重定向到JSP页面。

更改为使用web服务或其他操作必须简单。

+0

是的,证实了一个web服务也有效。 – JorgeHortelano

0

好消息是默认情况下文档ID已经作为URL参数发送。 URL参数名称是document。另见相关的documentation

+0

好的,谢谢你的答案。它接近我所需要的。我要测试它,看看我是否可以通过这种方式检索文档ID并继续执行我的过程。 – JorgeHortelano

+0

似乎几乎是一个解决方案。我可以更改发送操作并将document_id和电子邮件发送到URL。但是我的休息服务受到保护,这就是我尝试使用Orbeon的标准Web服务功能的原因。现在,我可以将这些信息发送到处理授权和重新发送数据的JSP页面,但也许存在一个更好的方法来做到这一点,而不需要中间的jsp页面。 – JorgeHortelano

+0

不,使用JSP页面只是“发送”按钮的解决方案,但如果我使用“保存”按钮,则无法继续处理表单。我不确定您编写的关于“更强大的按钮”的文档是否允许我这样做,或者继续推出启动web服务的最初想法。 – JorgeHortelano

0

当您设置的计算值的表单生成控件

xxf:instance('fr-parameters-instance')/document 

你可以得到的文档ID。

+0

是的,这正是我所接受的答案中所描述的。 – JorgeHortelano