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调用?我是否错过了(或者我应该说微软)这个谜题的一部分?
我假设这个方法会在直接通过Dynamics GP应用程序更改数据后触发,这是错误的。这个方法被击中的唯一方法是通过使用GP Web Services SDK中的方法,显然微软不认为Dynamics GP软件的后端应该有这个伟大的功能……
由于这不符合我们的要求,我最终使用eConnect的传入和传出服务与MSMQ一起工作。现在,我可以通过eConnect的请求者设置工具添加我需要监视的表。最后,我创建了一个小型客户端服务,它监视我的自定义MSMQ路径,并在事务发生时立即从GP获取事务。
GP在网络上的发展是有限的,没有(如果我发现什么是不相关的,由于不同版本的GP)…我从MSDN上读了很多文章才把这些放在一起……GP论坛对这种特殊情况也没有帮助。