发帖

氚云开发者手册学习历程

氚云知识讨论  / 氚友原创  / 只看大图  / 倒序浏览   © 著作权归作者本人所有

#楼主# 2020-3-14

跳转到指定楼层

注册氚云社区,学习低代码知识,与更多氚友互动交流

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
氚云无代码设计基本掌握后,搭建了一些应用,应用太过初级,用起来不爽。

掌握氚云代码才能做出更好的产品,我没有从事过向对象的编程工作,多次阅读氚云开发者手册根本看不懂,对氚云代码的学习一直无法入门、无法突破。

氚云帮助的“开发者手册”对与我这种代码小白来说根本不知道如何使用。

在氚云社区管理员大土的引荐下观看了吴登杰吴总的视频:0基础入门代码,助力企业员工建立IT能力(以下简称吴总视频)。

吴总视频看完后,氚云开发者手册里的内容逐个验证、学习。现将入门过程记录如下,一方面记录下自己学习代码过程,另一方面分享给代码初学者入门哈。


一、从后端代码学起
1、开发者手册-后端常用接口示例-控件的取值、赋值


=================================

this.Request.BizObject["控件编码"]其中控件编码是指表单设计-图形设计-控件属性中的“控件编码”。这点非常容易理解。

this.Request.IsCreateMode:是否创建模式,true,false

应用编码(appcode)、表单编码(schemaCode、id)、控件编码

=================================

示例:

加载表单页面初始化赋值

//吴总视频中对代码的添加位置做了详细说明,本文不再赘述,不知道添加位置的可仔细观看吴总视频。

protected override void OnLoad(H3.SmartForm.LoadListViewResponse   response)

    {

          if(this.Request.IsCreateMode)    //判断是否为创建模式,赋值默认数值

        {

              this.Request.BizObject["F0000001"] = "表单加载默认值";  //[]中内容是当前表单的控件编码,应修改为当前表单的相应控件编码,如图1:控件“单行文本”的控件编码是“ F0000001”。

        }

          base.OnLoad(response);

    }


//以上代码的执行效果如图2
//以上代码结合读取其他表单控件内容的代码即可实现能用于实际应用的加载默认功能。


提交时的赋值/取值      

protected override void OnSubmit(string actionName,   H3.SmartForm.SmartFormPostValue postValue,   H3.SmartForm.SubmitSmartFormResponse response)

    {

          this.Request.BizObject["F0000001"] = "表单提交默认值";  //在提交时直接赋值

          string va =   this.Request.BizObject["F0000002"] + string.Empty;  //将控件“副本_单行文本”的内容赋值给变量va,但为何要加入“+ string.Empty”还不理解,或许是将F0000002转换为字符串。开发者手册中该出这行有何用处不清楚,因此加了后面一行代码。

          this.Request.BizObject["F0000003"] =va;  //开发者手册中无本行

          base.OnSubmit(actionName, postValue, response);

      }


//以上代码是将当前表单的“单行文本”控件内容在提交时直接赋值"表单提交默认值",无论该控件填写什么内容都不会保存。

//剩下两行代码是在提交时将输入“副本_单行文本”的内容赋值给“单行文本3”并保存。

以上代码的执行效果如图3、图4


图2

图2

图1

图1


图3

图3

图4

图4











回复

使用道具

7

主题

33

帖子

609

金币

白金船长

Rank: 25

积分
514

氚云专业版氚云标准版

郝勇 发表于 2020-3-14 08:17:14
本帖最后由 郝勇 于 2020-4-25 16:20 编辑

2、开发者手册-后端常用接口示例-业务对象


添加业务对象

在实际应用开发中,需要在某一个表单中创建或是添加另一个表单的数据,比如:CRM中把线索转为客户,在线索状态设置转为新客户就自动在客户表单中新增一条客户信息。


注:业务对象只可操作表单数据,无法操作氚云系统表的数据。


以下示例涉及两张表单:当前表单“A”和另一表单“B”。即在A表单中编写代码已实现向B表单中添加数据。

=================================

H3.DataModel.BizObjectSchema:业务对象的模式,在该类中定义了这个类型的业务对象的属性名称、属性类型、方法名称、方法返回值等信息

this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355"):获取模块(表单)Schema

