验证 BizTalk 管道组件中的 PropertyBag 值
Validating PropertyBag values in BizTalk Pipeline Component
Microsoft 在BizTalk Pipeline 接口中提供了如下所示的Validate 组件。
这是我尝试过的方法,但似乎根本不起作用:
public System.Collections.IEnumerator Validate(object projectSystem)
{
System.Collections.ArrayList errorStringArrayList = new System.Collections.ArrayList();
if (this.Substring1ColumnStart >= this.Substring1ColumnEnd)
{
errorStringArrayList.Add("Substring1ColumnEnd must be > SubstringColumn1Start");
}
return (System.Collections.IEnumerator) errorStringArrayList;
}
说
"These error messages appear as compiler error messages. To report
successful property validation, the method should return an empty
enumerator. "
。
但是当我输入无效值时,我没有收到任何编译器消息。另外,在没有"compiler messages"的BTS-Admin中,它不会也进行验证吗???
此外,为什么 Validate 接收泛型对象作为参数而不是强类型参数?什么时候调用验证?每次更改 propertyBag 值时?
更新于 2017 年 5 月 11 日 11:55 AM CT
我尝试了更多的东西,其中有两个很难在这里一一列出。
我终于得到了一个错误,但在 VS 编译错误中不是一个非常有用的错误,请参见下面的屏幕截图。绝对不是我返回的错误。也许这在 VS2015 上有问题。
我也遇到了修复数据的问题,但仍然出现错误。由于 Pipeline Componenet 是 GAC'ed,我每次都关闭并重新打开 Visual Studio 以确保它获得新副本。
我在想,也许返回 null 以外的任何东西都是问题所在。
总之,如果它在 BTS-ADMIN 中不起作用,我发现它几乎没有用。所以我只会做 运行-time 错误。也许这就是为什么关于这个主题的文档很少而且 articles/blogs 很少的原因。
public System.Collections.IEnumerator Validate(object projectSystem)
{
System.Collections.ArrayList errorStringArrayList = new System.Collections.ArrayList();
if (this.Substring1ColumnStart >= this.Substring1ColumnEnd)
{
errorStringArrayList.Add("Substring1ColumnEnd must be > SubstringColumn1Start");
}
if (errorStringArrayList.Count > 0)
{
return (System.Collections.IEnumerator)errorStringArrayList;
}
else
{
return null;
}
}
此验证方法仅在流水线设计模式下调用。它不会在 BTS Admin 中调用。如果您在 "code" 中设置了一些无效值。这个方法也没有被调用。
来自MSDN
的相同答案
[凭记忆,但我 93% 确定它是这样工作的...]
Validate 在构建时由 Visual Studio 调用,可能在每次 属性 赋值后调用。
如果返回非 0 集合,项目将不会生成,并且设计图面上的组件将具有红色轮廓。
IIRC,您只需根据需要直接验证 属性 值。 IPropertyBag.Write 已经被调用,您应该在那里编写代码来设置属性。
基本上,if(MyComponent.MySpecialValue != "B") { ErrorStringArray.Add("Oh no!"); }
Microsoft 在BizTalk Pipeline 接口中提供了如下所示的Validate 组件。
这是我尝试过的方法,但似乎根本不起作用:
public System.Collections.IEnumerator Validate(object projectSystem)
{
System.Collections.ArrayList errorStringArrayList = new System.Collections.ArrayList();
if (this.Substring1ColumnStart >= this.Substring1ColumnEnd)
{
errorStringArrayList.Add("Substring1ColumnEnd must be > SubstringColumn1Start");
}
return (System.Collections.IEnumerator) errorStringArrayList;
}
说
"These error messages appear as compiler error messages. To report successful property validation, the method should return an empty enumerator. "
。
但是当我输入无效值时,我没有收到任何编译器消息。另外,在没有"compiler messages"的BTS-Admin中,它不会也进行验证吗???
此外,为什么 Validate 接收泛型对象作为参数而不是强类型参数?什么时候调用验证?每次更改 propertyBag 值时?
更新于 2017 年 5 月 11 日 11:55 AM CT
我尝试了更多的东西,其中有两个很难在这里一一列出。 我终于得到了一个错误,但在 VS 编译错误中不是一个非常有用的错误,请参见下面的屏幕截图。绝对不是我返回的错误。也许这在 VS2015 上有问题。
我也遇到了修复数据的问题,但仍然出现错误。由于 Pipeline Componenet 是 GAC'ed,我每次都关闭并重新打开 Visual Studio 以确保它获得新副本。
我在想,也许返回 null 以外的任何东西都是问题所在。 总之,如果它在 BTS-ADMIN 中不起作用,我发现它几乎没有用。所以我只会做 运行-time 错误。也许这就是为什么关于这个主题的文档很少而且 articles/blogs 很少的原因。
public System.Collections.IEnumerator Validate(object projectSystem)
{
System.Collections.ArrayList errorStringArrayList = new System.Collections.ArrayList();
if (this.Substring1ColumnStart >= this.Substring1ColumnEnd)
{
errorStringArrayList.Add("Substring1ColumnEnd must be > SubstringColumn1Start");
}
if (errorStringArrayList.Count > 0)
{
return (System.Collections.IEnumerator)errorStringArrayList;
}
else
{
return null;
}
}
此验证方法仅在流水线设计模式下调用。它不会在 BTS Admin 中调用。如果您在 "code" 中设置了一些无效值。这个方法也没有被调用。
来自MSDN
的相同答案[凭记忆,但我 93% 确定它是这样工作的...]
Validate 在构建时由 Visual Studio 调用,可能在每次 属性 赋值后调用。
如果返回非 0 集合,项目将不会生成,并且设计图面上的组件将具有红色轮廓。
IIRC,您只需根据需要直接验证 属性 值。 IPropertyBag.Write 已经被调用,您应该在那里编写代码来设置属性。
基本上,if(MyComponent.MySpecialValue != "B") { ErrorStringArray.Add("Oh no!"); }