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

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格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



