基于.net Framework4.0 第三方通过Cloud代理组件集成开发【分享】
金蝶云社区-云社区用户4u731234
云社区用户4u731234
1人赞赏了该文章 7,706次浏览 未经作者许可,禁止转载编辑于2020年02月13日 08:41:06

//基于.net Framework 4.0 第三方系统通过K3 Cloud代理组件进行集成开发
//此方式是基于dll,组件级系统集成开发
//K3 Cloud代理组件方式调用,可做为Cloud提供的标准Web Service、Web API集成调用方式的补充
//第三方也可在此基础上,可进行自定义Web Service调用封装
//By wanghl 2014-12-12
//新建立.net 控制台应用程序Copy代码按如下设置可直接运行
//需要直接引用的组件有
//K3 Cloud客户端代理组件(与Could通过代理交互,必须引用的组件,负责跨网络接口调用)
//Kingdee.BOS.ServiceFacade.KDServiceClient.dll、Kingdee.BOS.SrviceFacade.KDServiceClientFx.dll
//需要引用K3 Cloud类库(可以理解为开发辅助类,类似Web Service添加的客户端引用)
//Kingdee.BOS.dll、Kingdee.BOS.Core.dll、Kingdee.BOS.DataEntity.dll
//需放置于客户端调用文件夹中相关组件(会间接用到)
//Kingdee.BOS.ServiceFacade.Common.dll

//通过如下代码,可新增用户名 DllInvoke的登陆用户,并且绑定组织编码100及角色编码BOS01_SYS

//获取管理中心数据库信息链接地址(目的是要通过管理中心数据库,查询出要操作的“数据中心Id”)
//http://localhost:8000/Silverlight/CMC.aspx
//查询数据中心Id Sql语句
//select * from T_BAS_DATACENTER

//查询数据中心库 Sql语句
//select * from T_SEC_USER
//select * from T_ORG_ORGANIZATIONS
//select * from T_SEC_ROLE

using Kingdee.BOS.Authentication;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceFacade.KDServiceClient.BusinessData;
using Kingdee.BOS.ServiceFacade.KDServiceClient.Metadata;
using Kingdee.BOS.ServiceFacade.KDServiceClient.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication.InvokeUseDll
{
class Program
{
//K3Cloud 地址
static string CloudURL = "http://localhost/K3Cloud/ ";

static void Main(string[] args)
{
UserServiceProxy userServiceProxy = new UserServiceProxy();
userServiceProxy.HostURL = CloudURL;
//K3Cloud 地址、数据中心Id、登陆用户名、密码、语言环境(此标识是微软标准区域性标识符LCID 2052 简体、3076繁体、1033英文)
//Locale IDs Assigned by Microsoft
//http://msdn.microsoft.com/zh-CN/goglobal/bb964664.aspx
var ret = userServiceProxy.ValidateUser(CloudURL, "544e44dc0dc5af", "Administrator", "888888", 2052);
if (ret.LoginResultType == LoginResultType.Success)
{
Console.WriteLine("ValidateUser Success");
Invoke();
}
else
{
Console.WriteLine("ValidateUser Fail");
}
}

private static void Invoke()
{
MetadataServiceProxy metaServiceProxy = new MetadataServiceProxy();
metaServiceProxy.HostURL = CloudURL;
//据业务对象Id 取得FormMetadata
FormMetadata meta = metaServiceProxy.GetFormMetadata("SEC_User");
BusinessInfo info = meta.BusinessInfo;

DynamicObject row = new DynamicObject(info.GetDynamicObjectType());
InitSEC_User(info, row);
//dc = data.Load(info, null);

BusinessDataServiceProxy dataServiceProxy = new BusinessDataServiceProxy();
dataServiceProxy.HostURL = CloudURL;
var ret = dataServiceProxy.SaveData(info, row);
if (ret.IsSuccess)
{
Console.WriteLine("Invoke Success");
}
else
{
Console.WriteLine("Invoke Fail");
StringBuilder sb = new StringBuilder();
foreach (var item in ret.ValidationErrors)
{
sb.AppendLine(item.Message);
}
Console.WriteLine(sb.ToString());
}
Console.ReadKey();
}

public static void InitSEC_User(BusinessInfo info, DynamicObject masterRow)
{
//单据头(用户)
//用户名称
masterRow["Name"] = "DllInvoke";
//联系对象类型 设置BOS IDE中设置的默认值
//因BOS IDE标准版中未配置此字段默认值,因此不会起到效果
//此句设置,只是为了说明设置BOS IDE配置的默认值方式
string sFTypeKey = "FType";
if (info.GetField(sFTypeKey).DefValue != null && info.GetField(sFTypeKey).DefValue.Value != null)
masterRow["FType"] = info.GetField(sFTypeKey).DefValue.Value;
//masterRow[""] = "";

//单据体(组织范围)
Entity entity_FOrgInfo = info.GetEntity("FOrgInfo");
DynamicObjectCollection data_FOrgInfo = entity_FOrgInfo.DynamicProperty.GetValue(masterRow);
var row_FOrgInfo = data_FOrgInfo.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject;
//此处直接通过基础资料主键值赋值
row_FOrgInfo["FOrgID_Id"] = 1;
data_FOrgInfo.Add(row_FOrgInfo);

//子单据体(角色范围)
Entity entity_FRoleInfo = info.GetEntity("FRoleInfo");
DynamicObjectCollection data_FRoleInfo = entity_FRoleInfo.DynamicProperty.GetValue(row_FOrgInfo);
var row_FRoleInfo = data_FRoleInfo.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject;
row_FRoleInfo["FRoleId_Id"] = 6;
data_FRoleInfo.Add(row_FRoleInfo);
}

}
}