1、因为费用应付单有多选基础资料字段,所以在下推的时候希望能够直接在程序中赋值给多选基础资料。按照丁老师给的列子做了,但是程序运行到红色部分就没有进入循环体内,这是怎么回事?还有这“ linkEntity.DynamicProperty.GetValue(newBillRow) as DynamicObjectCollection”句话是求什么呢?
[Description("服务插件|标准应付单审核后触发采购入库单下推费用应付单")]
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
base.EndOperationTransaction(e);
foreach (var billObj in e.DataEntitys)
{
string billType = billObj["BillTypeID_Id"].ToString();
if (billType == "a83c007f22414b399b0ee9b9aafc75f9")
{
DynamicObjectCollection entryRows = billObj["AP_PAYABLEENTRY"] as DynamicObjectCollection;
object sourcebillno = entryRows[0]["SourceBillNo"];
IOperationResult result = new OperationResult();
//获取单据转换规则
ConvertRuleElement ruleElement = ServiceHelper.GetService
string getSourceSql = String.Format(@"select * from t_STK_InStock inner join T_STK_INSTOCKENTRY on T_STK_INSTOCKENTRY.FID=t_STK_InStock.FID where FBILLNO='{0}'", sourcebillno);
ListSelectedRowCollection rows = new ListSelectedRowCollection();
int i = 0;
using (IDataReader reader = DBUtils.ExecuteReader(this.Context, getSourceSql))
{
while (reader.Read())
{
ListSelectedRow row = new ListSelectedRow(reader["FID"].ToString(), string.Empty, i++, "STK_InStock");
rows.Add(row);
}
}
//// 调用下推服务,生成下游单据数据包
ConvertOperationResult operationResult = null;
//Dictionary
try
{
PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray());
{
pushArgs.TargetBillTypeId = "3c6f819d78ac4d5981891956c4595b20"; // 费用应付单类型 targetBillTypeId
// TargetOrgId = 0, // 请设定目标单据主业务组织。如无主业务组织,可以为0
// //CustomParams = custParams, // 可以传递额外附加的参数给单据转换插件,如无此需求,可以忽略
};
// //执行下推操作,并获取下推结果
operationResult = ServiceHelper.GetService
result.MergeResult(operationResult);
}
catch (KDExceptionValidate ex)
{
throw new Exception(ex.Message);
}
catch (KDException ex)
{
throw new Exception(ex.Message);
}
catch
{
throw;
}
// 获取生成的目标单据数据包
DynamicObject[] objs = (from p in operationResult.TargetDataEntities
select p.DataEntity).ToArray();
for (int j = 0; j < objs.Length; j++)
{
decimal Amount = 0;
//根据实际情况,处理目标单据数据
DynamicObjectCollection FEntityDetail = objs[j]["AP_PAYABLEENTRY"] as DynamicObjectCollection;
foreach (var item in FEntityDetail)
{
Amount += Convert.ToDecimal(item["FALLAMOUNTFOR_D"]);//价税合计
}
DynamicObjectCollection FEntityPlan = objs[j]["AP_PAYABLEPLAN"] as DynamicObjectCollection;
decimal iPAYAMOUNTFOR = Amount / FEntityPlan.Count;//“价税合计” 总金额平均分配到每一条付款计划 “应付金额” 字段
foreach (var it in FEntityPlan)
{
it["PAYAMOUNTFOR"] = iPAYAMOUNTFOR;
}
//设置单据头 “价税合计” 即【明细】分录的“含税单价”合计
objs[j]["FALLAMOUNTFOR"] = Amount;
// 读取目标单据元数据
IViewService viewService = ServiceHelper.GetService
ISaveService saveService = ServiceHelper.GetService
var targetBillMeta = ServiceHelper.GetService
BusinessInfo info = targetBillMeta.BusinessInfo;
Entity linkEntity = info.GetEntity("FEntityDetail_Link");
MulBaseDataField FINSTOCKID = info.GetField("FINSTOCKID") as MulBaseDataField;//获取入库单号多选基础资料
//foreach (var NewbillObj in objs)//objs是下游数据包
//{
//DynamicObjectCollection newbillRows =NewbillObj["AP_PAYABLEENTRY"] as DynamicObjectCollection;//NewbillObj["AP_PAYABLEENTRY"]
foreach (DynamicObject newBillRow in FEntityDetail)
{
DynamicObjectCollection linkRows = linkEntity.DynamicProperty.GetValue(newBillRow) as DynamicObjectCollection;
HashSet
}
}
}
}
}
}
}