Forms 如何利用表单引擎在Alfresco共享中实现CRUD页面

Forms 如何利用表单引擎在Alfresco共享中实现CRUD页面,forms,share,crud,alfresco,Forms,Share,Crud,Alfresco,我试图找出在CRUD功能中使用表单引擎的最佳方式,尽可能提供最佳的用户体验 我已经创建了一个自定义共享页面,该页面将用作站点管理页面。它的功能之一是管理网站的成员,因此它允许网站管理员搜索当前成员以及查看详细信息、创建、编辑或删除成员。我在管理控制台中采用了开箱即用的用户管理模式,因为功能非常相似 管理控制台中的用户管理不使用表单引擎,但我希望将其用于用户创建、编辑和查看其属性。我想知道是否有人利用表单引擎实现了类似的功能,以及共享中是否已经存在类似的功能,但我什么也没发现 在花了一些时间阅读表

我试图找出在CRUD功能中使用表单引擎的最佳方式,尽可能提供最佳的用户体验

我已经创建了一个自定义共享页面,该页面将用作站点管理页面。它的功能之一是管理网站的成员,因此它允许网站管理员搜索当前成员以及查看详细信息、创建、编辑或删除成员。我在管理控制台中采用了开箱即用的用户管理模式,因为功能非常相似

管理控制台中的用户管理不使用表单引擎,但我希望将其用于用户创建、编辑和查看其属性。我想知道是否有人利用表单引擎实现了类似的功能,以及共享中是否已经存在类似的功能,但我什么也没发现

在花了一些时间阅读表单引擎体系结构、调查和创建一些试点之后,我想出了以下方法:

方法1

为了提供更好的用户体验,我希望保留原始管理控制台的用户管理流程,该流程通过执行返回JSON响应的AJAX请求动态加载页面所需的内容。我认为我能做到这一点的唯一方法是对表单组件执行异步请求,然后将返回的HTML内容添加到当前页面中。例如,请求/share/service/components/form?itemKind=node&itemId=workspace%3A%2F%2fspace存储%2F3152987c-4cc9-49c4-b934-4ad293e73884&mode=create&htmlid=to_be_替换为_current_htmlid将返回一个包含用户数据的表单:

   <style type="text/css" media="screen">
      @import url("/share/res/yui/calendar/assets/calendar_aa6d35544845f9e37c2e63f30c3fc.css");
      @import url("/share/res/components/object-finder/object-finder_6ace14eb15aeb2f5fc580252b2e234a.css");
      @import url("/share/res/components/form/form_b0441863b8c8626acf9439fcf5430e3.css");
   </style>

   <script type="text/javascript" src="/share/res/components/form/form_759f5c75621bd2fdc25f232733606013.js"></script>
   <script type="text/javascript" src="/share/res/components/form/date_c5fc1a135563584dfe4fa2ebfda6d7c7.js"></script>
   <script type="text/javascript" src="/share/res/components/form/date-picker_867acd42dd913caf3fdf3b5fb915b6b.js"></script>
   <script type="text/javascript" src="/share/res/components/form/period_6687cd14ce6f0519843823e177d338.js"></script>
   <script type="text/javascript" src="/share/res/components/object-finder/object-finder_7613d05fefd03476b1aa73321a9de750.js"></script>
   <script type="text/javascript" src="/share/res/components/form/rich-text_832156d1b3b4b7b336b9fcfd13a7e98.js"></script>
   <script type="text/javascript" src="/share/res/components/form/content_9080c79dc38a9d8a6ce5405a1fc53f.js"></script>
   <script type="text/javascript" src="/share/res/components/form/workflow/transitions_c015c3dc53be0a35a52e8d10f45cbd.js"></script>
   <script type="text/javascript" src="/share/res/components/form/workflow/activiti-transitions_5da4db124822ea4a3062f14ab3402594.js"></script>
   <script type="text/javascript" src="/share/res/components/form/jmx/operations_7cbe27c4e529dd693674fe2a8ff1bd.js"></script>
   <script type="text/javascript">//<![CDATA[
