电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开插件-执行计划同步第三方库动态创建单据

来源:金蝶云社区作者:金蝶2024-09-165

二开插件-执行计划同步第三方库动态创建单据

using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Log;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using System;
using System.Data;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS.BusinessEntity.Organizations;





namespace BL.K3.Plugln.APP.Core
{
    public class AutoSyncFlowScheduleService : IScheduleService
    {

        // 数据库连接字符串
        private string connectionString = "Data Source='数据库服务器';Initial Catalog='数据库名';User ID=sa;Password=123456";        
        /// <summary>
        /// 执行计划入口函数
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="schedule"></param>
        public void Run(Context ctx, Schedule schedule)
        {
            try
            {
                //系统管理员的当前登录组织是固定的,内码为1.
                long orgId = 340390;
                //得到组织并给执行计划上下文赋值
                Organization curOrg = OrganizationServiceHelper.ReadOrgInfoByOrgId(ctx, orgId);
                List<long> functions = Array.ConvertAll(curOrg.OrgFunctions.Split(','), (a) =>
                { return Convert.ToInt64(a); }).ToList();
                ctx.CurrentOrganizationInfo = new OrganizationInfo() //给当前上下文增加组织
                {
                    ID = curOrg.Id,
                    Name = curOrg.Name,
                    FunctionIds = functions,
                    AcctOrgType = curOrg.AcctOrgType
                };
                string query = "/*dialect*/select Code from MI_Flow where Code <> 'ME' and shop <> '' ";
                DataTable dataTable = ExecuteSqlQuery(query);
                if (dataTable.Rows.Count > 0)
                {
                    String[] code = dataTable.AsEnumerable().Select(row => row.Field<string>("Code").Trim()).ToArray();//AMB
                    string sql = "select FNUMBER from T_ENG_PROCESS";
                    var ret = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
                    String[] number = ret.Select(row => row["FNUMBER"].ToString()).ToArray(); //金蝶
                    String[] differ = code.Except(number).ToArray();//差集
                    String difCode = "'"+String.Join("','",differ)+"'";
                    string sql2 = string.Format("/*dialect*/select Code,Name,PNLPCS,Shop from MI_Flow where Code IN ({0}) ", difCode);
                    DataTable dataTable2 = ExecuteSqlQuery(sql2);
                    if (dataTable.Rows.Count > 0)
                    {
                        foreach (DataRow row in dataTable2.Rows)
                        {
                            String[] obj = new String[4];
                            obj[0] = Convert.ToString(row.ItemArray[0]).Trim();//编码
                            obj[1] = Convert.ToString(row.ItemArray[1]).Trim();//名称
                            obj[2] = Convert.ToString(row.ItemArray[2]).Trim();//过数
                            obj[3] = Convert.ToString(row.ItemArray[3]).Trim();//工作中心
                            ImportBill(ctx, obj);
                        }
                    }     
                }
            }
            catch (Exception ex)
            {
                // 处理异常
                Logger.Info("ENG", string.Format("自动同步阿米巴工序失败!errorMessage:{0}", ex.Message));
            }
        }
        //执行sql返回DataTable
        public DataTable ExecuteSqlQuery(string sqlQuery)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand(sqlQuery, connection))
                {
                    connection.Open();
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable dataTable = new DataTable();
                        adapter.Fill(dataTable);
                        return dataTable;
                    }                    
                }
            }
        }
        public void ImportBill(Context ctx,String[] obj)
        {
            // 构建一个IBillView实例,通过此实例,可以方便的填写物料各属性
            IBillView billView = this.CreateBillView(ctx, "ENG_Process");
            // 新建一个空白物料
            ((IBillViewService)billView).LoadData();
            // 触发插件的OnLoad事件:
            // 组织控制基类插件,在OnLoad事件中,对主业务组织改变是否提示选项进行初始化。
            // 如果不触发OnLoad事件,会导致主业务组织赋值不成功
            DynamicFormViewPlugInProxy eventProxy = billView.GetService<DynamicFormViewPlugInProxy>();
            eventProxy.FireOnLoad();
            // 填写物料各属性
            this.FillBillPropertys(billView,obj);
            // 保存物料
            OperateOption saveOption = OperateOption.Create();
            this.SaveBill(billView, saveOption,ctx);
        }
        public void FillBillPropertys(IBillView billView,String[] obj)
        {
            // 把billView转换为IDynamicFormViewService接口:
            // 调用IDynamicFormViewService.UpdateValue: 会执行字段的值更新事件
            // 调用 dynamicFormView.SetItemValueByNumber :不会执行值更新事件,需要继续调用:
            IDynamicFormViewService dynamicFormView = billView as IDynamicFormViewService;
            //给编码赋值
            dynamicFormView.UpdateValue("FNumber", 0, obj[0]);
            //名称赋值
            dynamicFormView.UpdateValue("FName", 0, obj[1]);
            //是否过数
            if (obj[2].ToString().Equals("PNL"))
            {
                dynamicFormView.UpdateValue("F_BL_isPass", 0, true);
            }           
            dynamicFormView.SetItemValueByNumber("FWorkCenterID",obj[3] , 0);            
        }        
        public void SaveBill(IBillView billView, OperateOption saveOption,Context ctx)
        {
            try
            {
                object[] pkArray = null;
                Form form = billView.BillBusinessInfo.GetForm();
                if (form.FormIdDynamicProperty != null)
                {
                    form.FormIdDynamicProperty.SetValue(billView.Model.DataObject, form.Id);
                }           
                // 调用保存操作
                IOperationResult saveResult = BusinessDataServiceHelper.Save(
                ctx,
                billView.BillBusinessInfo,
                billView.Model.DataObject,
                saveOption,
                "Save");
                if (saveResult.IsSuccess)
                {
                    pkArray = (from p in (saveResult as OperationResult).SuccessDataEnity
                                            select p[0]).ToArray();
                }
                if (pkArray !=null)
                {   
                    IOperationResult submitResult = BusinessDataServiceHelper.Submit(
                        ctx,
                   

二开插件-执行计划同步第三方库动态创建单据

using Kingdee.BOS;using Kingdee.BOS.Core;using Kingdee.BOS.Orm;using Kingdee.BOS.Log;using Kingdee.BOS.Core.List;using Kingdee.BOS...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信