本文是金蝶云·星空-协同开发产品应用的问答汇总,版主OUT_MAN每月更新热门问题解答,包括插件触发值更新、私有云协同开发平台升级、按钮调用上下查界面、WebApi实现生产订单下推、取值设值疑惑、主控制台插件触发、协同平台插件部署及自定义API上下文传输等问题的解决方案,并提供了问题来源链接和学习清单推荐。
各位社区的小伙伴们,大家好,我是 版主 OUT_MAN
在金蝶云·星空-协同开发产品应用中,你需要了解的典型/热门问答都在这里!
本帖每月持续更新,欢迎小伙伴们点赞,收藏本帖,CTRL+F关键词搜索,以便随时查看、扩充知识哟
【第23期】
更新日期:2024-8
1、 插件触发值表头值更新?
问题描述:
插件触发表体的值更新可以这样写 this.View.InvokeFieldUpdateService("FMaterialId", 0); 但是如果是触发表头的值更新呢,要怎么写
解决方案:
表头字段也是一样的啊,字段标识用表头字段标识就行了! 表头字段最后的行号传0!
问题来源:https://vip.kingdee.com/link/s/l5rlv
2、 私有云星空7.5.1BOS还是集成开发平台如何升级协同开发平台?
问题描述:
私有云星空7.5.1BOS还是集成开发平台如何升级协同开发平台
解决方案:
协同开发平台早就支持了,只不过后面的版本限制了必须使用协同开发平台,以前的旧版本是可以自己选择使用协同开发平台还是集成开发平台的!
问题来源:https://vip.kingdee.com/link/s/l5rpJ
3、 如何通过按钮调用上下查界面,并往里塞数据展示?
问题描述:
没有单据转换关系的两个单据,如何通过按钮调用界面并写入数据?
解决方案:
单据自定义联查可以参考这个来实现:
第三方下查
问题来源:https://vip.kingdee.com/link/s/l5r0M
4、 使用WebApi实现生产订单下推生产汇报单?
问题描述:
我是通过SDK调用WebApi来实现生产订单的下推。
生产订单下推生成单据是有多个下推选项的,API提供的这些接口中,应该设置哪些参数,才可以指定到我想要的生产汇报单。然后再进行生产数量的设置,实际生产过程中,下推汇报单可能会分几个批次进行,我还需要修改汇报的数量。是否需要在找到在数据库中对应的字段名称,然后进行设置?
解决方案:
第一个问题:
生产订单下推生成单据是有多个下推选项的,其实就是不同的转换规则,API接口参数中可以通过RuleId来控制使用哪个转换规则下推!
第二个问题:接口下推后需要再干预下游单据?
WebAPI生成下游单据关联源单通常有如下方法,推荐使用第③种!
如果不具备插件开发条件的情况下,可以使用第①种!
问题来源:https://vip.kingdee.com/link/s/l5rTb
5、 关于取值设值得疑惑?
问题描述:
最近学习到关于 this.view.model.getvalue ,this.view.model.setvalue 这两个用法,分别是取值和设置值的
还学习到丁老师的DynamicObject的取值,设值的
DynamicObject billObj = this.Model.DataObject;
// 读取单据内码
long billId = Convert.ToInt64(billObj[0]);
// 普通文本字段(读取 + 设置)
string fldBillNoValue = Convert.ToString(billObj["BillNo"]);
billObj["BillNo"] = fldBillNoValue ;
// 日期字段(读取 + 设置)
DateTime fldDateValue = Convert.ToDateTime(billObj["F_JD_Date"]);
billObj["F_JD_Date"] = fldDateValue;第一个问题是两种用法有什么区别呢
第二个问题,我用第二个方法设值,在界面上不显示的呢
解决方案:
通过
并且资料类型DynamicObject的字段赋值,可以使用SetItemValueByID或者ByNumber,使用编码或者内码ID直接赋值,但是只能基于表单维护界面的View才能调用,而且会触发字段的一些引用加载、其他服务,赋值的性能较低,字段太多的话,可能会卡顿!
第二种方式是直接操作数据包,
如果是界面上赋值操作后要即时刷新,需要对数据包赋值之后,执行this.View.UpdateView("字段标识")来刷新界面,所以你赋值感觉不生效的原因很有可能就是没刷新!
用这种方式赋值,效率较高,而且适用于各种类型的插件操作数据包,因为不需要View对象了,只要有数据包就行!操作数据包赋值有2种方式,一种就是你发出来的这种:obj["字段实体属性标识"]=XXX;
而另一种,就是你提到的丁老师的文章,还提到了一种对数据包赋值的方式,那就是通过字段元数据来赋值,也可以学习一下:
fldSupplier.RefIDDynamicProperty.SetValue(billObj, supplierObjs[0][0]);
fldSupplier.DynamicProperty.SetValue(billObj, supplierObjs[0]);
另外,有一个重点要注意:以上2种方式赋值,使用的标识是不一样的,上面有加粗说明!!!
强烈推荐看下我这篇文章:
你看的应该是丁老师的这篇文章:
问题来源:https://vip.kingdee.com/link/s/l5r4d
6、 主控制台如何触发插件?
问题描述:
需要实现:点击菜单时跳转至第三方页面。
现在我只能把表单插件注册到目标单据中,这种操作只能先打开单据,再跳转页面,感觉体验不好。
在社区中找到的方法是,扩展主控制台系统菜单,注册表单插件。
我试了一下,无法触发(全事件均无法触发)。
请问,这个应该写什么插件,注册在哪里。
解决方案:
可以触发的,但是客户端和HTML5网页端好像是不同的界面,你找一下!
问题来源:https://vip.kingdee.com/link/s/l5rUN
7、 协同平台二开插件部署?
问题描述:
协同平台里面程序集包编译生成的dll插件如何制作补丁部署到公有云,目前补丁打上去不生效。
解决方案:
建议使用【部分包构建】来构建补丁包,将插件dll构建到补丁包。
参考这个:协同云开发构建部署包
构建成功之后,可以把安装包放到安装了管理中心的环境下,打开安装界面,修改解压路径(数据中心那个地址改成一个本地文件夹路径),按F2即可解压补丁包内容到指定目录。
把安装包解压出来看下有没有要部署的dll文件,确认没问题之后再上传发布。
解压安装包可以参考:安装包(.kdpkg文件)怎么解压查看部署包内容?
问题来源:https://vip.kingdee.com/link/s/lo77T
8、 自定义API如何生成上下文Context或者第三方调用时传输上下文Context?
问题描述:
业务场景:现编译一个查询云星空的接口供第三方调用查询遇到传输上下文参数的问题目前有两个思路:思路A:自定义接口时直接获取登陆接口时的上下文var ctx1 = KDContext.Session.AppContext; if (ctx1 == null) { // 会话超时,需重新登录 throw new Exception("ctx1 = null"); }但是上述代码不能放到静态方法中:public static string GetReportData(string paramJson)()如果我加上static时会飘红报错误
对象引用对于非静态的字段、方法或属性"CeiShi3.GetReportData(string)”是必需的
如果我不加static时,写的单据加载事件调用此接口又提示
思路B:编译了一个web测试调用登陆接口后获取上下文信息,当做参数传输至接口中
protected void Button2_Click(object sender, EventArgs e) { K3CloudApiClient client = new K3CloudApiClient("http://l***n/k3cloud/"); var loginResult = client.ValidateLogin("6****", "***", "12***", 2052); var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>(); if (resultType == 1) { UserServiceProxy proxy = new UserServiceProxy();// 引用Kingdee.BOS.ServiceFacade.KDServiceClient.dll LoginInfo loginInfo = new LoginInfo(); loginInfo.AcctID = "6****"; loginInfo.Username = "***"; loginInfo.Password = "12***"; loginInfo.Lcid = 2052; LoginResult ret = proxy.ValidateUser("http://l***n/k3cloud/", loginInfo); var resultA = client.Execute<string>("命名空间.CeiShi3.GetReportData,组件名", new object[] { ret.Context, "" }); } }其中登陆接口登陆成功,ret.Context上下文信息也正确,接口调用返回错误:
Message "Code(-2147467259);{InnerExWrapper:{IsEmpty:false,Data:{},HelpLink:null,Message:Additional text found in JSON string after finishing deserializing object.,Source:null,StackTrace: 在 Kingdee.BOS.ServiceFacade.KDServiceFx.ServiceExecutor.DeserializeParameters(SerializerProxy serializer, ServiceType svcType, String[] paras)\\r\\n 在 Kingdee.BOS.ServiceFacade.KDServiceFx.ServiceExecutor.Execute(KDServiceContext context, ServiceType svcType, String[] paraValues, SerializerProxy serializeProxy, ServiceType beginMethod),TargetSite:null,ExceptionType:Kingdee.BOS.ServiceFacade.ServiceException, Kingdee.BOS.ServiceFacade.Common, Version=8.1.410.13, Culture=neutral, PublicKeyToken=null,InnerException:null},ClassName:Kingdee.BOS.ServiceFacade.ServiceException,Message:Additional text found in JSON string after finishing deserializing object.,Data:null,InnerException:null,HelpURL:null,StackTraceString: 在 Kingdee.BOS.ServiceFacade.KDServiceFx.ServiceExecutor.<>c__DisplayClass1.<Execute>b__0()\\r\\n 在 Kingdee.BOS.ServiceFac..." string
解决方案:
自定义WebApi获取token以及Context:https://vip.kingdee.com/link/s/lr5zz
自定义插件里,通过这个可以获取上下文
this.KDContext.Session.AppContext;
获取上下文后,其他操作就跟其他插件操作是一样的。
问题来源:https://vip.kingdee.com/link/s/l5ofp
我创建了<<协同开发,轻松入门>>的学习清单,推荐给你,和我一起学习交流吧!
<<协同开发,轻松入门>>
查看往期精选:
【汇总】金蝶云·星空-协同开发 | 产品应用典型/热门问答精选
推荐阅读