金蝶云苍穹动态表单插件beforeDoOperation事件案例

涎涎原创约 694 字大约 2 分钟...KingdeeKingdee

76-金蝶云苍穹动态表单插件beforeDoOperation事件案例.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  1. 新建空白动态表单

  2. 添加一个按钮

  3. 为其添加事件后保存

以关闭事件为例,将其操作代码项更改为pay

  1. 编码
package kd.bos.dynamicform.plugin;

import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.RefObject;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.ConfirmCallBackListener;
import kd.bos.form.ConfirmTypes;
import kd.bos.form.MessageBoxOptions;
import kd.bos.form.MessageBoxResult;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.events.MessageBoxClosedEvent;
import kd.bos.form.operate.FormOperate;
import kd.bos.form.plugin.AbstractFormPlugin;

/**
 * <p>Title: </p>
 * <p>
 *    Description:
 *    beforeDoOperation事件 试验 
 * </p>
 * <p>Copyright: Copyright (c) 2020</p>
 * @author xx
 * @date 2020年3月6日
 * see_to_overridden
 * @version 1.0
 */
public class BeforeDoOperationSample extends AbstractFormPlugin {

	private final static String KEY_PAY = "pay";
	private final static String OPPARAM_AFTERCONFIRM = "afterconfirm";
	
	/**
	 * <p>Title: </p>
	 * <p>
	 *    Description:
	 * 执行操作前,触发此事件
	 * </p>
	 * <p>Copyright: Copyright (c) 2020</p>
	 * @author xx
	 * @date 2020年3月6日
	 * @param param the bare_field_name
	 * @param args
	 * @see kd.bos.form.plugin.AbstractFormPlugin#beforeDoOperation(kd.bos.form.events.BeforeDoOperationEventArgs)
	 * @version 1.0
	 */ 
	@Override
	public void beforeDoOperation(BeforeDoOperationEventArgs args) {
		super.beforeDoOperation(args);
		
		FormOperate operate = (FormOperate)args.getSource();
		if (StringUtils.equals(operate.getOperateKey(), KEY_PAY)){
			// 付款操作
			
			// 尝试读取操作自定义参数:判断是否确认后再次执行付款操作
			RefObject<String> afterConfirm = new RefObject<>();
			if (!operate.getOption().tryGetVariableValue(OPPARAM_AFTERCONFIRM, afterConfirm)){
				// 自定义操作参数中,没有afterconfirm参数:说明是首次执行付款操作,需要提示用户确认

				// 显示确认消息
				ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(KEY_PAY, this);
				String confirmTip = "您确认要付款给xxx?";
				this.getView().showConfirm(confirmTip, MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);

				// 在没有确认之前,先取消本次操作
				args.setCancel(true);
			}

			// 如下代码,演示如何增加自定义操作参数,由系统传递给操作服务及操作插件
			// (仅供演示,与本案例需求无关)
			operate.getOption().setVariableValue(OPPARAM_AFTERCONFIRM, "true"); 
		}
	}
	
	/**
	 * <p>Title: </p>
	 * <p>
	 *    Description:
	 * 用户确认了交互信息后,触发此事件
	 * </p>
	 * <p>Copyright: Copyright (c) 2020</p>
	 * @author xx
	 * @date 2020年3月6日
	 * @param param the bare_field_name
	 * @param messageBoxClosedEvent
	 * @see kd.bos.form.plugin.AbstractFormPlugin#confirmCallBack(kd.bos.form.events.MessageBoxClosedEvent)
	 * @version 1.0
	 */
	@Override
	public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
		super.confirmCallBack(messageBoxClosedEvent);
		
		if (StringUtils.equals(KEY_PAY, messageBoxClosedEvent.getCallBackId())){
			// 付款确认
			
			if (messageBoxClosedEvent.getResult() == MessageBoxResult.Yes){
				// 确认执行付款操作
				
				// 构建操作自定义参数,标志为确认后再次执行操作,避免重复显示交互提示
				OperateOption operateOption = OperateOption.create();
				operateOption.setVariableValue(OPPARAM_AFTERCONFIRM, "true");
				
				// 执行付款操作,并传入自定义操作参数
				this.getView().invokeOperation(KEY_PAY, operateOption);
			}
		}
	}
}
  1. 重启服务后注册页面插件后预览测试

如下图所示则为测试成功


分割线


相关信息

以上就是我关于 金蝶云苍穹动态表单插件beforeDoOperation事件案例 知识点整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4