csharp
/// <summary>
/// 得到来源单单据体2数据包
/// </summary>
/// <param name="lstSrcPkValues"></param>
/// <param name="srcBInfo"></param>
/// <param name="srcEntity2"></param>
/// <returns></returns>
private DynamicObjectCollection GetEntity2DynamicObjs(List<long> lstSrcPkValues, BusinessInfo srcBInfo, Entity srcEntity2)
{
QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
queryParam.FormId = srcBoFormId;// "SAL_PriceList"; // 源单据的FormId
List<SelectorItemInfo> lstItems = new List<SelectorItemInfo>();
lstItems.Add(new SelectorItemInfo("FID"));
lstItems.Add(new SelectorItemInfo("FNUMBER"));
lstItems.Add(new SelectorItemInfo("F_BHR_VIEWUSERS"));
queryParam.SelectItems = lstItems; //需要选择的字段列表集合
var tupleFilterInfo = this.GetFilter(srcBInfo.GetForm().PkFieldName, lstSrcPkValues);
queryParam.FilterClauseWihtKey = string.Format(" {0} and {1} != 0", tupleFilterInfo.Item1, srcEntity2.EntryPkFieldName);
queryParam.SqlParams.AddRange(tupleFilterInfo.Item2);
var dynObjs = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam);
return dynObjs;
}
/// <summary>
/// 得到过滤条件和参数
/// </summary>
/// <param name="pkFieldName"></param>
/// <param name="entryPkName"></param>
/// <param name="lstSrcPkValues"></param>
/// <returns></returns>
private Tuple<string, List<SqlParam>> GetFilter(string pkFieldName, List<long> lstSrcPkValues)
{
string filter = string.Empty;
List<SqlParam> lstParams = new List<SqlParam>();
var arrPkValues = lstSrcPkValues.Distinct().ToArray();
if (arrPkValues.Length == 1)
{
filter = string.Format("{0} = {1} ", pkFieldName, arrPkValues[0]);
}
else if (arrPkValues.Length <= 50)
{
filter = string.Format("{0} in ({1}) ", pkFieldName, string.Join(",", arrPkValues));
}
else
{
var cardSql = StringUtils.GetSqlWithCardinality(arrPkValues.Length, "@PKValue", 1, false);
filter = string.Format(" EXISTS ( {0} where b.FID = {1}) ", cardSql, pkFieldName);
lstParams.Add(new SqlParam("@PKValue", KDDbType.udt_inttable, arrPkValues));
}
return Tuple.Create<string, List<SqlParam>>(filter, lstParams);
}
设置 多选基础资料字段值
csharp
private void FieldSetValue(Context ctx, MulBaseDataField field, DynamicObject entityObj, object[] pkValues)
{
// 获取多选基础资料字段的数据包集合
var mulBaseDataEntitySet = field.GetFieldValue(entityObj) as DynamicObjectCollection;
//var mulBaseDataEntitySet = entityObj[field.PropertyName] as DynamicObjectCollection;
if (mulBaseDataEntitySet == null)
{
mulBaseDataEntitySet = new DynamicObjectCollection(field.RefEntityDynamicObjectType, entityObj);
field.RefEntityDynamicProperty.SetValue(entityObj, mulBaseDataEntitySet);
}
mulBaseDataEntitySet.Clear();
// 从数据库读取指定的基础资料的数据包,并填充到当前多选基础资料字段的数据包集合中
var baseDataObjects = BusinessDataServiceHelper.LoadFromCache(ctx, pkValues, field.RefFormDynamicObjectType);
foreach (var baseDataObject in baseDataObjects)
{
var mulBaseDataEntity = new DynamicObject(field.RefEntityDynamicObjectType);
mulBaseDataEntitySet.Add(mulBaseDataEntity);
field.RefEntityDynamicObjectType.PrimaryKey.SetValue(mulBaseDataEntity, new SequenceReader(ctx).GetSequence<long>(field.TableName, 1).First());
field.RefIDDynamicProperty.SetValue(mulBaseDataEntity, baseDataObject[0]);
field.DynamicProperty.SetValue(mulBaseDataEntity, baseDataObject);
}
}