多字段表单在子程序中时,是否有办法调用子程序呢?

使用问题 · 77 次浏览
白云朔 创建于 13天5小时前

您这个动作里面调用子程序的$=_context.RunSpAsync方法似乎只能在主程序里使用,有没有办法在子程序中使用呢?

在自定义操作窗有等待的情况下,只能通过operation=sp&spname=来调出多字段表单,但是在子程序中的多字段表单使用$=_context.RunSpAsync调用子程序不成功,是否有办法解决呢?


回复内容
H-D-G 12天23小时前
#1

等周末我测试一下,按道理是可以的,除非qk在调用时上下文对象没有继承(创建了新的上下文)

白云朔 回复 H-D-G 12天23小时前 :

这边试了下,是可以调用的。但是并不稳定,我在测试子程序中能成功调用,但是在具体动作中时,调试运行单个模块时无法调用,但运行动作又能成功调用。

H-D-G 回复 白云朔 11天10小时前 :

这个想法挺好的,我打算更新到这个Demo里

白云朔 回复 H-D-G 11天8小时前 :

可以通过自定义操作窗调用子程序的方法,来无缝唤醒多字段表单,并在多字段表单中修改字段,来更改自定义操作窗的外观。我这边试了一下用这种方法来即时改变自定义操作窗的图标大小,是可行的。

不过建议主程序中将自定义操作窗也打包到子程序,这样可以避免自定义操作窗过于分散,大概的流程是这样的:

动作运行→运行“显示主窗口”子程序,并传入任意参数→“显示主窗口”子程序接收到参数,执行判断,显示“自定义操作窗并等待关闭”→点击自定义操作窗中的“设置”按钮,唤醒子程序“动作设置”→“动作设置”子程序运行,并显示多字段表单→多字段表单中的字段刷新,异步调用“显示主窗口”子程序→“显示主窗口”子程序运行,由于没有传入参数,执行判断,显示“显示自定义操作窗”(并且由于执行的是“显示自定义操作窗”,流程上不会等待,所以虽然嵌套调用了“显示主窗口”子程序,但并不会导致递归)

简化版流程:

主程序→“显示自定义操作窗”(等待)子程序→“设置动作”子程序→“显示自定义操作窗”(不等待)子程序→返回

这样的话能确保“显示自定义操作窗并等待关闭”和“显示自定义操作窗”是放在一起的,避免重复去写窗口内容预处理的一些流程,比如自动给操作窗中的列表元素添加右键菜单,且可以在列表右键菜单里面执行一些修改界面的操作,删除元素什么的,同样使用自定义操作窗中调用子程序的方法,调用“显示自定义操作窗”(不等待)子程序即可。

白云朔 最后更新于 11天8小时前
H-D-G 回复 白云朔 11天7小时前 :

嗯,和我想的一样。不过Demo的话我会做的简单点,主要提供思路

H-D-G 12天23小时前
#2
回复 白云朔 :

这边试了下,是可以调用的。但是并不稳定,我在测试子程序中能成功调用,但是在具体动作中时,调试运行单个模块时无法调用,但运行动作又能成功调用。

嗯,调试运行是临时创建的动作上下文,会有影响。正常运行应该是没问题的

ZTOA10 11天0小时前
#3

用_context.RunSp是可以的

白云朔 回复 ZTOA10 11天0小时前 :

$=_context.RunSpAsync也是能正常运行的,不过在调试模式下不一定有目标子程序在上下文,有概率无法调用。这种情况先用表达式获取主程序或上级子程序的上下文对象就行了

回复主贴