Jelajahi Sumber

设计搜索功能

huqi 5 tahun lalu
induk
melakukan
da63d519ec

TEMPAT SAMPAH
o2web/source/o2_core/o2/widget/$Tree/findDesigner/icon_projection.png


TEMPAT SAMPAH
o2web/source/o2_core/o2/widget/$Tree/findDesigner/icon_serial.png


+ 17 - 1
o2web/source/o2_core/o2/widget/JavascriptEditor.js

@@ -145,8 +145,11 @@ o2.widget.JavascriptEditor = new Class({
                 }.bind(this));
                 this.editor.onDidBlurEditorText(function(e){
                     o2.shortcut.keyboard.activate();
+                    this.fireEvent("blur");
                 }.bind(this));
-
+                this.editor.onDidChangeModelContent(function(e){
+                    this.fireEvent("change");
+                }.bind(this))
 
                 //o2.widget.JavascriptEditor.getCompletionEnvironment(this.options.runtime, function(){
                     this.monacoModel = this.editor.getModel();
@@ -221,6 +224,14 @@ o2.widget.JavascriptEditor = new Class({
                     }.bind(this)
                 });
 
+                this.editor.on("blur", function(){
+                    this.fireEvent("blur");
+                }.bind(this));
+                this.editor.on("change", function(){
+                    this.fireEvent("change");
+                }.bind(this));
+
+
                 this.node.addEvent("keydown", function(e){
                     e.stopPropagation();
                 });
@@ -423,6 +434,11 @@ o2.widget.JavascriptEditor = new Class({
             }
         }
     },
+    destroy: function(){
+	    this.fireEvent("destroy");
+	    this.destroyEditor();
+	    o2.release(this);
+    },
     setTheme: function(theme){
         if (this.editor){
             switch (this.options.type.toLowerCase()) {

+ 1 - 0
o2web/source/o2_core/o2/widget/Tree.js

@@ -345,6 +345,7 @@ o2.widget.Tree.Node = new Class({
 	
 	selectNode: function(){
 		if (this.tree.currentNode){
+			this.tree.currentNode.fireEvent("unselect");
 			var textDivNode = this.tree.currentNode.textNode.getElement("div");
 			textDivNode.setStyles(this.tree.css.textDivNode);
             if (this.tree.currentNode.options.style){

+ 176 - 49
o2web/source/x_component_FindDesigner/FindWorker.js

@@ -354,10 +354,10 @@ _worker._findProcessPlatformParse_script = function(designer, option, module){
                         // }
                     });
                 }else{
-                    _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
-                        "property": pattern.property,
-                        "value": pattern.propertyValue
-                    }), option);
+                    // _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
+                    //     "property": pattern.property,
+                    //     "value": pattern.propertyValue
+                    // }), option);
                 }
             });
         //}, function(){});
@@ -417,6 +417,7 @@ _worker.findInDesigner_script = function(formData, key, module, designer, proper
         }
     }
 };
+
 _worker.findInDesigner_events = function(formData, key, module, designer, propertyDefinition, option, mode){
     var eventObj = formData[key];
     Object.keys(eventObj).forEach(function(evkey){
@@ -507,50 +508,52 @@ _worker.findInDesigner_objectArray = function(formData, key, module, designer, p
 
 _worker.findInDesigner_duty = function(formData, key, module, designer, propertyDefinition, option, mode){
     var text = formData[key];
-    var json = JSON.parse(text);
-    json.forEach(function(duty, i) {
-        this.keywordRegexp.lastIndex = 0;
-        var text = duty.name;
-        if (text) if (this.keywordRegexp.test(text)){
-            _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
-                "type": formData.type,
-                "propertyType": propertyDefinition.type || "text",
-                "propertyName": propertyDefinition.name,
-                "name": formData.name || formData.id,
-                "key": key,
-                "line": i+1,
-                "value": "name:"+text,
-                "mode": mode
-            }), option);
-        }
-
-        var code = duty.code;
-        if (code){
+    if (text){
+        var json = JSON.parse(text);
+        json.forEach(function(duty, i) {
             this.keywordRegexp.lastIndex = 0;
-            var len = code.length;
-            var idx = i+1;
-            var preLine = 0;
-            var preIndex = 0;
-            var result;
-            while ((result = this.keywordRegexp.exec(code)) !== null){
-                var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
-                preLine = obj.preLine;
-                preIndex = obj.preIndex;
-
-
+            var text = duty.name;
+            if (text) if (this.keywordRegexp.test(text)){
                 _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
                     "type": formData.type,
                     "propertyType": propertyDefinition.type || "text",
-                    "propertyName": propertyDefinition.name+"(code) "+idx+"."+duty.name,
+                    "propertyName": propertyDefinition.name,
                     "name": formData.name || formData.id,
                     "key": key,
-                    "value": obj.value,
-                    "line": preLine+1,
+                    "line": i+1,
+                    "value": "name:"+text,
                     "mode": mode
                 }), option);
             }
-        }
-    });
+
+            var code = duty.code;
+            if (code){
+                this.keywordRegexp.lastIndex = 0;
+                var len = code.length;
+                var idx = i+1;
+                var preLine = 0;
+                var preIndex = 0;
+                var result;
+                while ((result = this.keywordRegexp.exec(code)) !== null){
+                    var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
+                    preLine = obj.preLine;
+                    preIndex = obj.preIndex;
+
+
+                    _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
+                        "type": formData.type,
+                        "propertyType": propertyDefinition.type || "text",
+                        "propertyName": propertyDefinition.name+"(code) "+idx+"."+duty.name,
+                        "name": formData.name || formData.id,
+                        "key": key,
+                        "value": obj.value,
+                        "line": preLine+1,
+                        "mode": mode
+                    }), option);
+                }
+            }
+        });
+    }
 };
 
 _worker.findInDesigner_actions = function(formData, key, module, designer, propertyDefinition, option, mode){
@@ -672,6 +675,86 @@ _worker.findInDesigner_filter = function(formData, key, module, designer, proper
     });
 };
 
