【第4期】2023年1月发布 金蝶云·星空-协同开发 | 产品应用典型/热门问答精选原创
金蝶云社区-OUT_MAN
OUT_MAN
124人赞赏了该文章 1705次浏览 未经作者许可,禁止转载编辑于2023年1月30日 13:59:38

在金蝶云·星空-协同开发产品应用中,你需要了解的典型/热门问答都在这里!  

本帖每月持续更新,欢迎小伙伴们点赞,收藏本帖,CTRL+F关键词搜索,以便随时查看、扩充知识哟



【第4期】

  更新日期:2023-1


1、协同开发平台:点击【开发】或者新建应用都报一样的错

问题描述:


image.png

解决方案:

经和金蝶的老师处理后,是公司的代理服务器的代理设置方式的问题。

新的解决思路,如遇到此问题,可以查看一下是否是服务器环境的问题。

问题来源:https://vip.kingdee.com/questions/343020986939380224?productLineId=1    


2、开发插件在本地环境运行无误,部署到公有云后无法正常运行

问题描述:
插件之前有上传到公有云上,可以正常运行。本次在原来的基础上新增了2行取值(本地环境测试没问题,能够正常运行),但是在公有云点击没法正常运行。昨天重新打包部署了插件,但是系统直接没法登录了。

image.png


解决方案:

  1. 插件代码没问题,但在生成解决方案的时候目标平台选错了。所以导致打开环境的时候报错,出现乱码。共有云为x64系统,生成解决方案时目标平台选了x86。后续选择了any cpu,x86和x64的操作系统都能适配。

  2. 进度条没滚动是进度太慢,每次等的时间不够,最后出现了报错:二进制字符终止,修改了数据库对应的字段长度就好了(此处修改的字段是规格型号)

  3. 进度条没法关闭。这个在本地环境的时候是没问题的,但是不知道为什么打上去就没法关闭了。

问题来源:https://vip.kingdee.com/questions/375238962405072640?productLineId=1    


3、BOS平台进不去,协同平台怎么添加反过账

问题描述:

7.7版本 BOS平台登录不进去了,进协同平台如何添加反过账,社区里面的都是BOS平台进去添加的,协同平台怎么增加呢

解决方案:

详见以下帖子的图示操作。

问题来源:https://vip.kingdee.com/questions/278882661857041664?productLineId=1    


4、关于BOS中的标识、字段名、实体属性名的开发应用简介

问题描述:

BOS中有三个迷惑的"标识",最近看到社区有小伙伴在咨询"关于BOS中的标识、字段名、实体属性名的开发应用"。

官方知识有一个简单的介绍https://vip.kingdee.com/questions/7453/answers/10947

结合个人理解,开发相关具体用法简单介绍一下。

解决方案:

详情见以下帖子。

问题来源:https://vip.kingdee.com/article/283981316536560128?fromAction=POST_ARTICLE&productLineId=1     


5、BeforeImportData方法取到的表丢失第一行数据

问题描述:

在excel中是1行表头9行明细,导入后进入调试发现只有8行明细

解决方案:

标准引入功能是就标准的引入模板来解析Excel表格的,而标准的引入模板,数据行是从第3行开始的。

如果要做自定义Excel引入功能可以参考:知识分享 - 引入单据体数据

问题来源:https://vip.kingdee.com/questions/378849076579652608?productLineId=1      



6、表单插件.怎么样才能删除或修改只读的数据包里的数据

问题描述:

调用单据转换获取到了目标单的数据包,但数据包为只读状态,不允许赋值,怎么样才能删除或修改只读的数据包里的数据,目前思路是复制一下数据包里的数据给到新的数据包,再删除修改新的数据包里的数据,在用新的数据包当接口的参数,麻烦问下在代码中该如何解决

解决方案:

