实施与服务
 应用描述
 安装部署
 术语解释
 定制使用指南
 表单部件
 权限接口
 开发指南
 工作流集成
 word格式输出
 常见问题
 表单二次开发
 承元OA标准版
 承元OA增强版
 承元OA平台版
 客户关系管理
 订单与采购管理
 
chy@chysoft.net


 
开发指南

一、整体描述
    一般的模块功能通过表单定制无需开发可直接实现,同时表单系统提供了强大的开发功能,本部分主要描述同表单相关的开发。主要包括以下开发:
1. 表单模板脚本开发
2. 权限接口实现类
3. 表单部件开发
4. 执行类的开发
5. Action开发
6. 查询列表字段定制开发

二. 模板脚本语言
    在表单的HTML源码中嵌入脚本的开发,类似于jsp模式,是脚本和HTML的混合体,表单脚本可以访问环境变量中的相关对象。
1、变量定义
    直接在赋值语句中产生,变量的定义也可以来源于action,在模板中定义变量时无需申明数据类型。例:s = “xxxx”
2、语句
    注意:语句中不可以带有“;”,一条语句以回车换行结束。本文档中将简单说明,其基本规则同一般Java开发语言,不同之处重点列出。例,赋值语句:s = “xxxx”,无需申明数据类型。
3、逻辑运算符(同java类似)
>、<,>=,<=,==,!=
 表达式
a==b
4、条件语句
语句体必须使用成对的{}包含
If(表达式)
{
}else if(表达式)
{
}
else{}
 循环语句
for(i=0;i<6;i++)
{
//循环体
}
 打印语句
print:将内容输出至浏览器,例:
a= “测试”
print(“用户:” + a + “,欢迎光临”),其中a为变量存储用户的名称。

三、表单脚本开发
    直接在表单中嵌入代码,类似jsp的开发,支持表单的系列语法。将脚本放在<%代码%>,之外为表单的html。
格式:F_表单元素名称
s = F_guid + “---“
 内置请求对象request
s = request.getParameter(“参数”)
(其他的方法暂不支持)
以下是开发的一个模板Action,示例:
import net.business.engine.common.I_TemplateAction;
import net.business.engine.common.TemplateContext;

public class Test implements I_TemplateAction
{
    public int execute(TemplateContext context) throws Exception
    {
        //其他代码
        context.put("yyy", this);              //存储对象的实例,可以是任何java类的实例
        context.put("xxx", "ffffffffffffffffff");       
        return SUCCESS;
    }
    public String test(String name)
    {
        return "calling function" + name;
    }
}
模板中的代码:
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft DHTML Editing Control">
<TITLE></TITLE>
</HEAD>
<BODY>
<P>&nbsp;</P>
<P><form><INPUT dataFld=pr_Id id=pr_Id1 dataSrc=#bind_66
type=hidden name="pr_Id1" mIndex="1">
<%=xxx%>
<br>
<%=yyy.test(" add by java function")%>
&nbsp; <BR></P>
<P><SELECT dataFld=pr_Status id=pr_Status dataSrc=#bind_66
name="pr_Status" style="BACKGROUND: none transparent scroll repeat 0% 0%" mIndex="0"></SELECT><INPUT dataFld=pr_class id=pr_class
dataSrc=#bind_66 name="pr_class" mIndex="2"></P></FORM><BUTTON
id=c_346_95
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BACKGROUND-IMAGE: url(/sysadmin/templatedefine/images/icon/clist.gif); BORDER-LEFT: 0px; WIDTH: 40px; BORDER-BOTTOM: 0px; HEIGHT: 32px"
name=c_346_95>&nbsp;<%C_c_346_95%></BUTTON>&nbsp;
</BODY>
</HTML>

四、权限接口实现类
    见“权限接口”部分(略)
   
五、表单部件开发
    见“表单部件”部分(略)