+_worker.findInDesigner_serial = function(formData, key, module, designer, propertyDefinition, option, mode){
+    var text = formData[key];
+    if (text) {
+        var json = JSON.parse(text);
+
+        json.forEach(function(serial, i) {
+            this.keywordRegexp.lastIndex = 0;
+            switch (serial.key){
+                case "text":
+                case "unitAttribute":
+                    if (this.keywordRegexp.test(serial.value)){
+                        _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
+                            "type": formData.type,
+                            "propertyType": propertyDefinition.type || "text",
+                            "propertyName": propertyDefinition.name+"&nbsp"+serial.key+"&nbsp",
+                            "name": formData.name || formData.id,
+                            "key": key,
+                            "value": serial.value
+                        }), option);
+                    }
+                    break;
+                case "script":
+                    var code = serial.value;
+                    if (serial.value){
+                        if (code){
+                            this.keywordRegexp.lastIndex = 0;
+                            var len = code.length;
+                            var idx = i+1;
+                            var preLine = 0;
+                            var preIndex = 0;
+                            var result;
+                            while ((result = this.keywordRegexp.exec(code)) !== null){
+                                var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
+                                preLine = obj.preLine;
+                                preIndex = obj.preIndex;
+
+                                _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
+                                    "type": formData.type,
+                                    "propertyType": propertyDefinition.type || "text",
+                                    "propertyName": propertyDefinition.name+"&nbsp"+serial.key+"&nbsp",
+                                    "name": formData.name || formData.id,
+                                    "key": key,
+                                    "value": obj.value,
+                                    "line": preLine+1
+                                }), option);
+                            }
+                        }
+                    }
+                    break;
+                default:
+                    //nothing
+            }
+        });
+    }
+};
+
+
+_worker.findInDesigner_projection = function(formData, key, module, designer, propertyDefinition, option, mode){
+    var text = formData[key];
+    if (text) {
+        var json = JSON.parse(text);
+        json.forEach(function(projection, i) {
+            this.keywordRegexp.lastIndex = 0;
+            var text = projection.path+"->"+projection.name;
+            if (this.keywordRegexp.test(text)){
+                _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
+                    "type": formData.type,
+                    "propertyType": propertyDefinition.type || "text",
+                    "propertyName": propertyDefinition.name,
+                    "name": formData.name || formData.id,
+                    "key": key,
+                    "value": text,
+                    "line": i
+                }), option);
+            }
+        });
+    }
+};
+
+
 _worker.findInDesigner_text = function(formData, key, module, designer, propertyDefinition, option, mode){
     this.keywordRegexp.lastIndex = 0;
     var text = formData[key];
@@ -720,6 +803,12 @@ _worker.findInDesignerProperty = function(key, propertyDefinition, formData, opt
             case "filter":
                 _worker.findInDesigner_filter(formData, key, module, designer, propertyDefinition, option, mode);
                 break;
+            case "serial":
+                _worker.findInDesigner_serial(formData, key, module, designer, propertyDefinition, option, mode);
+                break;
+            case "projection":
+                _worker.findInDesigner_projection(formData, key, module, designer, propertyDefinition, option, mode);
+                break;
             default:
                 _worker.findInDesigner_text(formData, key, module, designer, propertyDefinition, option, mode);
         }
@@ -797,6 +886,44 @@ _worker._findProcessPlatformParse_process = function(designer, option, module){
                 this.designerPropertysData = arr[1];
 
                 designer.patternList.forEach(function(pattern){
+                    if (pattern.elementType === "process"){
+                        debugger;
+                        var propertyDefinition = this.designerPropertysData.process[pattern.property];
+                        processData.type = pattern.elementType;
+                        _worker.findInDesignerProperty(pattern.property, propertyDefinition, processData, option, module, designer);
+                    }else if (pattern.elementType === "route") {
+                        for (var i=0; i<processData.routeList.length; i++){
+                            if (processData.routeList[i].id===pattern.elementId) break;
+                        }
+                        Object.keys(processData.routeList[i]).forEach(function(key){
+                            var propertyDefinition = this.designerPropertysData.process[key];
+                            processData.routeList[i].type = pattern.elementType;
+                            _worker.findInDesignerProperty(key, propertyDefinition, processData.routeList[i], option, module, designer);
+                        }.bind(this));
+
+
+                    }else{
+                        if (pattern.elementType=="begin" && pattern.elementId===processData.begin.id){
+                            Object.keys(processData.begin).forEach(function(key){
+                                var propertyDefinition = this.designerPropertysData.process[key];
+                                processData.begin.type = pattern.elementType;
+                                _worker.findInDesignerProperty(key, propertyDefinition, processData.begin, option, module, designer);
+                            }.bind(this));
+                        }else{
+                            var arrKey = pattern.elementType+"List";
+                            for (var i=0; i<processData[arrKey].length; i++){
+                                if (processData[arrKey][i].id===pattern.elementId) break;
+                            }
+                            Object.keys(processData[arrKey][i]).forEach(function(key){
+                                var propertyDefinition = this.designerPropertysData.process[key];
+                                processData[arrKey][i].type = pattern.elementType;
+                                _worker.findInDesignerProperty(key, propertyDefinition, processData[arrKey][i], option, module, designer);
+                            }.bind(this));
+                        }
+
+
+
+                    }
                     switch (pattern.elementType){
                         case "process":
 
@@ -809,12 +936,12 @@ _worker._findProcessPlatformParse_process = function(designer, option, module){
                             break;
                     }
 
-                    var propertyDefinition = this.designerPropertysData.process[pattern.property];
+                   // var propertyDefinition = this.designerPropertysData.process[pattern.property];
 
                    // _worker.findInDesignerProperty(pattern.property, propertyDefinition, option, module, designer);
                 });
 
-                var propertyDefinition = this.designerPropertysData.form[key];
+                //var propertyDefinition = this.designerPropertysData.form[key];
 
 
 
@@ -826,14 +953,14 @@ _worker._findProcessPlatformParse_process = function(designer, option, module){
 
 
 
-                if (patternPropertys.indexOf("data")!=-1){
-                    var formData = JSON.parse(_worker.decodeJsonString(formJson.data.data));
-                    _worker._findInDesigner_form(formData, designer, option, module);
-                }
-                if (patternPropertys.indexOf("mobileData")!=-1){
-                    var formData = JSON.parse(_worker.decodeJsonString(formJson.data.mobileData));
-                    _worker._findInDesigner_form(formData, designer, option, module)
-                }
+                // if (patternPropertys.indexOf("data")!=-1){
+                //     var formData = JSON.parse(_worker.decodeJsonString(formJson.data.data));
+                //     _worker._findInDesigner_form(formData, designer, option, module);
+                // }
+                // if (patternPropertys.indexOf("mobileData")!=-1){
+                //     var formData = JSON.parse(_worker.decodeJsonString(formJson.data.mobileData));
+                //     _worker._findInDesigner_form(formData, designer, option, module)
+                // }
             }, function(){});
         }
     }

