- 浏览: 34241 次
- 性别:
- 来自: 大连
最新评论
文章列表
(2012) MoCoolKa 4月份工作日志
4月份计划
完善MoCoolKaERP、xmpp服务的基本功能
4月8日--4月15日计划
本周主要工作是建立单元测试用例。测试、测试还是测试
MoCoolKaERP
增加xmpp组件,与xmpp服务通信
建立单元测试,
1)缺省服务器启动、关闭,性能2秒内
2)服务器加载模块测试
3)服务器加载组件测试
4) 消息管理器测试
5)测试协议,从wcf服务开始到数据库
6)测试wcf凭证验证
7)用wcf客户端测试协议流程
8)建立单表100个字段 50万条记录 500万条记录 5000万条记录的数据库访问性能测试
9)模拟并发,查找现有环 ...
MoCoolKa2012路线图
- 博客分类:
- MoCoolKa
MoCoolKa2012路线图
(记录想法,随时更新)
MoCoolKaERP
搭建由协议 组件 模块 上下文 管理器组成的基本服务框架体系(提供接口)
对基础框架提供缺省实现
提供日志(错误、调试、性能)
提供消息管理器(多语言支持中的一部分)
提供模块管理,动态加载、卸载模块
提供脚本管理,包括脚本编辑器,实现指定类属性的逻辑判断和对类属性赋值
提供动态编译功能,编译脚本,动态加入assembly中,提高运行效率
提供简单实体管理,管理一个实体的逻辑文本(包括非空、长度、默认值、只读、LABEL)
提供动作管理,根据一个实体对象和登录用户的当前属性、状态控制哪些动作可以操作,哪些不能
提 ...
MoCoolKaErp只有一个入口,接收参数为基类,按WCF协议必须声明所有的子类为knownType.最直接的办法就是遍历所有assembly,寻找所有的子类。
用linq遍历assembly寻找指定类生成web.config中序列化
linq语法的确精炼,一句话就行了
方法
public XElement GenConfig(String[] assemblys)
{
return new XElement("system.runtime.serialization", new XElement("d ...
MoCoolKaErp简介
设计原则:模型驱动、配置驱动、动作驱动、逻辑分离、易扩展
目标:
1)支持多种服务平台
2)支持复杂业务
3)在业务变动时代码改动量小
4)支持模块热升级
5)提供ERP需要的组件
6)提供详尽的日志,跟踪错误、调试性能
7)严格规定什么样的逻辑写在哪个部怎样写业务逻辑,避免逻辑混乱和重复。详见《怎样用MoCoolKaErp编写业务逻辑》
[size=x-small][/size]
运行时分为ERP协议和参数两部分
ERP协议规定了Server逻辑处理过程
序列调用如下,7个接口,可以根据需要进行实现
客户端->MKService->ServiceAda ...
MoCoolKa项目v0.5子项目功能简介
SERVER端
ERP相关
MoCoolKaErp是ERP项目中的基础模块,定义ERP Server的协议
MoCoolKaCoreErp 是ERP项目的核心模块,遵循MoCoolKaErp协议实现表、窗体、权限等功能
MoCoolKaErpGen 是ERP项目的代码生成器。生成服务端、客户端代码。
独立模块
MoCoolKaXmpp 是独立的XMPP SERVER
MoCoolKaWorkFlow 是独立的工作流引擎,在ERP中作为一个组件,负责工作流调度
MoCoolKaXmppClient 是MoCoolKaXmpp的客户端,在ERP中作为一 ...
linq xml to entity
- 博客分类:
- c#
linq做为转换工具不错,代码简洁多了
<?xml version="1.0" encoding="utf-8" ?>
<Modules>
<Module Name="ErpDefault">
<Action Id="000000" MKEntity=""
Handler="MoCoolKaErp.Handlers.CoreHandler,MoCoolKaErp" AccessRule=" ...
泛型错误
The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint
如果T是接口
这是错误的 :return System.Activator.CreateInstance(reType) as T;
正确的写法 T t1=(T)System.Activator.CreateInstance(reType) ;
错误的
public class EventIDDictiona ...
数据库表必填字段
"MK_CLIENT_ID", "MK_ORG_ID", "ISACTIVE", "CREATED", "CREATEDBY", "UPDATED", "UPDATEDBY"
外键用 表名_ID
表名用 模块缩写_名称
主键用 表名_ID
EXEC sp_help pt_task
SELECT COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION,
NUMERIC_SCALE,
IS_NULLABLE,
COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), COLUMN_NAME, 'IsIdentity') AS IS_AUTOINCREMENT,
COLUMN_DEFAULT
FROM INFORMATION_SCHEMA. ...
安装过程与2.5一致。见2.5步骤
在用eclipse集成时,web不能发布到指定目录。
最后发现是$PROJECT/.settings/.component/org.eclipse.wst.common.component错误,把后缀为模板的改成正式文件就能正常工作了。
才研究不久,对3.0体会不深。
优点:
3.0的屏幕从表直接显示在主表下,符合国人的习惯
可以直接用AD配置出弹出框(这是升级的的重点,可以减轻程序员的代码量)
使用了smartclient技术
把2.5原有的代码移植到3.0很方便
缺点:
仍然没有放弃servlet、sqlc等旧有的技术
下面解释三种类型
Text field(输入框)
Combo-box field(下拉框,指定固定值)
Reference field(下拉框,从库表中取)
一、Text field
1)加field到数据库中(见以前章节)
ALTER TABLE m_warehouse
ADD COLUMN em_ht_contact_info varchar(255);
2)加column 到屏幕中
Go to Application Dictionary > Windows, Tabs and Fields in the application, and search for the Wareho ...
也在数据库端实现,必须填写正确的前缀。
提供软开关(IF AD_isTriggerEnabled()='N),可以停掉或打开所有的触发器
CREATE OR REPLACE FUNCTION ht_salary_trg()
RETURNS TRIGGER AS
$BODY$ DECLARE
DECLARE
v_IsEmployee CHAR(1);
BEGIN
IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF;
...
这里仅指用数据库的约束。
1)在表里加约束条件。约束的名字必须属于一个模块
ALTER TABLE AD_ALERTRULE
ADD CONSTRAINT HR_SALARY_DATES_CHK CHECK
(VALIDTO>VALIDFROM) ENABLE;
如果涉及到的字段属于两个模块,在依赖的模块中添加。
2)修改屏幕提示,数据库的提示不友好,这里可以改成你需要的内容。使用约束的名字。
打开Application Dictionary || Message
Search key 填写约束名字 HR_SALARY_DATES_CHK
Message type 有成功、警 ...
有两种情况,
1)字段属于原有模块。
ALTER TABLE HR_SALARY
ADD COLUMN VALIDTO timestamp without time zone;
2)字段属于另一个模块,与表不一致
ALTER TABLE HR_SALARY
ADD COLUMN EM_HR2_VALIDTO timestamp without time zone;
加固定前缀EM_ 加新模块的模块数据表前缀 _HR2
然后在AD中添加新字段,如果是第二种,选择所属模块
在模型被注册后,首先建立模型需要的表
1)建立表结构
可以使用各种数据库工具
属于这个模型的表必须使用预先定义的前缀。包括table, trigger, stored procedure
表必须包括以下字段 AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated and UpdatedBy
例子如下
PostgreSQL
CREATE TABLE HR_SALARY
(
HR_SALARY_ID CHARACTER VARYING(32) NOT NULL,
AD_CLIENT_ID CHARACTER VARY ...