H3.DataModel.BizObject:业务对象。业务对象默认提供对象的创建、获取、更新和删除方法;业务对象不支持序列化,但是其中ValueTable属性是可以序列化

H3.DataModel.BizObject.Status:业务对象的状态,生效、草稿和作废

this.Request.UserContext.UserId:当前登录用户ID

H3.DataModel.BizObjectStatus.Effective:对象状态生效

H3.DataModel. BizObject.Create()创建业务对象

this.Request.BizObject.OwnerId:所有人,即拥有者


=================================

主表业务对象创建:

//得到一个IEngine对象

H3.IEngine engine = this.Request.Engine;

//获取系统虚拟用户的人员Id(表单设计后端类、列表设计后端类、定时器类、自定义接口类中都可以获取)

string systemUserId = H3.Organization.User.SystemUserId;


//获取当前登录人的人员Id(只能在表单设计后端类、列表设计后端类中获取)

string currentUserId = this.Request.UserContext.UserId;


//获取D00021**table表单的表单结构对象

H3.DataModel.BizObjectSchema aSchema = engine.BizObjectManager.GetPublishedSchema("D00021**table");


//new一个D00021**table表单的业务对象

H3.DataModel.BizObject aBo = new H3.DataModel.BizObject(engine, aSchema, systemUserId);


//设置业务对象的创建人为当前登录人

aBo.CreatedBy = currentUserId;


//设置业务对象的归属人为当前登录人

aBo.OwnerId = currentUserId;


//设置控件编码为F0000027(单行文本控件)的值

aBo["F0000027"] = "https://www.h3yun.com/";


//设置控件编码为F0000024(日期控件)的值

aBo["F0000024"] = DateTime.Parse("2020-03-18 00:00:00");


//设置控件编码为F0000039(数字控件)的值

aBo["F0000039"] = 99;


//设置控件编码为F0000038(单选框控件)的值

aBo["F0000038"] = "选项1";


//设置控件编码为F0000025(复选框控件)的值

aBo["F0000025"] = "选项1;选项2";


//设置业务对象数据为生效状态

aBo.Status = H3.DataModel.BizObjectStatus.Effective;


/*

        aBo.Status的所有取值与意义:

           H3.DataModel.BizObjectStatus.Draft:草稿

           H3.DataModel.BizObjectStatus.Effective:生效(若此表单有业务规则,则此项设置会在Create()中触发生效时业务规则)

           H3.DataModel.BizObjectStatus.Running:进行中(此设置并不会发起流程,带流程的表单数据创建请参考他处,一般不会将数据状态设置成进行中)

           H3.DataModel.BizObjectStatus.Canceled:作废

*/


//将业务对象创建到数据库中,即创建到表名为i_D000001Account的表中

aBo.Create();




=================================


示例:

主表的数据创建


//以下代码填写在A表中,具体位置见图1,实现在A表添加数据并提交后同时为B表添加数据。

H3.DataModel.BizObjectSchema accountSchema =   this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355");   //获取模块(表单)Schema;双引号里内容是指B表的“表单编码”,表单编码可在图形设计中“表单属性”中直接看到,最方便的还是在“后端代码”界面复制:一般是第7行,public class后面一长串字符即为“表单编码”,如图1。使用该行代码时,“表单编码”一定要换成相应编码。

          H3.DataModel.BizObject accountBo = new   H3.DataModel.BizObject(this.Request.Engine, accountSchema,   this.Request.UserContext.UserId); //构造对象

         accountBo["F0000001"]   = "C0001";   //给自定义属性赋值;方括号里为控件编码

         accountBo["F0000002"] =   "环盈科技";

         accountBo.Status =   H3.DataModel.BizObjectStatus.Effective;  //将对象状态设置为生效,不赋值默认为曹稿(论坛发帖过滤不智能,拼音都被过滤了,只能用同音字替代)

          accountBo.Create(); //创建对象


//以上代码填写在A表中,A表提交数据时即可在B表中添加数据。执行效果如图2、图3。


//当前A表中内容提交后同时填写到B表中。将前面所提到的代码融合在一起,如下:

H3.DataModel.BizObjectSchema accountSchema =   this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355");   //获取模块Schema;双引号里内容是指的“表单编码”,表单编码可在图形设计中“表单属性”中直接看到,最方便的还是在“后端代码”界面复制:一般是第7行,public class后面一长串字符即为“表单编码”,如图1。使用该行代码时,“表单编码”一定要换成相应编码。

          H3.DataModel.BizObject accountBo = new   H3.DataModel.BizObject(this.Request.Engine, accountSchema,   this.Request.UserContext.UserId); //构造对象

         accountBo["F0000001"]   =   this.Request.BizObject["F0000001"];   //给自定义属性赋值;方括号里为控件编码

         accountBo["F0000002"]   =   this.Request.BizObject["F0000002"];

         accountBo.Status =   H3.DataModel.BizObjectStatus.Effective;  //将对象状态设置为生效,不赋值默认为曹稿(论坛发帖过滤不智能,拼音都被过滤了,只能用同音字替代)

          accountBo.Create(); //创建对象






携带子表数据的创建

//以下这段代码添加在A表中,实现A表提交后向B表增加记录的功能,当然增加的是代码中双引号里的固定字符。


H3.DataModel.BizObjectSchema schema =   this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355");//表单编码为B表的主表表单编码

              H3.DataModel.BizObject obj = new   H3.DataModel.BizObject(this.Request.Engine, schema,   this.Request.UserContext.UserId); //主表对象

              obj.CreatedBy   = this.Request.BizObject.OwnerId;

             //以下四行为B表主表的控件编码

              obj["F0000001"] = 1;  

              obj["F0000002"] = "其他";

              obj["F0000003"] = "其他";

              obj["F0000004"] = "其他";


            List <   H3.DataModel.BizObject > lstObject = new List<H3.DataModel.BizObject>();  

              H3.DataModel.BizObject zibiao = new   H3.DataModel.BizObject(this.Request.Engine,   schema.GetChildSchema("D001321F08cdcde36a934fe992e5514f7f91347c"),   this.Request.UserContext.UserId);//子表对象;GetChildSchema为B表子表的控件编码

              zibiao["F0000005"] =  "12";    //向B表子表BZ1控件赋值“12”

              zibiao["F0000006"] =  "34";   //向B表子表BZ2控件赋值“34”

              lstObject.Add(zibiao);


              obj["D001321F08cdcde36a934fe992e5514f7f91347c"] = lstObject.ToArray(); //子表数据赋值;双引号内为B表子表的控件编码

            obj.Create();   //创建对象

//以上代码执行效果如图4



//将以上代码中的赋值内容固定字符换成当前表单的控件值的代码如下:

H3.DataModel.BizObjectSchema schema =   this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355");//表单编码为B表的主表表单编码

              H3.DataModel.BizObject obj = new   H3.DataModel.BizObject(this.Request.Engine, schema,   this.Request.UserContext.UserId); //主表对象

              obj.CreatedBy   = this.Request.BizObject.OwnerId;

             //以下四行为B表主表的控件编码;向B表主表四个控件赋值当前表单主表四个控件的值

              obj["F0000001"] = this.Request.BizObject["F0000001"];  

              obj["F0000002"] = this.Request.BizObject["F0000002"];

              obj["F0000003"] = this.Request.BizObject["F0000003"];

              obj["F0000004"] = this.Request.BizObject["F0000004"];


            List <   H3.DataModel.BizObject > lstObject = new List<H3.DataModel.BizObject>();  

              H3.DataModel.BizObject zibiao = new   H3.DataModel.BizObject(this.Request.Engine,   schema.GetChildSchema("D001321F08cdcde36a934fe992e5514f7f91347c"),   this.Request.UserContext.UserId);//子表对象;GetChildSchema为B表子表的控件编码

              zibiao["F0000005"] =  this.Request.BizObject["F0000001"];    //向B表子表BZ1字段赋值当前表单主表控件A1的值

              zibiao["F0000006"] =  this.Request.BizObject["F0000002"];   //向B表子表BZ2字段赋值当前表单主表控件A2的值

              lstObject.Add(zibiao);


              obj["D001321F08cdcde36a934fe992e5514f7f91347c"] = lstObject.ToArray(); //子表数据赋值;双引号内为B表子表的控件编码

            obj.Create();   //创建对象

//氚云使用无代码方式时氚云不支持子表值赋值给其他表,那么在代码中当前表单的子表控件值现在还不知道如何获取,学到后再分享。


图1

图1

图2

图2

图3

图3

图4

图4
回复