foreach (var dataEntity in targetObjs)
                {
                    //获取单据体
                    string entityKey = "FEntity";
                    var entity = this.View.BusinessInfo.GetEntity(entityKey);
                    //获取数据集合
                    var objs = this.Model.GetEntityDataObject(entity);
                    int hs = this.View.Model.GetEntryRowCount("FEntity");
                    DynamicObjectCollection optRptEntry = dataEntity["OptRptEntry"] as DynamicObjectCollection;
                    //遍历工序计划单据体
                    DynamicObjectCollection optRptEntryTemp = new DynamicObjectCollection(optRptEntry.DynamicCollectionItemPropertyType);
                    foreach (var opt in optRptEntry)
                    {
                        DynamicObject tempRow = ObjectUtils.CreateCopy(opt) as DynamicObject;
                        optRptEntryTemp.Add(tempRow);
                    }
                    optRptEntry.Clear();
                    //遍历表单单据体
                    for (int i = 0; i < objs.Count; i++)
                    {
                        //当工序计划内码=表单的工序计划内码时,把表单的完工数量附加到数据包的行数的FinishQty字段上
                        DynamicObject d = (from p in optRptEntryTemp where Convert.ToInt64(p["OptPlanOptId"]) == Convert.ToInt64(objs[i]["F_gxjhzdjtnm_int"]) select p).FirstOrDefault();
                        if(d != null)
                        {
                            d["FinishQty"] = Convert.ToDecimal(objs[i]["F_wgsl"]);
                            optRptEntry.Add(d);
                        }
                    }
                }

问题来源:https://vip.kingdee.com/questions/385770827268166656?productLineId=1     


7、 EndOperationTransaction怎么判断是否点击了按钮?

问题描述:

image.png

判断是否点击了VAMX_SubBtn这个按钮

解决方案:


操作服务插件只能判断,触发了某种操作,至于这个操作是不是点击按钮触发的,在操作服务插件中是无法直接判的。

可以用表单插件或者列表插件传递参数到操作服务插件中进行判断。

可以参考:操作执行前传递自定义的用户参数给服务插件


问题来源:https://vip.kingdee.com/questions/378848673372696576?productLineId=1       


8、  二次验权密码是在哪个地方设置的,是否可以修改。

问题描述:

image.png


解决方案:

用Administrator登录,在【单据参数配置】中设置启用二次验权。

另外,二次验权的方式,是在管理中心设置的。

参考 :提交网银付款二次认证配置

image.png


问题来源:https://vip.kingdee.com/questions/328119351851128320?productLineId=1       



【第3期】

  更新日期:2022-12


1、过滤条件这里的条件页签增加存货类别字段过滤,怎么在插件里把条件取出来呢

问题描述:
过滤条件这里的条件页签增加存货类别字段过滤,怎么在插件里把条件取出来呢?

image.png

解决方案:


  1. image.png

  2. BuilderReportSqlAndTempTable方法中用如下方法获取过滤条件

  3. string filterString = filter.FilterParameter.FilterString;//条件

问题来源:https://vip.kingdee.com/questions/361087796179911424?productLineId=1  


2、 自定义webApi,构造的Context, 如何跳过验证码的输入,或获取当前登录状态下的验证码并赋值

问题描述:
写自定义webapi的时候,重新构造了Context,由于登录的时候需要输入验证码,每次调用的时候返回值都是null(WebApiContext.ctx  和 WebApiContext.ctx2 ),但是取消验证码功能后就可以正常使用了。请教大佬,如何在不取消验证码的情况下来构造Context。

解决方案:


  1. loginInfo.AuthenticateType = (AuthenticationType)13;

问题来源:https://vip.kingdee.com/questions/354670525387929344?productLineId=1 


3、BillShowParameter中怎么修改弹出框的标题

问题描述:


image.png

解决方案:

1、自定义参数
billShowParameter.CustomParams.Add("TYPE","TRUE")

2、产品标识配置注册单据插件实现AfterCreateNewData方法,在方法中获取自定义参数:

string type = this.View.OpenParameter.GetCustomParameter("TYPE").ToString();

if (type.ToUpper() == "TRUE")

            {

                this.View.SetFormTitle(new Kingdee.BOS.LocaleValue("标题"));

            }

问题来源:https://vip.kingdee.com/questions/342333247181185280?productLineId=1   


4、 DynamicObject 和 DynamicObjectCollection有什么区别,在二开中应用的场景有什么不同

问题描述:
DynamicObject 和 DynamicObjectCollection有什么区别,在二开中应用的场景有什么不同

解决方案:

  1. DynamicObjectCollection里面有多个或者1个DynamicObject 。

  2. 是DynamicObject集合,相当于是DynamicObject 的 数组。

  3. 开发应用参考:https://vip.kingdee.com/article/335071759478985984?productLineId=1

问题来源:https://vip.kingdee.com/questions/338605993091496448?productLineId=1 


5、 webapi会提示已审核单据不允许上传文件

问题描述:
{"ResponseStatus":{"ErrorCode":500,"IsSuccess":false,"Errors":[{"FieldName":null,"Message":"已审核单据不允许上传文件!","DIndex":0}],"SuccessEntitys":[],"SuccessMessages":[],"MsgCode":11}}在云星空里面,已审核状态已经是可以上传附件的,但是webapi会提示已审核单据不允许上传文件,请问api是要加什么字段吗?

解决方案:

  1. 经过查证,webapi接口上传文件确实已审核不能上传文件,

  2. 2022年6月份的补丁后面已经修改了上面的验证;

  3. 建议

  4. 如果可以升级,升级到6月30号发布的补丁

  5. 或者不使用api接口,参考下面帖,自行写上传文件接口

    https://vip.kingdee.com/article/183394?productLineId=1&isKnowledge=2 

问题来源:https://vip.kingdee.com/questions/329629344828005888?productLineId=1 


6、如何获取同步变更BOM所勾选的生产订单数据包以及状态呢,如果开工变更BOM便自动发送给云之家指定人员

问题描述:


image.png

解决方案:

通过以下代码可以获取到,点击同步更新时,传到更新页面的生产订单明细ID:

List<long> moEntryIds = this.View.OpenParameter.GetCustomParameter("EntryIds") as List<long>;

但是,最终更新的要以用户勾选确定更新的生产订单为准,所以 还是获取更新界面单据体中勾选的生产订单。

循环单据体就可以了,参考如下代码:

DynamicObject billObj=this.View.Model.DataObject;
DynamicObjectCollection en = billObj["单据体ORM实体标识"] as DynamicObjectCollection;
foreach (var r in en)
{
     string isSelected = r["复选框实体属性标识"] + "";
     if (isSelected == "1" || isSelected.ToUpperInvariant() == "TRUE")
     {
          string selectMoBillNo = r["生产订单编号实体标识"] + "";
          string selectMoBillSeq = r["生产订单行号实体标识"] + "";
          //或者看下有没有隐藏字段,生产订单明细内码ID,也可以获取这一个字段进行匹配。
       }
}

问题来源:https://vip.kingdee.com/questions/325369185775928576?productLineId=1   


7、 DBUtils要引用Kingdee.BOS.App.Data.dll类,没找到Kingdee.BOS.App.Data

问题描述:
CLOUD的版本是v7.3,在cloud\website\bin里面只找到Kingdee.BOS.App.dll,没找到Kingdee.BOS.App.Data.dll,用不了DBUtils,请问要如何安装获取Kingdee.BOS.App.Data.dll类

解决方案:


  1. 引用Kingdee.BOS.App.Data.dll就行

  2. image.png

问题来源:https://vip.kingdee.com/questions/244049570647167744?productLineId=1 


8、【已解决】启动开发平台提示 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。

问题描述:
服务器跟协同开发没在同一台电脑。协同开发平台是通过外网访问到服务器的。服务器电脑刚打了最新的补丁(PT-146891)。协同平台也搭建了同样版本的环境。我的电脑是WIN10 专业版 64位。协同开发平台右击选择“启动开发平台”后,浏览器会在空白界面一直卡顿,大约在半个小时左右,界面显示500错误。

image.png

解决方案:

  1. 问题解决了,是群里一位大神告诉我的方法。

  2. 上述问题 将新的 oracle的dll文件替换掉目录下的dll文件。
    我用的是附件中的dll文件。

  3. 替换掉文件后,还是会报错误,这次报的错误是下面这个。

  4. image.png

  5. 在bin 目录下找到这个文件,然后删除。

  6. 再重新启动 开发环境就正常了。

