找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 14351|回复: 26

[其他] U8UAP开发最好的辅助工具!

[复制链接]
发表于 2013-2-13 22:50:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
本帖最后由 cpmodel 于 2013-3-1 19:44 编辑

上次搞错了,应该是用友安装目录U8SOFT里面的EnterprisePortal.exe才对,不过这个程序是用VB写的,无法用Reflector打开,网上的VB反编译工具,不过可以得到EnterprisePortal.exe调用的模块,经过分析,可以肯定位于C:\U8SOFT\Portal文件夹中的USNPASink.dll就是用友ERP的进入点!EnterprisePortal.exe中的VB代码调用了USNPASink.dll中Startup方法,在这个方法中生成了我的用友ERP操作界面!
  1. public bool Startup(IntPtr owner)
  2. {
  3. AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(NPASink.CurrentDomain_UnhandledException);
  4. Application.ThreadException += new ThreadExceptionEventHandler(NPASink.Application_ThreadException);
  5. int hMutex = JOI.EnterInst();
  6. if (hMutex == 0)
  7. {
  8. if (MessageBox.Show(SR.GetString("s.singleinst"), SR.GetString("s.portal"), MessageBoxButtons.YesNo) == DialogResult.No)
  9. {
  10. goto Label_023E;
  11. }
  12. SR.Reset();
  13. ProcessUtils.TerminateProcess("EnterprisePortal");
  14. }
  15. ProcessUtils.TerminateProcess(new string[] { "EnterprisePortal" });
  16. IWin32Window splashWindow = null;
  17. try
  18. {
  19. string str;
  20. try
  21. {
  22. Application.SetCompatibleTextRenderingDefault(false);
  23. }
  24. catch (Exception exception1)
  25. {
  26. DBG.DbgTrace(exception1.ToString(), new object[0]);
  27. }
  28. this.mfa = new EplAdvisor(owner, hMutex);
  29. this.mfa.ApplicationSwitch.Parse(Environment.GetCommandLineArgs());
  30. PortalActionFactory.PortalAdvisor = this.mfa;
  31. DBG.DbgTrace("Begin login...", new object[0]);
  32. if (!PortalActionFactory.login(this.mfa, out str))
  33. {
  34. goto Label_023E;
  35. }
  36. Application.Idle += new EventHandler(this.Application_Idle);
  37. DBG.DbgTrace("login succeeded!", new object[0]);
  38. this.splash = new SplashScreen();
  39. this.splash.ShowSplach(true);
  40. splashWindow = this.splash.SplashWindow;
  41. this.mfa.InitBarAdvisors();
  42. Form mainForm = PlatformUI.CreateMainFrame(this.mfa).Form;
  43. mainForm.Shown += new EventHandler(this.mainForm_Shown);
  44. PortalActionFactory.InitScenarioActions(this.mfa);
  45. this.mfa.FireInitialized();
  46. PortalActionFactory.loginvbcontext(this.mfa.Login);
  47. PortalActionFactory.DisplayDefaultShowScenario(this.mfa);
  48. PortalActionFactory.TaskManagerInit(this.mfa);
  49. if (owner == IntPtr.Zero)
  50. {
  51. Application.Run(mainForm);
  52. }
  53. else
  54. {
  55. WindowWrap wrap = new WindowWrap(owner);
  56. mainForm.Show(wrap);
  57. }
  58. }
  59. catch (DACException exception2)
  60. {
  61. MessageBox.Show(splashWindow, exception2.Message, SR.GetString("s.infoPromptingDialogue"), MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
  62. goto Label_023E;
  63. }
  64. catch (Exception exception4)
  65. {
  66. MessageBox.Show(exception4.ToString(), "UFIDA ERP-U8");
  67. goto Label_023E;
  68. }
  69. return true;
  70. Label_023E:
  71. NativeMethods.PostMessage(owner, 0x10, 0L, 0L);
  72. return false;
  73. }




复制代码
在Startup方面中生成登录界面的代码是;
  1. if (!PortalActionFactory.login(this.mfa, out str))
  2. {
  3. goto Label_023E;
  4. }
复制代码
生成闪屏的代码是:
  1. this.splash = new SplashScreen();
  2. this.splash.ShowSplach(true);
  3. splashWindow = this.splash.SplashWindow
复制代码
this.mfa.InitBarAdvisors(); 这句代码生成了菜单栏,工具栏部分!
--------------------
PortalActionFactory.DisplayDefaultShowScenario(this.mfa);这句代码是重点,它负责生成业务导航视图,也就是左边的树部分,以及右边的消息中心!

在UFSystem数据库有两个表UA_ScenarioView和UA_View中可以找到左边的树业务导航视图是由UFIDA.U8.Portal.Viewers.OutlookNag.NavigationView负责生成的,其中用到Crownwood.DotNetMagic控件库,这个库是在C:\U8SOFT\Portal\DotNetMagic.dll中,自己可以用在VS.Net来编程!!

分析源代码比UAP要简单啊,UAP都包装了。看不懂,还要拿钱买!









------------------------------
那就是Reflector!这是一个.net反编译工具,估计U860以后都是用.net写的吧!学会Reflector的使用后,把用友安装目录U8SOFT里面的Admin.exe文件丢进去,然后在右边树节点Admin.exe右键选择Entry point,就可以看到用友ERP代码开始的地方,大家可以从这里开始看吧,那些源代码很容易看懂的,对你学U8UAP的开发大有帮助!这下面就是U872代码开始的地方,看到 clsLogin是不是觉得很熟悉!
  1. [STAThread]
  2. private static void Main(string[] args)
  3. {
  4. try
  5. {
  6. bool flag = false;
  7. if (!WindowsDispatch.HandleRunningInstance(UFIDA.U8.WorkFlow.ProcessResourceManager.ProcessResourceManager.GetString("U8.WF.Designer.Process.frmmain.00115")))
  8. {
  9. if ((args != null) && (args.Length > 0))
  10. {
  11. StringBuilder builder = new StringBuilder();
  12. foreach (string str in args)
  13. {
  14. builder.Append(str);
  15. builder.Append(" ");
  16. }
  17. try
  18. {
  19. SingleLoginInfo info = new SingleLoginInfo().DeSerializable(builder.ToString());
  20. clsLogin login = new clsLogin();
  21. flag = login.login(info.PSubId, info.UserId, info.Pwd, info.AppServer, info.OperDate, info.DataSource, info.WorkStationSerial);
  22. if (flag)
  23. {
  24. LoginInfo.setLoginInfo(login);
  25. Thread.CurrentThread.CurrentCulture = new CultureInfo(info.LanguageID);
  26. Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
  27. }
  28. }
  29. catch
  30. {
  31. flag = false;
  32. }
  33. }
  34. Application.EnableVisualStyles();
  35. RunApplication(!flag);
  36. }
  37. }
  38. catch (Exception exception)
  39. {
  40. MessageBox.Show(exception.Message);
  41. }
  42. }

复制代码
发表于 2023-6-6 10:01:34 | 显示全部楼层
ry { SingleLoginInfo info = new SingleLoginInfo().DeSerializable(builder.ToString()); clsLogin login = new clsLogin(); flag = login.login(info.PSubId, info.UserId, info.Pwd, info.AppServer, info.OperDate, info.DataSource, info.WorkStationSerial); if (flag) { LoginInfo.setLoginInfo(login); Thread.CurrentThread.CurrentCulture = new CultureInfo(info.LanguageID); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; } } catch { flag = false; } } Application.EnableVisualStyles(); RunApplication(!flag); } } catch (Exception exception) { MessageBox.Show(exception.Message); } }
回复 点赞 拍砖