使用道具 举报

7

主题

33

帖子

609

金币

白金船长

Rank: 25

积分
514

氚云专业版氚云标准版

郝勇 发表于 2020-3-14 15:18:51
本帖最后由 郝勇 于 2020-4-25 16:56 编辑

3、开发者手册-后端常用接口示例-业务对象


修改业务对象
与添加业务对象一样,修改业务对象主要实现不同表单之间的数据修改或更新。如:与客户签订合同成交后,把对应的客户状态设置为已成交客户。


===============================

H3.DataModel.BizObject.Load(System.String,H3.IEngine,System.String,System.String,System.Boolean)

H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Request.Engine,"schemaCode",this.Request.BizObjectId,false)

参数
说明
"engine"业务对象访问引擎的连接
"schemaCode"业务对象模式编码
"objectId"业务对象Id
"requireRelatedObjects"
"userId"用户Id
返回值
加载好的业务对象

===============================

示例:

以下代码一直没弄明白,执行报错

H3.DataModel.BizObject accountBo =   H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Request.Engine,"schemaCode",this.Request.BizObjectId,false);   //Load对象(双引号内一大串字符为B表单编码,this.Request.BizObjectId为当前表单objectid)

          accountBo["CustomerName"] = "深圳氚云网络科技有限公司";  //修改对象属性值

          accountBo["CustomerL**l"] = "已成交";

        accountBo.Status =   H3.DataModel.BizObjectStatus.Effective; // 将对象状态设为生效

          accountBo.Update();  //更新对象


回复

使用道具 举报

7

主题

33

帖子

609

金币

白金船长

Rank: 25

积分
514

氚云专业版氚云标准版

郝勇 发表于 2020-3-14 17:12:29
4、开发者手册-后端常用接口示例-业务对象

删除业务对象

以下代码没搞明白,无法调通

示例:

H3.DataModel.BizObject accountBo =   H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Request.Engine,"schemaCode",this.Request.BizObjectId,false);   //Load对象(schemaCode为表单编码,this.Request.BizObjectId为当前表单objectid)

          accountBo["CustomerName"] = "深圳氚云网络科技有限公司";  //修改对象属性值

          accountBo["CustomerL**l"] = "已成交";

        accountBo.Status =   H3.DataModel.BizObjectStatus.Effective; // 将对象状态设为生效

          accountBo.Remove();  //删除对象


回复

使用道具 举报

7

主题

33

帖子

609

金币

白金船长

Rank: 25

积分
514

氚云专业版氚云标准版

郝勇 发表于 2020-3-14 17:13:46
5、开发者手册-后端常用接口示例-业务对象


查询业务对象

先构建过滤器,过滤器支持各种条件组合类似sql的where条件并支持嵌套。

示例:

H3.Data.Filter.Filter filter = new H3.Data.Filter.Filter();  //构建过滤器

                  H3.Data.Filter.And andMatcher = new H3.Data.Filter.And();    //构造And匹配器

                  andMatcher.Add(new H3.Data.Filter.ItemMatcher("AccountName",   H3.Data.ComparisonOperatorType.Equal, "氚云")); //添加查询条件

                  filter.Matcher = andMatcher;

                  H3.DataModel.BizObjectSchema accountSchema =   this.Request.Engine.BizObjectManager.GetPublishedSchema("D000001Account");   //获取模块Schema

                  H3.DataModel.BizObject[] customers =   H3.DataModel.BizObject.GetList(this.Request.Engine,   this.Request.UserContext.UserId,

                    accountSchema,   H3.DataModel.GetListScopeType.GlobalAll, filter); //查询返回的结果对象


回复

使用道具 举报

7

主题

33

帖子

609

金币

白金船长

Rank: 25

积分
514

氚云专业版氚云标准版

郝勇 发表于 2020-3-14 18:03:31
本帖最后由 郝勇 于 2020-3-14 21:30 编辑

开发者手册-后端常用接口示例-表单

表单按钮

修改/增加表单按钮,初始化加载按钮。

示例:

protected override void   OnLoad(H3.SmartForm.LoadSmartFormResponse response)

