非常奇怪的错误。我在SSIS中有两个独立工作的源C#脚本。基本上他们会从外部CRM源获取信息。
当它们都在同一个脚本中启用时,在执行的第一个脚本上我得到:
对象引用未设置为对象的实例
这有效
这不是 - 它冻结在第一个脚本上。
我认为它可能是一个缓冲区问题,但在抛出错误之前它仍然会完成第一个脚本。这两个脚本都有唯一的ID和guid。
调试没用,它停止在我编程的任何代码上停止。我很难过。
这是ScriptThree.CreateNewOutputRows() - 需要注意的是,scriptthree是第二个数据流任务的一部分。
public override void CreateNewOutputRows()
{
/*
Add rows by calling the AddRow method on the member variable named "<Output Name>Buffer".
For example, call MyOutputBuffer.AddRow() if your output was named "MyOutput".
*/
QueryExpression query = new QueryExpression("email")
{
ColumnSet = new ColumnSet(new string[] { "subject", "regardingobjectid", "createdon", "directioncode" }),
PageInfo = new PagingInfo()
{
Count = 250,
PageNumber = 1,
ReturnTotalRecordCount = false
}
};
EntityCollection results = null;
do
{
results = organizationservice.RetrieveMultiple(query);
foreach (Entity record in results.Entities)
{
emailBuffer.AddRow();
emailBuffer.emailid = record.Id;
if (record.Contains("subject"))
emailBuffer.subject = record.GetAttributeValue<string>("subject");
if (record.Contains("regardingobjectid"))
emailBuffer.regarding = record.GetAttributeValue<EntityReference>("regardingobjectid").Id;
if (record.Contains("createdon"))
emailBuffer.createdon = record.GetAttributeValue<DateTime>("createdon");
if (record.Contains("directioncode"))
emailBuffer.directioncode = record.GetAttributeValue<bool>("directioncode");
}
query.PageInfo.PageNumber++;
query.PageInfo.PagingCookie = results.PagingCookie;
}
while (results.MoreRecords);
}
答案 0 :(得分:0)
我仍然不知道具体原因是什么,但我将我的脚本复制并粘贴到一个新的脚本对象中,它突然又开始工作了。
答案 1 :(得分:0)
我想,您复制并粘贴了整个脚本组件,然后在第二个脚本组件中修改了代码,因此您有两个具有相同ComponentScriptId的脚本组件。这就是为什么添加一个新问题解决了这个问题。