改代码以C#调用物料查询为演示
备注:该查询必须安装金蝶k3客户端,并且调用前一片博客中所表述的登录方法.如果没有调用,在第一次执行查询的时候会自动调用登录界面.这个里面应该是有一个全局的session的机制.
try {
实现的代码合并后为:
try
{
Type t = System.Type.GetTypeFromProgID("K3Login.ClsLogin");
if (t == null)
{
MessageBox.Show("加载金蝶登录器失败,需要安装金蝶客户端.", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
object loginer = Activator.CreateInstance(t);
if (loginer == null)
{
return;
}
object o = t.InvokeMember("CheckLogin", BindingFlags.Default | BindingFlags.InvokeMethod, null, loginer, null);
if (Convert.ToBoolean(o))
{
try
{
Type tt = System.Type.GetTypeFromProgID("EBCGLView.GLView");
if (tt == null)
{
MessageBox.Show("未安装客户端,系统无法继续!");
return;
}
object login = Activator.CreateInstance(tt);
if (login == null)
{
return;
}
object[] obj = new object[] { 4 };
object oo = t.InvokeMember("ItemLookup", BindingFlags.Default | BindingFlags.InvokeMethod, null, login, obj) as object;
Object ret = oo.GetType().InvokeMember("ReturnObject", BindingFlags.GetProperty, null, oo, null) as object;
if (ret == null)
{
return;
}
this.txtName.Text = ret.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, ret, null).ToString();
this.txtItemID.Text = ret.GetType().InvokeMember("itemid", BindingFlags.GetProperty, null, ret, null).ToString();
this.txtNumber.Text = ret.GetType().InvokeMember("Number", BindingFlags.GetProperty, null, ret, null).ToString();
}
catch
{
}
}
else
{
MessageBox.Show("NO");
}
//MessageBox.Show(t.InvokeMember("PropsString", BindingFlags.GetProperty, null, loginer, null).ToString());
}
catch
{
}