基于.net Framework4.0 第三方通过Cloud代理组件集成开发【分享】
金蝶云社区-天冥异
天冥异
5人赞赏了该文章 1,673次浏览 未经作者许可,禁止转载编辑于2018年07月19日 20:54:19
summary-icon摘要由AI智能服务提供

本文介绍了基于.net Framework 4.0,利用K3 Cloud代理组件进行第三方系统集成开发的方法。这种方式通过dll实现组件级集成,可作为K3 Cloud标准Web Service、Web API集成调用的补充。文中详细说明了所需引用的组件、设置方法及如何通过代码实现用户登录、调用元数据服务和业务数据服务。示例代码包括验证用户、获取并处理用户元数据、以及添加用户数据到系统的完整流程。

//基于.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<DynamicObjectCollection>(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<DynamicObjectCollection>(row_FOrgInfo);
            var row_FRoleInfo = data_FRoleInfo.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject;
            row_FRoleInfo["FRoleId_Id"] = 6;
            data_FRoleInfo.Add(row_FRoleInfo);
        }

    }
}

图标赞 5
5人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!