服务端插件安全调用webapi的写法--上下文原创
19人赞赏了该文章
2,904次浏览
编辑于2021年10月20日 16:26:03
说明:
7.5版本之前在插件中调api可能导致页面死掉,操作不成功等系列问题,原因是api接口会把上下文环境改变。
如果不是7.5版本以上,建议按下面的写法在插件中调用webapi
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using Kingdee.BOS.Util; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.WebApi.Client; using Kingdee.BOS.WebApi.FormService; using Kingdee.BOS.ServiceHelper; namespace Kingdee.BOS.TestPlugIn.FormPlugin { [HotUpdate] [Description("插件中安全调用webapi接口写法")] public class InvokeWebApiInPlugIn : AbstractDynamicFormPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { //第一种方式:通过客户端调用接口,先调用登陆接口,再调用其他接口, K3CloudApiClient apiClient = new K3CloudApiClient("http://localhost:2800/"); var isSucc = apiClient.Login(this.Context.DBId, this.Context.UserName, "888888", 2052); apiClient.Save(ctx, "KKK_BillA", "{\"Model\": {\"FBillTypeID\": {\"FNUMBER\": \"FBillANumber2\"}}"); //第二种方式:通过克隆创建一个新的上下文,再使用克隆的上下文直接调用api接口, var cloneCtx = ObjectUtils.CreateCopy(ctx) as Context; cloneCtx.ServiceType = WebType.WebService;//写死 cloneCtx.ClientInfo = ctx.ClientInfo; cloneCtx.CharacterSet = ctx.CharacterSet; // cloneCtx.IsStartTimeZoneTransfer = ctx.IsStartTimeZoneTransfer; cloneCtx.LoginName = ctx.LoginName; cloneCtx.EntryRole = ctx.EntryRole; // cloneCtx.Salt = ctx.Salt; cloneCtx.UserPhone = ctx.UserPhone; cloneCtx.UserEmail = ctx.UserEmail; cloneCtx.UserLoginType = ctx.UserLoginType; var result = WebApiServiceCall.Save(cloneCtx , "KKK_BillA", "{\"Model\": {\"FBillTypeID\": {\"FNUMBER\": \"FBillANumber2\"}}"); //第三种方式:自行创建上下文,再使用此上下文去调用接口 var ctx = Kingdee.BOS.ServiceHelper.DataCenterService.GetDataCenterContextByID("DBID"); //赋值上用户 ctx.UserId = FormConst.AdministratorID; //服务操作用户暂时记为Administrator ctx.UserName = "Administrator"; ctx.ServiceType = WebType.WebSite; //给上下文赋值上组织 BusinessEntity.Organizations.Organization curOrg = OrganizationServiceHelper.ReadOrgInfoByOrgId(ctx, 1); List<long> functions = new List<long>(); if (!curOrg.OrgFunctions.IsNullOrEmptyOrWhiteSpace()) { functions = Array.ConvertAll(curOrg.OrgFunctions.Split(','), (a) => { return Convert.ToInt64(a); }).ToList(); } ctx.CurrentOrganizationInfo = new OrganizationInfo() { ID = curOrg.Id, Name = curOrg.Name, FunctionIds = functions, AcctOrgType = curOrg.AcctOrgType }; } } }
赞 19
19人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0