需求场景:
有时候开发功能需要获取到科目对应的核算维度,核算维度可能有多个,但是只想要界面拿到的中文串,例如:BM000001/财务部;123/李四
插件代码中如何获取:
Field field = ListView.BillBusinessInfo.GetField("FDETAILID");
RelatedFlexGroupField relatedFlexGroupField = field as RelatedFlexGroupField;
Dictionary<string, BOSDynamicRow> dic = new Dictionary<string, BOSDynamicRow>();
foreach (var item in e.BillIds)
{
var bOSDynamicRows = GetBOSDynamicRow(Context, "GL_VOUCHER", new object[] { item });
dic.Add(item, bOSDynamicRows[0]);
}
//dic[vourcherId] 为构造的字典
var displayName = GetDisplayName(dic[vourcherId], relatedFlexGroupField, row); //row 为单据体中对应的行,从0开始
--Context 数据上下文
--formId 单据标识,例如:GL_VOUCHER
--ids 单据FID,可多个
public BOSDynamicRow[] GetBOSDynamicRow(Context ctx, string formId, object[] ids)
{
MetaDataService metaDataService = new MetaDataService();
BusinessInfo businessInfo = ((FormMetadata)metaDataService.Load(ctx, formId)).BusinessInfo;
IViewService service = Kingdee.BOS.Contracts.ServiceFactory.GetViewService(ctx);
DynamicObject[] objs = service.Load(ctx, ids, businessInfo.GetDynamicObjectType());
return objs.ToList().ConvertAll<BOSDynamicRow>(obj =>
{
DynamicFormModelProxy modelProxy = new DynamicFormModelProxy();
modelProxy.SetContext(ctx, businessInfo, new FormServiceProvider());
modelProxy.DataObject = obj;
return new BOSDynamicRow(obj, businessInfo.Entrys[0].Key, modelProxy);
}).ToArray();
}
public string GetDisplayName(BOSDynamicRow bosBillRow, RelatedFlexGroupField field, int row)
{
if (bosBillRow == null) return string.Empty;
var baseDataField = bosBillRow.Model.BillBusinessInfo.GetField(field.RelatedBaseDataFlexGroupField) as BaseDataField;
if (baseDataField != null)
{
var baseDataDataObject = bosBillRow.Model.GetValue(baseDataField.Key, row) as DynamicObject;
var relatedFieldDataObject = bosBillRow.Model.GetValue(field.Key, row) as DynamicObject;
return field.GetDisplayName(View, relatedFieldDataObject, baseDataField, baseDataDataObject);
}
return string.Empty;
}
推荐阅读