⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modellocator.as

📁 本人为公司开发的Flex办公系统web源码,包括数据库脚本文件。
💻 AS
📖 第 1 页 / 共 2 页
字号:
package model
{
	import flash.events.EventDispatcher;
	import flash.external.ExternalInterface;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.utils.*;
	
	import mx.collections.ArrayCollection;
	import mx.collections.IViewCursor;
	import mx.controls.Alert;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	[Bindable]
	public class ModelLocator extends EventDispatcher
	{
		//静态常量,定义事件类型
		//public static const LOGIN_OK:String = "loginOK";
		//public static const LOGIN_FAILED:String ="loginFailed";
		//public static const addContactEvent:String = "addContact";
		//public static const selectContactEvent:String = "selectContact";

		//变量		
		public var Statuses:ArrayCollection;//所有的记录数据,每个元素都是一个Status对象
		//public var users:ArrayCollection; //所有的记录数据,每个元素都是一个User对象
			
		public var Array_Mains:ArrayCollection;//所有MRP集合
		public var Array_Subs:ArrayCollection; //一条主记录所对应的ECN明细记录
		public var ArrayTreeXML:XMLList=new XMLList();
		public var ArrayCursor:IViewCursor;
		
		public var Araay_face:ArrayCollection;
		//public var selectedUser:User; //当前正在查看的记录
			
		public var icurruid:int;	//当前用户编号
		public var suser_name:String;//当前用户名称

		public var idepid:int=0;//部门号
		
		public var sError:String; //出错提示
	
	//对于obj,按照其fldname的值在src数组集中查找对应的记录,并返回在src中找到的记录位置号	
	public static function getArrayColIndex1(src:ArrayCollection,findstr:String,fldname:String):int{
	  var ire:int=0;
	  for each(var ob:Object in src){
	    if (ob[fldname].toString()==findstr){
	     return ire;
	    }
	    ire++;
	  }
	  return ire;
	}	
	
	//对于obj,按照其fldname1和fldname2的值在src数组集中查找对应的记录,并返回在src中找到的记录位置号	
	public static function getArrayColIndex(src:ArrayCollection,obj:Object,fldname1:String,fldname2:String):int{
	  var ire:int=0;
	  for each(var ob:Object in src){
	    if (ob[fldname1].toString()==obj[fldname1].toString() && ob[fldname2].toString()==obj[fldname2].toString()){
	     return ire;
	    }
	    ire++;
	  }
	  return ire;
	}	
	
	//对于obj,按照其fldname1和fldname2的值在src数组集中查找对应的记录,并返回在src中找到的记录位置号	
	public static function getArrayRowIndex(src:Array,obj:Object,fldname1:String,fldname2:String):int{
	  var ifound:Boolean=false;//未找到
	  var ire:int=0;
	  for each(var ob:Object in src){
	    if (ob[fldname1].toString()==obj[fldname1].toString() && ob[fldname2].toString()==obj[fldname2].toString()){
	      ifound =true;	
	     return ire;
	    }
	    ire++;
	  }
	  if (ifound){
	   return ire;
	  }else{
	   return -1;
	  }
	}	
	
	  //取得增加记录的update sql语句数组,fldname1和fldname2是关键字段
	public static function getAddedArraySql2(src:Array,curr:Array,fldname1:String,fldname2:String,tabname:String,subtbfldsArr:Array,subtbfldstype:Array):Array{
	      var adddataArray:Array = new Array();
	      //比较curr和src,找出增加的记录,即按curr主键字段 not in src主键字段,取得对应curr中的数组项
	      var istep:int=0;
	      var irowc:int=curr.length;
	      for(istep;istep<irowc;istep++){
	      	var innercurrstep:int=0;//本次外循坏在内循环次数中累计循环次数
	        for each (var item:Object in src){
	          innercurrstep+=1;	
	         //如果在原始数组中存在(外循环)当前记录,则表示此行不是增加的记录,此时结束内循环
	          //var innerfound:Boolean=false;//(内循环中)在原始数组中是否找到与当前记录相同的行	
	          if (curr[istep][fldname1].toString()==item[fldname1].toString() &&
	              curr[istep][fldname2].toString()==item[fldname2].toString()){
	              //innerfound=true;//只要在原始数组中找到相同行,则不是增加的记录,设置innerfound并跳出循环	
	              //innerfound=true;这一行代码其实可以不要,因为后面就已经break了
	              break; //结束内循环,如果需要直接结束外循环则需在外循环前加一标签,并在这里使用"break 标签"语法
	           }else{
	              if (innercurrstep==src.length){//内循环在原始数组中没找到记录,则表示是增加的记录
	               adddataArray.push(curr[istep]);
	              }
	           }
	           /* if (!(innerfound)){//如果在原始数组中没找到当前记录则表示当前记录是增加的行
	             adddataArray.push(curr[istep]);
	            } */   
	         }
	       }
	      return ModelLocator.getSqlArray(adddataArray,tabname,"Add",subtbfldsArr,subtbfldstype,2);
	     //上述内循环中依据主键字段来判断是否增加的记录,因此主键字段是其依赖性字段,
	     //也就是说不能先删除一笔记录,再增加一笔新记录(这是用户的要求),上述算法会当作是修改一笔记录(某种条件下也说得通)
	     //因此这也是删除一笔时就直接调用远程方法执行操作,而不像增加和修改操作可以一次多笔记录。
	    }
	
	  //取得增加记录的update sql语句数组,fldname1和fldname2是关键字段
	 public static function geteditedArraySql2(src:Array,curr:Array,fldname1:String,fldname2:String,tabname:String,subtbfldsArr:Array,subtbfldstype:Array):Array{
	      var editdataArray:Array = new Array();
	      //比较curr和src,找出修改过的记录,即按curr各个字段和src各个对应字段比较,如任一对应字段值不同则该记录为修改过的
	      //这里由于只是为了找修改过的记录,因此src作为比较对象,curr作为被比较对象,与上面找增加的记录相反。
	     var istep:int=0;
	     var irowc:int=src.length;
	     for(istep;istep<irowc;istep++){
	       //for each(var item:Object in curr){	//不需全部遍历,可以首先按关键字段去找对应记录(getArrayRowIndex函数)
	       var founddiffrec:Boolean=false;//是否找到修改过的记录,默认为false(以便内循环中继续找)
	        //首先找到curr对应记录(按关键字段)的位置号索引
	        var idx:int=getArrayRowIndex(curr,src[istep],fldname1,fldname2);
	        //Alert.show(idx.toString(),"源数组当前记录在当前数组记录中位置");	        
	        if (idx>=0){//如果找到对应记录,则进行比较
	         //if (src[istep].toString()!=curr[idx].toString()){//如果修改过
	         for each(var va:String in subtbfldsArr){
	           if (src[istep][va].toString()!=curr[idx][va].toString()){	
	           founddiffrec=true;
	           editdataArray.push(curr[idx]);//加入到修改过记录的数组中去
	           }
	         }
	        }else{//如果在curr中没找到src当前记录的对应记录,则表示用户已经删除该记录	        
	          }	
	        //if (founddiffrec){}移到founddiffrec=true语句后          
	      // }
	     } 
	     return  getSqlArray(editdataArray,tabname,"Edit",subtbfldsArr,subtbfldstype,2);
	     // return ModelLocator.getSqlArray(editdataArray,...);
	    }    
	
	public static function traceDetail(obj:Object):void{
	  for each(var so:Object in obj){
	  	for each(var va:String in so){
	     trace(va);
	  	}
	}	
	}
	
	public static function clone(obj:Object):* {
            var copier:ByteArray = new ByteArray();
            copier.writeObject(obj);
            copier.position = 0;
            return copier.readObject();
	    }
	//过滤数据集
	public static function filterArrayCol(src:ArrayCollection,filterfunc:Function):ArrayCollection{
	  src.filterFunction = filterfunc;
	  src.refresh();
	  return src;
	}
	
	//对指定字段,取得数组集合的该字段的数组集
	public static function getDistinctArray(src:ArrayCollection,fldname:String):ArrayCollection{
	  var arr:Array=new Array();
	  var befvalue:String;
	  befvalue=src.getItemAt(0)[fldname].toString();
	  arr.push(befvalue);	
	  var nowvalue:String;
	  var tmpvalue:String;
	  for(var idx:int=1;idx<src.length;idx++){//从第二行开始,与第一行比较	  	     
	  	     nowvalue = src.getItemAt(idx)[fldname].toString();		
	  	     if (nowvalue != befvalue){
	  	     arr.push(nowvalue);		 	  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -