RIA技术沙龙:WEB在线流程图编辑器的设计与实现

绘图技术在行业应用开发中运用由来已久,C/S模式下开发的各类软件群英荟萃,但B/S模式的绘图应用方兴未艾。如今,随着RIA技术的深度发展,行业软件中在B/S模式运行绘图功能的应用愈趋成熟。本次沙龙将为您展示Web动态绘图应用的开发场景和实例,可以预见,这样的应用软件将会越来越多地运营在电力巡检、仓储管理、港口管理、线路设计等众多专业领域。

 

本次沙龙以程序员们都熟悉的流程图应用为案例进行分析,主要与大家一起交流:

 

u      网络拓扑图/工作流程图应用分析

u      Web动态绘图技术介绍和分析,包括Ajax,Java2d,Flex

u      web绘图实例讲解,轻松学会使用Flex开发拓扑图绘制工具

u      Flex Graphics API编程经验交流

 

【活动流程】:

 

11330~1430开始签到

21430~1545  嘉宾主题讲座

31545~1630  自由发言与讨论

 

【主讲嘉宾】

 

特邀嘉宾刘伟先生主讲。

先生专注于Flex技术开发研究,在RIA领域有5年的经验积累,先后主持设计了大型Flex企业应用系统:SoftTown统一通讯平台和Ecargo国际物流货代系统。同时,作为合作伙伴为Adobe公司在中国市场的业务拓展提供技术咨询和支持,参与Adobe公司在华东区诸多大型项目的咨询和技术支持工作。目前作为3TI Solutions公司的架构主管和咨询专家为国内众多知名企业提供Flex项目咨询服务。

 

3TI Solutions Inc.翔傲科技信息(上海)有限公司自2005年以来一直采用Adobe FlexAIR等技术,长期致力于RIA技术领域的研发工作。采用Flex技术开发了企业级应用软件eCargo物流货代系统、SoftTown软建堂统一通信服务平台、BI应用。公司于2007年成为Adobe公司在中国的唯一一家企业解决方案提供商。目前在国内积极开展RIA应用技术推广与Flex开发项目咨询服务。

【时间地点】

 上海延安东路175号旺角广场一楼

 

 时间:2009-10-31日(周六)1330~1630

 

