全网泛微ecology二次开发最详细教程(后端+ecode前端,纯二开,不使用建模)

1.后端环境搭建

一、IDEA环境配置

  1.1 打开idea,创建一个新的Java项目File->New->Project

1.2 选择Java项目

1.3 下一步:编辑好项目名称,点击Finish

1.4 项目创建文件完成之后需要进行项目配置File-Project Structure,点击project,分别选择Project SDK为1.8、、Project language level为SDK default 8

1.5 因为创建项目后会自带一个src的文件夹,我们后续的代码开发在src文件下,src文件夹下的目录结构最好与泛微e9的目录结构一致;如:src.com.api.xxx; src.com.engine.xxx等;如果不存在src,可以在当前界面新加一个src文件夹,并指定为Sources;

1.6 指定代码编辑后的输出目录,注意这里的Output path:应该是为小伙伴你们自己下载下来,或者已有的ecology代码文件夹下,并且要指定输出到classbean文件下,那么后续我们代码编译后会自动输出到对应的ecology项目下。

1.7 引入依赖,我们这里需要引入三个特定的依赖,(我这里原有的泛微项目在D盘的Weaver文件夹下)分别是你原有的的泛微项目下的classbean文件夹,这里我们需要做一个操作,就是需要把这个classbean文件夹压缩成一个压缩包,然后将压缩包的后缀改成.jar,然后将这个classbean.jar直接引入即可;第二个依赖是小伙伴自己项目里面Resin文件夹下的lib文件夹进行引入;第三个依赖是小伙伴自己项目下ecology里面的WEB-INF/lib的文件夹进行引入即可。

1.8 设置项目的sdks,必须使用jdk1.8版本,最好用泛微提供的jdk1.8的版本,自己项目文件夹下一般都会有泛微提供的jdk包。

1.9 最后点击apply按钮即可完成我们环境的配置。

二、Resin的配置

 注意:如果小伙伴们想在idea中想配置Resin进行项目的启动,那目前只能使用2019版本及以下的idea,2020以上版本不支持Resin。

添加之后,配置项目自己所带的端口即可。然后就能正常启动啦!包括你dubug或者是run都是没问题的。

以上就是泛微后端环境的搭建的全部流程,希望能帮助到小伙伴们!

2.前端ecode的基本使用

      一、创建页面组件

      因为博主已经含有了泛微的项目,所以没有下载具体的ecode到本地,而是直接使用ecode进行代码编写;而且本地和线上也有一些差异,所以直接就在项目的ecode平台上进行 编码了。所以这里都是讲的在线上的ecode平台进行编码,线上和本地只是一些组件引入的差异,其他并无差异,可放心查阅。另外就是前端是需要申请许可的,这个大家自行找泛微的人申请即可。

2.1 进入ecode平台,后端将项目启动之后,http://localhost:8081/ecode,在你的ip:端口后面拼接/ecode即可进入。

2.2 进入页面之后,我们二开的话一般都是建立新的文件夹,然后进行开发,那么第一步就是新建一个根目录的文件夹,然后在我们新建好的分类下面新建一个文件夹即可。

文件夹创建成功后,就会自动出现一些配置文件夹,小伙伴们可按需引入。

后续就是新建页面、新建store、新建主页面等等。博主这里新建coms文件夹来存放页面组件,新建store文件夹来存放页面操作方法等;最重要的就是建立注册文件和主入口组件,分别建立register.js文件和index.js文件。这里注册组件写法基本一致,可查看泛微的ecode开发文档。

//注册文件 registe.js

//注册和绑定新页面前端实现接口
ecodeSDK.rewriteRouteQueue.push({
  fn:(params)=>{
    const {Com,Route,nextState} = params;
    const cpParams = {
      path:'main/cs/app', //路由地址
      appId:'${appId}',
      name:'testBank', //具体页面应用id
      node:'app', //渲染的路由节点,这里渲染的是app这个节点
      Route,
      nextState
    }
    if(ecodeSDK.checkPath(cpParams)) {
      const acParams = {
        appId:cpParams.appId,
        name:cpParams.name, //模块名称
        props:params, //参数
        isPage:true, //是否是路由页面
        noCss:true //是否禁止单独加载css,通常为了减少css数量,css默认前置加载
      }
      //异步加载模块${appId}下的子模块testBank
      return ecodeSDK.getAsyncCom(acParams);
    }
    return null;
  },
  order:10,
  desc:'testBank'
});

/*
版本要求:kb1906以上
门户后台配置路由地址:
/main/cs/app/9a9808af4ce54bb6a1688880a4dc96407_testBank
浏览器访问地址:
/wui/index.html#/main/cs/app/9a9808af4ce54888888c96407_testBank
*/
//主入口页面组件 index.js

const { Provider } = mobxReact;
const TestTable = ecodeSDK.imp(TestTable);
const TestStore = ecodeSDK.imp(TestStore);
//实例化store,并通过provider注入所有组件中
const allTestBanks = {
  testStore:new TestStore()
}
class testBankRoot extends React.Component {
  render() {
    return (
      <Provider {...alltTestBanks}>
      <TestTable {...this.props}/>
      </Provider>
    )
  }
}

//发布模块
ecodeSDK.setCom('${appId}','testBank',testBankRoot);

