Microsoft Dynamic GP扩展程序集

时间:2013-04-15 14:57:04

标签: c# dynamics-gp econnect

我已根据MSDN指南Dynamics GP Extension Assembly

创建了一个动态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.config文件条目(进一步解释为Business object configuration file

<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.config,然后重新启动Microsoft Dynamics GP Service Host。然后我创建了一个新客户,创建了该客户的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调用?我错过了(或者我应该说微软)这个难题的一部分吗?

1 个答案:

答案 0 :(得分:0)

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

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

网络上的GP开发仅限于没有(如果我确实找到了由于不同版本的GP而无关紧要的任何内容)...它归结为大量阅读MSDN以将其整合在一起...... GP对于这个特殊情况,论坛也没有帮助。