自定义控件-开发常见问题解决方案原创
金蝶云社区-吴锐雄
吴锐雄
11人赞赏了该文章 5,135次浏览 未经作者许可,禁止转载编辑于2022年08月24日 09:42:54
summary-icon摘要由AI智能服务提供

本文介绍了在开发自定义控件时可能遇到的问题及解决方案,包括控件不生效、更新不生效、移动端报错、保存报错、关闭页面方法和IE浏览器语法异常等。提供了具体的检查步骤和修复建议,如确保id一致、正确编写index.js和html、清除浏览器缓存、更新静态文件服务、移除移动端jQuery依赖、检查静态资源目录路径和修正IE不支持的语法等。


创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^,我会更有动力持续地更新文章。


官方知识区的文档:

https://vip.kingdee.com/article/210684616045450752


一,自定义控件不生效,预览时一片空白,自定义控件不显示的问题

1.确认id是否一致,index.js和控件方案中的id要一致,如果不一致,会导致自定义控件一片空白

image.png

2.index.js确认编写正确

image.png

image.png

image.png

image.png

3.确认html正确无误

如下图,如果有多个控件,可以使用div标签,如果是单个标签,直接使用对应html组件

不要使用<html><body><head>标签,如果用了,反而会导致自定义控件无法解析

image.png



二,自定义控件替换之后不生效的问题

自定义控件当然不可能一次性就编写完成,可能会存在多次调试,修改。

这就需要在控件方案中重复上传自定义控件的zip包,如果出现已经更新了zip包,但是并不生效。

这时候需要排查一下情况


1.排查浏览器缓存,导致新修改的js代码不生效

进入F12调试模式,进入sources页签,查看index.js的js源码

如果这个代码和已上传的zip中的js源码不一致,就是浏览器缓存js文件,导致新的js不生效

image.png


切换到network页签,勾选disable cache

刷新当前页面,新修改的js代码即可生效

image.png


2.排查静态文件服务中是否已更新对应的js

路径是:static-file-service\isv\开发商标识\领域标识\方案名称

以下是我的本地轻量级环境,对应的index.js获取其他.js文件是否已经更新

image.png

如果没有更新,还是之前的js代码,需要执行以下步骤

(1)进入控件方案中,删除对应的控件方案

(2)停止当前cosmic

(3)删除static-file-service\isv\开发商标识\领域标识\方案名称,对应的静态文件

(4)启动cosmic,重新进入云苍穹的开发页面,重新新增一个控件方案

image.png


如果static-file-service\isv\开发商标识\领域标识\方案名称,下面没有对应的目录结构

那么可以把zip解压到对应目录下开发商标识\领域标识\方案名称这个路径如果不存在就需要新建。

image.png

image.png


三,移动端报错

1.如果直接使用门户上的自定义控件案例代码,在移动端中运行,jquery会报错:jQuery is not defined

这是由于PC端的自定义控件默认提供jQuery,而移动端不提供jQuery对象。

移动端如何移除jQuery对象,请参考我的其他文章:

https://vip.kingdee.com/article/155310576162541312


四,控件方案保存报错 或者 404 not found 报错。

archive is not a ZIP archive


404状态码:

image.png


找到静态资源目录,查看下面是否有生成对应自定义控件方案。


如果没有,解决方案是手动解压

开发者自行把zip解压到 static-file-service\isv\开发商标识\领域标识\方案名称 的路径下面

image.png

苍穹linux版本,默认路径如下:

/苍穹安装目录/nginx-appstatic/appstore/appstatic/static-files/cosmic/webapp/isv/开发商标识/领域标识/控件方案名称

image.png

默认路径如上图,

如果静态目录在nginx上修改过,需要查看nginx配置文件的转发路径:

conf/conf.d/ierp.conf: 

image.png


五,关闭当前页面,回到上一个页面的问题

父页面跳转到子页面之后,如果子页面使用完了,想要关闭子页面,回到父页面,一定要调用 getView().close()来关闭当前页面。

千万不能用showForm()去打开父页面。

之前遇到一个自定义控件一直无法获取焦点的问题,就是由于关闭页面的点击事件不是真的关闭,而是使用getView().showForm(showParameter)再去打开之前的页面。

这么做会导致原先打开的页面一直没有关闭。



六,语法异常

现象:在Chrome或者Firefox下运行没问题,在IE运行时报错

原因:jquery调用含参函数的时候写法错误导致


以下代码会导致ie浏览器报错:SCRIPT1002:语法错误

IE浏览器不支持Promise,不支持ES6语法

image.png

image.png



错误的方法:

functionName: (e) => {}


解决方案:

更换js的语法为以下方法

functionName : function (e) {}



图标赞 11
11人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!