然后是 coms文件下的页面组件,这个文件夹下面的就是我们的页面展示

const { inject, observer } = mobxReact;
const { Button, Row, Col } = antd;
const { WeaTable, WeaInput, WeaDialog, WeaNewScroll, WeaSearchGroup, WeaInputSearch, WeaFormItem ,WeaError} = ecCom;

@inject("testStore") // 注入store
@observer // 观察状态的变化
class TestTable extends React.Component {

  constructor(props){
    super(props);
    this.state = {
    scrollHeight: 850, // 默认高度为850
  };
  }
  
  componentDidMount() {
    // 初始化时设置滚动条的高度
    this.setScrollHeight();

    // 监听窗口大小变化
    window.addEventListener("resize", this.setScrollHeight);
  }

  componentWillUnmount() {
    // 清理 resize 事件监听器
    window.removeEventListener("resize", this.setScrollHeight);
  }

  setScrollHeight = () => {
    const windowHeight = window.innerHeight;
    const calculatedHeight = windowHeight - 60; // 你可以根据需要调整减去的值
    this.setState({ scrollHeight: calculatedHeight });
  };

  render() {
    const { testStore } = this.props;
    const { scrollHeight } = this.state;

    const columns = [
      { title: "测试1", dataIndex: "test1" },
      { title: "测试2", dataIndex: "test2" },
      {
        title: "操作
<think>好的,我现在需要帮助用户解决关于ECode平台的开发文档和教程的问题。首先,我要理解用户的需求。他们可能想使用ECode进行二次开发,但缺乏相关资料,需要指导如何获取和利用这些资源。 根据提供的引用内容,我需要整理已有的信息。引用[1]和[2]提到了E-CODE的开发资料仓库,里面包含前后端开发的文档、示例代码等。引用[3]详细说明了Ecode二次开发的实例,特别是关于动态注册和插件化开发的特点。引用[4]则提到了在钉钉应用中设置页面标题的问题,这可能涉及到特定环境下的开发注意事项。 接下来,我需要将这些信息结构化,分步骤回答用户的问题。首先应该告诉用户如何获取官方文档,比如访问资料仓库,然后介绍主要的学习资源,如前端后端开发资料、示例代码等。另外,开发工具和环境搭建的信息也很重要,特别是ECode提供的在线编辑器,可能需要本地环境配置,这对新手来说很友好。 同时,需要注意用户可能遇到的常见问题,比如在钉钉应用中的标题设置问题,这里需要引用[4]的解决方法,指出可能需要使用钉钉的API而是标准的React方法。此外,二次开发的特性如动态注册和插件化开发也是关键点,需要强调这些优势,帮助用户理解ECode的价值。 后,生成相关问题,帮助用户深入探索。问题可能涉及开发环境搭建、调试技巧、与第三方应用的集成等。这些问题应基于已有的引用内容,确保有参考资料支持。 需要确保回答符合系统指令:使用正确的中文,数学公式格式(虽然这里可能用上,但要注意其他格式),引用标记正确。同时,回答要结构清晰,分点说明,便于用户逐步理解和操作。</think>### ECode开发文档与教程指南 #### 1. **官方开发文档与资源获取** ECode开发资料主要集中在官方提供的**前后端开发资料仓库**中[^1][^2],内容涵盖: - **前端开发**:包括UI组件开发前端框架使用(如React)及性能优化方法。 - **后端开发**:涉及API开发、数据库操作、架构设计等。 - **示例代码**:提供实际场景的代码片段,例如页面定制、插件开发等。 - **开发文档**:详细说明开发流程、技术规范及常见问题解答。 **获取方式**: - 访问ECode官方仓库,直接下载所需文件。 - 结合项目需求学习文档,推荐优先阅读《E-CODE开发技术规范》。 --- #### 2. **关键开发技术说明** ##### 动态注册与插件化开发 ECode支持**无侵入式二次开发**,通过动态注册技术修改标准页面或新增功能,无需直接修改源码[^3]。例如: ```javascript // 示例:动态注册页面组件 Ecode.registerComponent('custom-page', { template: '<div>自定义内容</div>', mounted() { document.title = '自定义标题'; // 注意钉钉环境的特殊处理[^4] } }); ``` - **前端工具**:ECode提供在线编辑器,无需搭建本地环境,可直接在浏览器中开发单页应用。 - **插件共享**:开发内容支持一键封装为插件,便于复用和分发[^3]。 --- #### 3. **环境适配与常见问题** ##### 钉钉应用标题问题 在钉钉环境中,ECode使用React语法设置标题(`document.title`)可能失效,需调用钉钉API: ```javascript // 钉钉环境设置标题的正确方法 dd.setTitle({ title: '页面标题' }); // 引用自钉钉开发文档[^4] ``` ##### 调试技巧 - 使用浏览器开发者工具检查ECode组件层级。 - 在官方仓库的示例代码基础上逐步修改,降低学习成本。 --- #### 4. **学习路径建议** 1. **入门阶段**:阅读仓库中的《快速入门指南》,运行示例代码。 2. **进阶实践**:参考《API开发手册》实现简单接口,并与前端组件联动。 3. **项目实战**:结合动态注册功能,定制企业OA系统的审批页面。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值