help
金蝶云社区-mfsh416
mfsh416
0人赞赏了该文章 1,702次浏览 未经作者许可,禁止转载编辑于2013年11月04日 22:15:13

我想在唯一编号B24_ydj的原单据添加一个按钮 然后在相应的操作加服务性插件,达到按按钮后生成唯一编号B24_mbdj的目标单据 具体代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Transactions;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.App;
using Kingdee.BOS.Core.Metadata.ConvertElement;
using Kingdee.BOS.Contracts;
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata;
using System.ComponentModel;
using System.Threading.Tasks;
using Kingdee.BOS.App.Data;

namespace NEPG.LOCAL2013.REPORT.PLUGIN
{
[Description("原单据下推测试插件")]
public class CS001 : AbstractOperationServicePlugIn
{

public override void OnPreparePropertys(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)
{
e.FieldKeys.Add("FMatnum");
e.FieldKeys.Add("fqty");
e.FieldKeys.Add("famount");

}
public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e)
{
/* 查找对应的转换规则
* SELECT FID,FSTATUS,FSOURCEFORMID,FTARGETFORMID FROM T_META_CONVERTRULE
WHERE FDEVTYPE <> 2 AND FSOURCEFORMID ='PUR_ReceiveBill' AND FTARGETFORMID = 'STK_InStock'
* */
var rules = this.GetConvertRules("B24_ydj", "B24_mbdj");
var rule = rules.FirstOrDefault(t => t.IsDefault);

if (rule == null)
{
throw new KDException("", "规则不存在或者没有指定“默认”转换规则!");
}
// 根据传入的数据,从数据库获取原始数据创建入库单数据包
DynamicObject[] inStockBillObjs = this.PushToInStockBill(rule, e.DataEntitys);
// 修改需要下推的数量
//this.ModifiedQty(this.e, inStockBillObjs);
IMetaDataService metaService = ServiceHelper.GetService();
// 获取入库单的元数据
FormMetadata meta = metaService.Load(this.Context, "B24_mbdj") as FormMetadata;
// 保存生成入库单
ISaveService save = ServiceHelper.GetService();
save.Save(this.Context, meta.BusinessInfo, inStockBillObjs);
}

private DynamicObject[] PushToInStockBill(ConvertRuleElement rule, DynamicObject[] receiverBillObjs)
{
Dictionary option = new Dictionary();
ConvertOperationResult operationResult = null;
// 构建具体的下推行信息集合
ListSelectedRowCollection selectedRows = GetSelectedRows(receiverBillObjs);
PushArgs pushArgs = new PushArgs(rule, selectedRows.ToArray())
{
CustomParams = option, // 额外附加的参数
};

//执行下推操作,并获取下推结果
IConvertService srv = ServiceHelper.GetService();
operationResult = srv.Push(this.Context, pushArgs, this.Option);
DynamicObject[] objs = (from p in operationResult.TargetDataEntities
select p.DataEntity).ToArray();
return objs;
}

private ListSelectedRowCollection GetSelectedRows(DynamicObject[] receiverBillObjs)
{
ListSelectedRowCollection selectedRows = new ListSelectedRowCollection();
foreach (DynamicObject r in receiverBillObjs)
{
DynamicObjectDataRow dr = new DynamicObjectDataRow(r);
var entryRows = r["CS_YDENTRY"] as DynamicObjectCollection;
foreach (var row in entryRows)
{
ListSelectedRow sr = new ListSelectedRow(
Convert.ToString(dr["Id"]),
Convert.ToString(row["Id"]),
0,
this.BusinessInfo.GetForm().Id);
selectedRows.Add(sr);
}
}
return selectedRows;
}

private List GetConvertRules(string sourceFormId, string targetFormId)
{
IConvertService read = ServiceHelper.GetService();
return read.GetConvertRules(this.Context, sourceFormId, targetFormId);
}

}
}

但是当我运行调试时 单据体没有字段 同时弹出错误 之不能为null 参数名selectedRows

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0