【第26期】金蝶云·星空-协同开发 | 产品应用典型/热门问答精选 2024年11月发布原创
金蝶云社区-OUT_MAN
OUT_MAN
9人赞赏了该文章 213次浏览 未经作者许可,禁止转载编辑于2024年12月03日 17:55:37
summary-icon摘要由AI智能服务提供

本文是金蝶云·星空版主OUT_MAN发布的协同开发产品应用问答汇总,包含关于获取ConvertOperationResult失败信息、修改引出列名、插件hotupdate不生效、自定义webapi无法访问、树形控件报错、单据审核物料无库存提示、webapi的url逗号作用及插件控制单据组件不可点击等问题的解决方案及问题来源链接,并邀请社区成员参与投票和学习交流。

各位社区的小伙伴们,大家好,我是  版主 OUT_MAN


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

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


嗨,朋友们!金蝶云社区创见者评选火热进行中,点击链接,和我一起参与投票,小米手环、颈部按摩仪等大奖等你赢!


【第26期】

  更新日期:2024-11


1、 如何获取ConvertOperationResult的失败信息

问题描述:

代码调用单据转换,生成下游单据,假设上游单据未审核,不满足下推条件,ConvertOperationResult结果失败,请问老师怎么获取ConvertOperationResult的失败信息

解决方案:

有两部分,一个是catch (Exception ex)里的异常信息,常见的单据未审核啥的,大部分都在这里,
还有一个是operationResult里的错误信息,调试一下看看有啥。

ConvertOperationResult operationResult = null;
Dictionary<string, object> custParams = new Dictionary<string, object>();
try
{
    PushArgs pushArgs = new PushArgs(rule.Rule, selectedRowsBill)
    {
        TargetBillTypeId = "3c6f819d78ac4d5981891956c4595b20",//单据类型
        TargetOrgId = 0,
        CustomParams = custParams,
    };
    var opt = OperateOption.Create();
    opt.SetVariableValue("ValidatePermission", true);//取消权限校验
    operationResult = ConvertServiceHelper.Push(this.Context, pushArgs, opt);
}
catch (Exception ex)
{
    string message = ex.Message;
}
if (operationResult != null)
{
    string msg = "";
    List<Kingdee.BOS.Core.Validation.ValidationErrorInfo> validationErrorInfos = operationResult.GetFatalErrorResults();
    foreach (ValidationErrorInfo error in validationErrorInfos)
    {
        msg+=error.Message;
    }
}

问题来源:https://vip.kingdee.com/link/s/le8Hi       


2、 怎么修改引出的列名

问题描述:

想要修改引出excel的列名,试了好几个方法都不行 BeforeExportData和BeforeExportDataNew都试过

image.png

image.png

解决方案:

关键代码如下:


image.png

image.png

问题来源:https://vip.kingdee.com/link/s/le8v0       


3、 插件hotupdate不生效

问题描述:

在服务器上已经部署若干插件,并设置过了 [HotUpdate]。
我在其他出库单的单据下新注册了一个插件,同样设置了热更新,但是在实际使用中没有生效。因为在金蝶云中已有可以正常运行的热更新插件,应该可以排除环境配置的问题。求助还应该在哪里进行检查,排除热更新失效的问题。

=====================================
后续更新:
无法确定是否与重启IIS的方式有关,仅供参考:
重启IIS先点击面板上的停止,等待几秒,等到资源释放后,再点击启动IIS,经测试热更新功能可以生效了。
相对的,如果直接点击重新启动的选项,或者使用cmd命令来重启IIS,则无法更新插件。

解决方案:

参考:K3写插件不重启IIS热更新简单配置  协同平台启动开发环境后如何调试代码(热更新)


生产环境不要启用热更新!!!

PS:用Python插件开发就不用考虑这个问题啦,Python脚本配置即生效,不需重启!

问题来源:https://vip.kingdee.com/link/s/le8yD       


4、 自定义webapi开发完成部署后无法访问

问题描述:

完完全全按照官方教程开发的,反复检查了net版本,访问地址等都确定没问题,把生成的dll文件放到k3cloud/bin下面重启了服务,访问就返回这个,有没有大佬知道怎么回事吗?本地开发环境开发的,星空版本的9.0,使用的NET版本是4.8。

image.png

解决方案:

问题已经解决,就是协同开发平台搭建的开发环境没有服务器资源。所以无法访问webapi。但现在的问题是,协同开发平台怎么开发webapi呢?每次都放到测试服务器上去,这样调试也很不方便吧

image.png

问题来源:https://vip.kingdee.com/link/s/le8Fg       


5、 点击树形控件就会出现请先关闭当前表单报错,这个报错还不能点击确定,右方也一直出现加载的标识

问题描述:

