公司引入了明道云零代码平台,业务部门的各种应用如雨后春笋般在明道云平台茁壮生长,而当明道云引入了企业组织数据后,所有的数据操作和员工深度锁定,在很多业务场景,都快速上线创新了各种方便的应用,线上办公一发而不可收啊。
博主配合黄老师在ERP团队创新自己的项目管理应用,担任开发人员角色,逐渐深入明道云的开发,为满足功能需求,实现了从A表更新到B表的数据更新,在工作流中写了第一段JS代码来统计数据等等高级功能,都能游刃有余的解决掉。但有一个工时收集的场景,实现起来难度就比较大了。如果用C#来处理,那就是砍瓜切菜,那么,研究方向是需要和明道云有接口要打通。
功能描述为从5个工时子表中,要汇集到一张大的工时收集表,作为报表展现的底层数据。雷布斯在发布会上说,当你有一个问题,其实别人早有了解决方案,主要是你要找到那个曾经解决过类似问题的人。博主找到了云川,果然他提供了关键的信息。当博主打开应用API的在线说明,发现私有化的明道云内置了全套标准的API,可以存取应用表,而且对于每一张表的数据描述帮助都很详细。
那接下来的事情就很简单了,用C# WINFORM程序调用明道云的API,把数据拿到本地,用强大而无脑的LINQ + Lambda加工处理,再传到明道云上。当然第一次吃螃蟹难免会花点时间,但很快,我就拥有了这个能力,能够在明道云平台上处理只要用户想得到的需求,我就做的到得能力。
获取表代码:
//取任务表
public async Task get_task()
{
TaskList.Clear();
var url = "https://innoshare/api/v2/open/worksheet/getFilterRows";
var objData = new
{
appKey = "4699f3706483a1db",
sign = "Y2UyZTcwN2FkNDRmMDQwM2JkNGE5ZWEwZWU5ZDIxOTdlNGUyM2QzZjI3YWYxZTA1ZTkzZjgzMzY1MjMzNDE1Mw==",
worksheetId = "67aea8e847238f53f5ece811",
pageSize = "1000"
};
txt = await url.PostJsonAsync(objData).ReceiveString();
// textBox1.Text = await url.PostJsonAsync(objData).ReceiveString(); //取全部行
var obj = JsonConvert.DeserializeObject<dynamic>(txt); // 从JSON中拉出来动态对象
foreach (var item in obj.data.rows) //每一行数据
{
Ztask one = new Ztask();
one.lxxmmc = item.lxxmmc;
// var mc = JsonConvert.DeserializeObject<dynamic>((string)item.lcbrwmc);
// if (mc != null ) one.lcbrwmc = mc[0].name;
// textBox1.Text = (string)item.lcbrwmc;
one.rowid = item.rowid;
one.lcbrwmc = item.lcbmc;
one.rwlb = item.rwlb;
one.rwmc = item.rwmc;
one.wcjd = item.wcjd;
one.jhwcsj = item.jhwcsj;
one.fkfgszb = item.fkfgszb; //非开发工时子表,一堆ID
one.fafzrgszb = item.fafzrgszb; //方案工时子表,一堆ID
one.fsbxrgszb = item.fsbxrgszb; //fs工时子表,一堆ID
one.kfrygszb = item.kfrygszb; //kf工时子表,一堆ID
one.nbcsrygszb = item.nbcsrygszb; //cs工时子表,一堆ID
one.uatgszb = item.uatgszb; //uat工时子表,一堆ID
textBox1.Text = textBox1.Text + item.ftzt + "\r\n";
one.ftzt = item.ftzt;
var line = JsonConvert.DeserializeObject<dynamic>((string)item.rwfzr); //处理“任务负责人”子表
foreach (var l in line)
{
Zrwfzr tmp = new Zrwfzr();
tmp.accountId = l.accountId;
tmp.fullname = l.fullname;
one.rwfzr.Add(tmp);
}
TaskList.Add(one);
}
}
上面代码中,注意明道云的字段类型,一般字段可以直接取文本的,注意看“rwfzr”任务负责人字段,它里面还有子字段,所以需要动态json拉出来,再取子字段中的一个文本名字。
上传数据到明道云:
var up_list = new List<List<RowItem>>();
foreach (var gs in gsEndList)
{
var row = new List<RowItem>
{
new RowItem { ControlId = "cpmc", Value = gs.cpmc },
new RowItem { ControlId = "xmmc", Value = gs.lxxmmc }, // 替换为实际字段
new RowItem { ControlId = "rwmc", Value = gs.rwmc },
new RowItem { ControlId = "lcbmc", Value = gs.lcbrwmc },
new RowItem { ControlId = "leibei", Value = gs.leibei },
new RowItem { ControlId = "rq", Value = gs.rq },
new RowItem { ControlId = "gs", Value = gs.gs }, // 数值格式化
new RowItem { ControlId = "renyuan", Value = gs.chengyuan[0].fullname },
new RowItem { ControlId = "gslx", Value = gs.gstype }
};
up_list.Add(row);
}
var url = "https://innoshare/api/v2/open/worksheet/addRows";
var objData = new
{
appKey = "4699f3706483a1db",
sign = "Y2UyZTcwN2FkNDRmMDQwM2JkNGE5ZWEwZWU5ZDIxOTdlNGUyM2QzZjI3YWYxZTA1ZTkzZjgzMzY1MjMzNDE1Mw==",
worksheetId = "gssjb",
// rows = new List<List<RowItem>>()
rows = up_list
};
ps(listBox1, await url.PostJsonAsync(objData).ReceiveString());
上面代码中,关键在要建一个行的集合,“new List<List<RowItem>>()”,然后往里面放字段数据就行,字段只需要给个“名称”和“值”就可以。