我正在从“数据流”选项卡中的源中读取数据。
数据通过条件分割
进行订单1 - > ColA =“Y”
订单2 - > ColB =“Y”
如果默认输出条件被命中,既不是ColA也不是ColB =“Y”...那么我想抛出一个异常/错误,以便它命中“Fail Component”块。
答案 0 :(得分:3)
选择毒药并将其连接到默认输出。
快速而肮脏的是附加派生列转换并强制除以零错误。
我的偏好是路由到脚本组件。在脚本组件中,我将行的业务键作为ReadOnly传递。对于我看到的每一行,我都会发出一个警告事件,因此我记录了所有“坏”行。在PostExecute方法中,如果已经向组件发送了任何行,则我会引发OnError事件以强制数据流将错误报告回控制流。这将满足您对控件切换到“失败组件块”的需求,并且您将在日志中配备足够的信息来研究臭鼬数据。
你正在记录,对吗? (答案是肯定的。如果你不是这样的话:D)
以下是查找失败时使用的代码。我的业务键是员工ID和生效日期,因此我将它们添加到ProcessInput方法中的列表中,然后在PostExecute中触发警告/错误。您可以轻松地在ProcessInput方法中引发警告并在其中设置一个标志,以指示PostExecute它需要错误输出。
public class ScriptMain : UserComponent
{
List<KeyValuePair<string, string>> notFound;
public override void PreExecute()
{
base.PreExecute();
notFound = new List<KeyValuePair<string, string>>();
}
public override void PostExecute()
{
base.PostExecute();
foreach (KeyValuePair<string, string> kvp in notFound)
{
string msg = string.Format("Research->{0}:{1}", kvp.Key, kvp.Value);
ComponentMetaData.FireWarning(0, "Unmatched Employees", msg, string.Empty, 0);
}
if (notFound.Count != 0)
{
bool cancel = true;
ComponentMetaData.FireError(0, "SCR Lookup Employee", "Unmatched Employees found. See warning for more context", string.Empty, 0, out cancel);
}
}
/// <param name="Row">The row that is currently passing through the component</param>
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
KeyValuePair<string, string> kvp = new KeyValuePair<string,string>(Row.EmployeeID, string.Format("{0:yyyy-MM-dd}", Row.EffectiveDT));
notFound.Add(kvp);
}
}