【报名方式】

 

 报名信息邮件发送到vkyin@3ti.us  内容包含:联系方式、人数即可。

 电话报名:021-22819100-827  传真:021-22819100-822

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
? 跨浏览器,可兼容IE7--IE10, FireFox, Chrome, Opera等几大内核的浏览器,且不需要浏览器再加装任何控件。 ? 多系统兼容性、可移植性:由于只包括前台UI,因此二次开发者可很方便将本插件用在任何一种需要流程图的B/S系统应用上,流程图的详细实现逻辑完全交于后台程序开发者自己实现;对于后台,只要能返回/接收能被本插件解析的JSON格式数据即可.所以本插件可用于不同的服务器语言建立的后台上. ? 跨领域:流程图设计器不止用在电信领域,在其它需要IT进行技术支持的领域中都有重大作用. ? 以下从纯技术实现层面具体描述: ? 页面顶部栏、左边侧边栏均可自定义; ? 当左边的侧边栏设为不显示时,为只读状态,此时的视图区可当作是一个查看器而非编辑器。 ? 侧边工具栏除了基本和一些流程节点按钮外,还自定义新的节点按钮,自定义节点都可以有自有的图标、类型名称,定义后在使用可可在工作区内增加这些自定义节点。 ? 顶部栏可显示流程图数据组的标题,也可提供一些常用操作按钮。 ? 顶部栏的按钮,除了撤销、重做按钮外,其余按钮均可自定义点击事件。 ? 可画直线、折线;折线还可以左右/上下移动其中段。 ? 具有区域划分功能,能让用户更直观地了解哪些节点及其相互间的转换,是属于何种自定义区域内的。 ? 具有标注功能,用橙红色标注某个结点或者转换线,一般用在展示流程进度时。 ? 能直接双击结点、连线、分组区域中的文字进行编辑 ? 在对结点、连线、分组区域的各种编辑操作,如新增/删除/修改名称/重设样式或大小/移动/标注时,均可捕捉到事件,并触发自定义事件,如果自定义事件执行的方法返回FALSE,则会阻止操作。 ? 具有操作事务序列控制功能,在工作区内的各种有效操作都能记录到一个栈中,然后可以进行撤销(undo())或重做(redo()),像典型的C/S软件一样。
[removed] <!-- var listenerFieldsEditCount = 0; jq(function(){ _listener_event_type=jq('#listenerEventType').combobox({ editable:false }); _task_listener_fields_dg=jq('#task-listeners-fields-list').datagrid({ //title:"Listener", //url:'${ctx}/wf/procdef/procdef!search.action',//加载表格数据的URL singleSelect:true, width:600, height:300, iconCls:'icon-edit', //fit:true, //idField:'id', //pagination:true, //pageSize:15, //pageNumber:1, //pageList:[10,15], rownumbers:true, //sortName:'id', //sortOrder:'asc', striped:true, toolbar:[{ text:'New', iconCls:'icon-add', handler:function(){ if(listenerFieldsEditCount>0){ jq.messager.alert("error","有可编辑的单元格,不能添加!",'error'); return; } jq('#task-listeners-fields-list').datagrid('appendRow',{ id:'', fieldName:'', type:'', value:'', action:'' }); var index = jq('#task-listeners-fields-list').datagrid('getRows').length-1; jq('#task-listeners-fields-list').datagrid('beginEdit', index); } }], onDblClickRow:function(rowIndex,rowData){ editListenerField(rowIndex); }, onBeforeEdit:function(index,row){ row.editing = true; jq(this).datagrid('refreshRow', index); listenerFieldsEditCount++; }, onAfterEdit:function(index,row){ row.editing = false; jq(this).datagrid('refreshRow', index); listenerFieldsEditCount--; }, onCancelEdit:function(index,row){ row.editing = false; jq(this).datagrid('refreshRow', index); listenerFieldsEditCount--; } }); jq('#fieldSaveBt').linkbutton({ iconCls:"icon-save" }); jq('#fieldCancelBt').linkbutton({ iconCls:"icon-cancel" }); jq("#listenerServiceClass").autocomplete(_process_def_provided_listeners, { width: 450, minChars: 0, max: 10, autoFill: true, mustMatch: false, matchContains: false, scrollHeight: 220, //multiple: true, //multipleSeparator: " ", scroll: true }); populateListenerProperties(); }); function changeListenerServiceType(obj){ if(obj.value=='javaClass'){ jq('#listenerServiceLabel').html('Service Class:'); jq('#listenerServiceClass').show(); jq('#listenerServiceExpression').hide(); }else if(obj.value=='expression'){ jq('#listenerServiceLabel').html('Expression:'); jq('#listenerServiceClass').hide(); jq('#listenerServiceExpression').show(); } } function listenerFieldsActionFormatter(value,rowData,rowIndex){ var id = rowIndex; var s='<img onclick="saveListenerField('+id+')" src="../../image/ok.png" title="'+"确定"+'" style="cursor:hand;"/>'; var c='<img onclick="cancelListenerField('+id+')" src="../../image/cancel.png" title="'+"取消"+'" style="cursor:hand;"/>'; var e='<img onclick="editListenerField('+id+')" src="../../image/modify.png" title="'+"修改"+'" style="cursor:hand;"/>'; var d='<img onclick="deleteListenerField('+id+')" src="../../image/delete.gif" title="'+"删除"+'" style="cursor:hand;"/>'; if(rowData.editing) return s; else return e+' '+d; } function cancelListenerField(id){ _task_listener_fields_dg.datagrid('cancelEdit', id); } function editListenerField(id){ _task_listener_fields_dg.datagrid('beginEdit', id); } function saveListenerField(id){ //alert(id); _task_listener_fields_dg.datagrid('endEdit', id); //alert(editcount); } function deleteListenerField(id){ _task_listener_fields_dg.datagrid('deleteRow',id); refreshAllListenerFields(); } function refreshAllListenerFields(){ var rs = _task_listener_fields_dg.datagrid('getRows'); for(var i=0;i0){ jq.messager.alert("error","",'error'); return null; } var insertRows = _task_listener_fields_dg.datagrid('getChanges','inserted'); var updateRows = _task_listener_fields_dg.datagrid('getChanges','updated'); var deleteRows = _task_listener_fields_dg.datagrid('getChanges','deleted'); var changesRows = { inserted : [], updated : [], deleted : [] }; if (insertRows.length>0) { for (var i=0;i0) { for (var k=0;k0) { for (var j=0;j0){ jq.messager.alert("error","请先保存可编辑的表格!",'error'); return; } if(listenerId != "" && listenerId != null && listenerId!="null"&&listenerId;!="NULL"){ var listener = getExsitingListener(); var r = updateExistingListener(listener); if(!r)return; }else{ var listener = createNewListener(); var r = insertNewListener(listener); if(!r)return; } _listener_win.window('close'); } function insertNewListener(listener){ listener.event=_listener_event_type.combobox('getValue'); jq('input[name="listenerServiceType"]').each(function(i){ if(this.checked){ listener.serviceType=this.value; return false; } }); listener.serviceClass=jq('#listenerServiceClass').val(); listener.serviceExpression=jq('#listenerServiceExpression').val(); var changesRows = getListenerFieldsGridChangeRows(); if(changesRows == null)return false; var insertRows = changesRows['inserted']; if (insertRows.length>0) { for (var i=0;i0) { for (var i=0;i0) { for (var k=0;k0) { for (var j=0;j<deleteRows.length;j++) { listener.deleteField(deleteRows[j].id); } } loadTaskListeners(); return true; } function populateListenerProperties(){ if(listenerId != "" && listenerId != null && listenerId!="null"&&listenerId;!="NULL"){ var listener = task.getTaskListener(listenerId); _listener_event_type.combobox('setValue',listener.event); var serviceType = listener.serviceType; jq('input[name="listenerServiceType"]').each(function(i){ if(this.value==serviceType){ this.checked=true; changeListenerServiceType(this); if(this.value=='javaClass'){ jq('#listenerServiceClass').val(listener.serviceClass); }else if(this.value=='expression'){ jq('#listenerServiceExpression').val(listener.serviceExpression); } return false; } }); var fields = listener.fields; var _listener_fields_grid_data=[]; for(var i=0;i<fields.getSize();i++){ var field = { id:fields.get(i).id, fieldName:fields.get(i).name, type:fields.get(i).type, value:fields.get(i).value, action:'' }; _listener_fields_grid_data[i]=field; } _task_listener_fields_dg.datagrid('loadData',_listener_fields_grid_data); } } function closeTaskListenerWin(){ _listener_win.window('close'); } //--> [removed] Event: Create Assignment Complete All <input type="radio" id="listenerServiceType" name="listenerServiceType" value="javaClass" checked="checked" Class <input type="radio" id="listenerServiceType" name="listenerServiceType" value="expression" Service Class: <input type="text" id="listenerServiceClass" name="listenerServiceClass" size="80" value=""/> <input type="text" id="listenerServiceExpression" name="listenerServiceExpression" size="80" none;" value=""/> Fields: Field Name Type Value Action <a href="##" id="fieldSaveBt" <a href="##" id="fieldCancelBt"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值