六、执行类的开发
    由执行部件(见“表单部件”)执行实现指定接口net.business.engine.common.I_ExecObject的java类代码。实现步骤
1、 选择执行部件
2、 设置相关属性并保存
3、 在表单上进行绑定
4、 保存编译 
     
七、Action开发
    实现表单系统的Java接口,net.business.engine.common.I_TemplateAction,代码示例:
package net.chysoft.template.action;

import javax.servlet.http.HttpServletRequest;

import net.business.engine.common.I_TemplateAction;
import net.business.engine.common.TemplateContext;
import net.sysmain.common.I_TemplateConstant;
import net.sysmain.util.StringTools;
import net.sysplat.access.ResourceReader;
import net.sysplat.access.eo.Service;
import net.sysplat.access.Authentication;
import net.sysplat.common.I_ResourceConstant;

public class InfoEditAction implements I_TemplateAction
{
    String message = null;
   
    public int execute(TemplateContext context) throws Exception
    {
        ResourceReader rr = null;
        HttpServletRequest request = context.getRequest();
        int resId = -1;
        int editType = context.getTemplatePara().getEditType();
       
        String pid = null;
        if(editType == I_TemplateConstant.ACTION_TYPE_ADD)
        {//新建,栏目Id从地址中获取
            pid = request.getParameter("pid");
        }
        else if(editType == I_TemplateConstant.ACTION_TYPE_UPDATE)
        {//修改,栏目ID从表单元素对应的数据库字段中获取
            pid= context.get("F_Pid_10").toString();
        }
       
        if(!StringTools.isInteger(pid))
        {
            message = "错误的参数,无法读取指定信息栏目Id";
            return FAILURE;
        }
        resId = Integer.parseInt(pid);
        rr = new ResourceReader();
        rr.setConnection(context.getConn());
        Service root = rr.getSingleService(resId);
        if(root == null)
        {
            message = "指定的栏目不存在";
            return FAILURE;
        }
        int right = new Authentication().getUserAccessRight(Authentication.getUserFromSession(request), root.getHierarchy(), context.getConn());
        //判断权限
        if((right & I_ResourceConstant.RESOURCE_RIGHT_MODIFY) != I_ResourceConstant.RESOURCE_RIGHT_MODIFY)
        {
            message = "当前用户没有该栏目的编辑权限";
            return FAILURE;
        }
        context.put("itemName", root.getName());
        context.put("pid", pid);
        //设置返回地址

        return SUCCESS;
    }

    public String getErrorMessage()
    {
        return message;
    }


八、查询列表字段定制开发
动态脚本动态输出字段的内容,语法在“开发语言”中已经描述
1、相关对象的访问
    A、字段值:value[cif_Status]
    B、字段内容:field[cif_Title],有可能是链接或条件脚本等。
    C、链接:url[cif_Title],如果定义了链接
  D、contextPath:返回HttpServletRequest的contextPath值
  E、用户属性:user[属性名],例:user[name]用户的姓名。
2、代码示例
if(value[cif_Status] == 0)
{
    print("<a onclick=\"return confirm('确认删除吗?')\" href=\"../innet/deleteinfo.jsp?guid=" + value[cif_Guid] + "\">删除</a>")
}
else
{
    print("&nbsp;")
}
实现功能:当发布状态为0时可以删除,否则不允许操作

相关文章
 承元表单系统与其他表单产品的区别 承元表单系统实现定制与开发的完美结合
 表单定制入门之开始篇 基于表单系统可以进行哪些开发?
 [推荐]使用承元表单系统需要掌握哪些技术知识  
 
 
 
 
Copyright 2005-2018 深圳市承元软件技术有限公司 版权所有  关键字:OA办公系统 OA软件开发
联系电话:0755-82501339  0755-82501387  公司地址:深圳市福田区彩田南路福建大厦B座17层
联系E-mail:chy@chysoft.net   邮编:518026    粤ICP备11095012号-1