电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

EAS预警平台使用说明.doc

EAS预警平台使用说明.doc_第1页
1/40
EAS预警平台使用说明.doc_第2页
2/40
EAS预警平台使用说明.doc_第3页
3/40
目录1.业务目标.11.1业务背景.21.2业务目标.22.预警平台使用.22.1预警原理.22.2预警模板的组成.22.3基本概念.32.3.1预警模板..32.3.2预警条目..32.3.3预警对象..32.3.4过滤条件..42.3.5预警条件..42.3.6预警阀..42.3.7预警调度..42.4员工生日预警案例.42.4.1定义预警模板..42.4.2定义预警条目..132.4.3测试预警条目..162.5预警条件编写.182.6预警动态接收人设置.203.预警平台整体架构简介.213.1实体及实体关系.213.1.1预警模块所有实体、实体的别名及对应的表:..213.1.2实体关系图..223.2功能对象.223.2.1DataCenterFacade.facade..223.2.2ForewarnRunTime.facade.233.3预警使用(接口)..233.4预警流程.243.4.1即时预警流程..243.5预警执行.253.5.1准备环境..253.5.2执行简单预警..263.5.3检查预警对象实例合理性..263.5.4获取实例组合集合..263.5.5获取满足预警条件的实例组合..273.5.6构建消息..273.6新建模板流程.293.7复制模板流程.304.预警平台常见错误和问题..31预警平台使用说明1.业务目标1.1业务背景常见业务如下两种情况①员工合同到期通知,员工生日通知,业务长期未处理通知。②单据审核提单,付款单提交结算中心根据上面的两种情况可以看出,预警分为两种情况:一是对将要发生的事情进行预警,如员工生日预警,在员工生日前某个时间起,开始周期性的将员工生日快要到的信息发送给相关的人员。另一种情况是,对发生的事情进行预警,如,付款单提交结算中心,当付款单提交结算中心后,需要相关的人员对它进行处理,因此首先需要通知相关的人员,及时预警就应运而生。1.2业务目标规范员工合同管理、防止人员流失、清理冗员。在员工合同到期时前对员工的续约情况进行预处理等。主要作用是及时的通知相关的人员进行相应的业务处理,以达到减少业务流程的时间,提高工作效率和避免不好的事发生的作用。2.预警平台使用2.1预警原理针对数据库中的数据进行业务逻辑检查,当存在有即将导致某些意外情况发生时,以消息形式提醒相关的人。预警有两种触发机制,一种是周期性的,通过设置时间来有规律的执行,即周期预警;一种是通过操作来触发,当用户进行某项操作时,如保存单据或提交单据等,就会触发某个预警的产生。2.2预警模板的组成图2-1预警模板组成图2.3基本概念2.3.1预警模板预警模板即为方案。模板中固化某些不常变化的信息,如预警条件,预警消息内容,确定一定格式。模板是不能运行的,预警模板的作用是为简便预警条目而产生的。2.3.2预警条目预警条目基于预警模板生成,预警条目可以在生成或更改接收人等容易变化的信息。预警条目是可以执行的,通过启用或禁用来使用预警,即预警条目才是真正预警运行的实例。2.3.3预警对象预警对象是已有业务对象或者用户自定义业务对象,可以是实体或功能,预警对象中的实体关联数据库表。如果对员工生日预警,那么预警的对象就是员工,即com.kingdee.eas.basedata.person.Person。2.3.4过滤条件过滤条件是对预警对象集合的过滤。例如对员工生日预警,可设置过滤条件为:员工生日大于等今天的日期。如果员工生日已经过了就不对他进行预警处理了。2.3.5预警条件预警条件即什么情况下预警。如在周期预警下,员工生日预警可定义为提前30天,每天12:00,那么在某个员工生日前30天每天的12:00都会触发员工生日预警这个条目。在即时预警下,如对凭证提交预警,当用户新增凭证后,一旦提交,系统就会发出预警消息。2.3.6预警阀临界值,即执行预警的下限。如预警条件所述的员工生日预警,提前30天,30就是此处的预警阀值。2.3.7预警调度执行任务的时间,可以是一次预警,也可以是周期性预警。任何一种调度周期都要设定起始时间,对周期调度还要设定具体周期。2.4员工生日预警案例2.4.1定义预警模板进入【功能菜单】【系统平台】【预警平台】双击打开“预警系统配置”,进入如下所示的“增加预警模板”界面。在“预警模板类型”中选择“周期预警”,预警主对象中,如下图所示选择“员工_个人信息”。图2-2预警模板新增界面在下图预警编辑界面中填写好模板编码,模板名称等基本信息。在过滤条件中可根据业务需求,设置具体的过滤条件。图2-3预警模板修改界面接下来编写预警条件,“条件表达式”是通过公式平台来编辑的,编辑好后可进行校验,看公式编辑得是否正确。图2-4预警模板编辑界面图2-5预警条件公式编辑器图2-6预警条件及阀值最后一项是“消息设置”。“主题”可以是文字也可以是表达式。图2-7预警消息设置如下图所示是选择消息的接收人。图2-8预警消息接收人设置图2-9预警消息接收人及表达式下两图为设置预警的调度周期。图2-10预警模板调度周期设置图2-11预警模板调度周期设置2.4.2定义预警条目预警条目即为预警模板的实例。进入【功能菜单】【系统平台】【预警平台】双击打开“预警条目设置”。如下图所示,选择之前定义好的“生日预警”模板,点击“新增”。图2-12定义预警条目图2-13预警条目编辑在上图中填写发“条目编码”、“条目名称”等基本信息,根据实际情况,还可重新设定预警“阀值”。最后保存,并“启用”该条目。图2-14启用预警条目2.4.3测试预警条目选择定义好的预警条目,按“F10”键,弹出如下图所示的预警测试界面。图2-15预警测试界面点击界面中的上图所示的“立即执行预警条目”按钮,无论此条目是否启用预警都要运行。在“该消息接收人如下:”文本框中将出现如下文字:(id:00000000-0000-0000-0000-00000000000013B7DE7F,name:administrator,number:administrator)选中【消息中心】的“预警”,会看到一条新的“员工生日预警”消息,如下图所示。图2-16预警成功执行发出的预警消息2.5预警条件编写预警条件即什么情况下预警。如在周期预警下,员工生日预警可定义为提前30天,每天12:00,那么在某个员工生日前30天每天的12:00都会触发员工生日预警这个条目。在即时预警下,如对凭证提交预警,当用户新增凭证后,一旦提交,系统就会发出预警消息。如下图是员工生日预警中预警条件表达式:当离员工生日为“提前天数”时,即执行预警,此处的条件应设为员工生日减去当前日期小于或等于“提前天数”即阀值。图2-17预警条件编辑可按如下步骤编写预警条件:①进行空值判断。此处员工生日有可能为空,如果不进行判断的话,在执行预警时,如果员工生日没有录入即员工生日为空时就会报leftValueisnull的错误。具体编写如下:如果(Person.出生年月是null){公式结果=false;}②编写预警条件主体即什么情况下将要执行预警,此处为:当前日期距员工生日日期小于等于30天,具体编写如下:否则如果(month(convertJavaDate(Person.出生年月))大于month(now())或month(convertJavaDate(Person.出生年月))是month(now())并且date(convertJavaDate(Person.出生年月))大于等于date(now())){公式结果=(month(convertJavaDate(Person.出生年月))-month(now()))*30+date(convertJavaDate(Person.出生年月))-date(now())小于等于预警提前天数;}③判断其他情况,此步骤可有可无此处其他情况即为当①②均不满足的情况,在前面员工生日预警中,条件编写如下否则{公式结果=false;}④检查脚本是否正确可通过预警条件右边的“检测条件脚本”按钮来检查脚本是否合理。2.6预警动态接收人设置例:取职员所属部门目前预警不支持实体所定义的方法,只能在其功能对象里面定义取关联属性的方法。在预警模板--“消息设置”的“接收人”点击弹出“消息接收人列表”界面,在该界面上点击“动态接收人设置”来进行接收人公式表达式编辑。如下图图2-18预警动态接收人编辑输入编码和名称之后,点击编辑按钮进行入公式表达式编辑界面,如下图:图2-19动态接收人公式编辑找到功能里面的如上图所示的,“取职员的所属或挂靠部门名称()”方法,在右边可看到此方法的返回类型和需要传入参数的类型,可知需要传一个类型为BOSUuid的参数,即职员的id.最终公式编写的结果为:公式结果=取职员关联属性功能.取职员的所属或挂靠部门名称(Person.ID);3.预警平台整体架构简介3.1实体及实体关系3.1.1预警模块所有实体、实体的别名及对应的表:实体别名表ForewarnItem预警条目或模板T_FW_ForewarnItemForewarnObject预警对象T_FW_ForewarnObjectForewarnCondition预警条件T_FW_ConditionForewarnThreshold预警阀T_FW_ThresholdForewarnMessage预警消息T_FW_ForewarnMsgForewarnReceiver预警接收人T_FW_ReceiverForewarnUserDefineReceivers用户公式自定义接收人T_FW_DynReceiversForewarnSchedule预警调度周期T_FW_ScheduleRightnowForewarnAction触发及时预警的动作T_FW_RightnowAction表3-1预警模板实体及对的表3.1.2实体关系图图3-1预警模块实体关系图3.2功能对象3.2.1DataCenterFacade.facade为数据库脚本导出而增加,主要包括以下方法:方法别名exportData导出数据getDynCollection获取测试消息接收人getServerSysProp获取系统参数getSqlFromServerFile获取服务端文件中的sql语句表3-2DataCenterFacade中的方法及别名打开预警条目界面,按F11就弹出数据库脚本界面,可选择导出预警平台、参数平台和编码规则等的模块下的脚本,也可以自定义要导出脚本的表。3.2.2ForewarnRunTime.facade预警引擎,对应的类ForewarnRunTimeControllerBean.java是执行预警的最主要的类。ForewarnRunTime.facade里面对应的主要方法:方法别名execForewarnItem执行预警条目getCombinedInstanceCount获得组合的实例数getInstanceCount获得对象实例数testScript测试脚本execRightnowForewarn执行及时预警isHasMainOrgProp是否含有主业务组织属性表3-3ForewarnRunTimeFacade中的方法及别名3.3预警使用(接口)预警平台提供了一个预警引擎类ForewarnRuntimeControllerBean.java,其中两个执行预警的方法,执行预警条目_execForewarnItem,执行周期预警_execRightnowForeItem。它们最终都是调用的execFWItem方法3.2.1protectedString_execForewarnItem(Contextctx,StringforewarnItemID)方法说明:执行预警条目ctx:上下文forewarnItemID:预警对象的ID3.2.2protectedboolean_execRightnowForewarn(Contextctx,StringuiName,StringactionName,StringobjID)方法说明:执行即时预警的方法ctx:上下文uiName:触发即时预警动作所在的ui的名称actionName:触发即时预警的动作的名称objID:当前预警主对象ID3.2.3privateStringexecFWItem(Contextctx,StringforewarnItemID,booleanisRightnowFW,StringmainObjID)方法说明:执行预警的“真正方法”,无论是周期预期还是即时预警,其最终调用的方法都是此方法,只是根据传入的isRightnowFW参数的值而执行不同的路径。ctx:上下文forewarnItemID:预警条目的IDisRightnowFW:是否是即时预警mainObjID:当为即时预警时表示当前预警主对象的id,为周期预警时无意义3.4预警流程3.4.1即时预警流程图3-2即时预警时序图3.5预警执行设定好预警条目后,点击启用,工作流就会将此条目加入到后台事务。工作流会根据设定的调度周期来执行预警条目。周期预警的入口是ForewarnRunTimeControllerBean类的_execForewarnItem(Ctxctx,StringforewarnItemID)方法。方法_execForewarnItem(Ctxctx,StringforewarnItemID)调用执行预警的“真正”的方法execFWItem(Ctxctx,StringforewarnItemID)。即时预警会在用户执行预警模板定义的触发预警操作的时候,如点击“提交”,触发ForewarnService中的afterActionPerformed(),在afterActionPerformed()会新起一个线程,来执行周期预警,最终还是调用ForewarnRuntimeControllerBean类中的execFWItem()方法。execFWItem()中的活动图如下:图3-3预警执行活动图3.5.1准备环境执行预警,准备环境活动图如下:图3-4执行预警环境准备的活动图首先是获取预警条目明细,即getForewarnItem()。当预警条目明细不为空时,根据预警条目明细来取得预警主对象,包括实体和façade元数据的对象。最后根据ForewarnFormulaAdapter的getVarInfos()方法来取得预警条件变量。3.5.2执行简单预警执行简单预警之前要先用isSimpleForewarn()方法判断是否是简单预警,如果返回值是true则执行简单预警simpleRun(),在simpleRun()中主要是通过调用执行预警实例的方法execInstanceUnit(null)来实现的。3.5.3检查预警对象实例合理性检查条目是否合理,如果预警对象实例超过警戒线,则该条目不合理。使用方法privatebooleancheckForewarnItem(booleanisRightNowFW)。3.5.4获取实例组合集合通过ForewarnObjInfo的getInstaceCombinations()来返回一个实例组合的List。当返回的组合集合的size为0时,如果预警条目包含的功能元数据对象存在时则执行简单预警。当返回的组合集合的size>0时,则执行预警实例execInstanceUnit()3.5.5获取满足预警条件的实例组合通过executeInstanceUnit()执行3.5.4中获取的实例组合集合中的每个实例,如果返回值为true则说明满足预警条件,就将该实例添加在一个存放满足预警条件的实例组合的List中。3.5.6构建消息如下图是预警构建消息的活动图。图3-5执行预警时构建消息的活动图构建消息buildComboMessage()主要调用了ForewarnMsgCenterImpl类中的buildComboMessage()方法,此方法中首先根据预警实例,预警用户和过滤条件创建一个Msg,如果消息不为空再构建手机用户信息和电子邮件用户信息。因此,构建消息中最重要的过程是创建消息,即Messagemsg=msgFactory.createComboMsg(units,userInfo.getMailUserList(),eoInfo);在ForewarnMailMsgFactory类的createComboMsg方法中,通过代表消息的类Message来设置消息的各个字段。消息类Message,是消息发送器发送和消息接受器接收的通用数据结构。图3-6构建消息代码其中message.setLocaleStringHeader(“title”,buildTitle(units),locale);message.setLocaleStringHeader(“body”,buildBody(units,locale),locale)是设置消息标题和消息内容的操作。方法buildTitle(units)和buildBody(units,locale)分别构建消息标题和消息体即消息内的方法。3.6新建模板流程新建模板流程如下:图3-7新建预警模板活动图新建好模板,提交保存时会进行校验等一系列操作,如下为保存时的活动图:3.7复制模板流程图3-8复制预警模板活动图复制模板首先要取当前选中的模板,然后克隆它。之后将克隆出来的模板的各属性ID设置为空,以免ID重复。如下所示:图3-9置空各属性ID代码示例4.预警平台常见错误和问题4.1新建的二次开发单据在预警平台子系统树下找不到?答:警平台对子系统树进行了处理,处理规则是“空包过滤”,当子系统树包节点下没有预警条目或实例时就会被移出掉。4.2设置消息的动态接收人。如:员工生日预警,消息收人是各HR实体的“人事助理”。即人事助理只接收自己公司人员的生日预警。如何设置相关条的接收人答:目前不能直接选到“各HR实体的人事助理”,因为在指定消息接收人界面的动态接收人设置里面的人员功能对象里面没有取各HR实体的“人事助理的”方法。必须首先在人员功能对象(facade)里增加一个取人员对应各HR实体的“人事助理”的方法。4.3修改预警模板时提示“系统模板不能修改”是怎么回事?答:EAS系统为了给需要设置预警的用户提供一些参考,特内置了一些简单的系统模板,此类模板经过严格测试,如果需要可以直接据此新建预警条目直接使用但为了防止用户随意篡改,系统模板只能查看,不可修改。您可以打开您需要参考的系统模板查看其预警条件设置等内容,然后依此新建自己的预警模版。这些自己新建的模板就可以任意修改了。4.4请问周期预警和及时预警有什么区别?答:两者的执行时间点不一样。周期预警是按照一定的时间规则,在符合预警条件时做循环预警。比如:提前30天开始预警,这期间每天预警一次,总共预警30次。及时预警必须根据界面动作触发,比如:职员信息保存时根据预警条件判断是否发送预警。必须在action的元数据的扩展属性中设置是否支持及时预警为true才能使用。图4-1即时预警触发动作设置4.5预警条目设置好了,能不能让他立即执行,快速看到效果?答:设置好预警条目后,其实无论是否启用都可以让它立即执行,立即查看效果。进入“预警平台—预警条目设置”,选择设置好的条目,按“F10”,进入如下预警测试界面。然后再点“立即执行预警条目”,执行成功后该消息的所有接收人信息会显示出来。如:(id:yebCpgEMEADgAHE1CgrIKRO33n8=,name:徐浩,number:xuhao)。图4-2预警条目测试4.6对象记录最大组织数、预警最大数\预警消息最大数有什么区别?图4-3预警高级设置界面答:“对象记录最大组合数”是预警对象经过滤条件过滤后的最大记录数,“预警最大数”是满足预警条件得最大记录数。目前可以认为这两个参数的意义是一样的,他们的值都要大于实际对象过滤后的记录数。“预警消息最大数”是一次发消息的最大条数。比如:职员生日预警,职员主对象有1万条记录,那“对象记录最大组合数”和“预警最大数”就必须大于等于1万,如果一次最多只有1000个职员会有生日预警,那么“预警消息最大数”就必须大于等于1000。4.7立即执行预警条目后接收人显示“forewarnobjcomponentisnotfit,notrunforewarn”答:一般是因为主对象(或多对象)过滤后的记录数(或交叉乘积)大于“预警对象最大组合数”,在消息中心收到的预警如下:“selectdataerror.fetchedtoomuchrows:10001Causedexceptionmessageis:fetchedtoomuchrows:10001”。解决以上错误的方法:进入“预警条目设置--修改--设置—高级设置”,先检测一下实际记录数,然后把这里的“预警对象最大组合数”和“预警最大数”设成大于实际记录数的任意一个数值即可。如果觉得每个条目修改起来比较麻烦,也可以进入“预警系统配置--修改—高级设置”直接修改模板。图4-4预警高级设置界面请问“对象记录最大组合数”最大可以设置为多少,“预警最大数”最大可以设置多少?4.8答:“对象记录最大组合数”最大10万,“预警最大数”最大1万。我要做一个预警模板,可主对象大概有2万条记录,已经超过“预警最大数”的上限1万,我该怎么办?答:目前只能通过过滤或者拆分解决。请设置预警对象的过滤条件,想办法把根本不用参加预警的记录过滤掉,让过滤后的最终的记录数小于1万。或者拆分成多条预警。比如:转正预警的对象实际记录数为2万,但转正日期小于当前日期的人永远都不会再需要转正预警了。所以,您加上转正日期大于当前日期的过滤条件基本上就可以过滤掉大部分数据。4.9做生日预警,我设置的条件如:“if(Person.取职员的主要职位(职员_个人信息.ID).名称等于"001")”,这样取职员的职位名称,为什么不成功?答:其中方法“取职员的主要职位(职员_个人信息.ID)”是属于职员对象的内部方法,预警平台目前不支持这些方法,只支持对象的直接关联属性。对于那些非直接关联属性,请用各个业务系统提供的对应得功能。如:要取职员的职位、组织、职务等非直接关联属性,可以在预警对象中加上HR提供的“取职员关联属性功能”,属性为“取值范围”。如下图:图4-5预警模板修改界面后面就可以用这个功能(facade)中提供的方法来取值了,如下图:图4-6预警动态接收人公式编辑界面4.10我复制过来的预警条件,为什么不合法?答:预警条件和消息表达式都不能直接复制其他的预警的内容,您可以通过导入导出来代替复制粘贴的功能(如下图)。导入后的预警往往和原始的预警有些差别,需要对照脚本自己再检查并稍微调整一下,如果认为导入之后的预警一定和原始的预警一样是不可取的。当然,对于简单的预警,您也可以对照内容自己再一步步重新设置一遍,这样准确率也很高。图4-7预警条件导入导出4.11排除预警条件的业务逻辑问题,我怎么才知道我设置的预警模板是没有其他问题的?答:当您的预警条件合法,消息表达式也合法。此时你应该再做三项检查,在模板设置的三个页签中都有一个检测按钮:。它会检测消息表达式是否合法,预警条件是否合法,最大组合数及预警最大数是否满足要求(结合问题4.7中所述的高级设置一起判断修正)。在执行预警之前,这些检查都是非常必要的。如果这些检测都没有问题,还是收不到正确的预警消息那么你便可以只关注预警的业务逻辑了。4.12设置好预警条件后提示错误如下:图4-8执行预警报错答:此提示的意思是对象变量PersonInfo不是一个有效的类型,请查看一下预警条件的脚本。脚本中应该有把职员对象翻译成PersonInfo的地方。其实应该是Person,没有后面的Info。大部分预警条件中对象的脚本都是没有info的,请重新设置预警条件,保证脚本正确即可。4.13收到错误的预警信息:执行方法错误,找不到指定的方法.对象类型:com.kingdee.eas.basedata.person.PersonInfo,方法名称:getPrimaryPosition…。请问怎么回事?答:有两处错误。第一,设置预警条件时,预警对象被翻译成脚本时后面自动带上了info,需要修改预警条件保证脚本中所有的对象名为Person,而不是PersonInfo。第二,方法getPrimaryPosition可能是对象的内部方法,预警平台目前不支持此类方法取值。请在预警对象中加一个取值范围(人力资源系统60版本已提供一个功能“取职员关联属性功能”)来实现取这些不是和主对象直接关联的属性。4.14我想取一个主对象相关的属性,但在主对象中有找不到此属性,怎么办?答:您说的这个属性就是非直接关联的属性,一般业务系统为了满足这些业务都提供有对应的功能。但具体是哪个功能可以咨询对应的业务系统需求负责人或相关人员。比如:我要取职员对应的用户,用户是职员的一个非直接关联的属性,在职员实体树中也是找不到的,这时你就可以用人力资源系统提供的一个功能:“取职员关联属性功能”,具体设置可参考问题4.2。图4-9动态接收人公式编辑界面图4-10人员功能对象4.15我建立的一个预警模板,在执行条目的过程中报错如下:notfoundneedforewarnobject!objectisnullorsizeis0答:说明数据库中主对象表没有记录,或者是没有符合预警条件的纪录。请检查您的数据库或者预警条件设置。4.16现新增合同终止预警和离退休预警模板时,复制预设模板中的条件表达式进行脚本检查时,报错:图4-11检查预警条件报错答:根据提示可以看出是条件公式设置错误的问题,“rightValueisnull”应该是赋值表达式右边没有值或者没有被翻译成一个合法的变量。请查看条件的脚本,看看是否有这种不符合语法的地方。

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

EAS预警平台使用说明.doc

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信