SapApi.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Web;
  5. using System.Configuration;
  6. using SAP.Middleware.Connector;
  7. /// <summary>
  8. /// SapApi xuwei add 2020-07-15
  9. /// </summary>
  10. public class SapApi
  11. {
  12. //SAP服务器配置参数
  13. public static string appServerHost = ConfigurationManager.AppSettings["SapAppServerHost"].ToString();
  14. public static string systemNumber = ConfigurationManager.AppSettings["SapSystemNumber"].ToString();
  15. public static string user = ConfigurationManager.AppSettings["SapUser"].ToString();
  16. public static string password = ConfigurationManager.AppSettings["SapPassword"].ToString();
  17. public static string client = ConfigurationManager.AppSettings["SapClient"].ToString();
  18. /// <summary>
  19. /// 物料主数据接口(同步最小包装数用)
  20. /// </summary>
  21. /// <param name="MBLNR">物料凭证编号</param>
  22. /// <param name="createTime">创建时间</param>
  23. /// <param name="ZTYPE">消息类型: S 成功,E 错误,W 警告,I 信息,A 中断</param>
  24. /// <param name="ZMSG">消息文本</param>
  25. /// <returns></returns>
  26. public static DataTable ZMMFM054(out string ZTYPE, out string ZMSG, string syncType, string MATNR, string MTART)
  27. {
  28. RfcConfigParameters rfcPara = new RfcConfigParameters();
  29. rfcPara.Add(RfcConfigParameters.AppServerHost, appServerHost);
  30. rfcPara.Add(RfcConfigParameters.SystemNumber, systemNumber);
  31. rfcPara.Add(RfcConfigParameters.User, user);
  32. rfcPara.Add(RfcConfigParameters.Password, password);
  33. rfcPara.Add(RfcConfigParameters.Client, client);
  34. rfcPara.Add(RfcConfigParameters.Name, "CON");
  35. rfcPara.Add(RfcConfigParameters.Language, "ZH");
  36. rfcPara.Add(RfcConfigParameters.PoolSize, "5");
  37. rfcPara.Add(RfcConfigParameters.ConnectionIdleTimeout, "60");
  38. RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfcPara);
  39. RfcRepository rfcRep = rfcDest.Repository;
  40. //周期性同步
  41. DateTime dateMinusOneDay = DateTime.Now; ;
  42. //接口API
  43. IRfcFunction rfcApi = rfcRep.CreateFunction("ZMMFM054");
  44. //输入参数
  45. if (syncType == "Manual")
  46. {
  47. //单独获取某物料的主数据信息
  48. //if (!string.IsNullOrEmpty(MATNR))
  49. rfcApi.SetValue("IN_MATNR", MATNR);
  50. //if (!string.IsNullOrEmpty(MTART))
  51. rfcApi.SetValue("IN_MTART", MTART);
  52. rfcApi.SetValue("IN_ALL", "X");
  53. }
  54. else if (syncType == "TimeInterval")
  55. {
  56. //周期性同步
  57. rfcApi.SetValue("IN_ERSDA", dateMinusOneDay.AddDays(-1).ToString("yyyyMMdd"));
  58. }
  59. else
  60. {
  61. //期初全量获取
  62. rfcApi.SetValue("IN_ALL", "X");
  63. }
  64. //rfcApi.SetValue("IN_ERSDA", dateMinusOneDay.ToString("yyyyMMdd"));
  65. rfcApi.SetValue("IN_WERKS", 5200);
  66. //调用接口
  67. rfcApi.Invoke(rfcDest);
  68. //获取输出
  69. ZTYPE = rfcApi.GetValue("ZTYPE").ToString();
  70. ZMSG = rfcApi.GetValue("ZMSG").ToString();
  71. IRfcTable table = rfcApi.GetTable("OUT_TABLE");
  72. DataTable dt = GetDataTableFromRFCTable(table);
  73. rfcDest = null;
  74. rfcRep = null;
  75. return dt;
  76. }
  77. /// <summary>
  78. /// IRfcTable转DataTable
  79. /// </summary>
  80. /// <param name="myrfcTable"></param>
  81. /// <returns></returns>
  82. private static DataTable GetDataTableFromRFCTable(IRfcTable myrfcTable)
  83. {
  84. DataTable loTable = new DataTable();
  85. int liElement = 0;
  86. for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
  87. {
  88. RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
  89. loTable.Columns.Add(metadata.Name);
  90. }
  91. foreach (IRfcStructure Row in myrfcTable)
  92. {
  93. DataRow ldr = loTable.NewRow();
  94. for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
  95. {
  96. RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
  97. ldr[metadata.Name] = Row.GetString(metadata.Name);
  98. }
  99. loTable.Rows.Add(ldr);
  100. }
  101. return loTable;
  102. }
  103. }