问题来源:https://vip.kingdee.com/questions/228843855314424576?productLineId=1 




【第2期】

  更新日期:2022-11


1、ISysReportService的GetData()报对象不存在错误

问题描述:
语句DataTable dt = sysReporSservice.GetData(ctx, reportMetadata.BusinessInfo, p);
在K3cloud 7.5版本里运行正常,升级8.0后,
报如下错误:"对象名 'TMP833E0C90541211ED80E9E9D9448' 无效。

解决方案:

把 

DataTable dt = sysReporSservice.GetData(ctx, reportMetadata.BusinessInfo, p);

换成

MoveReportServiceParameter param = new MoveReportServiceParameter(ctx, reportMetadata.BusinessInfo, Guid.NewGuid().ToString(), p);

DataTable dt = sysReporSservice.GetListAndReportData(param).DataSource;//简单账表使用GetReportData方法 

问题来源:https://vip.kingdee.com/questions/372705437230932736/answers/377838776355596800?productLineId=1


2、开发插件在本地环境运行无误,部署到公有云后无法正常运行

问题描述:
插件之前有上传到公有云上,可以正常运行。
本次在原来的基础上新增了2行取值(本地环境测试没问题,能够正常运行),但是在公有云点击没法正常运行。
昨天重新打包部署了插件,但是系统直接没法登录了。

解决方案:

  1. 插件代码没问题,但在生成解决方案的时候目标平台选错了。所以导致打开环境的时候报错,出现乱码。共有云为x64系统,生成解决方案时目标平台选了x86。后续选择了any cpu,x86和x64的操作系统都能适配。

  2. 进度条没滚动是进度太慢,每次等的时间不够,最后出现了报错:二进制字符终止,修改了数据库对应的字段长度就好了(此处修改的字段是规格型号)

  3. 进度条没法关闭。这个在本地环境的时候是没问题的,但是不知道为什么打上去就没法关闭了。 

问题来源:https://vip.kingdee.com/questions/375238962405072640?productLineId=1 


3、python写了一个操作服务插件,用于在保存前清空子单据体的数据,提示错误信息:集合已修改;可能无法执行枚举操作。

问题描述:
python写了一个操作服务插件,用于在保存前清空子单据体的数据,提示错误信息:集合已修改;可能无法执行枚举操作。

解决方案:

  1. 不能在循环一个集合的时候又删除集合里面的元素。

  2. 正确的做法是,定义一个List[int],然后先循环记录下需要删除的索引值,然后再循环这个索引值List,逐行删除。

  3. 如果是清空所有数据的话,直接:subEntityRows.Clear(); 就可以了

  4. 另外,你这行取子单据体的代码:

  5.  subEntityRows  = e.DataEntitys[0]["OptRptEntry"][0]["ProcInterSettleSub"] 
  6. 只能取到第一个单据的第一行单据体的子单据体数据包或,操作子单据体数据包,要循环父级的单据体逐行处理。

  7. 如果只删除满足某个条件的行,参考如下代码:

  8. 尽量不要从网页复制代码,会有格式问题。

问题来源:https://vip.kingdee.com/questions/380043475695038464?productLineId=1 


4、BOS平台进不去,协同平台怎么添加反过账

问题描述:
 7.7版本 BOS平台登录不进去了,进协同平台如何添加反过账,社区里面的都是BOS平台进去添加的,协同平台怎么增加呢

解决方案:

详细操作见帖子,每一步都有截图。

问题来源:https://vip.kingdee.com/questions/278882661857041664?productLineId=1  


5、关于BOS中的标识,绑定实体属性,ORM实体名的开发应用场景

问题描述:
  在BOS中的每个字段中,都有标识和绑定实体属性。  同时在BOS的每个单据体中,都有标识和ORM实体名,在开发代码中,好像有些时候用标识,有些时候用绑定实体属性。不是很理解。现在附上一段代码,请看看我的理解是否正确

解决方案:

看到楼主这个问题,相信也是很多初学者的疑惑,针对楼主的问题,我写了一篇文章分享了一下个人见解。

