SQL查询来检索我想要的值,存储在一行中
我正在尝试使用海星ETL从Goldmine 5.5迁移到MCRM 2011 问题在于Goldmine数据库中有一个名为的表,其中我迁移传入电子邮件所需的所有信息都存储在一个名为rfc822(完整标题和正文消息)的行中。即使在其他表中也没有发件人/收件人/etc的行 我在ETL软件中使用此查询作为原点,从原点数据库(Goldmine)获取所需信息,但海星提供的默认地图在我的情况下不起作用SQL查询来检索我想要的值,存储在一行中,sql,migration,dynamics-crm-2011,data-migration,goldmine,Sql,Migration,Dynamics Crm 2011,Data Migration,Goldmine,我正在尝试使用海星ETL从Goldmine 5.5迁移到MCRM 2011 问题在于Goldmine数据库中有一个名为的表,其中我迁移传入电子邮件所需的所有信息都存储在一个名为rfc822(完整标题和正文消息)的行中。即使在其他表中也没有发件人/收件人/etc的行 我在ETL软件中使用此查询作为原点,从原点数据库(Goldmine)获取所需信息,但海星提供的默认地图在我的情况下不起作用 SELECT ch.*, c1.PHONE1, mb.RFC822 FROM CONTHIST ch
SELECT ch.*, c1.PHONE1, mb.RFC822
FROM CONTHIST ch
INNER JOIN CONTACT1 c1
ON ch.ACCOUNTNO=c1.ACCOUNTNO
INNER JOIN MAILBOX mb
ON ch.recid=mb.LINKRECID
WHERE ch.RECTYPE='MI'
之后,我可以映射目标MCRM电子邮件表并添加函数字段(vbscript、C#)
大多数情况下,一旦作业完成,发件人/收件人将恢复为错误的值(例如,“密件抄送”字段中的用户)
我想知道的是:
- 如何提取存储在rfc822行中的CC和BCC字段
- 有HTML和纯文本格式的电子邮件,唯一区别的方法是在这一行中查找。此外,动力学也不以相同的方式存储它
- 如何使用SQL检索发件人和收件人
我有两种选择的一些例子: 比如说, 使用SQLCLR解析HTML的示例 我写了一次来解析GoldMine 9.0的ContHist注释 SQLCLR函数(C#) 用法
select dbo.RemoveHTML(rfc822) from Mailbox
public GoldMineEmails(GoldMineAPI api, DataTable mailbox)
{
foreach (DataRow emailRow in mailbox.Rows)
{
var dict = new Dictionary<string, string>(3);
dict["MboxRecID"] = emailRow["recid"].ToString();
dict["History"] = "1";
try
{
var res = api.ReadMail(dict);
var email = new GoldMineEmail(res["To"], res["Cc"], res["Bcc"], res["Outgoing"])
{
body = res["Body"],
From = res["From"],
subject = res["Subject"],
user = res["User"]
};
this.Add(email);
}
catch
{
throw;
// error logging
}
}
}
使用这种方法,您可以将SQLCLR函数中的正则表达式替换为自己的正则表达式,这将为您解析收件人
以及使用goldmineapi的示例
实际上有相当多的代码,我将提供一些
调用ReadMail GoldMine API函数的С包装函数
public Dictionary<string, string> ReadMail(Dictionary<string, string> NVDictionary)
{
const string failure = "Failure to read email\n";
Int32 res;
Dictionary<string, string> result = null;
IntPtr nvc = import.GMW_NV_Create();
if (nvc == null) throw (new CLGMAPIException(failure + "Unable to create name/value container"));
try
{
foreach (KeyValuePair<string, string> kvp in NVDictionary)
{
import.GMW_NV_SetValue(nvc, kvp.Key, kvp.Value);
}
res = import.GMW_Execute("ReadMail", nvc);
if (res > 0)
{
int count = import.GMW_NV_Count(nvc);
result = new Dictionary<string, string>(count);
IntPtr ptr;
string name;
for (int i = 0; i < count; i++)
{
ptr = import.GMW_NV_GetNameFromIndex(nvc, i);
name = Marshal.PtrToStringAnsi(ptr);
ptr = import.GMW_NV_GetValue(nvc, name, string.Empty);
result[name] = Marshal.PtrToStringAnsi(ptr);
}
}
}
finally
{
import.GMW_NV_Delete(nvc);
}
switch (res)
{
case 0: throw (new CLGMAPIException(failure));
case -1: throw (new CLGMAPIException(failure + "Message is private"));
case -2: throw (new CLGMAPIException(failure + "Message not found, or cannot be loaded"));
case -3: throw (new CLGMAPIException(failure + "Exception"));
default:
break;
}
return result;
}
公共字典ReadMail(字典)
{
const string failure=“读取电子邮件失败\n”;
Int32 res;
字典结果=null;
IntPtr nvc=import.GMW_NV_Create();
if(nvc==null)抛出(新的CLGMAPIException(失败+“无法创建名称/值容器”);
尝试
{
foreach(NVDictionary中的KeyValuePair kvp)
{
import.GMW_NV_SetValue(nvc,kvp.Key,kvp.Value);
}
res=import.GMW_Execute(“ReadMail”,nvc);
如果(分辨率>0)
{
int count=导入.GMW\u NV\u计数(nvc);
结果=新字典(计数);
IntPtr-ptr;
字符串名;
for(int i=0;i
包装器使用情况
select dbo.RemoveHTML(rfc822) from Mailbox
public GoldMineEmails(GoldMineAPI api, DataTable mailbox)
{
foreach (DataRow emailRow in mailbox.Rows)
{
var dict = new Dictionary<string, string>(3);
dict["MboxRecID"] = emailRow["recid"].ToString();
dict["History"] = "1";
try
{
var res = api.ReadMail(dict);
var email = new GoldMineEmail(res["To"], res["Cc"], res["Bcc"], res["Outgoing"])
{
body = res["Body"],
From = res["From"],
subject = res["Subject"],
user = res["User"]
};
this.Add(email);
}
catch
{
throw;
// error logging
}
}
}
公共goldminemail(GoldMineAPI,DataTable邮箱)
{
foreach(mailbox.Rows中的DataRow-emailRow)
{
var dict=新字典(3);
dict[“MboxRecID”]=emailRow[“recid”].ToString();
dict[“History”]=“1”;
尝试
{
var res=api.ReadMail(dict);
var电子邮件=新的Goldmine电子邮件(res[“收件人”]、res[“抄送”]、res[“密件抄送”]、res[“发送”])
{
body=res[“body”],
From=res[“From”],
subject=res[“subject”],
user=res[“user”]
};
添加(电子邮件);
}
抓住
{
投掷;
//错误记录
}
}
}
我希望这有帮助。
请随时与我联系-我可以向您发送源代码示例无人?只是一个博客文章的链接或其他东西,让我知道这是不可能的,让事情复杂化,或者我应该尝试用VB或C#。。。基本答案将非常感谢只有我自己有一个点,从哪里开始。。。谢谢