使用道具 举报

发表于 2015-10-31 11:27:19 | 显示全部楼层
U8API/SaleOrder/SaveU8API/SaleOrder/SaveU8API/SaleOrder/SaveU8API/SaleOrder/SaveU8API/SaleOrder/SaveU8API/SaleOrder/SaveU8API/SaleOrder/Save
回复 点赞 拍砖

使用道具 举报

发表于 2016-7-25 16:38:02 | 显示全部楼层
随便看看随便看看随便看看随便看看随便看看随便看看
回复 点赞 拍砖

使用道具 举报

发表于 2015-10-23 15:52:16 | 显示全部楼层
随便看看随便看看随便看看随便看看随便看看随便看看
回复 点赞 拍砖

使用道具 举报

发表于 2015-10-23 15:50:09 | 显示全部楼层
随便看看随便看看随便看看随便看看随便看看随便看看
回复 点赞 拍砖

使用道具 举报

发表于 2013-2-14 06:40:11 | 显示全部楼层
这个应该是一个工具软件吧?怎么没有附件呀?

点评

网上去搜,这种工具一大把的!!!  详情 回复 发表于 2013-2-14 08:44
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2013-2-14 08:44:28 | 显示全部楼层
回复 点赞 拍砖

使用道具 举报

发表于 2013-2-14 11:06:00 | 显示全部楼层
怎么没有附件呀?
回复 点赞 拍砖

使用道具 举报

发表于 2013-2-14 13:00:26 | 显示全部楼层
谢谢楼主分享,长见识了。
回复 点赞 拍砖

使用道具 举报

发表于 2013-2-14 21:29:31 | 显示全部楼层
.net也能反编译啊,呵呵,这就是源代码了!
回复 点赞 拍砖

使用道具 举报

发表于 2013-2-15 07:57:40 | 显示全部楼层

原来是需要自己到网上搜得!
回复 点赞 拍砖

使用道具 举报

发表于 2013-2-15 09:11:49 | 显示全部楼层
谢谢楼主分享
回复 点赞 拍砖

使用道具 举报

发表于 2013-3-20 22:20:21 | 显示全部楼层
快点啊````迫不及待``
回复 点赞 拍砖

使用道具 举报

发表于 2013-9-6 10:35:40 | 显示全部楼层
不是很明白干什么用的
回复 点赞 拍砖

使用道具 举报

发表于 2013-10-12 16:59:40 | 显示全部楼层
thrthrthdfefefef
回复 点赞 拍砖

使用道具 举报

发表于 2013-10-22 15:07:45 | 显示全部楼层

发布到我的报表中。。
回复 点赞 拍砖

使用道具 举报

发表于 2013-10-22 15:08:49 | 显示全部楼层

发布到我的报表中。。
回复 点赞 拍砖

使用道具 举报

发表于 2015-10-23 15:44:30 | 显示全部楼层
随便看看随便看看随便看看随便看看随便看看随便看看
回复 点赞 拍砖

使用道具 举报

发表于 2015-10-23 15:45:00 | 显示全部楼层
随便看看随便看看随便看看随便看看随便看看随便看看
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-5-4 07:41 , Processed in 0.055743 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表