代码实现单据转换

场景描述:工序计划列表点击按钮直接生成一张对应的工序汇报
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
namespace HL.K3.TwoPhase.Business.Plugin
{
[Description("工序计划列表开工按钮插件")]
[Kingdee.BOS.Util.HotUpdate]
public class ProductReportListButton:AbstractListPlugIn
{
/// <summary>
/// 设置行高
/// </summary>
/// <param name="e"></param>
//public override void OnLoad(EventArgs e)
//{
// base.OnLoad(e);
// this.View.GetControl<EntryGrid>("FLIST").SetRowHeight(30);
//}
/// <summary>
/// 按钮点击后功能处理
/// </summary>
/// <param name="e"></param>
public override void AfterBarItemClick(AfterBarItemClickEventArgs e)
{
base.AfterBarItemClick(e);
switch (e.BarItemKey)
{
case "tbButtonRep"://报工按钮
ReportedMonthod();
break;
}
}
/// <summary>
///
/// 报工产生一张对应得工序汇报
/// </summary>
private void ReportedMonthod()
{
//获取选中行数据
ListSelectedRowCollection rows = this.ListView.SelectedRowsInfo;
if (rows.Count>=2)
{
throw new Exception("只能选中一行进行开工!!");
}
//string key = rows[0].PrimaryKeyValue;
//FormMetadata formMetadata = MetaDataServiceHelper.Load(this.Context, "SFC_OperationPlanning") as FormMetadata;
//DynamicObject dynamicObject = BusinessDataServiceHelper.LoadSingle(
// this.Context,
// key,
// formMetadata.BusinessInfo.GetDynamicObjectType());
//long targetOrgId = Convert.ToInt64(dynamicObject["SubEntity"]);
var rules = ConvertServiceHelper.GetConvertRules(this.View.Context, "SFC_OperationPlanning", "SFC_OperationReport");
var rule = rules.FirstOrDefault(t => t.IsDefault);
// 获取在列表上当前选择需下推的行
ListSelectedRow[] selectedRows = ((IListView)this.View).SelectedRowsInfo.ToArray();
long targetOrgId =Convert.ToInt64(selectedRows[0].DataRow["FProcessId_Id"]);
Int32 FOPERSTATUS = Convert.ToInt32(selectedRows[0].DataRow["FOPERSTATUS"]);
if (FOPERSTATUS==5)
{
throw new Exception("已经是完工状态不需报工!!");
}
if (FOPERSTATUS == 3)
{
throw new Exception("该工序计划是下达状态请先开工才能报工!!");
}
// 如下代码为单据上获取当前当前选择行
// string primaryKeyValue = ((IBillView)this.View).Model.GetPKValue().ToString();
// ListSelectedRow row = new ListSelectedRow(primaryKeyValue, string.Empty, 0, this.View.BillBusinessInfo.GetForm().Id);
// ListSelectedRow[] selectedRows = new ListSelectedRow[] { row };
// 调用下推服务,生成下游单据数据包
ConvertOperationResult operationResult = null;
Dictionary<string, object> option = new Dictionary<string, object>();
try
{
PushArgs pushArgs = new PushArgs(rule, selectedRows)
{
TargetBillTypeId = "001f29d2c9af844211e342cba3aaa38c", // 工序汇报入库
TargetOrgId = targetOrgId, // 请设定目标单据主业务组织
CustomParams = option, // 可以传递额外附加的参数给单据转换插件
};
//执行下推操作,并获取下推结果
operationResult = ConvertServiceHelper.Push(this.View.Context, pushArgs, null);
}
catch (KDExceptionValidate ex)
{
this.View.ShowErrMessage(ex.Message, ex.ValidateString);
代码实现单据转换
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



