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

本文是版主OUT_MAN在金蝶云·星空-协同开发产品应用中发布的问答合集,涵盖多个常见及热门问题,包括数据行隔行标注符号设置、自定义SQL报表数据规则设置、代码获取FormID不一致、采购订单审核按钮插件无效、执行计划自动下推单据及服务插件辅助资料赋值等问题,并提供了详细的解决方案和示例代码,每月持续更新,方便社区成员学习和使用。

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


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

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


【第24期】

  更新日期:2024-9



1、 数据行隔行设置不同的标注符号?

问题描述:

偶数行,不加后缀,动态字段 如何实现?

image.png

解决方案:

这样写:
 FMaterialId.FNumber  if(FPOOrderEntry_FSeq%2==0) else ("{0}后缀").format( FMaterialId.FNumber)

image.png

FEntity_Seq 改成 :int(字段[-4:])
F_RXDP_Text_ca9  if(int(F_RXDP_Text_ca9[-4:])%2==0) else ("{0}后缀").format( F_RXDP_Text_ca9)

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


2、 自定义SQL报表不能设置数据规则怎么办

问题描述:

自定义的sql报表是关于销售订单数据的,没法设置数据规则的话每个业务员都能看见别人的订单

解决方案:

系统不能自动引用权限里面的数据规则。

要自己在SQL里面拼接过滤条件,系统提供了几个默认的关键字:当前用户ID、当前用户对应的组织。

基于这个系统变量,可以自己拼接子查询过滤,例如,根据当前用户ID对应的业务员,来过滤业务单据!

数据规则复杂的话,就不建议使用权限配置里的数据规则了,因为无法直接通过SQL解析出来,可以自己二开一个单据或者基础资料,设置每个用户对应的数据范围,例如,维护用户能看到哪些客户,然后SQL查询的时候基于这个数据来关联过滤!

image.png

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


3、 代码获取的formid与BOS不同

问题描述:

代码  string billtype = a.DynamicObjectType.Name.ToString();获取表单fromid 发现有部分单据获取的fromid与单据的实际fromid不同 是否有方法能获取是一样的

image.png

image.png

解决方案:

a.DynamicObjectType.Name,这个获取到的是实体的ORM实体标识。

image.png


获取FormID,要从BusinessInfo里面获取。

BInfo=this.View.BillBusinessInfo

formId= BInfoGetForm().Id;

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


4、 想在采购订单做一个审核按钮 的插件没有效果怎么办

问题描述:

想在采购订单做一个审核按钮 的插件没有效果怎么办

image.png

解决方案:

在BeforeExecureOperationTransaction事件中设置e.cancel=true ,设置cancelMessage,不要强行抛出错误

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


5、 执行计划,怎么实现进行自动下推单据

问题描述:

用执行计划插件,怎么实现进行自动下推单据,怎么去拿到源单的数据,在进行下推操作

解决方案:

直接通过SQL语句查询,筛选出符合条件的单据内码就行。
                //筛选大于2024年1月1日的销售订单
                string sql = @"/*dialect*/select FID from t_sal_order where fdate>='{0}'";
                DataSet ds = DBServiceHelper.ExecuteDataSet(ctx,string.Format(sql,new DateTime(2024,01,01)));
                if (ds.Tables[0].Rows.Count>0)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        long fid = Convert.ToInt64(row["FID"]);

                        //调用下推服务
                        //TODO
                    }
                }


调用下推服务-整单下推:
public void doPush(Context ctx)
        {
            FormMetadata targetBill = MetaDataServiceHelper.Load(ctx, "目标单据formid") as FormMetadata;

            var rule = ConvertServiceHelper.GetConvertRule(ctx, "单据转换标识");

            ListSelectedRow[] selectedRowsBill = GenerateListSelectedRowsBill("表单内码", "源单fromid"); //选择下推的单据

            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(ctx, pushArgs, opt);
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            if (operationResult != null)
            {
                DynamicObject[] objs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray();
                foreach (DynamicObject obj in objs)
                {
                    //obj就是下推之后产生的单据数据包:
                    OperateOption saveOption = OperateOption.Create();
                    saveOption.SetVariableValue("IgnoreWarning", true);
                    saveOption.SetVariableValue("_IgnoreInteraction_", true);
                    IOperationResult rs2 = BusinessDataServiceHelper.Save(ctx, targetBill.BusinessInfo, obj, saveOption);
                }
            }
        }
        /// <summary>
        /// 选择整单下推
        /// </summary>
        /// <param name="fid"></param>
        /// <param name="strFormId"></param>
        /// <returns></returns>
        private ListSelectedRow[] GenerateListSelectedRowsBill(string fid, string strFormId)
        {
            IList<ListSelectedRow> source = new List<ListSelectedRow>();
            ListSelectedRow singleRow = new ListSelectedRow(fid, "0", 0, strFormId);
            source.Add(singleRow);
            return source.ToArray<ListSelectedRow>();
        }

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