整体是一个动态表单,左方是树形控件,右方是面板,点击左方组织下的子项,可以在右方面板弹出,基础资料界面
根据不同的组织,弹出不同的基础资料信息

第一次点击某个组织可以弹出界面,第二次点击其他组织就会出现请先关闭当前表单的报错,这个报错还不能点击确定,右方也一直出现加载的标识
但是再次点击另一个组织,就又可以弹出正常界面
想问下各位大佬出现这个问题的原因是什么

image.png

代码如下

image.png

解决方案:

关闭页面时,用这个试试:this.View.SendDynamicFormAction(view);
你调用的这个方法是异步的!我之前那个万能批改动态加载批改编辑字段的实现是这样做的

image.png

问题来源:https://vip.kingdee.com/link/s/le8By       


6、 二开单据,调用单据审核服务,审核标准单据销售出库单,物料无库存,可以精准提示哪个物料无库存吗

问题描述:

OperateOption op = OperateOption.Create();
                opResult = BusinessDataServiceHelper.Audit(this.Context, formMetadata.BusinessInfo, ids, op);
                if (!opResult.IsSuccess)
                {
                    if (opResult.ValidationErrors.Count<ValidationErrorInfo>() > 0)
                    {
                        StringBuilder stringBuilder = new StringBuilder(1024);
                        foreach (ValidationErrorInfo current2 in opResult.ValidationErrors)
                        {
                            stringBuilder.Append(current2.Message + "\r\n");
                        }
                        if (stringBuilder.ToString().Trim().Length > 0)
                            throw new Exception("审核金蝶库存单据\"失败:" + stringBuilder.ToString());
                    }
                }
                
调试发现opResult.ValidationErrors 是为0 的,怎么会为0呢?
请问老师销售出库单10个物料,其中2个物料无库存,怎么抓取系统标准的提示,这样便于排查

解决方案:

要自己从调用审核操作结果opResult 中去解析交互提示信息!

从 opResult.InteractionContext 里面去解析,参考如下代码:


opResult.InteractionContext.SimpleMessage;//主要提示信息

//有交互性提示

if(OperateOptionExt.GetInteractionFlag(opResult.InteractionContext.Option).Count>0)

{

    //交互标识,即交互提示弹窗的FormId,例如,库存校验:STK_InvCheckResult

    string InteractionFormIdKey=opResult.InteractionContext.InteractionFormId;

    var opDIC=opResult.InteractionContext.Option.GetVariables();//操作结果字典

    if(opDIC.ContainsKey(InteractionFormIdKey))

    {

        //DynamicObject类型,交互弹窗的实体数据包

       var InterFormObj=opDIC[InteractionFormIdKey] as DynamicObject;

       //下面就可以根据交互弹窗表单的实体数据包结构去解析具体信息了

        //....

    }

}

问题来源:https://vip.kingdee.com/link/s/le8Xp       


7、 webapi的url里逗号起到什么作用?

问题描述:

例如,我写了一个自定义的webapi,命名空间是Thicka.WebApi,类名是DemoService,函数名是DoSth2。访问地址则是:
http://192.168.1.16/k3cloud/Thicka.WebApi.DemoService.DoSth2,Thicka.WebApi.common.kdsvc
我想请教两个疑问,1、这个url后面的逗号起到什么作用?2、逗号后面为什么要跟上这么一串,那个common.kdsvc又是起到什么作用?
谢谢大家!

解决方案:

在标准的Web API(如RESTful API)中,URL通常不会包含逗号作为分隔符。然而,在某些特定的Web服务框架或协议中(如SOAP),逗号或其他特殊字符可能被用作分隔URL的不同部分。在这个特定的例子中,逗号可能用于分隔服务调用的主要部分(即命名空间、类名和方法名)和附加参数或配置信息。


  • 逗号在这里用作分隔符,将URL的主要部分和附加信息分开。

  • Thicka.WebApi.common.kdsvc的具体作用取决于后端服务的实现,可能是指定服务类型、权限验证信息或配置文件等。

问题来源:https://vip.kingdee.com/link/s/ln5No       


8、 插件怎么控制单据的组件变成不可点击?

问题描述:

插件怎么实现,表单上一个复选框在第一次点击后,变成禁止点击?用什么方法可以实现?

image.png

解决方案:

参考资料:

通过代码脚本实现设置字段为必录:https://vip.kingdee.com/link/s/l8YKl 

image.png

问题来源:https://vip.kingdee.com/link/s/le8sD       



我创建了<<协同开发,轻松入门>>的学习清单,推荐给你,和我一起学习交流吧!


<<协同开发,轻松入门>>


查看往期精选:

【汇总】金蝶云·星空-协同开发 | 产品应用典型/热门问答精选


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