本机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); } } } } } }

浙公网安备 33010602011771号