+ 314 - 36
o2web/source/x_component_FindDesigner/Main.js

@@ -433,7 +433,18 @@ MWF.xApplication.FindDesigner.Main = new Class({
 			"icon": icon||"",
 			"action": action || null
 		}
-		return tree.appendChild(obj);
+		var node = tree.appendChild(obj);
+		node.addEvent("unselect", function(){
+			if (this.editor){
+				if (this.scriptDesignerDataObject && this.scriptDesignerDataObject[this.editor.pattern.designerId]){
+					this.scriptDesignerDataObject[this.editor.pattern.designerId].text = this.editor.getValue();
+				}
+				this.editor.destroy();
+				this.editor = null;
+				this.previewInforNode.show().inject(this.previewContentNode);
+			}
+		}.bind(this));
+		return node;
 	},
 
 	updatePatternCount: function(node){
@@ -446,11 +457,31 @@ MWF.xApplication.FindDesigner.Main = new Class({
 			textDivNode.set("html", t);
 		}
 	},
-	showFindResult: function(data,option){
+	subPatternCount: function(node){
+		node.patternCount--;
+		if (node.patternCount<0) node.patternCount=0;
+		var textDivNode = node.textNode.getElement("div");
+		if (textDivNode){
+			var text = this.lp.patternCount.replace("{n}", node.patternCount)
+			var t = node.options.text+"&nbsp;&nbsp;<span style='color: #666666'>("+text+")</span>>";
+			//var html = item.options.text;
+			textDivNode.set("html", t);
+		}
+	},
+	addResultTitle: function(){
 		if (!this.patternCount) this.patternCount = 0;
 		this.patternCount++;
 		var t = this.lp.findPatternCount.replace("{n}", this.patternCount);
 		this.listTitleInfoNode.set("text", t);
+	},
+	subResultTitle: function(){
+		if (!this.patternCount) this.patternCount = 1;
+		this.patternCount--;
+		var t = this.lp.findPatternCount.replace("{n}", this.patternCount);
+		this.listTitleInfoNode.set("text", t);
+	},
+	showFindResult: function(data,option){
+		this.addResultTitle();
 
 		this.listInfoNode.hide();
 		this.listContentNode.show();
@@ -500,12 +531,33 @@ MWF.xApplication.FindDesigner.Main = new Class({
 				this.createFormPatternNode(data, designerNode, regexp);
 				break;
 			case "process":
-
+				this.createProcessPatternNode(data, designerNode, regexp);
 				break;
 
 		}
 	},
 
+	createProcessPatternNode: function(data, node, regexp){
+		var text = this.lp.elementPattern.replace("{element}", "&lt;"+data.pattern.type+"&gt;"+data.pattern.name).
+		replace("{property}", "{"+data.pattern.key+"}"+data.pattern.propertyName);
+		text = "<span style='color: #666666'>"+text+"</span>&nbsp;&nbsp;"
+
+		if (data.pattern.line){
+			if (data.pattern.evkey){
+				text += "<b>["+data.pattern.evkey+"]</b>&nbsp;"+((data.pattern.line) ? data.pattern.line+"&nbsp;&nbsp;" : "" )+this.getPatternValue(data.pattern.value, regexp);
+			}else{
+				text += ((data.pattern.line) ? data.pattern.line+"&nbsp;&nbsp;" : "" )+this.getPatternValue(data.pattern.value, regexp);
+			}
+		}else{
+			text += this.getPatternValue(data.pattern.value, regexp);
+		}
+		if (data.pattern.mode){
+			text = "<b>["+data.pattern.mode+"]</b>&nbsp;"+text;
+		}
+
+		patternNode = this.createResultPatternItem(text, "", node, "icon_"+data.pattern.propertyType+".png");
+	},
+
 	createFormPatternNode: function(data, node, regexp){
 		var text = this.lp.elementPattern.replace("{element}", "&lt;"+data.pattern.type+"&gt;"+data.pattern.name).
 			replace("{property}", "{"+data.pattern.key+"}"+data.pattern.propertyName);
@@ -548,7 +600,7 @@ MWF.xApplication.FindDesigner.Main = new Class({
 		var text;
 
 		var openScript = function(node){
-			this.openPatternScript(node.pattern);
+			this.openPatternScript(node);
 		}.bind(this);
 
 		if (data.pattern.property=="text"){
@@ -560,64 +612,275 @@ MWF.xApplication.FindDesigner.Main = new Class({
 		}
 		patternNode.pattern = data;
 	},
-	openPatternScript: function(pattern){
-		// appId: "267d4445-b75c-4627-af26-251e623a5fe8"
-		// appName: "合同"
-		// designerAliase: ""
-		// designerId: "ff1d382f-54af-4bb1-80f9-1e3bc3e4f03c"
-		// designerName: "file"
-		// designerType: "script"
-		// module: "processPlatform"
-		//
-		// appId: "invoke"
-		// appName: "接口"
-		// designerAliase: ""
-		// designerId: "80c08112-afa1-48b1-b693-87ba8504f47c"
-		// designerName: "getService"
-		// designerType: "script"
-		// module: "service"
-debugger;
-		if (this.editor && this.editor.pattern.designerId === pattern.designerId && this.editor.pattern.module === pattern.module){
-			this.reLocationEditor(pattern);
+	openPatternScript: function(node){
+		var pattern = node.pattern;
+		if (this.editor && this.editor.pattern.designerId === node.pattern.designerId && this.editor.pattern.module === node.pattern.module){
+			this.reLocationEditor(node.pattern);
 		}else{
-			if (this.editor) this.editor.destroyEditor();
+			if (this.editor){
+				if (this.scriptDesignerDataObject && this.scriptDesignerDataObject[this.editor.pattern.designerId]){
+					this.scriptDesignerDataObject[this.editor.pattern.designerId].text = this.editor.getValue();
+				}
+				this.editor.destroy();
+			}
 			this.editor = null;
 			this.previewInforNode.hide().dispose();
 
-			switch (pattern.module){
+			var m;
+			switch (node.pattern.module){
 				case "processPlatform":
-					o2.Actions.load("x_processplatform_assemble_designer").ScriptAction.get(pattern.designerId).then(function(json){
-						if (json.data) this.openProcessPlatformPatternScript(json.data, pattern);
-					}.bind(this), function(){});
-
+					m = o2.Actions.load("x_processplatform_assemble_designer").ScriptAction.get;
 					break;
 				case "cms":
-
+					m = o2.Actions.load("x_cms_assemble_control").ScriptAction.get;
 					break;
 				case "portal":
-
+					m = o2.Actions.load("x_portal_assemble_designer").ScriptAction.get;
 					break;
 				case "service":
-
+					m = (node.pattern.appId==="invoke") ? o2.Actions.load("x_program_center").InvokeAction.get : o2.Actions.load("x_program_center").AgentAction.get;
 					break;
 			}
+			this.openPatternScriptWithData(m, node);
 		}
 	},
-	openProcessPlatformPatternScript: function(data, pattern){
+	openPatternScriptWithData: function(m, node){
+		if (this.scriptDesignerDataObject && this.scriptDesignerDataObject[node.pattern.designerId]){
+			this.openPatternScriptEditor(this.scriptDesignerDataObject[node.pattern.designerId], node);
+		}else{
+			if (m) m(node.pattern.designerId).then(function(json){
+				if (!this.scriptDesignerDataObject) this.scriptDesignerDataObject = {};
+				this.scriptDesignerDataObject[node.pattern.designerId] = json.data;
+				if (json.data) this.openPatternScriptEditor(json.data, node);
+			}.bind(this), function(){});
+		}
+	},
+
+	openPatternScriptEditor: function(data, node){
 		o2.require("o2.widget.JavascriptEditor", function(){
 			this.editor = new o2.widget.JavascriptEditor(this.previewContentNode, {
 				"option": {"value": data.text}
 			});
-			this.editor.pattern = pattern;
+			this.editor.pattern = node.pattern;
+			this.editor.designerNode = node.parentNode;
+			this.editor.designerData = data;
 			this.editor.load(function(){
 				if (this.previewToolbar){
 					this.previewToolbar.childrenButton[0].enable();
 					this.previewToolbar.childrenButton[1].enable();
 				}
-				this.reLocationEditor(pattern);
+				this.editor.addEvent("change", function(){
+					this.editor.isRefind = true;
+				}.bind(this));
+				this.editor.addEvent("blur", function(){
+					if (this.editor.isRefind) this.reFindInDesigner();
+				}.bind(this));
+				this.editor.addEvent("destroy", function(){
+					this.previewToolbar.childrenButton[0].disable();
+					this.previewToolbar.childrenButton[1].disable();
+				}.bind(this));
+				this.editor.addEvent("save", function(){
+					this.saveDesigner();
+				}.bind(this));
+
+
+				//var idx = node.parentNode.children.indexOf(node);
+				//this.reFindInDesigner();
+				this.reLocationEditor(node.pattern);
+				//if (node.parentNode.children[idx]) node.parentNode.children[idx].clickNode();
 			}.bind(this));
 		}.bind(this));
 	},
+	findScriptLineValue: function(result, code, preLine, preIndex, len, regex){
+		var lineRegexp = /\r\n|\n|\r/g;
+		var preText = code.substring(preIndex, result.index);
+		var m = preText.match(lineRegexp);
+		preLine += (m) ? m.length : 0;
+
+		var value = result[0];
+
+		var n = result.index-1;
+		var char = code.charAt(n);
+		while (!lineRegexp.test(char) && n>=0){
+			value = char+value;
+			n--;
+			char = code.charAt(n);
+		}
+		n =  regex.lastIndex;
+		char = code.charAt(n);
+		while (!lineRegexp.test(char) && n<len){
+			value = value+char;
+			n++;
+			char = code.charAt(n);
+		}
+		preIndex = regex.lastIndex = n;
+		return {"value": value, "preLine": preLine, "preIndex": preIndex};
+	},
+	reFindInDesigner: function(){
+		debugger;
+		if (this.editor && this.editor.designerNode){
+			while (this.editor.designerNode.firstChild){
+				this.editor.designerNode.firstChild.destroy();
+				this.subResultTitle();
+
+				var moduleNode = (this.tree.modules) ? this.tree.modules[this.editor.pattern.module] : null;
+				if (moduleNode) this.subPatternCount(moduleNode);
+
+				var appNode = (moduleNode.apps) ? moduleNode.apps[this.editor.pattern.appId] : null;
+				if (appNode) this.subPatternCount(appNode);
+
+				var typeNode = (appNode.types) ? appNode.types[this.editor.pattern.designerType] : null;
+				if (typeNode) this.subPatternCount(typeNode);
+
+				var designerNode = (typeNode.designers) ? typeNode.designers[this.editor.pattern.designerId] : null;
+				if (designerNode) this.subPatternCount(designerNode);
+			}
+			var code = this.editor.getValue();
+			if (code){
+				var regex = this.getFilterOptionRegex(this.filterOption)
+				regex.lastIndex = 0;
+				var len = code.length;
+
+				var preLine = 0;
+				var preIndex = 0;
+				var result;
+				while ((result = regex.exec(code)) !== null){
+					var obj = this.findScriptLineValue(result, code, preLine, preIndex, len, regex);
+					preLine = obj.preLine;
+					preIndex = obj.preIndex;
+
+					this.showFindResult(this._createFindMessageReplyData( this.editor.pattern.module, this.editor.pattern, "", {
+						"property": "text",
+						"value": obj.value,
+						"line": preLine+1
+					}), this.filterOption);
+				}
+			}
+		}
+		this.editor.isRefind = false;
+	},
+
+	saveDesigner: function(){
+		if (this.editor && this.editor.pattern){
+			var pattern = this.editor.pattern;
+			var data = this.editor.designerData;
+
+			switch (pattern.designerType){
+				case "script":
+					var m;
+					switch (pattern.module){
+						case "processPlatform":
+							m = o2.Actions.load("x_processplatform_assemble_designer").ScriptAction.put;
+							break;
+						case "cms":
+							m = o2.Actions.load("x_cms_assemble_control").ScriptAction.put;
+							break;
+						case "portal":
+							m = o2.Actions.load("x_portal_assemble_designer").ScriptAction.put;
+							break;
+						case "service":
+							m = (node.pattern.appId==="invoke") ? o2.Actions.load("x_program_center").InvokeAction.update : o2.Actions.load("x_program_center").AgentAction.update;
+							break;
+					}
+					data.text = this.editor.getValue();
+					if (m) m(data.id, data).then(function(){
+						this.notice(this.lp.notice.save_success, "success", this.previewContentNode, {"x": "left", "y": "bottom"});
+					}.bind(this), function(){});
+
+					break;
+				case "form":
+					//this.createFormPatternNode(data, designerNode, regexp);
+					break;
+				case "process":
+
+					break;
+			}
+		}
+	},
+
+	openDesinger: function(){
+		if (this.editor && this.editor.pattern){
+			var pattern = this.editor.pattern;
+
+			switch (pattern.designerType){
+				case "script":
+					var m;
+					switch (pattern.module){
+						case "processPlatform":
+							var options = {
+								"appId": "process.ScriptDesigner"+pattern.designerId,
+								"id": pattern.designerId,
+								"application":  pattern.appId,
+							};
+							layout.openApplication(null, "process.ScriptDesigner", options);
+							break;
+						case "cms":
+							var options = {
+								"appId": "cms.ScriptDesigner"+pattern.designerId,
+								"id": pattern.designerId,
+								"application":  pattern.appId,
+							};
+							layout.openApplication(null, "cms.ScriptDesigner", options);
+							break;
+						case "portal":
+							var options = {
+								"appId": "portal.ScriptDesigner"+pattern.designerId,
+								"id": pattern.designerId,
+								"application":  pattern.appId,
+							};
+							layout.openApplication(null, "portal.ScriptDesigner", options);
+							break;
+						case "service":
+							if (pattern.appId==="invoke"){
+								var options = {
+									"appId": "service.InvokeDesigner"+pattern.designerId,
+									"id": pattern.designerId,
+								};
+								layout.openApplication(null, "service.InvokeDesigner", options);
+							}else{
+								var options = {
+									"appId": "service.AgentDesigner"+pattern.designerId,
+									"id": pattern.designerId,
+								};
+								layout.openApplication(null, "service.AgentDesigner", options);
+							}
+							break;
+					}
+					break;
+				case "form":
+					//this.createFormPatternNode(data, designerNode, regexp);
+					break;
+				case "process":
+
+					break;
+			}
+			window.setTimeout(function(){
+				if (this.scriptDesignerDataObject && this.scriptDesignerDataObject[this.editor.pattern.designerId]){
+					this.scriptDesignerDataObject[this.editor.pattern.designerId] = null;
+					delete this.scriptDesignerDataObject[this.editor.pattern.designerId];
+				}
+				if (this.editor) this.editor.destroy();
+				this.editor = null;
+
+				this.previewInforNode.show().inject(this.previewContentNode);
+			}.bind(this), 100);
+		}
+	},
+
+
+	_createFindMessageReplyData: function(module, designer, aliase, pattern){
+		return {
+			"module": module,
+			"appId": designer.appId,
+			"appName": designer.appName,
+			"designerId": designer.designerId,
+			"designerName": designer.designerName,
+			"designerType": designer.designerType,
+			"designerAliase": aliase,
+
+			"pattern": pattern
+		};
+	},
 
 	reLocationEditor: function(pattern){
 		this.editor.gotoLine(pattern.pattern.line, 1);
@@ -715,10 +978,12 @@ debugger;
 		this.listInfoNode.addClass("loadding");
 		this.patternCount = 0;
 
-		if (this.editor) this.editor.destroyEditor();
+		if (this.editor) this.editor.destroy();
 		this.editor = null;
 		this.previewInforNode.show().inject(this.previewContentNode);
 
+		this.scriptDesignerDataObject = null;
+
 		this.getFindWorker();
 		var actions = this.getActionsUrl();
 
@@ -735,6 +1000,19 @@ debugger;
 	},
 
 	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	//------------------------------------------------------------
+	// ------------------------------------------------------------
+	// ------------------------------------------------------------
+
+
 
 	findDesigner_bak: function(){
 		this.listContentNode.hide();

+ 5 - 1
o2web/source/x_component_FindDesigner/lp/zh-cn.js

@@ -41,5 +41,9 @@ MWF.xApplication.FindDesigner.LP = {
 	"elementPattern": "<b>元素:</b> {element}, <b>属性:</b> {property}: ",
 
 	"saveDesigner": "保存设计元素",
-	"openDesigner": "打开应用"
+	"openDesigner": "打开应用",
+
+	"notice": {
+		"save_success": "保存成功!"
+	}
 };

+ 38 - 38
o2web/source/x_component_FindDesigner/propertys.json

@@ -204,75 +204,75 @@
     "startableIdentityList": {"name": "启动者", "type":"array"},
     "startableUnitList": {"name": "启动组织", "type":"array"},
     "serialTexture": {"name": "编号规则", "type":"serial"},
-    "expireScriptText": {"name": "超时脚本", "type":"scriptText"},
+    "expireScriptText": {"name": "超时脚本", "type":"script"},
     "projection": {"name": "数据映射", "type":"projection"},
 
-    "beforeBeginScriptText": {"name": "流程启动前事件", "type":"scriptText"},
-    "afterBeginScriptText ": {"name": "流程启动后事件", "type":"scriptText"},
-    "beforeEndScriptText ": {"name": "流程结束前事件", "type":"scriptText"},
-    "afterEndScriptText ": {"name": "流程结束后事件", "type":"scriptText"},
-    "beforeArriveScriptText ": {"name": "活动到达前事件", "type":"scriptText"},
-    "afterArriveScriptText ": {"name": "活动到达后事件", "type":"scriptText"},
-    "beforeExecuteScriptText ": {"name": "活动执行前事件", "type":"scriptText"},
-    "afterExecuteScriptText ": {"name": "活动执行后事件", "type":"scriptText"},
-    "beforeInquireScriptText": {"name": "路由查询前事件", "type":"scriptText"},
-    "afterInquireScriptText ": {"name": "路由查询后事件", "type":"scriptText"},
+    "beforeBeginScriptText": {"name": "流程启动前事件", "type":"script"},
+    "afterBeginScriptText ": {"name": "流程启动后事件", "type":"script"},
+    "beforeEndScriptText ": {"name": "流程结束前事件", "type":"script"},
+    "afterEndScriptText ": {"name": "流程结束后事件", "type":"script"},
+    "beforeArriveScriptText ": {"name": "活动到达前事件", "type":"script"},
+    "afterArriveScriptText ": {"name": "活动到达后事件", "type":"script"},
+    "beforeExecuteScriptText ": {"name": "活动执行前事件", "type":"script"},
+    "afterExecuteScriptText ": {"name": "活动执行后事件", "type":"script"},
+    "beforeInquireScriptText": {"name": "路由查询前事件", "type":"script"},
+    "afterInquireScriptText ": {"name": "路由查询后事件", "type":"script"},
 
     "readIdentityList": {"name": "待阅人", "type":"array"},
     "readUnitList": {"name": "待阅组织", "type":"array"},
     "readGroupList": {"name": "待阅群组", "type":"array"},
     "readDataPathList": {"name": "待阅人表单数据", "type":"array"},
-    "readScriptText": {"name": "待阅人脚本", "type":"scriptText"},
+    "readScriptText": {"name": "待阅人脚本", "type":"script"},
     "readDuty": {"name": "待阅人职务", "type":"duty"},
     "reviewIdentityList": {"name": "可阅读人", "type":"array"},
     "reviewUnitList": {"name": "可阅读组织", "type":"array"},
     "reviewGroupList": {"name": "可阅读群组", "type":"array"},
     "reviewDataPathList": {"name": "可阅读人表单数据", "type":"array"},
-    "reviewScriptText": {"name": "可阅读人脚本", "type":"scriptText"},
+    "reviewScriptText": {"name": "可阅读人脚本", "type":"script"},
     "reviewDuty": {"name": "可阅读人职务", "type":"duty"},
 
-    "scriptText": {"name": "脚本", "type":"scriptText"},
+    "scriptText": {"name": "脚本", "type":"script"},
 
-    "targetTitleScriptText": {"name": "流程调用标题脚本", "type":"scriptText"},
-    "targetAssginDataScriptText": {"name": "流程调用数据脚本", "type":"scriptText"},
+    "targetTitleScriptText": {"name": "流程调用标题脚本", "type":"script"},
+    "targetAssginDataScriptText": {"name": "流程调用数据脚本", "type":"script"},
     "targetIdentity": {"name": "流程调用启动者"},
-    "targetIdentityScriptText": {"name": "流程调用启动者脚本", "type":"scriptText"},
+    "targetIdentityScriptText": {"name": "流程调用启动者脚本", "type":"script"},
 
-    "delayScriptText": {"name": "定时脚本", "type":"scriptText"},
+    "delayScriptText": {"name": "定时脚本", "type":"script"},
     "delayDataPath": {"name": "定时数据路径"},
 
     "jaxwsAddress": {"name": "WSDL地址"},
     "jaxwsMethod": {"name": "调用方法"},
-    "jaxwsParameterScriptText": {"name": "参数脚本", "type":"scriptText"},
-    "jaxwsResponseScriptText": {"name": "响应脚本", "type":"scriptText"},
+    "jaxwsParameterScriptText": {"name": "参数脚本", "type":"script"},
+    "jaxwsResponseScriptText": {"name": "响应脚本", "type":"script"},
     "jaxrsAddress": {"name": "REST服务地址"},
     "jaxrsContentType": {"name": "ContentType"},
-    "jaxrsParameterScriptText ": {"name": "参数脚本", "type":"scriptText"},
-    "jaxrsBodyScriptText ": {"name": "消息体脚本", "type":"scriptText"},
-    "jaxrsHeadScriptText ": {"name": "消息头脚本", "type":"scriptText"},
-    "jaxrsResponseScriptText": {"name": "响应脚本", "type":"scriptText"},
+    "jaxrsParameterScriptText ": {"name": "参数脚本", "type":"script"},
+    "jaxrsBodyScriptText ": {"name": "消息体脚本", "type":"script"},
+    "jaxrsHeadScriptText ": {"name": "消息头脚本", "type":"script"},
+    "jaxrsResponseScriptText": {"name": "响应脚本", "type":"script"},
 
     "group": {"name": "活动组"},
     "opinionGroup": {"name": "意见组"},
 
-    "taskIdentityList": {"name": "待人", "type":"array"},
-    "taskUnitList": {"name": "待组织", "type":"array"},
-    "taskGroupList": {"name": "待群组", "type":"array"},
-    "taskDataPathList": {"name": "待人表单数据", "type":"array"},
-    "taskScriptText": {"name": "待阅人脚本", "type":"scriptText"},
-    "taskDuty": {"name": "待人职务", "type":"duty"},
-    "taskExpireScriptText": {"name": "超时脚本", "type":"scriptText"},
+    "taskIdentityList": {"name": "待人", "type":"array"},
+    "taskUnitList": {"name": "待组织", "type":"array"},
+    "taskGroupList": {"name": "待群组", "type":"array"},
+    "taskDataPathList": {"name": "待人表单数据", "type":"array"},
+    "taskScriptText": {"name": "待办人脚本", "type":"script"},
+    "taskDuty": {"name": "待人职务", "type":"duty"},
+    "taskExpireScriptText": {"name": "超时脚本", "type":"script"},
 
-    "manualStayScriptText": {"name": "等待人工处理事件", "type":"scriptText"},
-    "manualBeforeTaskScriptText ": {"name": "待办处理前事件", "type":"scriptText"},
-    "manualAfterTaskScriptText ": {"name": "待办处理后事件", "type":"scriptText"},
+    "manualStayScriptText": {"name": "等待人工处理事件", "type":"script"},
+    "manualBeforeTaskScriptText ": {"name": "待办处理前事件", "type":"script"},
+    "manualAfterTaskScriptText ": {"name": "待办处理后事件", "type":"script"},
 
     "opinion": {"name": "默认意见"},
-    "appendTaskIdentityScriptText": {"name": "转交脚本", "type":"scriptText"},
+    "appendTaskIdentityScriptText": {"name": "转交脚本", "type":"script"},
     "decisionOpinion": {"name": "决策组"},
-    "validationScriptText": {"name": "路由校验脚本", "type":"scriptText"},
-    "displayNameScriptText": {"name": "路由显示名称脚本", "type":"scriptText"},
-    "hiddenScriptText ": {"name": "隐藏条件脚本", "type":"scriptText"},
+    "validationScriptText": {"name": "路由校验脚本", "type":"script"},
+    "displayNameScriptText": {"name": "路由显示名称脚本", "type":"script"},
+    "hiddenScriptText ": {"name": "隐藏条件脚本", "type":"script"},
     "selectConfig": {"name": "组织选择配置", "type":"selectConfig"}
   }
 }

+ 1 - 0
o2web/source/x_component_cms_ColumnManager/ScriptExplorer.js

@@ -224,6 +224,7 @@ MWF.xApplication.cms.ColumnManager.ScriptExplorer.Script = new Class({
 	_open: function(e){
 		var _self = this;
 		var options = {
+            "appId": "cms.ScriptDesigner"+_self.data.id,
 			"onQueryLoad": function(){
 				this.actions = _self.explorer.actions;
 				this.category = _self;

+ 1 - 0
o2web/source/x_component_service_ServiceManager/AgentExplorer.js

@@ -263,6 +263,7 @@ MWF.xApplication.service.ServiceManager.AgentExplorer.Agent= new Class({
 	_open: function(e){
         var _self = this;
         var options = {
+            "appId": "service.AgentDesigner"+_self.data.id,
             "onQueryLoad": function(){
                 this.actions = _self.explorer.actions;
                 this.category = _self;

+ 1 - 0
o2web/source/x_component_service_ServiceManager/InvokeExplorer.js

@@ -263,6 +263,7 @@ MWF.xApplication.service.ServiceManager.InvokeExplorer.Invoke= new Class({
 	_open: function(e){
         var _self = this;
         var options = {
+            "appId": "service.InvokeDesigner"+self.data.id,
             "onQueryLoad": function(){
                 this.actions = _self.explorer.actions;
                 this.category = _self;