今天遇到一个问题,比较坑。。
深圳一个客户说在使用silverlight网报的时候,内网打印,打印的策略执行没问题,但是,外网打印的时候,打印策略没有起作用,demo登录的情况下,不管单据是否审核,都可以打印。
先说下silverlight打印的过程:
1.打印按钮触发silverlight代码中的打印事件
2.silverlight代码中的打印事件调用js中的打印方法
3.js中的打印方法调用打印控件(vc代码)
4.打印控件调用vb编写的打印策略代码
5.vb编写的打印策略代码调用C#写的webservice策略,查库,是否设置了必须审核后打印就是在这里做的。
查了很多,打了很多日志,最后问题定位在vb编写的通过soapclient30调用C#编写的webservice这里报错,内网是正常的,说明服务端webservice肯定没问题,就外网有问题,网上搜了下,发现有个同志遇到过一样的问题,说是EndPoint引起的,按照他说的改了,搞定了。。。坑。。。vb就是巨坑。。。
那哥们儿的文章参考地址:https://www.cnblogs.com/fitche/p/3549000.html
2018-10-23更新
今天又遇到了新的问题,同事在测试web打印的时候,发现在低版本ie上没问题,但是在高版本ie上打印的时候会控制不住“未审核也能打印”,我在本机win10高版本ie下测却没有这个问题。
在vb代码中,调用webservice过程的前后都设置了日志,发现成功执行,而且正确的从webservice中得到了结果false,也就是“设置了审核,但是目前还没有审核,不能打印”,但vc代码在拿到这个结果后却出现了错误,第一次打印,没控制住,直接能打印。第二次打印,直接弹框提示,框中只有一个红色叉号,没有文字说明。
问题在vc的打印代码中,需要chy同学打印vc的代码看看什么问题。和chy同学一起看了下vc的代码,打印的控制策略逻辑是在vc代码中控制的,未审核不能打印的提示也是在这里弹出的,具体弹出信息是从资源文件中获取的。
对于js调用vc的代码过程:
1.找到print.js(u8soft\u8sl\scripts\common)
2.在脚本中找到SetPrintClient这个方法,这个方法中使用了打印控件那边的vb组件“PrintPolicyClient.ISvr”,然后把uap这边的IdataBaseForWebUap.webdatasource作为datasource赋值给打印控件那边的vb组件,然后把这个vb组件再通过printOcx.SetOB()方法赋值给vc打印控件来控制打印策略,是否打印的逻辑会先从这边的vb传递到打印控件的vb代码,然后再从打印控件的vb代码返回到vc打印控件,从而决定是否继续打印。
网友评论