K3Cloud DynamicObject数据包操作

DynamicObject的结构非常简单明了,就是一个字典,类似于一个Dictionary<string, object>,其中的object可能是一个简单值(普通字段),可能是一个复杂值(如基础资料字段),更可能是一个集合(如单据体);

如果值是一个集合,则这个集合的成员,又会是一个DynamicObject对象。

实际上,我们并不推荐伙伴直接操作DynamicObject,所以也不会提供此方面的介绍。

我们是希望开发者通过如下方式读取字段数据:

1. 在界面插件中,通过如下方式取数:
this.Model.GetValue(key, rowIndex);

2. 在其他缺少Model的地方,则采用如下方式取数:
普通字段:
var field = businessInfo.GetField(key);
string value = field.DynamicProperty.GetValue(dynamicObject);

基础资料字段:
var baseField = businessInfo.GetField(key) as BaseDataField;
long id = Convert.ToInt64(baseField.RefIdDynamicProperty.GetValue(dynamicObject));
DynamicObject bdInfo = baseField.DynamicProperty.GetValue(dynamicObject) as DynamicObject;

单据体:
var entity = businessInfo.GetEntity(key);
DynamicObjectCollection rows = entity.DynamicProperty.GetValue(dynamicObject) as DynamicObjectCollection;

多选辅助资料:
MulAssistantField targetFld = businessInfo.GetField(key) as MulAssistantField;
DynamicObjectCollection mulAssiRows = targetFld.RefEntityDynamicProperty.GetValue(headObj) as DynamicObjectCollection;
foreach(var row in mulAssiRows)
{
    string id = Convert.ToString(targetFld.RefIDDynamicProperty.GetValue(row));
    DynamicObject bdInfo = targetFld.DynamicProperty.GetValue(row) as DynamicObject;
}

多选基础资料,类似于多选辅助资料,不赘述;
上述方式,都是通过字段、实体上的DynamicProperty属性到DynamicObject中取数,此属性也提供了SetValue方法赋值;

3. 既没有Model,也没有字段元数据时,才根据DynamicObject本身的结构,逐层往下取数(高级):
语句1:取简单值
string strValue = Convert.ToString(dynamicObject[key]);
语句2:取复杂值
DynamicObject bdInfo = dynamicObject[key] as DynamicObject;
语句3:取集合,及集合中字段值
DynamicObjectCollection mulAssiRows = dynamicObject[entityKey]  as DynamicObjectCollection;
foreach(var row in mulAssiRows)
{
        string id = Convert.ToString(row[key]);
        DynamicObject bdInfo = row[key] as DynamicObject;
}

posted @ 2016-05-30 09:24  嘿嘿嘿~  阅读(3420)  评论(0编辑  收藏  举报