金蝶云DynamicObject的相关操作原创
金蝶云社区-爱孤独又爱你
爱孤独又爱你
13人赞赏了该文章 2,396次浏览 未经作者许可,禁止转载编辑于2023年07月09日 23:08:41
DynamicObject 类似于键值对

假如现在有一个变量 DynamicObject 对象 dynamicObject ,它有一个 Name 的键1. DynamicObject 取值    //  * 取出来的值是object类型
    string name = (string) dynamicObject["Name"];
    2. DynamicObject 赋值    string newName = "张三";
    dynamicObject["Name"] = newName;
    3. DynamicObject  新增键
     给 DynamicObject 里不存在的键赋值,sorry 做不了,会报错。
     但是可以搞一手 狸猫换太子(我在金蝶里特喜欢用这招)。
     思路: 创建一个 DynamicObject 来替换现有的 DynamicObject
     
     DynamicObjectType dynamicObjectType = dynamicObject.DynamicObjectType;
     // 在原来的基础上新增一个键
     dynamicObjectType.RegisterProperty("ID", typeof(string));
     DynamicObject newDynamicObject = new DynamicObject(dynamicObjectType);
     newDynamicObject["ID"] = "1234";
     // 把原来的键值再赋值新的对象上 可以结合下面 DynamicObject  复制
     ……
     然后再把 newDynamicObject 替换掉  DynamicObject 就行了 
     
     既然看到这儿,我想你可能在修改 DynamicObjectCollection 里元素的数据
     如果你是要对 DynamicObjectCollection 全部元素,或者一部分元素进行新增键的话
     ————————————————————————————————————————————————
     下面的话对你有用哦
     对于  DynamicObjectCollection ,如果添加了一个DynamicObject对象,
     这个对象有着 DynamicObjectCollection 里其他元素没有的键,
     那么 DynamicObjectCollection 里其他的元素都会添加这个键
     举个例子:     DynamicObjectCollection  collection; 
     // 这个collection里的所有的元素的键只有 Name
     // 如果执行 collection[0]["ID"] = "123"; 这句,就会报错
     
     DynamicObjectType dynamicObjectType = collection[0].DynamicObjectType;
     dynamicObjectType.RegisterProperty("ID", typeof(string));
     DynamicObject newDynamicObject = new DynamicObject(dynamicObjectType);
      // Add()完成后,collection里全部的元素都会有 ID 这个键,可以打断点看一下
     collection.Add(newDynamicObject );
     collection.Remove(newDynamicObject );
    
     // 现在再执行这句就没问题,即使 collection.Remove() 了新加的元素
     collection[0]["ID"] = "123";
     
     // 这个方法,即不会频繁的操作collection的 Add 和 Remove
     // 也不用 狸猫换太子,只是把狸猫放到太子面前溜一圈
     // 可谓是十分的方便
     ————————————————————————————————————————————————    
4. DynamicObject  复制     // 这样就创建了一个跟 dynamicObject 一样结构的DynamicObject对象
     DynamicObjectType dynamicObjectType = dynamicObject.DynamicObjectType;
     DynamicObject newDynamicObject = new DynamicObject(dynamicObjectType );
     foreach( DynamicProperty property  in dynamicObjectType.Properties){
         newDynamicObject[property.Name]=dynamicObject[property.Name];
     }


图标赞 13
13人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!