﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-仿冒+改良=创新-随笔分类-视图</title><link>http://www.blogjava.net/obpm/category/46138.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 29 Aug 2010 13:57:53 GMT</lastBuildDate><pubDate>Sun, 29 Aug 2010 13:57:53 GMT</pubDate><ttl>60</ttl><item><title>obpm一键生成视图功能原理(原创)</title><link>http://www.blogjava.net/obpm/archive/2010/07/12/330199.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Sun, 11 Jul 2010 18:08:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/07/12/330199.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/330199.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/07/12/330199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/330199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/330199.html</trackback:ping><description><![CDATA[<h1 align="center">obpm一键生成视图功能原理</h1>
<p>在obpm系统后台表单右上角有一个&ldquo;一键生成视图&rdquo;功能。实现它的真正目的是为了后台管理人员方便从实现好的表单中快速生成所有带值的列的视图。这样管理人员就不需要手工新建视图，然后再添加视图中的带值的列。</p>
<p>实现原理图：</p>
<p><img src="http://pic002.cnblogs.com/img/obpm/201007/2010071201385917.png" /></p>
<p>在实现原理图中，我们发现没有视图中并没有不带值Field4相应的Column4在视图中，这是因为在视图中是要根据不同Column显示不同的值的。如果Column是不带值的话，那么视图中就不应该要这个Column,即使是要了，在视图中没有意义了。</p>
<p>实现原理代码：</p>
<p>其中代码路径是：src-java-cn-myapps-core-dynaform-form-ejb-FormProcessBean.java</p>
<p align="left">/**</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;* 根据表单编号来生成视图</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;* <b>@param</b> formid 表单编号</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;* <b>@throws</b> Exception</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;*/</p>
<p align="left">&nbsp;&nbsp;&nbsp; <b>public</b> Form oneKeyCreateView(String formid) <b>throws</b> Exception {</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormProcess formPross = (FormProcess) ProcessFactory.<i>createProcess</i>(FormProcess.<b>class</b>);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ViewProcess viewPross = (ViewProcess) ProcessFactory.<i>createProcess</i>(ViewProcess.<b>class</b>);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form form = (Form) formPross.doView(formid);//获得form</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">Collection</span> formfield=form.getValueStoreFields();//获得form存储值的field</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //新建视图</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View view = <b>new</b> View();</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b> (view.getId() == <b>null</b> || view.getId().trim().length() &lt;= 0) {</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setId(Sequence.<i>getSequence</i>());//设置视图的ID</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setSortId(Sequence.<i>getTimeSequence</i>());//设置视图的排序ID&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setName(form.getName());//把表单的名字赋给视图</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setOpenType(view.<i><span style="text-decoration: underline;">OPEN_TYPE_NORMAL</span></i>); //设置视图打开类型-普通类型</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setLastmodifytime(<b>new</b> Date());//最后修改日期</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setApplicationid(form.getApplicationid());//把表单应用程序Id赋给视图的应用程序Id</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setModule(form.getModule());//把表单模块Id赋给视图的模块ID</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setPagelines("10");//设置视图的分页每页显示10条数据</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setShowTotalRow(<b>true</b>); //是否显示总共条数数据</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setPagination(<b>true</b>); //是否分页显示</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.setRelatedForm(form.getId());//把表单ID赋给视图的映射表单，从而映射了该表单</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将表单中对应有值的列转换为视图的列</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>int</b> i=0;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>for</b>(<span style="text-decoration: underline;">Iterator</span> iterator=formfield.iterator();iterator.hasNext();){</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormField field=(FormField)iterator.next();</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Column column = <b>new</b> Column();</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b> (column.getId() == <b>null</b> || column.getId().trim().length() &lt;= 0) {</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setId(Sequence.<i>getSequence</i>());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setOrderno(i);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b>(field.getDiscript()!=<b>null</b> &amp;&amp; !field.getDiscript().equals("")){//如果该表单中带值Field有描述的话，就作为视图Column,否则的用Field名称</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setName(field.getDiscript());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<b>else</b>{</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setName(field.getName());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setFormid(form.getId());//把表单中的ID赋给Column的表单ID</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setApplicationid(form.getApplicationid());//把表单中应用程序的ID赋给Column的表单应用程序ID</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setFieldName(field.getName());&nbsp; //把表单中的名称赋给Column的表单名称</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column.setParentView(view.getId());//将视图ID赋给Column的父视图</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">view.getColumns().add(column)</span>; //将视图和Column关联</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //分别创建两个按钮&nbsp; 新建，删除</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Activity activityCreate = <b>new</b> Activity();</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b> (activityCreate.getId() == <b>null</b> || activityCreate.getId().trim().length() &lt;= 0) {</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setId(Sequence.<i>getSequence</i>());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setOrderno(0);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setApplicationid(form.getApplicationid());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setName("新建");</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setParentView(view.getId());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setType(ActivityType.<i>DOCUMENT_CREATE</i>);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityCreate.setOnActionForm(form.getId());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">view.getActivitys().add(activityCreate)</span>; //将视图和新建按钮关联</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Activity activityDelete = <b>new</b> Activity();</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b> (activityDelete.getId() == <b>null</b> || activityDelete.getId().trim().length() &lt;= 0) {</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityDelete.setId(Sequence.<i>getSequence</i>());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityDelete.setOrderno(1);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityDelete.setApplicationid(form.getApplicationid());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityDelete.setName("删除");</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityDelete.setParentView(view.getId());</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityDelete.setType(ActivityType.<i>DOCUMENT_DELETE</i>);</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">view.getActivitys().add(activityDelete)</span>; //将视图和删除按钮关联</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewPross.doCreate(view); //创建视图</p>
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>return</b> form;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>后台效果图：</p>
<p>表单：</p>
<p><img src="http://pic002.cnblogs.com/img/obpm/201007/2010071202024058.png" /></p>
<p>视图：</p>
<p><img src="http://pic002.cnblogs.com/img/obpm/201007/2010071202031328.png" /></p>
<p>视图列：</p>
<p><img src="http://pic002.cnblogs.com/img/obpm/201007/2010071202041257.png" /></p>
<p>视图按钮：<br /><img src="http://pic002.cnblogs.com/img/obpm/201007/2010071202043527.png" /></p>
<p>前台效果：</p>
<p>视图：</p>
<p>&nbsp;<img src="http://pic002.cnblogs.com/img/obpm/201007/2010071202053446.png" /></p>
<p>表单：</p>
<p>&nbsp;<img src="http://pic002.cnblogs.com/img/obpm/201007/2010071202065178.png" /></p>
<p>&nbsp;</p>
<p>原创人员：Denny</p><br>文章来源:<a href='http://www.cnblogs.com/obpm/archive/2010/07/12/1775453.html'>http://www.cnblogs.com/obpm/archive/2010/07/12/1775453.html</a>   <img src ="http://www.blogjava.net/obpm/aggbug/330199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-07-12 02:08 <a href="http://www.blogjava.net/obpm/archive/2010/07/12/330199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>