https://vip.kingdee.com/article/283981316536560128?fromAction=POST_ARTICLE

对于楼主的示例代码和疑惑:粗暴理解来看是对的,只要是在DynamicObject对象中操作字段都是用实体属性名,而在其他地方基本都是用标识。绝大多数场景下都满足这个结论。

问题来源:https://vip.kingdee.com/questions/278882661857041664?productLineId=1  


6、没有扩展的业务单据在BOS平台显示已签出并且无法签入,下级扩展出来的单据也无法签入

问题描述:

image.png

  

解决方案:

这个是bos的bug,应该是卡了跳过校验了,理论上来说KD那层是签出不了的。

处理方法:去表单所在的文件夹,用svn签入就可以了!

问题来源:https://vip.kingdee.com/questions/381038829483887104?productLineId=1


7、特定客户、特定操作账号的BOS签入签出无效

问题描述:

image.png

 签出后没有报错,但是无效,仍然是只读;新扩展的单据签入也无效。
 只在本机(账号)、该客户的星空BOS协同系统出现;
 本机(账号)其他客户的星空BOS协同可以正常签入签出;
 其他机器(账号)该客户的星空BOS协同可以正常签入签出;
 在同事电脑上登本账号也可以正常签入签出。

解决方案:

已解决。 开发同事找了总部老师远程,拉取时不知道为什么默认地址多了个/,应该因此导致SVN同步失效以至于签入签出失败,重新拉取时删掉多余的/后解决。

问题来源:https://vip.kingdee.com/questions/367994168368573952?productLineId=1 


8、 升级到最新版本后,helper.ExportToFile(listField, noticeTable);不可用了

