本机K3Cloud BOS设计器代码 调试 不同环境数据库(Windows域账户)

 

Utils.cs

==================================================

using Kingdee.BOS;
using Kingdee.BOS.App;
using Kingdee.BOS.App.Core;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DependencyRules;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
namespace HANS.AllOperations
{
    public static class Utils
    {
        /// <summary>
        /// 创建一个视图,后续将利用此视图的各种方法,设置应收单字段值
        /// </summary>
        /// <remarks>
        /// 理论上,也可以直接修改应收单的数据包达成修改数据的目的
        /// 但是,利用单据视图更具有优势:
        /// 1. 视图会自动触发插件,这样逻辑更加完整;
        /// 2. 视图会自动利用单据元数据,填写字段默认值,不用担心字段值不符合逻辑;
        /// 3. 字段改动,会触发实体服务规则;
        /// 
        /// 而手工修改数据包的方式,所有的字段值均需要自行填写,非常麻烦
        /// </remarks>
        /// <param name="context">上下文</param>
        /// <param name="id">ID,如果不存在=null或者""</param>
        public static IBillView CreateView(Context context, string id, string FormID)
        {
            //创建用于引入数据的单据view
            Type type = Type.GetType("Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web");
            var view = (IDynamicFormViewService)Activator.CreateInstance(type);
            try
            {
                //读取应收单的元数据
                FormMetadata meta = MetaDataServiceHelper.Load(context, FormID) as FormMetadata;//"BD_Customer"
                Form form = meta.BusinessInfo.GetForm();
                //开始初始化receivableView:
                //创建视图加载参数对象,指定各种参数,如FormId, 视图(LayoutId)等
                BillOpenParameter openParam = CreateOpenParameter(meta, context);

                //动态领域模型服务提供类,通过此类,构建MVC实例
                var provider = form.GetFormServiceProvider();
                view.Initialize(openParam, provider);

                //载入数据
                ((IBillViewService)view).LoadData();

            }
            catch (Exception e)
            {
                Kingdee.BOS.Log.Logger.Info("新增保存界面", "CreateView" + e.Message);
                throw new Exception(e.Message);
            }
            return view as IBillView;

        }
        /// <summary>
        /// 创建视图加载参数对象,指定各种初始化视图时,需要指定的属性
        /// </summary>
        /// <param name="meta">元数据</param>
        /// <param name="context">上下文</param>
        /// <returns>视图加载参数对象</returns>
        public static BillOpenParameter CreateOpenParameter(FormMetadata meta, Context context)
        {
            Form form = meta.BusinessInfo.GetForm();
            //指定FormId, LayoutId
            BillOpenParameter openParam = new BillOpenParameter(form.Id, meta.GetLayoutInfo().Id);
            try
            {
                //数据库上下文
                openParam.Context = context;
                //本单据模型使用的MVC框架
                openParam.ServiceName = form.FormServiceName;
                //随机产生一个不重复的PageId,作为视图的标识
                openParam.PageId = Guid.NewGuid().ToString();
                //元数据
                openParam.FormMetaData = meta;
                //界面状态:新增 (修改、查看)
                openParam.Status = OperationStatus.ADDNEW;
                //单据主键:本案例演示新建物料,不需要设置主键
                openParam.PkValue = null;
                //界面创建目的:普通无特殊目的 (为工作流、为下推、为复制等)
                openParam.CreateFrom = CreateFrom.Default;
                //基础资料分组维度:基础资料允许添加多个分组字段,每个分组字段会有一个分组维度
                //具体分组维度Id,请参阅 form.FormGroups 属性
                openParam.GroupId = "";
                //基础资料分组:如果需要为新建的基础资料指定所在分组,请设置此属性
                openParam.ParentId = 0;
                //单据类型
                openParam.DefaultBillTypeId = "";
                //业务流程
                openParam.DefaultBusinessFlowId = "";
                //主业务组织改变时,不用弹出提示界面
                openParam.SetCustomParameter("ShowConfirmDialogWhenChangeOrg", false);
                //插件
                List<AbstractDynamicFormPlugIn> plugs = form.CreateFormPlugIns();
                openParam.SetCustomParameter(FormConst.PlugIns, plugs);
                PreOpenFormEventArgs args = new PreOpenFormEventArgs(context, openParam);
                foreach (var plug in plugs)
                {
                    //触发插件PreOpenForm事件,供插件确认是否允许打开界面
                    plug.PreOpenForm(args);
                }
                if (args.Cancel == true)
                {
                    //插件不允许打开界面
                    //本案例不理会插件的诉求,继续....
                }
                //返回

            }
            catch (Exception e)
            {
                Kingdee.BOS.Log.Logger.Info("新增保存参数", "BillOpenParameter" + e.Message);
                throw new Exception(e.Message);
            }
            return openParam;
        }
        /// <summary>
        /// 创建一个视图,后续将利用此视图的各种方法,设置应收单字段值
        /// </summary>
        /// <remarks>
        /// 理论上,也可以直接修改应收单的数据包达成修改数据的目的
        /// 但是,利用单据视图更具有优势:
        /// 1. 视图会自动触发插件,这样逻辑更加完整;
        /// 2. 视图会自动利用单据元数据,填写字段默认值,不用担心字段值不符合逻辑;
        /// 3. 字段改动,会触发实体服务规则;
        /// 
        /// 而手工修改数据包的方式,所有的字段值均需要自行填写,非常麻烦
        /// </remarks>
        /// <param name="context">上下文</param>
        /// <param name="id">ID,如果不存在=null或者""</param>PkValue
        public static IBillView CreateEditView(Context context, string id, string FormID, object PkValue)
        {
            //创建用于引入数据的单据view
            Type type = Type.GetType("Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web");
            var view = (IDynamicFormViewService)Activator.CreateInstance(type);
            //读取应收单的元数据
            try
            {
                FormMetadata meta = MetaDataServiceHelper.Load(context, FormID) as FormMetadata;//"BD_Customer"
                Form form = meta.BusinessInfo.GetForm();
                //开始初始化receivableView:
                //创建视图加载参数对象,指定各种参数,如FormId, 视图(LayoutId)等
                BillOpenParameter openParam = CreateEditOpenParameter(meta, context, PkValue);
                //动态领域模型服务提供类,通过此类,构建MVC实例
                var provider = form.GetFormServiceProvider();
                view.Initialize(openParam, provider);
                //载入数据
                ((IBillViewService)view).LoadData();

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return view as IBillView;
        }
        /// <summary>
        /// 创建视图加载参数对象,指定各种初始化视图时,需要指定的属性
        /// </summary>
        /// <param name="meta">元数据</param>
        /// <param name="context">上下文</param>
        /// <returns>视图加载参数对象</returns>
        public static BillOpenParameter CreateEditOpenParameter(FormMetadata meta, Context context, object PkValue)
        {
            Form form = meta.BusinessInfo.GetForm();
            //指定FormId, LayoutId
            BillOpenParameter openParam = new BillOpenParameter(form.Id, meta.GetLayoutInfo().Id);
            try
            {
                Kingdee.BOS.Log.Logger.Info("修改", "CreateEditOpenParameter" + "A");
                //数据库上下文
                openParam.Context = context;
                //本单据模型使用的MVC框架
                openParam.ServiceName = form.FormServiceName;
                //随机产生一个不重复的PageId,作为视图的标识
                openParam.PageId = Guid.NewGuid().ToString();
                //元数据
                openParam.FormMetaData = meta;
                Kingdee.BOS.Log.Logger.Info("修改", "CreateEditOpenParameter" + "B");
                //界面状态:新增 (修改、查看)
                openParam.Status = OperationStatus.VIEW;
                //单据主键:本案例演示新建物料,不需要设置主键
                openParam.PkValue = PkValue;
                //界面创建目的:普通无特殊目的 (为工作流、为下推、为复制等)
                openParam.CreateFrom = CreateFrom.Default;
                //基础资料分组维度:基础资料允许添加多个分组字段,每个分组字段会有一个分组维度
                //具体分组维度Id,请参阅 form.FormGroups 属性
                openParam.GroupId = "";
                //基础资料分组:如果需要为新建的基础资料指定所在分组,请设置此属性
                openParam.ParentId = 0;
                //单据类型
                openParam.DefaultBillTypeId = "";
                //业务流程
                openParam.DefaultBusinessFlowId = "";
                //主业务组织改变时,不用弹出提示界面
                openParam.SetCustomParameter("ShowConfirmDialogWhenChangeOrg", false);
                //插件
                List<AbstractDynamicFormPlugIn> plugs = form.CreateFormPlugIns();
                openParam.SetCustomParameter(FormConst.PlugIns, plugs);
                PreOpenFormEventArgs args = new PreOpenFormEventArgs(context, openParam);
                foreach (var plug in plugs)
                {
                    //触发插件PreOpenForm事件,供插件确认是否允许打开界面
                    plug.PreOpenForm(args);
                }
                if (args.Cancel == true)
                {
                    //插件不允许打开界面
                    //本案例不理会插件的诉求,继续....
                }

            }
            catch (Exception e)
            {
                Kingdee.BOS.Log.Logger.Info("修改保存界面", "CreateEditOpenParameter" + e.Message);
                throw new Exception(e.Message);
            }
            //返回
            return openParam;
        }
        /// <summary>
        /// 暂存
        /// </summary>
        /// <param name="view">视图</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static IOperationResult Draft(IBillView view, DynamicObject[] ListObject, OperateOption operateOption, Context context)
        {
            //调用保存操作
            // 设置FormId
            //Form form = view.BillBusinessInfo.GetForm();
            //if (form.FormIdDynamicProperty != null)
            //{
            //    form.FormIdDynamicProperty.SetValue(view.Model.DataObject, form.Id);
            //}
            try
            {
                //IOperationResult operationResult = BusinessDataServiceHelper.Save(context, view.BillBusinessInfo, view.Model.DataObject, operateOption, "Save");
                IOperationResult operationResult = BusinessDataServiceHelper.Draft(context, view.BillBusinessInfo, ListObject, operateOption, "Draft");
                Kingdee.BOS.Log.Logger.Info("开始", "SaveA");
                //显示处理结果
                if (operationResult == null)
                {
                    throw new Exception("保存失败!未知原因。");
                }
                else if (operationResult.IsSuccess == true)
                {
                    //保存成功,直接返回
                    Kingdee.BOS.Log.Logger.Info("开始", "SaveC" + "保存成功!");
                    return operationResult;
                }
                else
                {
                    //保存失败,显示错误信息
                    if (operationResult.IsShowMessage)
                    {
                        operationResult.MergeValidateErrors();
                        string errorMsg = "";
                        foreach (OperateResult orResult in operationResult.OperateResult)
                        {
                            errorMsg += orResult.Message + "\r\n";
                        }
                        Kingdee.BOS.Log.Logger.Info("开始", "SaveC" + errorMsg);
                        throw new Exception(errorMsg);
                    }
                    else
                    {
                        throw new Exception();

                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="view">视图</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static IOperationResult Save(IBillView view, DynamicObject[] ListObject, OperateOption operateOption, Context context)
        {
            //调用保存操作
            // 设置FormId
            //Form form = view.BillBusinessInfo.GetForm();
            //if (form.FormIdDynamicProperty != null)
            //{
            //    form.FormIdDynamicProperty.SetValue(view.Model.DataObject, form.Id);
            //}
            try
            {
                //IOperationResult operationResult = BusinessDataServiceHelper.Save(context, view.BillBusinessInfo, view.Model.DataObject, operateOption, "Save");
                IOperationResult operationResult = BusinessDataServiceHelper.Save(context, view.BillBusinessInfo, ListObject, operateOption, "Save");
                Kingdee.BOS.Log.Logger.Info("开始", "SaveA");
                //显示处理结果
                if (operationResult == null)
                {
                    throw new Exception("保存失败!未知原因。");
                }
                else if (operationResult.IsSuccess == true)
                {
                    //保存成功,直接返回
                    Kingdee.BOS.Log.Logger.Info("开始", "SaveC" + "保存成功!");
                    return operationResult;
                }
                else
                {
                    //保存失败,显示错误信息
                    if (operationResult.IsShowMessage)
                    {
                        operationResult.MergeValidateErrors();
                        string errorMsg = "";
                        foreach (OperateResult orResult in operationResult.OperateResult)
                        {
                            errorMsg += orResult.Message + "\r\n";
                        }
                        Kingdee.BOS.Log.Logger.Info("开始", "SaveC" + errorMsg);
                        throw new Exception(errorMsg);
                    }
                    else
                    {
                        throw new Exception();

                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 提交
        /// </summary>
        /// <param name="businessInfo">配置信息</param>
        /// <param name="id">ID</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static IOperationResult Submit(BusinessInfo businessInfo, object[] FID, OperateOption operateOption, Context context)
        {
            try
            {
                //调用提交操作
                IOperationResult operationResult = BusinessDataServiceHelper.Submit(context, businessInfo, FID, "Submit", operateOption);
                //显示处理结果
                if (operationResult == null)
                {
                    throw new Exception("提交失败!未知原因。");
                }
                else if (operationResult.IsSuccess == true)
                {
                    //提交成功,直接返回
                    return operationResult;
                }
                else
                {
                    //提交失败,显示错误信息
                    if (operationResult.IsShowMessage)
                    {
                        operationResult.MergeValidateErrors();
                        string errorMsg = "";
                        foreach (OperateResult orResult in operationResult.OperateResult)
                        {
                            errorMsg += orResult.Message + "\r\n";
                        }
                        Kingdee.BOS.Log.Logger.Info("提交", "SubmitA" + errorMsg);
                        throw new Exception(errorMsg);
                    }
                    else
                    {
                        throw new Exception("提交失败!未知原因。");
                    }
                }
            }
            catch (Exception e)
            {
                Kingdee.BOS.Log.Logger.Info("提交", "Submit" + e.Message);
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 根据单据编号,加载单据数据包
        /// </summary>
        /// <param name="">单据FormId</param>
        /// <param name="billno">单据编号</param>
        /// <returns></returns>
        public static DynamicObject LoadBillObject(Context context, string formId, string billno)
        {
            DynamicObject obj = null;
            FormMetadata meta = MetaDataServiceHelper.Load(context, formId) as FormMetadata;

            // 构建查询参数,设置过滤条件
            QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
            queryParam.FormId = formId;
            queryParam.BusinessInfo = meta.BusinessInfo;

            queryParam.FilterClauseWihtKey = string.Format(" {0} = '{1}'",
                meta.BusinessInfo.GetBillNoField().Key,
                billno);

            var objs = BusinessDataServiceHelper.Load(context,
                meta.BusinessInfo.GetDynamicObjectType(),
                queryParam);
            if (objs.Count() > 0)
            {
                obj = objs[0];
            }
            return obj;
        }
        /// <summary>
        /// 根据单据编号,加载单据数据包
        /// </summary>
        /// <param name="">单据FormId</param>
        /// <param name="Id">单据ID</param>
        /// <returns></returns>
        public static DynamicObject FLoadBillObject(Context context, string formId, string Id)
        {
            FormMetadata meta = MetaDataServiceHelper.Load(context, formId) as FormMetadata;
            DynamicObject obj = null;
            // 构建查询参数,设置过滤条件
            QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
            queryParam.FormId = formId;
            queryParam.BusinessInfo = meta.BusinessInfo;

            queryParam.FilterClauseWihtKey = string.Format(" FID = {0}", Id);

            var objs = BusinessDataServiceHelper.Load(context,
                meta.BusinessInfo.GetDynamicObjectType(),
                queryParam);
            if (objs.Count() > 0)
            {
                obj = objs[0];
            }
            return obj;
        }
        /// <summary>
        /// 物料
        /// </summary>
        /// <param name="context"></param>
        /// <param name="formId"></param>
        /// <param name="Id"></param>
        /// <returns></returns>
        public static DynamicObject FLoadMatObject(Context context, string formId, string Id)
        {
            DynamicObject obj = null;
            try
            {
                FormMetadata meta = MetaDataServiceHelper.Load(context, formId) as FormMetadata;

                // 构建查询参数,设置过滤条件
                QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
                queryParam.FormId = formId;
                queryParam.BusinessInfo = meta.BusinessInfo;

                queryParam.FilterClauseWihtKey = string.Format(" FMATERIALID = {0}", Id);

                var objs = BusinessDataServiceHelper.Load(context,
                    meta.BusinessInfo.GetDynamicObjectType(),
                    queryParam);
                if (objs.Count() > 0)
                {
                    obj = objs[0];
                }
            }
            catch (Exception ex)
            {
                throw new Exception("加载物料报错" + ex.Message);
            }
            return obj;
        }
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="businessInfo">配置信息</param>
        /// <param name="id">ID</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static IOperationResult Audit(BusinessInfo businessInfo, object[] FID, OperateOption operateOption, Context context)
        {
            try
            {
                //调用审核操作
                //FormOperation formOperation = businessInfo.GetForm().GetOperation(OperationNumberConst.OperationNumber_Audit);
                //SetStatus setStatus = new SetStatus(context);
                //setStatus.Initialize(businessInfo, formOperation.Operation, operateOption);
                //IOperationResult operationResult = setStatus.Excute(FID);
                IOperationResult operationResult = BusinessDataServiceHelper.Audit(context, businessInfo, FID, operateOption);
                //显示处理结果
                if (operationResult == null)
                {
                    throw new Exception("审核失败!未知原因。");
                }
                else if (operationResult.IsSuccess == true)
                {
                    //审核成功,直接返回
                    return operationResult;
                }
                else
                {
                    //审核失败,显示错误信息
                    if (operationResult.IsShowMessage)
                    {
                        operationResult.MergeValidateErrors();
                        string errorMsg = "";
                        foreach (OperateResult orResult in operationResult.OperateResult)
                        {
                            errorMsg += orResult.Message + "\r\n";
                        }
                        Kingdee.BOS.Log.Logger.Info("审核", "OKFillA" + errorMsg);
                        throw new Exception(errorMsg);
                    }
                    else
                    {
                        throw new Exception("审核失败!位置原因。");
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("BOM分配审核失败" + e.Message);
                // throw new Exception( e.Message);
            }
        }
        /// <summary>
        /// 反审核
        /// </summary>
        /// <param name="businessInfo">配置信息</param>
        /// <param name="id">ID</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static IOperationResult UnAudit(BusinessInfo businessInfo, object[] FID, OperateOption operateOption, Context context)
        {
            try
            {
                //调用审核操作
                //FormOperation formOperation = businessInfo.GetForm().GetOperation(OperationNumberConst.OperationNumber_Audit);
                //SetStatus setStatus = new SetStatus(context);
                //setStatus.Initialize(businessInfo, formOperation.Operation, operateOption);
                //IOperationResult operationResult = setStatus.Excute(FID);
                IOperationResult operationResult = BusinessDataServiceHelper.UnAudit(context, businessInfo, FID, operateOption);
                //显示处理结果
                if (operationResult == null)
                {
                    throw new Exception("反审核失败!未知原因。");
                }
                else if (operationResult.IsSuccess == true)
                {
                    //审核成功,直接返回
                    return operationResult;
                }
                else
                {
                    //审核失败,显示错误信息
                    if (operationResult.IsShowMessage)
                    {
                        operationResult.MergeValidateErrors();
                        string errorMsg = "";
                        foreach (OperateResult orResult in operationResult.OperateResult)
                        {
                            errorMsg += orResult.Message + "\r\n";
                        }
                        Kingdee.BOS.Log.Logger.Info("反审核", "OKFillA" + errorMsg);
                        throw new Exception(errorMsg);
                    }
                    else
                    {
                        throw new Exception("反审核失败!位置原因。");
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("反审核失败" + e.Message);
                // throw new Exception( e.Message);
            }
        }
        /// <summary>
        /// 删除
        /// panqing 2017.2.22
        /// </summary>
        /// <param name="businessInfo">配置信息</param>
        /// <param name="id">ObjectID</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static void Delete(IBillView view, Object[] ObjectID, OperateOption operateOption, Context context)
        {
            //调用删除操作
            IOperationResult operationResult = BusinessDataServiceHelper.Delete(context, view.BillBusinessInfo, ObjectID, operateOption, "Delete");
            Kingdee.BOS.Log.Logger.Info("删除", "DeleteA");
            //显示处理结果
            if (operationResult == null)
            {
                Kingdee.BOS.Log.Logger.Info("删除", "DeleteA" + "保存失败!未知原因。");
                throw new Exception("保存失败!未知原因。");
            }
            else if (operationResult.IsSuccess == true)
            {
                Kingdee.BOS.Log.Logger.Info("删除", "DeleteA" + "保存成功!");
                //保存成功,直接返回
                return;
            }
            else
            {
                //保存失败,显示错误信息
                if (operationResult.IsShowMessage)
                {
                    operationResult.MergeValidateErrors();
                    string errorMsg = "";
                    foreach (OperateResult orResult in operationResult.OperateResult)
                    {
                        errorMsg += orResult.Message + "\r\n";
                    }
                    Kingdee.BOS.Log.Logger.Info("删除", "DeleteB" + errorMsg);
                    throw new Exception(errorMsg);
                }
                else
                {
                    throw new Exception();

                }
            }
        }
        /// 通用取数据集函数
        /// panqing 2016.7.15
        /// </summary>
        /// <param name="Name"></param>
        /// <param name="Field"></param>
        /// <param name="Condition"></param>
        /// <returns></returns>
        public static DataSet CBData(string Name, string Field, string Condition, Context context)
        {
            DataSet CBData = null;
            StringBuilder CBSql = new StringBuilder();
            CBSql.Append("select ");
            CBSql.Append(Field);
            CBSql.Append(" from ");
            CBSql.Append(Name);
            CBSql.Append("");
            CBSql.Append(Condition);
            CBData = DBServiceHelper.ExecuteDataSet(context, CBSql.ToString());
            return CBData;
        }
        /// <summary>
        /// 数据库删除,通常不采用这种方式
        /// panqing 2017.2.22
        /// </summary>
        /// <param name="businessInfo">配置信息</param>
        /// <param name="id">ObjectID</param>
        /// <param name="operateOption">操作选项</param>
        /// <param name="context">上下文</param>
        public static string SDelete(string TableName, string Condition, Context context)
        {
            //调用删除操作
            int ReSet = 0;
            StringBuilder CBSql = new StringBuilder();
            CBSql.Append("delete ");
            CBSql.Append(TableName);
            CBSql.Append(" ");
            CBSql.Append(Condition);
            ReSet = DBServiceHelper.Execute(context, CBSql.ToString());
            return Convert.ToString(ReSet);
        }
        public static List<string> ResolveXML(string xml)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xml);
            List<string> User = new List<string>();
            User.Clear();
            User.Add(Convert.ToString(xmlDoc.FirstChild.Attributes["F_BGJ_LoadAdress"].Value));
            User.Add(Convert.ToString(xmlDoc.FirstChild.Attributes["F_BGJ_AccountID"].Value));
            User.Add(Convert.ToString(xmlDoc.FirstChild.Attributes["F_BGJ_Users"].Value));
            User.Add(Convert.ToString(xmlDoc.FirstChild.Attributes["F_BGJ_Password"].Value));
            return User;
        }
        /// <summary>
        /// 给基础资料字段赋值 
        /// </summary>
        public static void SetBaseDataValue(IViewService service, DynamicObject data, BaseDataField bdfield, long value, ref DynamicObject dyValue, Context context)
        {
            if (value == 0)
            {
                //bdfield.RefIDDynamicProperty.SetValue(data, 0);
                //bdfield.DynamicProperty.SetValue(data, null);
                dyValue = null;
            }
            else
            {
                if (dyValue == null)
                {
                    dyValue = service.LoadSingle(context, value, bdfield.RefFormDynamicObjectType);
                }
                if (dyValue != null)
                {
                    bdfield.RefIDDynamicProperty.SetValue(data, value);
                    bdfield.DynamicProperty.SetValue(data, dyValue);
                }
                else
                {
                    bdfield.RefIDDynamicProperty.SetValue(data, 0);
                    bdfield.DynamicProperty.SetValue(data, null);
                }
            }
        }
        // <summary>
        /// 给维度字段赋值 
        /// </summary>
        public static void SetFlexDataValue(IViewService service, DynamicObject data, RelatedFlexGroupField bdfield, long value, ref DynamicObject dyValue, Context context)
        {
            if (value == 0)
            {
                //bdfield.RefIDDynamicProperty.SetValue(data, 0);
                //bdfield.DynamicProperty.SetValue(data, null);
                dyValue = null;
            }
            else
            {
                if (dyValue == null)
                {
                    dyValue = service.LoadSingle(context, value, bdfield.RefFormDynamicObjectType);
                }
                if (dyValue != null)
                {
                    bdfield.RefIDDynamicProperty.SetValue(data, value);
                    bdfield.DynamicProperty.SetValue(data, dyValue);
                }
                else
                {
                    bdfield.RefIDDynamicProperty.SetValue(data, 0);
                    bdfield.DynamicProperty.SetValue(data, null);
                }
            }
        }
        public static DataTable SortDataTable(DataTable dt, string strExpr, string strSort)
        {
            dt.DefaultView.RowFilter = strExpr;
            dt.DefaultView.Sort = strSort;
            return dt;
        }
        /// <summary>
        /// 根据单据编号,加载单据数据包
        /// </summary>
        /// <param name="">单据FormId</param>
        /// <param name="billno">单据编号</param>
        /// <returns></returns>
        public static DynamicObject LoadBillObject(Context context, string formId, string billno, string FiledOrg, string OrgId)
        {
            FormMetadata meta = MetaDataServiceHelper.Load(context, formId) as FormMetadata;

            // 构建查询参数,设置过滤条件
            QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
            queryParam.FormId = formId;
            queryParam.BusinessInfo = meta.BusinessInfo;

            queryParam.FilterClauseWihtKey = string.Format(" {0} = '{1}' and {2} = '{3}'",
                meta.BusinessInfo.GetBillNoField().Key,
                billno, FiledOrg, OrgId);

            var objs = BusinessDataServiceHelper.Load(context,
                meta.BusinessInfo.GetDynamicObjectType(),
                queryParam);

            return objs[0];
        }
        /// <summary>
        /// 根据单据编号,加载单据数据包
        /// </summary>
        /// <param name="">单据FormId</param>
        /// <param name="billno">单据编号</param>
        /// <returns></returns>
        public static DynamicObject LoadBillObjects(Context context, string formId, string fid)
        {
            FormMetadata meta = MetaDataServiceHelper.Load(context, formId) as FormMetadata;

            // 构建查询参数,设置过滤条件
            QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
            queryParam.FormId = formId;
            queryParam.BusinessInfo = meta.BusinessInfo;

            queryParam.FilterClauseWihtKey = string.Format(" FID = '{0}'",
                fid);

            var objs = BusinessDataServiceHelper.Load(context,
                meta.BusinessInfo.GetDynamicObjectType(),
                queryParam);

            return objs[0];
        }
        /// <summary>
        /// 根据基础资料的编码,加载基础资料数据包
        /// </summary>
        /// <param name="">基础资料FormId</param>
        /// <param name="number">基础资料编码</param>
        /// <returns></returns>
        public static DynamicObject LoadBDFullObject(Context context, string formId, string number, string OrgId)
        {
            FormMetadata meta = MetaDataServiceHelper.Load(context, formId) as FormMetadata;

            // 构建查询参数,设置过滤条件
            QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
            queryParam.FormId = formId;
            queryParam.BusinessInfo = meta.BusinessInfo;

            queryParam.FilterClauseWihtKey = string.Format(" {0} = '{1}' and {2}='{3}' ",
                meta.BusinessInfo.GetForm().NumberFieldKey,
                number, meta.BusinessInfo.GetForm().UseOrgFieldKey, OrgId);

            var bdObjs = BusinessDataServiceHelper.Load(context,
                meta.BusinessInfo.GetDynamicObjectType(),
                queryParam);

            return bdObjs[0];
        }
        /// <summary>
        /// 参数的构造函数
        /// </summary>
        public static void LogHelper(string FNumber, string Str)
        {

        }


        /// <summary>
        /// 更新单据金额字段值
        /// </summary>
        /// <param name="context">上下文</param>
        /// <param name="formId">单据标识</param>
        /// <param name="fId">单据头内码</param>
        /// <param name="ormEntry">单据体ORM标识</param>
        /// <param name="hashEntry">单据体内码,及要更新值的字段信息集合</param>
        public static void UpdateAmt(Context context, string formId, string fId, string ormEntry, HashSet<SelfDto> hashEntry)
        {
            try
            {
                IOperationResult operationLocalResult = null;
                try
                {
                    if (formId.IsNullOrEmptyOrWhiteSpace()
                    || fId.IsNullOrEmptyOrWhiteSpace()
                    || ormEntry.IsNullOrEmptyOrWhiteSpace()
                    || hashEntry.IsEmpty()
                    ) return;

                    IBillView view = Utils.CreateView(context, null, formId);
                    DynamicObject billObejct = Utils.LoadBillObjects(context, formId, fId);
                    view.Model.DataObject = billObejct;
                    DynamicObjectCollection entryCollect = billObejct[ormEntry] as DynamicObjectCollection;
                    if (entryCollect.IsEmpty()) return;
                    //!!!就这几句是重点 IDynamicFormViewService dynamicFormView = view as IDynamicFormViewService;
                    IBillViewService dynamicFormView = view as IBillViewService;

                    //处理 表头 变更价 赋值为 1:变更,0:未变更
                    dynamicFormView.UpdateValue(string.Format("{0}_H",hashEntry.First().OrmISCHANGE), 0, hashEntry.First().ISCHANGE);

                    //处理 表体 变更价及含税单价等
                    for (int iRow = 0, ilen = entryCollect.Count; iRow < ilen; iRow++)
                    {
                        foreach (SelfDto dto in hashEntry)
                        {
                            if (entryCollect[iRow].GetPrimaryKeyValue<long>() == dto.EntryId)
                            {
                                //含税单价:标准字段 标识,字段名,绑定实体属性 此三者名称不相同
                                string FFieldId;
                                if (string.IsNullOrEmpty(dto.FTAXPRICE2))
                                    FFieldId = string.Format(@"F{0}", dto.OrmTAXPRICE);
                                else
                                    FFieldId = dto.FTAXPRICE2;

                                dynamicFormView.UpdateValue(FFieldId, iRow, dto.TAXPRICE);
                                dynamicFormView.UpdateValue(dto.OrmISCHANGE, iRow, dto.ISCHANGE);
                            }
                        }
                    }
                    operationLocalResult = ServiceHelper.GetService<ISaveService>().Save(context, view.BusinessInfo, new DynamicObject[] { view.Model.DataObject });
                }
                catch (Exception ex)
                {
                    if (operationLocalResult != null)
                    {
                        bool bRet = operationLocalResult.IsSuccess;
                        string strRet = operationLocalResult.ValidationErrors.Count > 0 ? operationLocalResult.ValidationErrors.FirstOrDefault().Message : String.Empty;
                        Kingdee.BOS.Log.Logger.Info("采购订单变更单审核操作", string.Format(@"catch IsSuccess:{0},产生异常信息:{1},ex:{2}", bRet, strRet, ex.StackTrace.ToString()));
                    }
                    else
                        Kingdee.BOS.Log.Logger.Info("采购订单变更单审核操作", string.Format(@"catch 产生异常信息:ex:{0}", ex.StackTrace.ToString()));
                }
                finally
                {
                    if (operationLocalResult != null)
                    {
                        bool bRet = operationLocalResult.IsSuccess;
                        string strRet = operationLocalResult.ValidationErrors.Count > 0 ? operationLocalResult.ValidationErrors.FirstOrDefault().Message : String.Empty;
                        Kingdee.BOS.Log.Logger.Info("采购订单变更单审核操作", string.Format(@"finally IsSuccess:{0},产生异常信息:{1}", bRet, strRet));
                    }
                }
            }
            catch (Exception ex)
            {
                //throw ex;
            }
        }



    }
}

!!! 1.  配置开发环境

ChangeReceivingNotificationTaxPrice.cs

 

========================================



using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HANS.PurchaseOrderchangePricesynchronization { [Description("采购变更单反写对应的收料通知单含税单价")] public class ChangeReceivingNotificationTaxPrice: AbstractOperationServicePlugIn { IEnumerable<DynamicObject> selectedRows = null; public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FOFBillNo"); e.FieldKeys.Add("FOFEntryId"); e.FieldKeys.Add("FOFid"); } public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); selectedRows = e.SelectedRows.Select(s => s.DataEntity); } public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); GetData(); } private void GetData() { if (selectedRows != null && selectedRows.Count() != 0) { foreach (DynamicObject dy in selectedRows) { string BillNo = Convert.ToString(dy["FBillNo"]); DynamicObjectCollection obj = dy["POChangeEntry"] as DynamicObjectCollection; if (obj != null && obj.Count > 0) { foreach (DynamicObject bill in obj) { string SourceBillNo = bill["OrderFBillNo"].ToString(); string Price = bill["NewPrice"].ToString(); string SourceRowID = bill["Id"].ToString(); string CustomerID = Convert.ToString(bill["MaterialID_Id"]); //判断采购入库是否未记账,未结账 string OutFSTabName = "t_PUR_POOrderEntry";//采购订单名称 string OutFFSTabName = "T_PUR_POChangeEntry";//采购订单变更单 string OutFTSTabName = "T_PUR_ReceiveEntry";//发货通知单 string OutFTTabName = "T_STK_INSTOCKENTRY";//采购出库名称 string OutTabName = "T_AP_PAYABLEENTRY";//应付单 string ReceiveId = ""; string ReceiveId2 = ""; List<string> InStockIdList = new List<string>(); InStockIdList.Clear(); DataSet StockData1 = Utils.CBData("t_BF_InstanceEntry", "FSID", " where FSTABLENAME='" + OutFSTabName + "' and FTID='" + SourceRowID + "' and FTTABLENAME='" + OutFFSTabName + "'", this.Context); if (StockData1 != null && StockData1.Tables.Count > 0 && StockData1.Tables[0].Rows.Count > 0) { foreach (DataRow StockObject in StockData1.Tables[0].Rows) { string FInStockId = Convert.ToString(StockObject["FSID"]); if (!FInStockId.IsNullOrEmptyOrWhiteSpace()) { // DataSet StockData4 = Utils.CBData("t_BF_InstanceEntry", "FTID", " where FSTABLENAME='" + OutFSTabName + "' and FSID='" + FInStockId + "' and FTTABLENAME='" + OutTabName + "'", this.Context); // if (StockData4 == null && StockData4.Tables.Count<= 0 && StockData4.Tables[0].Rows.Count <= 0) // { DataSet StockData = Utils.CBData("t_BF_InstanceEntry", "FTID", " where FSTABLENAME='" + OutFSTabName + "' and FSID='" + FInStockId + "' and FTTABLENAME='" + OutFTSTabName + "'", this.Context); if (StockData != null && StockData.Tables.Count > 0 && StockData.Tables[0].Rows.Count > 0) { foreach (DataRow FStockObject in StockData.Tables[0].Rows) { ReceiveId = Convert.ToString(FStockObject["FTID"]); if (!ReceiveId.IsNullOrEmptyOrWhiteSpace()) InStockIdList.Add(ReceiveId); } } // else // { // DataSet StockData2 = Utils.CBData("t_BF_InstanceEntry", "FTID", " where FSTABLENAME='" + OutFTSTabName + "' and FSID=(select FTID from t_BF_InstanceEntry where FSTABLENAME = '" + OutFSTabName + "' and FTTABLENAME = '" + OutFTSTabName + "' and FSID = '" + FInStockId + "') and FTTABLENAME='" + OutFTTabName + "'", this.Context); // if (StockData2 != null && StockData2.Tables.Count > 0 && StockData2.Tables[0].Rows.Count > 0) // { // foreach (DataRow FStockObject in StockData2.Tables[0].Rows) // { // InStockId2 = Convert.ToString(FStockObject["FTID"]); // if (!InStockId2.IsNullOrEmptyOrWhiteSpace()) InStockIdList.Add(InStockId2); // } // } // } // // } } } } if (InStockIdList != null && InStockIdList.Count() > 0) { foreach (string CurrentInStockId in InStockIdList) { SynchronousPrice(CustomerID, CurrentInStockId, SourceBillNo, Price, SourceRowID); } } } } } } } public void SynchronousPrice(string CustomerID, string InStockId, string BillNo, string Price, string SourceRowID) { string ReceiveNumber = ""; if (!string.IsNullOrEmpty(InStockId)) { DataSet ReceiveFID = Utils.CBData("T_PUR_Receive t1 join T_PUR_ReceiveEntry t2 on t1.FID=T2.FID and t2.FENTRYID='" + InStockId + "'", "t1.FBILLNO", "", this.Context); if (ReceiveFID != null && ReceiveFID.Tables.Count > 0 && ReceiveFID.Tables[0].Rows.Count > 0) { ReceiveNumber = Convert.ToString(ReceiveFID.Tables[0].Rows[0][0]); } } DynamicObject InStockObject = null; if (!string.IsNullOrEmpty(ReceiveNumber)) { InStockObject = Utils.LoadBillObjects(this.Context, "PUR_ReceiveBill", ReceiveNumber);//收料通知单 } if (InStockObject != null) { string DocumentStatus = Convert.ToString(InStockObject["DocumentStatus"]); DynamicObjectCollection InStockCollect = InStockObject["PUR_ReceiveEntry"] as DynamicObjectCollection; bool InSotckChange = false; int m = 0; if (InStockCollect.Count > 0) { string OUTSTOCKId = ""; foreach (DynamicObject InstockObject in InStockCollect) { OUTSTOCKId = Convert.ToString(InstockObject["Id"]); //bool BILLINGCLOSE = Convert.ToBoolean(InstockObject["BILLINGCLOSE"]);//记账,结账标记 if (!string.IsNullOrEmpty(OUTSTOCKId) && OUTSTOCKId.Equals(InStockId)) { InSotckChange = true; break; } m++; } } if (InSotckChange) { OperateOption operateOption = OperateOption.Create(); IBillView View = Utils.CreateView(this.Context, null, "PUR_ReceiveBill"); //数据模型 IBillModel model = View.Model; model.DataObject = InStockObject; IDynamicFormViewService dynamicFormView = View as IDynamicFormViewService; dynamicFormView.UpdateValue("TaxPrice", m, Price); DynamicObject TargetObject = model.DataObject; if (DocumentStatus.Equals("Z")) { Utils.Draft(View, new DynamicObject[] { TargetObject }, operateOption, this.Context); } else { Utils.Save(View, new DynamicObject[] { TargetObject }, operateOption, this.Context); } } } } } }

  

posted @ 2021-10-13 16:05  haikuang  阅读(291)  评论(0)    收藏  举报