开发笔记原创
金蝶云社区-七七四十九
七七四十九
7人赞赏了该文章 1,254次浏览 未经作者许可,禁止转载编辑于2023年01月16日 10:07:30
summary-icon摘要由AI智能服务提供

本文概述了金蝶云苍穹的开发初始化过程,包括环境信息、访问地址、账号信息、数据库配置、密码修改方法、开发商标识申请流程以及工作流常用系统参数。还详细介绍了表单插件中的事件处理差异,如beforeBindData与afterCreateNewData、afterBindData的对比,以及附件控件、iframe传参和回传参数的实现方法。此外,还提及了插件开发接口和工作流相关插件的实现方法和用途。

开发初始化:

环境信息

苍穹地址:http:/127.0.0.1:8080/ierp账号administrator/1234567

mc地址:http:/127.0.0.1:8090/,账号admin/Kdadmin001

monitor地址:http:/127.0.0.1:8080/monitor,账号admin/admin

数据库:端口3306账号root/kingde

修改密码:

苍穹:

UPDATE t_sec_user_u SET PASSWORD = '', FIsRegisted = '1', fisactived = '1', FPSWEFFECTIVEDATE = now() WHERE FID in (SELECT FID FROM t_sec_user WHERE FPHONE in (xxx))

mc:

update cosmic.t_mc_user set fpassword='' where fnumber ='admin'

开发商标识申请

https://dev.kingdee.com >>个人中心>>我的开发商标识>>点击获取

临时许可申请

云之家>>icrm>>流程中心>>其他>>临时license申请>>更多>>新增

申请天数365

