PostExecute() Выходной Буфер Foreach Строки
У меня есть следующий код в компонент Script в SSIS.
Я пытаюсь десериализовать вывод JSON и вывести ответ в базу данных.
Часть десериализации возвращает ответ.
Однако я получаю "Ссылка на объект не установлена на экземпляр объекта". ошибка в OutputBuffer.AddRow();
Я хожу по кругу. Что я делаю неправильно?
public class ScriptMain : UserComponent
{
public override void PostExecute()
{
base.PostExecute();
string vOpportunityURL = Variables.pardotopportunityurl;
System.Windows.Forms.MessageBox.Show(vOpportunityURL);
int vMaxOpportunityId = Variables.pardotopportunitymaxid;
System.Windows.Forms.MessageBox.Show(Convert.ToString(vMaxOpportunityId));
int vProcessedRecordCount = Variables.pardotrecordcnt;
System.Windows.Forms.MessageBox.Show(Convert.ToString(vProcessedRecordCount));
var vProcessDate = Variables.pardotprocessdt;
System.Windows.Forms.MessageBox.Show(Convert.ToString(vProcessDate));
RootObject oppOutputResponse = GetWebServiceResult(vOpportunityURL);
foreach (Opportunity op in oppOutputResponse.result.opportunity)
{
OpportunityDataBuffer.AddRow();
OpportunityDataBuffer.ID = op.id;
System.Windows.Forms.MessageBox.Show(Convert.ToString(op.id));
OpportunityDataBuffer.Name = op.name;
System.Windows.Forms.MessageBox.Show(Convert.ToString(op.name));
}
}
private RootObject GetWebServiceResult(string vOpportunityURL)
{
// Create API WEeb Service Request
HttpWebRequest opportunityFullDataReq = (HttpWebRequest)WebRequest.Create(vOpportunityURL);
var opportunityDataPostStr = "user_key=";
opportunityDataPostStr += Variables.pardotauthusrkey;
opportunityDataPostStr += "&api_key=";
opportunityDataPostStr += Variables.pardotapikey;
opportunityDataPostStr += "&output=full";
opportunityDataPostStr += "&format=json";
opportunityDataPostStr += "&sort_by=id";
opportunityDataPostStr += "&sort_order=ascending";
opportunityDataPostStr += "&id_greater_than=";
opportunityDataPostStr += Variables.pardotopportunitymaxid;
System.Windows.Forms.MessageBox.Show(Convert.ToString(opportunityDataPostStr));
System.Windows.Forms.MessageBox.Show(vOpportunityURL + Convert.ToString(opportunityDataPostStr));
var opportunityPostStream = Encoding.ASCII.GetBytes(opportunityDataPostStr);
opportunityFullDataReq.Method = "POST";
opportunityFullDataReq.ContentType = "application/x-www-form-urlencoded";
opportunityFullDataReq.ContentLength = opportunityPostStream.Length;
using(var opportunityStream = opportunityFullDataReq.GetRequestStream())
{
opportunityStream.Write(opportunityPostStream, 0, opportunityPostStream.Length);
}
// Capture Web Service Respose
HttpWebResponse opportunityFullDataResponse = (HttpWebResponse)opportunityFullDataReq.GetResponse();
RootObject opportunityWSResponse = null;
Stream opportunityJsonStream = opportunityFullDataResponse.GetResponseStream();
string wsResponseString = null;
using (StreamReader wsResponseReader = new StreamReader(opportunityJsonStream))
{
wsResponseString = wsResponseReader.ReadToEnd();
wsResponseReader.Close();
}
JavaScriptSerializer wsResponseJson = new JavaScriptSerializer();
//var serialJsonResponseString = wsResponseJson.Serialize(wsResponseString);
System.Windows.Forms.MessageBox.Show(wsResponseString.ToString());
opportunityWSResponse = wsResponseJson.Deserialize<RootObject>(wsResponseString);
return opportunityWSResponse;
}
1 ответ
Буфер вывода не существует в PostExecute.
Вы можете проверить, прошла ли последняя строка или вы прошли через буфер, прежде чем вызывать метод для добавления вещей в буфер.
Аналогичная проблема здесь: могу ли я добавить строки в выходной буфер в компоненте сценария SSIS в PostExecute?