6、 服务插件辅助资料赋值

问题描述:

需要在服务插件中给某个辅助资料赋值,照着基础资料的数据包赋值弄好像不行,请问有这个辅助资料的数据包赋值代码吗,

image.png

image.png

解决方案:

改一下抓数据包的方式试试。
BaseDataField field = this.BusinessInfo.GetField("字段标识") as BaseDataField;
obj["实体属性_Id"] = "内码";
obj["实体属性"] =BusinessDataServiceHelper.LoadSingle(this.Context, "内码",field.RefFormDynamicObjectType) ;

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


7、 自建单据中两个字段做的值更新服务在保存时报错

问题描述:

1、问题描述:
两个字段做的值更新服务,在保存时提示表达式错误,
2、错误提示:

image.png

3、值更新服务配置与表达式测试

image.png

image.png

解决方案:

你不能配置到表头触发,要配置到单据体的实体服务规则里面。
你测试的时候,当前实体选择的是 单据体 ,所以没报错

image.png

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


8、 简单账表动态显示列,打开账表显示的是空白的

问题描述:

简单账表调用存储过程来实现,打开账表是空白的,这个是什么原因临时表的数据

image.png

临时表的数字部分为动态列,这部分和代码中的动态列是同样的数据

代码如下


public class Class1 : SysReportBaseService

    {

        public override void Initialize()

        {

            base.Initialize();

            ReportProperty.IsUIDesignerColumns = false;

            ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;

            IsCreateTempTableByPlugin = true;

            ReportProperty.IdentityFieldName = "FIDENTITYID";

        }

        DynamicObjectCollection dt;

        public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)

        {

            base.BuilderReportSqlAndTempTable(filter, tableName);


            DynamicObject dynamicObject = filter.FilterParameter.CustomFilter;

            DateTime Date = Convert.ToDateTime(dynamicObject["F_StartDate"]);

            DateTime eDate = Convert.ToDateTime(dynamicObject["F_EndDate"]);


            List<SqlParam> sqlParams = new List<SqlParam>();

            sqlParams.Add(new SqlParam("@FTempTable", KDDbType.AnsiString, tableName));

            sqlParams.Add(new SqlParam("@sdate", KDDbType.AnsiString, Date));


            sqlParams.Add(new SqlParam("@edate", KDDbType.AnsiString, eDate));

            DBUtils.ExecuteStoreProcedure(this.Context, "XRK_QXLX_5", sqlParams);


            string sSQL = string.Format(@"/*dialect*/select  case when [tian] = 32 then CONVERT(nvarchar, '合计') else CONVERT(nvarchar, [tian]) end as tian from table3");


            dt = DBUtils.ExecuteDynamicObject(this.Context, sSQL, null, null, CommandType.Text, null);


            string sSQL1 = string.Format(@"/*dialect*/select * into "+ tableName +" from qxmx6");

            DBUtils.Execute(this.Context, sSQL1);

        }

        public override ReportHeader GetReportHeaders(IRptParams filter)

        {

            base.GetReportHeaders(filter);

            DynamicObject dynamicObject = filter.FilterParameter.CustomFilter;

            DateTime SDate = Convert.ToDateTime(dynamicObject["F_StartDate"]);


            DateTime EDate = Convert.ToDateTime(dynamicObject["F_EndDate"]);


            ReportHeader header = new ReportHeader();


            //header.AddChild("FIDENTITYID", new LocaleValue("FIDENTITYID"));

             header.AddChild("工序说明", new LocaleValue("工序说明"));

             header.AddChild("缺陷类型", new LocaleValue("缺陷类型"));

            //wl.ColIndex = 0;

            for (var i = 0; i < dt.Count; i++)

            {

                var date = dt[i][0].ToString();

                header.AddChild(date, new LocaleValue(date));

            }

            return header;

        }

    }


解决方案:

header.AddChild(date, new LocaleValue(date)); 这里的第一个参数是字段Key,不要用纯数字,前面加个字母嘛:F1,F2,F3....

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

       

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

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


查看往期精选:

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






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