定制GUI客户端登录demo
第一步:在Visual Studio 2012中新增类库工程;需要新增有WPF界面元素的,必须新建WPF类库类型的工程。(.Net Framework 4 参考图片),温馨提示:最好用Visual Studio 2012工具进行编写
第二步:引入金蝶组件
Kingdee.BOS.dll [必选],
Kingdee.BOS.Client.Core.dll [必选],
Kingdee.BOS.ServiceFacade.KDServiceClient.dll [可选],
Kingdee.BOS.ServiceFacade.KDServiceClientFx.dll [可选],
Kingdee.BOS.XPF.ControlPlugins.Contracts.dll [可选]
log4net2 [必选]
* 以上组件安装云星空桌面客户端后,在磁盘目录可以找到 【C:\Program Files (x86)\Kingdee\K3Cloud\DeskClient\K3CloudClient】
第三步:编辑界面即编辑**.xaml页面
第四步:编辑登录逻辑(在**.xaml.cs编辑)
using Kingdee.BOS.Authentication;
using Kingdee.BOS.Client.Core;
using Kingdee.BOS.DataCenterInfo;
using Kingdee.BOS.ServiceFacade.KDServiceClient.Account;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ZQWCustomLoginUI
{
/// <summary>
/// UserControl1.xaml 的交互逻辑
/// </summary>
public partial class ZQWLoginV1 : UserControl, IKDLoginControl
{
IKDLoginControlOwner Owner { get; set; }
//IKDLoginControlOwner _Owner = null;
ItemModel currentDataCenter { get; set; }
public ZQWLoginV1()
{
InitializeComponent();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//MessageBox.Show(string.Format("userName:{0}\r\npassword:{1}", TxtUserName.Text, TxtPassword.Text));
var sDCName = TxtDataCenter.Text;
var ret = this.Owner.DoLogin();
ret.Context.DataCenterName = sDCName;
// ret.C.DataCenterName = sDCName;
if (ret.LoginResultType == LoginResultType.Success)
{
this.Owner.LoadMainWindow();
}
else
{
this.Owner.ShowErrorMessage(new Exception(ret.Message));
}
}
public void ClearData()
{
//
}
public void DoLogin()
{
//
}
public bool Focus(string key)
{
return true;
}
public string GetFormTitle()
{
return "***登录窗口";
}
public LoginInfo GetLoginInfo()
{
//演示案例
//var loginInfo=DemoLoginIfo();
//需要密码登录
//var loginInfo = NeedPwdLoginIfo();
//不需要密码登录
var loginInfo = NoNeedPwdLoginIfo();
return loginInfo;
}
/// <summary>
/// 免密登录
/// </summary>
/// <returns></returns>
private LoginInfo NoNeedPwdLoginIfo()
{
var ret = new Kingdee.BOS.Authentication.LoginInfo()
{
ClientInfo = this.GetOwner().GetClientInfo(),
PasswordIsEncrypted = false,
Password = "xxxx",//任意字符串,但不能为空
// 此处是强制使用【简单证书】登陆
AuthenticateType = AuthenticationType.SimplePassportAuthentication,
AcctID = "604f2bb47fd138", //数据中心ID
Username = TxtUserName.Text,
Lcid = 2052,
AppId = "212233_QY3M4ZuFUnp/4+/FT+6O5ZVs0I5ZXKKP", //第三方系统appid
// Timestamp = DateTime.Now.GetTimestamp().ToString(), //时间戳,
Timestamp = DateTimeFormatUtils.CurrentTimeMillis() / 1000,//时间戳,
AppSecret = "cce93638737e4d09b15d9c027cbd2a37",//第三方系统密钥
// 第三方系统登陆授权生成签名数据
SignedData = Kingdee.BOS.Util.SHA1Util.GetSignature(
new string[] { "604f2bb47fd138", TxtUserName.Text, "212233_QY3M4ZuFUnp/4+/FT+6O5ZVs0I5ZXKKP",
"cce93638737e4d09b15d9c027cbd2a37", (DateTimeFormatUtils.CurrentTimeMillis() / 1000).ToString() })
};
Kingdee.BOS.Client.Core.ClientAppProxy.Current.StartAppVerifyCustomArgs =
"{dbid:'" + ret.AcctID + "',username:'" + ret.Username + "',appid:'" + ret.AppId + "',signeddata:'" + ret.SignedData + "',timestamp:'" + ret.Timestamp + "',lcid:'2052',usertoken:'',formid:'',pkid:'',formtype:'',otherargs:'',origintype:'SimPas',entryrole:''}";
return ret;
}
/// <summary>
/// 需要密码登录
/// </summary>
/// <returns></returns>
private LoginInfo NeedPwdLoginIfo()
{
var sDCName = TxtDataCenter.Text;
var proxy = new AccountClientProxy();
var dt = DateTime.Now;
var dclist = proxy.GetDataCenterList();
var dcItem = dclist.Find(new Predicate<DataCenter>((dc) =>
{
return dc.Name.Equals(sDCName);
}));
this.currentDataCenter = new ItemModel()
{
ID = dcItem.Id,
Header = dcItem.Name
};
string userName = this.TxtUserName.Text.Trim();
string userPwd = this.TxtPassword.Text.Trim();
int lcid = 2052;
string acctID = this.currentDataCenter.ID;
var loginInfo = new LoginInfo()
{
Username = userName,
Password = userPwd,
AcctID = acctID,
Lcid = lcid,
AuthenticateType = AuthenticationType.PwdAuthentication,
ClientInfo = this.GetOwner().GetClientInfo()
};
return loginInfo;
}
/// <summary>
/// 演示案例
/// </summary>
private LoginInfo DemoLoginIfo()
{
var ret = new LoginInfo();
ret.LoginType = LoginType.NormalERPLogin;
ret.AuthenticateType = AuthenticationType.PwdAuthentication;
ret.Username = TxtUserName.Text;
ret.Password = TxtPassword.Text;
ret.Lcid = 2052;
ret.AcctID = "xxxxx";
return ret;
}
public IKDLoginControlOwner GetOwner()
{
return this.Owner;
}
public KDSize GetUISize()
{
return new KDSize();
}
public bool IsDataLoaded()
{
return true;
}
public void LoadLocalSettings()
{
//
}
public IKDLoginControl NewInstance()
{
return new ZQWLoginV1();
}
public void Release()
{
//
}
public void SaveLoginSettings()
{
//throw new NotImplementedException();
}
public void SetOwner(IKDLoginControlOwner owner)
{
this.Owner = owner;
}
public void SetProgressTips(string tips)
{
//throw new NotImplementedException();
}
public void UpdateGobalLocalId(string localId)
{
//throw new NotImplementedException();
}
}
}
第五步:制作二开组件(
1:编译生成.dll文件)
2:将生成的dll文件压缩ZIP文件,后修改文件后缀
例如:ZQWCustomLoginUI.ZIP->ZQWCustomLoginUI.dll.kdz
3:将修改后文件放入D:\Program Files (x86)\Kingdee\K3Cloud\WebSite\ClientBin\CustomControl\WPF目录下
第六步:修改配置文件
1:修改MainDownloadList.xml文件,手工拷贝一个节点(一个文件需要一个节点进行注册如下图)。然后修改文件名为你的组件名就好了。
2:修改MainDownload.xml,修改版本信息为当前时间(与上一步修改MainDownloadList.xml文件中VersionInfo保持一致),不然加载不到二开组件
3:修改Common.config文件,找到Appsettings节点,在该节点子节点中加入如下新节点,保存即启动插件成功:
<!--定制化登录界面-->
<!--<add key="CustomLoginUI" value="ZQWpfControlLibraryLogin.UserControl1,ZQWpfControlLibraryLogin"/>-->
<add key="CustomLoginUI" value="ZQWCustomLoginUI.ZQWLoginV1,ZQWCustomLoginUI"/>
<!--当定制化登录界面构建失败时,允许使用默认的登录界面代替-->
<add key="AllowCustomUseDefLoginUI" value="true"/>
特别注意:(千万不要修改上面的key属性,固定必须是“CustomLoginUI",value可以替换为你自己开发的控件组件,例如“LoginTest.LoginUI,LoginTest”,通用的DotNet类描述格式)
第七步:点击客户端,启动客户端即可观看如下效果
可以用这个搞个扫码登入的。
【emoji】
【emoji】
【emoji】
【emoji】
定制GUI客户端登录demo
本文2024-09-16 18:40:05发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23631.html