特征码:(复制mc租户里面产品实例码

产品名称:金蝶云苍穹私有云(订阅)

产品类型:金蝶云苍穹

产品版本3.0

模块清单:全选

申请后在mc租户列表>>许可信息中导入

 

表单插件

beforeBindData事件

本事件与afterCreateNewData事件的区别:

本事件比afterCreateNewData事件晚触发;

适合在afterCreateNewData事件中,修改数据模型中的字段值:

afterCreateNewData改变字段值,数据修改标志为false;退出时,不会提示数据被修改;而在此事件中修改字段值,数据修改标志为true,退出时系统可能会提示数据被修改;

适合在beforeBindData中,调整视图模型中的控件属性;

单据界面插件,afterCreateNewData不是必然会被触发(与afterLoadData互斥),而beforeBindData必然触发。

 

本事件与afterBindData事件的差别:

本事件比afterBindData早触发:在本事件之后,系统会调用内置的字段值绑定过程,随后才会触发afterBindData事件;

beforeBindData事件,适合设置字段、控件的属性,以间接的控制前端字段值、控件状态的刷新过程:

beforeBindData事件中设置控件状态没有效果,因为系统随后会清空所有控件的状态;

afterBindData事件,适合直接设置控件在前端表现的内容、状态。

beforeBinddata用的场景较少,用于数据包打包提交给前端之前的控制,是数据包的模具,起到"框定作用",仅用于精度等少数属性。其他属性不在beforeBinddata中定义。

 

附件

AttachmentPanel attachmentPanel = getControl("附件控件的标识");

attachmentPanel.addBeforeRemoveListener();

attachmentPanel.addOperaClickListener();

attachmentPanel.addAttachOperaBtn();

attachmentPanel.addUploadListener();

addBeforeRemoveListener就是监听删除按钮点击的,可以在里面做取消删除

@Override

public void beforeAttachmentRemove(BeforeAttachmentRemoveEvent evt) {

    Control control = (Control) evt.getSource();

    if (ATTACHMNETEDIT.equals(control.getKey())) { //取消删除

        evt.setCancel(true);

    } else if (ATTACHMNETPANEL.equals(control.getKey())) {

    }

}

 

 

iframe传参

打开iframe(后端)

IFrame iframe = this.getView().getControl([iframe控件标识]);

iframe.setSrc([目标url]);

 

iframe页面传参(后端)

IFrameMessage message = new IFrameMessage();

message.setContent("this is content");

message.setType("mytype");

IFrame iframe = this.getView().getControl([iframe标识]);

iframe.postMessage(message);

 

ifram页面回传参数,第三方页面需要按这种格式给苍穹页面推消息(前端)

let pageId = HttpUtils.getQueryParams(window.location.href)['pageId'];

const sendMsgs = () => {

        window.parent.postMessage({

        pageId: pageId, //该字段是苍穹专用

        type: 'invokeCustomEvent',

        content: {

          msg: 'this is my message',

          methodName: 'other',

          color: 'blask',

        },

      },

      '*',

    );

  };

 

表单插件中监听回传消息(后端)

public void customEvent(CustomEventArgs e) {

    String key = e.getKey();//自定义控件标识

    String args = e.getEventArgs();//数据

    String ename = e.getEventName();//事件名称:这里默认是invokeCustomEvent

    this.getView().showSuccessNotification(key+":"+args+":"+ename);

}

 

registerListener

侦听各控件的插件事件,传入实现了事件接口的插件实例    

工具栏点击

Toolbar mbar = this.getView().getControl(KEY_MBAR);

mbar.addItemClickListener(this);

        

按钮点击

Button button = this.getView().getControl(KEY_BUTTON1);

button.addClickListener(this);

        

单据体行点击

EntryGrid entryGrid = this.getView().getControl(KEY_ENTRYENTITY);

entryGrid.addRowClickListener(this);

        

树型控件点击

TreeView treeView = this.getView().getControl(KEY_TREEVIEW1);

treeView.addTreeNodeClickListener(this);

 

工作流

常用系统参数

审批时忽略下一步参与人为空校验开启本设置,审批提交时,不受下一步节点参与人为空校验影响。关闭本设置,则会进行提示,例如:校验时发现下一个节点参与人为空,审批提交时会提示“下一步参与人为空,你确定要提交吗?

接口调用校验是否是流程管理员:控制使用管理员加签时,是否校验流程管理员身份。默认为“开”。开启时,会在进行管理员加签操作时校验当前用户是否是流程管理员,如果不是,则不允许加签。当参数关闭时,进行管理员加签操作时不会校验流程管理员身份,调用接口即可加签。

流程启动时允许指定下一步参与人:默认为“关”,系统级参数,只有此参数开启后,流程控制中的“流程启动时允许指定参与人”的开启会生效,若此参数为关闭状态,流程中的参数即使开启也不生效

单据未提交时允许查看流程图:默认关闭,开启后,单据在保存后就可以查看流程图并预测流程的走向;

按组织隔离:默认关闭。开启后可以根据流程管理员管辖范围的不同开启组织隔离。

流程消息通知在短信中是否显示业务链接:开启本设置,流程中的任务通知、节点消息通知、预警/报警通知、传阅/协办/催办等消息通知场景,通过短信发送消息时,会默认显示业务链接;关闭本设置,则所述场景通过短信发送消息时,不会显示业务链接。

流程启动时进行组织筛选:默认关闭,采用的是现行的流程寻址启动方式(不对组织进行筛选,而是找所有满足条件的流程,进入最新的流程)。当该参数开启后,将对有权限启动的流程进行组织筛选

开启了“流程启动时进行组织筛选”参数,“所属组织”字段可选择范围为【流程设置】→【基本信息】→【单据】字段选择的业务单据上“主业务组织”所设置的字段的“组织职能”类型保持一致。例如:出差申请单中,“主业务组织”信息设置的是“申请人公司”,同时,“申请人公司”的组织职能设置为“行政组织”,此时,“单据”设置为出差申请单的流程的“所属组织”的选择范围为“行政组织”。

存在唯一流程时启动:默认关闭,采用的是现行的流程寻址启动方式(找到多个流程后进入最新的流程)。当该参数开启时,寻址到唯一有权限启动的流程后,才进行启动。若是没有找到流程,不启动。

插件

参与人插件

l 实现接口

kd.bos.workflow.engine.extitf.IWorkflowPlugin 

l 方法

public default List<Long> calcUserIds(AgentExecution execution) 

l 说明

根据特定的业务逻辑返回参与人id集合。id对应T_SEC_USER表中的fid字段 

l 参数

AgentExecution流程执行上下文对象,该对象包括单据信息和流程属性信息,比如获取单据id,实体编码,流程信息包括当前节点、流程定义等信息。

 

条件规则插件

l 实现接口

kd.bos.workflow.engine.extitf.IWorkflowPlugin

l 方法

public boolean hasTrueCondition(AgentExecution execution) 

l 说明

根据特定的业务逻辑返回truefalse 

l 参数

AgentExecution流程执行上下文对象,该对象包括单据信息和流程属性信息,比如获取单据id,实体编码,流程信息包括当前节点、流程定义等信息。

l 返回值

truefalse

 

节点任务插件

l 实现接口

kd.bos.workflow.engine.extitf.IWorkflowPlugin

方法:

public  void  notify(AgentExecution execution)

public  void  notifyByWithdraw(AgentExecution execution)

l 说明

执行特定的业务逻辑,notify方法在正向流转时会调用;notifyByWithdraw在反向撤回时会调用,如在已办任务中撤回任务时会执行该方法。

AgentExecution流程执行上下文对象,该对象包括单据信息和流程属性信息,比如获取单据id,实体编码,流程信息包括当前节点、流程定义等信息。

 

审批记录格式化插件

l 实现接口

kd.bos.workflow.engine.extitf.IWorkflowPlugin 

l 方法

public  IApprovalRecordItem  formatFlowRecord(IApprovalRecordItem item) 

l 说明

根据特定的业务逻辑返回节点信息。 

l 参数

IApprovalRecordItem对象,对象中可获取  返回值:IApprovalRecordItem类型对象

 

任务处理时限插件

l 实现接口

kd.bos.workflow.engine.extitf.IWorkflowPlugin

l 方法

public Long getExpireTime(AgentExecution e)  

l 说明

根据特定的逻辑返回Long类型的数据

l 参数

AgentExecution对象,对象中可获取单据id,实体编码,当前节点信息等

l 返回值

Long类型的数据


赞 7