金蝶云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人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读