金蝶云星空二次开发-通过视图的方式创建基础资料和单据

在开发过程中很多地方都需要操作表单界面上的东西,这个时候我们就可以通过试图来打开这个表单或者基础资料,通过this.View.XXX去操作这个表单上的东西

场景1:与CRM系统对接的时候,通过执行计划定时抓取CRM中的客户信息,创建金蝶的客户基础资料,这个时候有几种方式,常见的有,1.调用金蝶提供的标准API去新增客户,2.直接insert into 客户表和其他的关联表(一般不考虑),3.通过创建试图的方式去创建客户

场景2:在表单插件里面去操作另外一个基础资料的信息对其修改或者生成单据

操作试图的优点:与前台手工做单一致

直接上代码       

 /// <summary>
    /// 客户执行计划
    /// </summary>
    public class CustomerService : IScheduleService
    {
        public void Run(Context ctx, Kingdee.BOS.Core.Schedule schedule)
        {
            ctx.CurrentOrganizationInfo = new OrganizationInfo
            {
                ID = 1,
                Name = string.Empty
            };
            Customer(ctx);
        }
        /// <summary>
        /// 根据编号创建或修改客户
        /// </summary>
        /// <param name="ctx"></param>
        private void Customer(Context ctx)
        {
            BaseData baseData = new BaseData();//获取数据
            List<recordsAccount> recordsAccount = baseData.Customerlist(ctx);
            if (recordsAccount == null)
            {
                return;
            }
            else
            {
              foreach (var z in recordsAccount)
             {
                AccessResult accs = CreateCustomer.Create(ctx, z);//循环创建
             }
            }

        }
 /// <summary>
        /// 创建一个单据视图,后续将利用此视图的各种方法,设置字段值
        /// </summary>
        /// <remarks>
        /// 理论上,也可以直接修改数据包达成修改数据的目的
        /// 但是,利用单据视图更具有优势:
        /// 1. 视图会自动触发插件,这样逻辑更加完整;
        /// 2. 视图会自动利用单据元数据,填写字段默认值,不用担心字段值不符合逻辑;
        /// 3. 字段改动,会触发实体服务规则;
        /// 
        /// 而手工修改数据包的方式,所有的字段值均需要自行填写,非常麻烦
        /// </remarks>
        public static IBillView CreateBillView(Context ctx, string FormId, object FID)
        {
            // 读取物料的元数据
            FormMetadata meta = AppServiceContext.MetadataService.Load(ctx, FormId) as FormMetadata;
            Form form = meta.BusinessInfo.GetForm();
            // 创建用于引入数据的单据view
            Type type = Type.GetType("Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web");
            var billView = (IDynamicFormViewService)Activator.CreateInstance(type);
            // 开始初始化billView:
            // 创建视图加载参数对象,指定各种参数,如FormId, 视图(LayoutId)等
            BillOpenParameter openParam = CreateOpenParameter(ctx, meta, FID);
            // 动态领域模型服务提供类,通过此类,构建MVC实例
            var provider = form.GetFormServiceProvider();
            billView.Initialize(openParam, provider);
            return billView as IBillView;
        }


    /// <summary>
    /// 根据编码创建或修改客户
    /// <param name="ctx"></param>
    /// <param name="item></param>
    /// </summary>
    public class CreateCustomer
    {
        public static AccessResult Create(Context ctx, recordsAccount item)
        {
            AccessResult Access = new AccessResult() { Message = "成功!", Code = "0" };
            string FormKey = "BD_Customer";//唯一标识	BD_Customer
            IOperationResult result = null;
            OperateOption saveOption = OperateOption.Create();
            IBillView billView = null;
            long FID = 0;
            long FSaveFID = 0;

            timelog log = new timelog();//调用日志
            log.FStartTime = DateTime.Now;//开始时间
            try
            {
                //查询客户是否存在
                string strsql = string.Format("select FCUSTID from T_BD_CUSTOMER where FNUMBER = '{0}'", item.customItem183__c);
                DynamicObjectCollection OBJ = DBServiceHelper.ExecuteDynamicObject(ctx, strsql);
                if (OBJ != null && OBJ.Count > 0)//如果返回结果不为空且返回行数大于0
                {
                    FID = Convert.ToInt64(OBJ[0][0].ToString());
                }
                else
                {
                    strsql = string.Format("select FCUSTID from T_BD_CUSTOMER_L where FNAME = '{0}'", item.accountName);
                    OBJ = DBServiceHelper.ExecuteDynamicObject(ctx, strsql);
                    if (OBJ != null && OBJ.Count > 0)//如果返回结果不为空且返回行数大于0
                    {
                        FID = Convert.ToInt64(OBJ[0][0].ToString());
                    }
                }
                billView = FourSDataManagerUtil.CreateBillView(ctx, FormKey, FID);
                ((IBillViewService)billView).LoadData();
                DynamicFormViewPlugInProxy eventProxyPush = billView.GetService<DynamicFormViewPlugInProxy>();
                IDynamicFormViewService dynamicFormViewPush = billView as IDynamicFormViewService;
                #region 填充属性(赋值)
                dynamicFormViewPush.SetItemValueByNumber("FCreateOrgId", "100", 0);//创建组织

                dynamicFormViewPush.SetItemValueByNumber("FUseOrgId", "100", 0);//使用组织

                if (!string.IsNullOrWhiteSpace(item.customItem183__c))
                    dynamicFormViewPush.UpdateValue("FNUMBER", 0, item.customItem183__c);//编码

                if (!string.IsNullOrWhiteSpace(item.accountName))
                    dynamicFormViewPush.UpdateValue("FName", 0, item.accountName);//名称

                if (!string.IsNullOrWhiteSpace(item.phone))
                    dynamicFormViewPush.UpdateValue("FTEL", 0, item.phone);//联系电话

                if (!string.IsNullOrWhiteSpace(item.address))
                    dynamicFormViewPush.UpdateValue("FADDRESS", 0, item.address);//详细地址

                if (!string.IsNullOrWhiteSpace(item.zipCode))
                    dynamicFormViewPush.UpdateValue("FZIP", 0, item.zipCode);//邮政编码

                if (!string.IsNullOrWhiteSpace(item.Id))
                    dynamicFormViewPush.UpdateValue("FACCOUNTID", 0, item.Id);//销售易ID
                #endregion
                Return returs = new Return();
                if (FID != 0)
                {
                    //如果已存在客户直接保存跳出
                    #region 修改客户
                    result = FourSDataManagerUtil.SaveBill(ctx, billView, saveOption);
                    if (!result.IsSuccess)
                    {
                        //找到错误信息并跳出
                        Access.Code = "1004";//错误码
                        Access.Message = returs.Returns(result, "未知原因保存失败");//错误信息
                        return Access;
                    }
                    FSaveFID = Convert.ToInt32(billView.Model.DataObject["ID"]);
                    #endregion
                }
                else
                {
                    #region 新增客户
                    billView.InvokeFormOperation(FormOperationEnum.Draft);
                    result = FourSDataManagerUtil.SaveBill(ctx, billView, saveOption);
                    if (!result.IsSuccess)
                    {
                        //找到错误信息并跳出
                        Access.Code = "1004";//错误码
                        Access.Message = returs.Returns(result, "未知原因保存失败");//错误信息
                        return Access;
                    }
                    FSaveFID = Convert.ToInt32(billView.Model.DataObject["ID"]);
                    IOperationResult sumbitResults = AppServiceContext.SubmitService.Submit(ctx, billView.BusinessInfo, new object[] { FSaveFID }, "Submit", OperateOption.Create());
                    //不成功时返回结果
                    if (!sumbitResults.IsSuccess)
                    {
                        Access.Code = "1004";//错误码
                        Access.Message = returs.Returns(sumbitResults, "未知原因提交失败");//错误信息
                        return Access;
                    }
                    returs.ClearNetWorkCtrlRS(ctx, FormKey, FSaveFID);
                    List<KeyValuePair<object, object>> keyValuePairPush = new List<KeyValuePair<object, object>>();
                    keyValuePairPush.Add(new KeyValuePair<object, object>(FSaveFID, ""));
                    List<object> pushauditObjs = new List<object>();
                    pushauditObjs.Add("2");
                    pushauditObjs.Add("");
                    result = AppServiceContext.SetStatusService.SetBillStatus(ctx, billView.BusinessInfo, keyValuePairPush, pushauditObjs, "Audit", OperateOption.Create());
                    if (!result.IsSuccess)
                    {
                        Access.Code = "1004";//错误码
                        Access.Message = returs.Returns(result, "未知原因审核失败");//错误信息
                        return Access;
                    }
                    #endregion
                }
                log.Msg = "成功";//返回消息
                log.FRUNRESULT = 0;//执行状态

            }
            catch (Exception ex)
            {
                Access.Code = "500";
                Access.Message += "错误信息:" + ex.Message + "错误堆栈:" + ex.StackTrace;
                log.Msg = ex.Message;//返回消息
                log.FRUNRESULT = 1;//执行状态
            }
            finally
            {
                log.cod = Access.Code;//跟踪码
                log.FNUMBER = item.customItem183__c;//编码,关键字
                log.FTypeName = "客户接口";//接口名称
                log.FOPERATENAME = "创建客户";//操作名称
                log.FInput = Newtonsoft.Json.JsonConvert.SerializeObject(item);//传入JSON
                log.FOresults = Newtonsoft.Json.JsonConvert.SerializeObject(Access);//传出JSON
                log.Fendtime = DateTime.Now;//结束时间
                log.loge(ctx);//提交信息
                if (billView != null)
                {
                    billView.Close();
                }
                if (FID > 0)
                {
                    DALSysnDataService.ClearNetWorkCtrlRS(ctx, FormKey, FID);
                }
            }
            return Access;
        }
    }

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 金蝶云星空是一款企业云服务平台,提供了丰富的功能模块和开发工具,支持开发者进行二次开发。以下是一些学习资料,希望能对你有所帮助: 1. 金蝶云星空官方网站:https://www.kingdee.com/cloud/cloudstar/ 2. 金蝶云星空开发者中心:https://developer.kingdee.com/ 3. 金蝶云星空开发手册:https://open.kingdee.com/help/cloudstar/ 4. 金蝶云星空API文档:https://open.kingdee.com/help/cloudstar/#/API 5. 金蝶云星空开发视频教程:https://www.bilibili.com/video/BV1Ef4y1Y7hC 6. 金蝶云星空开发案例分享:https://developer.kingdee.com/showcase 希望以上资料能够帮助到你,祝你学习愉快! ### 回答2: 金蝶云星空是一个基于金蝶云平台的二次开发工具集,旨在帮助开发者更高效地进行软件开发。金蝶云星空具有丰富的学习资料,帮助开发者快速掌握二次开发技能。 首先,金蝶云星空提供了详细的开发文档,其中包括了开发环境的搭建、开发流程的介绍以及各个功能模块的详细说明。开发者可以通过文档了解整个开发过程的概述和每个步骤的具体操作方法。 其次,金蝶云星空还提供了丰富的示例代码和案例,这些示例代码覆盖了各个常见的业务场景,开发者可以通过学习和模仿这些代码,快速理解和掌握二次开发的技巧和方法。 此外,金蝶云星空还提供了在线培训课程和视频教程。开发者可以通过参加培训课程或观看视频教程,系统学习金蝶云星空的使用和二次开发的技术点。通过在线培训和视频教程,开发者可以更加深入地了解金蝶云星空的各项功能和特性,并能够借助导师或讲师的指导来解决实际的开发问题。 最后,金蝶云星空还提供了开发者社区和技术交流平台,开发者可以在这些平台上与其他开发者进行交流和分享。通过参与社区和技术交流,开发者可以获取更多的学习资料和经验分享,进一步提高自己的二次开发能力。 总之,金蝶云星空提供了全方位的学习资料,包括开发文档、示例代码、培训课程、视频教程以及技术交流平台,帮助开发者更好地学习和掌握二次开发技能。 ### 回答3: 金蝶云星空是一种企业级的云平台,用于为企业提供全面的业务管理解决方案。对于二次开发学习资料金蝶云星空提供了丰富的学习资源。 首先,金蝶云星空官方网站上有详细的开发者指南和文档,可以帮助开发者了解平台的基本概念、开发流程以及常用功能的实现方法。这些资料涵盖了从初级到高级的开发知识,适合不同水平的开发者使用。 其次,金蝶云星空还提供了在线视频教程,通过演示和实例的方式,向开发者展示如何在金蝶云星空上进行二次开发。这些视频教程可以帮助开发者更好地理解和掌握平台的开发技巧和工具。 此外,金蝶云星空还定期举办开发者培训和交流活动,为开发者提供面对面的学习和交流机会。在这些活动中,开发者可以与金蝶云星空的专业团队和其他开发者分享经验和心得,提升技术水平。 总的来说,金蝶云星空二次开发学习资料非常丰富和全面。无论是通过官方文档、在线视频教程还是参加培训活动,开发者都能够找到适合自己的学习途径,提升在金蝶云星空平台上进行二次开发的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值