//]]></script>

...
...
...

<div class="form-field">
         <label for="whatever_prop_cm_firstName">First Name:<span class="mandatory-indicator">*</span></label>
      <input id="whatever_prop_cm_firstName" name="prop_cm_firstName" tabindex="0"
             type="text"


             value="Administrator"
             title="The person's first name"


              />
</div>   
   </div>
      </div>

   <div id="whatever-form-buttons" class="form-buttons">
         <input id="whatever-form-submit" type="submit" value="Submit" />&nbsp;
   </div>
         </form>
   </div>

@导入url(“/share/res/yui/calendar/assets/calendar_aa6d3554845f9e37c2e63f30c3fc.css”);
@导入url(“/share/res/components/object finder/object-finder_6ace14eb15aeb2f5fc580252b2e234a.css”);
@导入url(“/share/res/components/form/form_b0441863b8c8626acf9439fcf5430e3.css”);
//
...
...
...
名字:*
然后,该HTML响应可以包含在包装器div中

方法2

创建一个由三个不同区域组成的附加页面。每个区域将绑定表单组件,但具有不同的初始化参数:一个区域用于查看模式,另一个区域用于创建模式,另一个区域用于编辑模式。比如:

  <component>
     <region-id>view-user</region-id>
     <url>/components/form</url>
     <properties>
        <itemKind>node</itemKind>
        <itemId>{nodeRef}</itemId>
        <mode>view</mode>
        <submitType>json</submitType>
        <showCaption>true</showCaption>
        <showCancelButton>true</showCancelButton>
     </properties>
  </component>

  <component>
     <region-id>edit-user</region-id>
     <url>/components/form</url>
     <properties>
        <itemKind>node</itemKind>
        <itemId>{nodeRef}</itemId>
        <mode>edit</mode>
        <submitType>json</submitType>
        <showCaption>true</showCaption>
        <showCancelButton>true</showCancelButton>
     </properties>
  </component>

  <component>
     <region-id>create-user</region-id>
     <url>/components/form</url>
     <properties>
        <itemKind>node</itemKind>
        <itemId>{nodeRef}</itemId>
        <mode>create</mode>
        <submitType>json</submitType>
        <showCaption>true</showCaption>
        <showCancelButton>true</showCancelButton>
     </properties>
  </component>

查看用户
/组件/表格
节点
{nodeRef}
看法
json
真的
真的
编辑用户
/组件/表格
节点
{nodeRef}
编辑
json
真的
真的
创建用户
/组件/表格
节点
{nodeRef}
创造
json
真的
真的
对该附加页面的请求将从搜索页面执行,该页面为每个场景(查看、创建或更新用户)提供适当的参数。例如,可以使用模板实例定义中的自定义计算器显示或隐藏区域


我想听听对forms engine有经验的开发人员如何更好地实现这种解决方案。虽然我找不到关于forms engine的类似功能的任何资源(扩展、博客文章、教程…),但我相信以前任何人都必须做类似的事情是合理的。

方法1非常好,但我最好的方法是方法2a:)

您的2很好,但我不会将编辑和创建定义为区域。 检查Alfresco Share默认代码,您将看到(经过一些经验之后)它们为查看用户定义了一个区域

之所以这样做,是因为该视图具有最多的逻辑性。比如搜索/过滤,或者对用户进行一些操作。 创建用户编辑用户大多是webscript(表单)对话框,它们只是打开来执行简单的特定任务

在定义分组信息的情况下,我会使用方法1。 就像你已经与一个问题跟踪器集成,你想在与跟踪器相关的整个页面上显示多个信息一样


尽管如此,您的任何方法都没有错,它们都很好,并且符合Alfresco Share的最佳实践

可能的重复我不认为这是重复的,但是如果有重复的话,请记住我的问题比你提到的要老。