获取凭证中科目对应的核算维度中文原创
金蝶云社区-何某人
何某人
0人赞赏了该文章 294次浏览 未经作者许可,禁止转载编辑于2022年09月02日 14:53:41

需求场景:

有时候开发功能需要获取到科目对应的核算维度,核算维度可能有多个,但是只想要界面拿到的中文串,例如: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;

}

赞 0