问题描述:
之前实现生成Excel功能,代码如 https://vip.kingdee.com/article/82075063486192896 。
升级到最新版本之后,生成Excel的功能突然不可用了,全部都在执行helper.ExportToFile(listField, noticeTable);
报空指针错误,正式环境功能报错,急求总部老师帮忙。
错误日志如下:   
at Kingdee.BOS.ExcelToolHelper.ExcelHelper.SetNumberValue(SheetView& sv, Object value, Int32 row, Int32 col, IDynamicFormView view)   at Kingdee.BOS.ExcelToolHelper.ExcelHelper.ExportToFile(List`1 listHeaders, DataTable dataTable, String message)   at LH.K3.SCM.SAL.ScheduleService.NotQuotedNotice.GenerateExcel(DataTable noticeTable) in D:\Code\LHK3CloudPlugIn\LH.K3.SCM.SAL.ScheduleService\NotQuotedNotice.cs:line 123

解决方案:

SetNumberValue这个方法加了个view参数,如果view为空则会导致报错,故可以检查一下此方法的调用类ExcelOperation 其构造函数是否有传入view.

问题来源:https://vip.kingdee.com/questions/215181831388060160?productLineId=1  



【第1期】

  更新日期:2022-10


1、8.0星空协同平台,“未引入”对象应该如何理解和处理

问题描述:当我登入数据中心A,打开TS-LIVE应用时,出现“未引入”销售出库单的,并且销售订单扩展的功能也不存在,我应该怎么理解这个状况?如果我想把TS-LIVE应用中所有改动过的功能,同时反应在数据中心A和数据中心B,这是可行的吗,需要如何处理?谢谢。

解决方案:

一定要搞清楚两点:

未引入,指的是你数据中心有表单,协同云没有,引入后就相当于把表单提交到代码服务器了;

未加载,指的是协同云有,数据中心没有,加载后,就相当于把代码服务器的表单同步到数据库。

未引入是数据库中实际存在的,所以客户端登录生效;

未加载的是协同云有,数据库没有,所以客户端登录不生效。

问题来源:https://vip.kingdee.com/questions/367713139631951104?productLineId=1


2出报错,显示被锁定,代码160035

问题描述:签出报错,显示被锁定,代码160035

解决方案:

应该是要签出的文件被锁定了,可以找到文件所在目录,通过SVN解锁一下,试试。

问题来源:https://vip.kingdee.com/questions/368762516778099456?productLineId=1 


3协同平台打开应用的时候报错误。KD-Composite-Package.pkgdef

问题描述:

image.png

解决方案:

打个临时补丁 TempPatch_V7_BOS.7.0.1630.12,补下在下面帖子附件里下载。

问题来源:https://vip.kingdee.com/questions/360743377333256704?productLineId=1  



4、协同开发平台操作错了,删除俩个文件能不能回到?

问题描述:

image.png

解决方案:

可以的,你可以下载个svn,然后去你的表单文件,右边项目选中表单,点击右键到相应的文件夹;

然后在文件夹中选中相应的表单文件,点击右键找到svn log,然后再log中选中你要revert的版本;

直接revert就可以了;

然后svn commit一下文件;

去bos里面,选中表单,同步业务对象到数据库。


问题来源:https://vip.kingdee.com/questions/352865079848850432?productLineId=1  


5、协同开发平台登录用户如何修改

问题描述:

image.png

解决方案:

协同云重新绑定以下星空账号就可以了!

具体的参考这里,更换金蝶云星空账号 (kingdee.com) 。

问题来源:https://vip.kingdee.com/questions/352852668684755968?productLineId=1  


6有云,二开,如何切换到私有云?

问题描述:

之前是公有云,做了插件二开,表单插件;1、现在要搭建一个本地测试环境,如何把之前部署在公有云的二开插件,下载到本地?2、如何查看做了哪些公有云二开插件?

解决方案:

找到之前部署的部署包解压,如果是协同平台可以在构建历史中下载。天梯上也有个二开包下载。

协同平台在线构建,可以分析每个业务对象加了什么控件,启用了那些插件,可以参考链接:

https://vip.kingdee.com/knowledge/specialDetail/220539858672783616?category=229995069774606080&id=273809157986447104&productLineId=1

问题来源:https://vip.kingdee.com/questions/350969698802332928?productLineId=1   


7协同平台显示签出了父级单据,想签出下面拓展子级单据显示需要签入,点签入和取消都报错

问题描述:

image.png


解决方案:
回滚后删除文件,重新update

问题来源:https://vip.kingdee.com/questions/352090737225664000?productLineId=1  


8、开发人员和实施人员在不同的电脑上对账套进行操作,开发的项目如何才能不覆盖实施的更改并且把自己的开发部署到正式账套呢?


问题描述:

问题场景:客户需要开发一个功能,同时实施人员也需要根据客户的需求进入bos平台修改字段什么的。开发人员在自己的笔记本上搭建的环境,实施人员在服务器上进行的修改字段。

问题:开发人员开发好项目后,如何部署到正式账套呢?需要从服务器上拷贝最新的账套到本地环境 进行重新部署吗?若是拷贝了新的账套,那么在部署的时候 是选择将本地的数据同步到数据中心呢  还是有其他的操作呢?
若是不拷贝最新的账套,直接将本地打包好的开发包部署到服务器的话,版本应该不一致,补丁包应该打不成功吧。

若是在服务器电脑上登录自己的协同开发平台 到最新的账套,那么在同步自己修改的设置时如何不覆盖实施修改的字段呢。 实施人员 若是用协同开发平台和集成开发开发平台对于 开发人员部署来说有什么影响呢?

解决方案:

建议使用协同开发平台:

①开发和实施登录同一个协同开发项目应用 ,虽然分别连接不同的账套,但是协同云会通过签入签出统一控制同一单据的修改信息(通过统一的开发商代码)。

②在协同平台的管控下,2个人不能同时对一个单据操作,例如,张三签出了销售订单,李四就不能修改销售订单了,只能等张三签入之后,李四才能修改。

③单据签入时,就会把单据最新版本提交到协同平台,这样每次修改签出时,都是基于最新版本进行开发的。

④张三在A账套做单据修改签入后,李四在B账套签出时,会提示与协同平台的数据不一致,立即同步更新就行了。

⑤由于2个人的修改都是实时提交到协同云的,所以在协同云在线构建,生成补丁包,将补丁打到正式环境或者测试环境也不会出现被覆盖的问题。

问题来源:https://vip.kingdee.com/questions/337525307110108160?productLineId=1    



赞 124