Microsoft动态GP扩展程序集

本文关键字:程序集 扩展 GP 动态 Microsoft | 更新日期: 2023-09-27 18:09:30

我创建了一个动态GP扩展方法来规范遵循MSDN指南动态GP扩展程序集

下面是我的自定义扩展程序集的代码:

namespace MyGPService
{
  public static class GPExtensions
  {
    public static void OnRecordCreated(object sender, BusinessObjectEventArgs e)
    {
      try
      {      
        Customer customer;
        Extension CustomerEmailExtension = new Extension();
        //get current cust connection
        //connection = Connection.GetInstance();
        if (e.BusinessObject.GetType() == typeof(Customer))
        {
          customer = (Customer)e.BusinessObject;
          // Look at the Extension list passed along
          foreach (Extension ext in customer.Extensions)
          {
            Logger.LogExtention(ext);
          }
        }
        else
        {
          Logger.LogExtentionType(e.GetType().ToString());
        }
      }
      catch (Exception ex)
      {
        Logger.LogException(ex.Message);
      }
    }
  }
}

这段代码包括一些记录机制,记录任何传入的数据到本地驱动器(让我进一步了解在测试期间通过的是什么)。

下面是我的BusinessObjectsFile。配置文件条目(进一步解释)业务对象配置文件

<DictionaryEntry>
 <Key xsi:type="xsd:string">Microsoft.Dynamics.GP.Customer</Key>
    <Value xsi:type="BusinessObjectConfiguration">
            <Event>
                <EventName>Created</EventName>
                <EventHandlerType>
                    <Type>Microsoft.Dynamics.Common.BusinessObjectEventHandler</Type>
                    <Assembly>Microsoft.Dynamics.Common</Assembly>
                </EventHandlerType>
                    EventHandler>
                        <SoftwareVendor>XYZ</SoftwareVendor>
                        <Type>MyGPService.GPExtentions</Type>
                        <StaticMethod>OnRecordCreated</StaticMethod>
                        <Assembly>MyGPExtensionMethods</Assembly>
                        <Execute>true</Execute>
                    </EventHandler>
            </Event>
    </Value>
</DictionaryEntry>

在我配置了适当的更改后(将新的扩展程序集放在C:'Program Files'Microsoft Dynamics'GPWebServices中,配置了BusinessObjectFile。配置,然后重新启动Microsoft Dynamics GP服务主机。然后我创建了一个新客户,为该客户创建了一个PO和SO,但没有记录任何内容??

日志记录方法:

public static void LogException(string error)
{
  try
  {
    string path = Path.Combine(Utilities.SystemDirectory, "GPExtentionMethod''Errors''ExtErrorLog.txt");
    if(!Directory.Exists(Path.GetDirectoryName(path)))
      Directory.CreateDirectory(Path.GetDirectoryName(path));
    if (!File.Exists(path))
    {
      // Create a file to write to. 
      using (StreamWriter sw = File.CreateText(path))
      {
        sw.WriteLine("GP Extention Error Log");
        sw.WriteLine("");
      }
    }
    using (StreamWriter sw = File.AppendText(path))
    {
      sw.WriteLine(Environment.NewLine);
      sw.WriteLine("Error");
      sw.WriteLine(DateTime.Now.ToString() + ": " + error);
    }
  }
  catch { }
}

我已经跟随一切部署,我不知道为什么这个扩展方法从来没有从GP调用?我是否错过了(或者我应该说微软)这个谜题的一部分?

Microsoft动态GP扩展程序集

我假设这个方法会在直接通过Dynamics GP应用程序更改数据后触发,这是错误的。这个方法被击中的唯一方法是通过使用GP Web Services SDK中的方法,显然微软不认为Dynamics GP软件的后端应该有这个伟大的功能……

由于这不符合我们的要求,我最终使用eConnect的传入和传出服务与MSMQ一起工作。现在,我可以通过eConnect的请求者设置工具添加我需要监视的表。最后,我创建了一个小型客户端服务,它监视我的自定义MSMQ路径,并在事务发生时立即从GP获取事务。

GP在网络上的发展是有限的,没有(如果我发现什么是不相关的,由于不同版本的GP)…我从MSDN上读了很多文章才把这些放在一起……GP论坛对这种特殊情况也没有帮助。