{

                base.OnLoad(response);

                response.Actions.Remove("Save");  //删除按钮;系统“暂存”按钮

                response.Actions.Remove("Submit");  //删除系统“提交”按钮

                response.Actions.Remove("Remove");  //删除系统“删除”按钮

                Dictionary   < string, H3.SmartForm.ViewAction > dicActions = new   Dictionary<string, H3.SmartForm.ViewAction>();

                //重新添加按钮,并修改显示名称

                dicActions.Add("Submit", new   H3.SmartForm.ViewAction("Submit", "一键初始化",   ""));

                foreach(KeyValuePair < string, H3.SmartForm.ViewAction > action   in response.Actions)

                      dicActions.Add(action.Key, action.Value);

                response.Actions = new   Dictionary<string, H3.SmartForm.ViewAction>();

                response.Actions = dicActions;

}




回复

使用道具 举报

2

主题

10

帖子

754

金币

黄金船长

Rank: 5

积分
464

内测荣誉勋章氚云标准版氚云专业版

发表于 2020-4-1 11:14:48
哈哈哈,一边学习一边验证,学起来超爽的。
加油加油。
回复

使用道具 举报

4

主题

16

帖子

5074

金币

黄金船长

Rank: 5

积分
309

内测荣誉勋章氚云标准版

李润光 发表于 2020-4-4 12:26:54
厉害,氛围激发学习。
回复

使用道具 举报

23

主题

47

帖子

1万

金币

钻石舰长

Rank: 50Rank: 50

积分
3069

2021跨年勋章超级码力内测荣誉勋章氚云标准版氚云专业版

庞聪 发表于 2020-4-9 00:04:20
我昨天第一次尝试使用后端代码,需要在后端直接调用人员多选控件或部门多选控件里的人员USERID,在开发手册里找不着,就在社区里搜。结果关注到这里来了。将会继续跟进学习!
回复

使用道具 举报

12

主题

109

帖子

1190

金币

白金船长

Rank: 25

积分
1260

奥哲周年勋章氚云专业版氚云标准版

大夫地 发表于 2020-4-13 21:01:14
楼主研究下:列表的某一列,当值等于“否”时,字体显示为红色,或背景色显示为红色。
回复

使用道具 举报

12

主题

109

帖子

1190

金币

白金船长

Rank: 25

积分
1260

奥哲周年勋章氚云专业版氚云标准版

大夫地 发表于 2020-4-13 21:02:29
第二个需求研究下:子表的某一列值相同时,不能提交。
回复

使用道具 举报

12

主题

109

帖子

1190

金币

白金船长

Rank: 25

积分
1260

奥哲周年勋章氚云专业版氚云标准版

大夫地 发表于 2020-4-13 21:04:47
第三个需求研究下:当前表单中的关联控件选择了目标表单的某一表单后(在提交前),其他人就不能再选择目标表单已被选择的表单。
回复

使用道具 举报

0

主题

1

帖子

61

金币

白银班长

Rank: 3Rank: 3Rank: 3

积分
46

氚云标准版氚云专业版

王基 发表于 2020-5-15 15:01:46
this.Request.IsCreateMode:是否创建模式,true,false  
这个创建模式是什么意思啊
回复

使用道具 举报

0

主题

9

帖子

128

金币

白银班长

Rank: 3Rank: 3Rank: 3

积分
108

2021跨年勋章氚云标准版氚云专业版

一年级小学生 发表于 2020-8-21 14:22:41
庞聪 发表于 2020-4-9 00:04
我昨天第一次尝试使用后端代码,需要在后端直接调用人员多选控件或部门多选控件里的人员USERID,在开发手册 ...

select objectid,createdby,extractvalue(F0000007,'/ArrayOfString/string') as usersid from I_D001433c13b54e2936842609fff898de9c4ea84 where objectid='" + this.Request.BizObjectId + "'";
MySQL查询语句:F0000007是人员多选控件,查询出来结果赋值给QueryTable,然后在DataRow中获取usersid(获取的是多个人员id,中间用空格隔开),如果想得到每个人的id,就用字符串函数split以空格隔开,赋值给一个字符串数组就OK了。
回复

使用道具 举报

1

主题

5

帖子

81

金币

白银班长

Rank: 3Rank: 3Rank: 3

积分
91
冰哥 发表于 2021-1-27 11:05:15
MARK
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|氚云社区 |粤ICP备15096637号-1
Powered by Discuz! X3.4 Licensed  © 2001-2017 Comsenz Inc.