本文概述了金蝶云苍穹的开发初始化过程,包括环境信息、访问地址、账号信息、数据库配置、密码修改方法、开发商标识申请流程以及工作流常用系统参数。还详细介绍了表单插件中的事件处理差异,如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 说明
根据特定的业务逻辑返回true或false。
l 参数
AgentExecution流程执行上下文对象,该对象包括单据信息和流程属性信息,比如获取单据id,实体编码,流程信息包括当前节点、流程定义等信息。
l 返回值
true或false
节点任务插件
l 实现接口
kd.bos.workflow.engine.extitf.IWorkflowPlugin
l 方法:
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类型的数据
推荐阅读