前言:基于平台现有需求进行新功能模块开发与实现,以下内容为部分源码解析,仅提供一些思路参考,不予以客观指导,毕竟条条大路通罗马嘛;
语言:C#
工具:visual studio 2017/visual studio code
框架:.NET formwork 4.5
应用:外部API
准备工作:
新建文件-visual C#-.net fromwork 选择4.5版本
1.继承服务插件几类:AbstractOperationServicePlugIn
2.引用,创建事件事务执行后重写方法;
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
base.AfterExecuteOperationTransaction(e);
}
3.API准备,
4.创建字符串列表,使用StreamReader方法,从指定文件中读取数据
List<string> objects = new List<string>();
using (StreamReader reader = new StreamReader(@"your_path"))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
objects.Add(line);
}
}
5.根据自定义文本中的内容进行遍历后打印,结合需求;
Console.WriteLine(objects.First().ToString());
Console.WriteLine(objects.Last().ToString());
6.建立客户端连接,登录
your_client client = new your_client(objects.First().ToString());
//此处登录信息方法ValidateLogin中参数以及参数类型结合个人所设
var loginResult = client.ValidateLogin("id", "user", objects.Last().ToString(), language);
var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();
7.获取登录结果之后,如果需要API数据库进行操作可参考一下内容同,如不需要则自行跳过;
if (resultType == 1)
{
//验证是否登录成功,登录成功以逗号进行分割
var ids = string.Join(",",e.DataEntitys.Select(o => o[0]));
string viewsql = string.Format("/dialect/--dialect为注释,数据库使用的事SQLserver,此处书写sql语句且将获取登录类型信息作为sql语句的最后条件进行查询",ids);
//调用此方法执行sql语句,获取结果存储在MAUCOL集合中,this.context连接上下文
//也可自定义方法是使用context,(public void 方法名(Context ctx){}),将this.context变更ctx即可
DynamicObjectCollection MAUCOL = DbUtils.ExecuteDynamicObject(this.Context, viewsql);
8.在此假设对数据库中查询出来的数据为A\B\C\D\E,对此进行操作,思路为拆分信息后进行物理自动重组形成新的逻辑内容;
if(MAUCOL != null && MAUCOL.Count > 0)
{
//判断是否有数据进行操作,遍历,取出所需要的数据进行下一步操作;
for(int x = 0; x < MAUCOL.Count; x++)
{
//获取各个字段;
string a = Convert.ToString(MAUCOL[x]["A"]);
string b= Convert.ToString(MAUCOL[x]["B"]);
string c= Convert.ToString(MAUCOL[x]["C"]);
string d= Convert.ToString(MAUCOL[x]["D"]);
string e= Convert.ToString(MAUCOL[x]["E"]);
9.因为是需要将原有字段拆分后重组,所以需要查询在数据库对应表中是否存在,不存在写进去;
string aa = string.Format("/dialect/sql语句, 根据查询字段作为选定条件进行查询);
DynamicObjectCollection aasql = DbUtils.ExecuteDynamicObject(this.Context,aa);
10.使用正则进行拆分
if(aasql.Count == 0)
{
string[] vs = Regex.Split(需要拆分的字段,"/",RegexOptions.IgnoreCase);
//分割以“\”
if(vs.Length >= 3)
{
//如果分割的长度大于4,那么分别取出
string aaa = vs[0];
string bbb = vs[1];
string ccc = vs[2];
string ddd = vs[3];
string eee = vs[4];
11.根据拆分出来的字段条件进行构建sql查询语气分别在数据库对应的表中查询出所需要的信息,因为查询拆分出五个信息 所以此处需要构建出五个语句在这里我只书写一个作为参考;
string bb = string.Format("/dialect/以vs[0]第一个拆分字段为查询条件的sql语句'", vs[0]);
DynamicObjectCollection bbsql = DbUtils.ExecuteDynamicObject(this.Context,bb);
//此处需要对应书写其五个 分别为bbccddee,自定义变量名称即可
12.重组
使用json进行
if (vs[0] == "拆分字段")
{
JObject jObject = new JObject();
JObject modelobject = new JObject();
modelobject.Add("数据库表A对应字段", aa);
modelobject.Add("数据库表B对应字段", bb);
modelobject.Add("数据库表C对应字段", cc);
modelobject.Add("数据库表D对应字段", dd);
modelobject.Add("数据库表E对应字段", ee);
//创建json数据,根据前边拆分的字段条件进行查询,维护在数据表中
JArray entryarray = new JArray();
//
string AAA= string.Format("/dialect/以aabbccddee,作为查询条件的sql语句", aa,bb,cc,dd,ee);
DynamicObjectCollection AAAsql = DbUtils.ExecuteDynamicObject(this.Context,AA);
13.如果上边没有问题执行后会将数据写入进去,开始遍历写入具体信息数据;
for (int i = 0; i < AAsql.Count; i++)
{
JObject entryobject = new JObject();
如需类型转换 F = Convert.如需类型转换(AAsql[i]["数据库字段"]);
如需类型转换G = Convert.如需类型转换(AAsql[i]["数据库字段"]);
如需类型转换H = Convert.如需类型转换(AAsql[i]["数据库字段"]);
entryobject.Add("数据库字段1", F);
entryobject.Add("数据库字段2 ", G);
entryobject.Add("数据库字段2 ", H);
JObject wjobject = new JObject();
wjobject.Add("对应数据表结构字段与添加的字段一直的字段", 需要添加的字段);
entryobject.Add("条件字段 ", wjobject);
JObject yObject = new JObject();
yObject.Add("对应数据表结构字段与添加的字段一直的字段2", 需要条件的第二个字段);
JObject cjobject = new JObject();
cjobject.Add("对应数据表结构字段与添加的字段一直的字段3", "");
//以此类推
JObject fzjobject = new JObject();
fzjobject.Add("对应数据表结构字段与添加的字段一直的字段4", yjObject);
fzjobject.Add("对应数据表结构字段与添加的字段一直的字段5", cjobject);
entryobject.Add("对应数据表结构字段与添加的字段一直的字段6", fzjobject);
entryarray.Add(entryobject);
}
14.创建保存方法向客户端
modelobject.Add("对应需要添加的类型字段 ", entryarray);
jObject.Add("类型字段", modelobject);
//构建SAVE提交方法客户端
string SSAVE = jObject.ToString();
var resultJsons = client.Save("数据表中头字段标识", jObject.ToString());
15.提交
string submitSW = string.Format("/*dialect*/sql语句以提交字段进行条件查询的", 字段);
DynamicObjectCollection fidsql1 = DbUtils.ExecuteDynamicObject(this.Context, submitSW);
if (fidsql1 != null && fidsql1.Count > 0)
{
for (int i = 0; i < fidsql1.Count; i++)
{
Int32 fid = Convert.ToInt32(fidsql1[i]["fid"]);
JObject submitjobject = new JObject();
submitjobject.Add("Ids", fid);
var resultJsonss = client.Submit("数据表中头字段标识", submitjobject.ToString());