验证BizTalk管道组件中的PropertyBag值

时间:2017-05-10 16:05:15

标签: biztalk biztalk-pipelines

Microsoft在BizTalk管道界面中提供了如下所示的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; 
    }

此文档https://msdn.microsoft.com/en-us/library/microsoft.biztalk.component.interop.icomponentui.validate.aspx?f=255&MSPPError=-2147217396

  

“这些错误消息显示为编译器错误消息。要报告   成功的属性验证,该方法应返回一个空   枚举。 “

但是当我输入无效值时,我没有得到任何编译器消息。此外,它不会在BTS-Admin中进行验证,它不会有“编译器消息”???

此外,为什么Validate会将通用对象作为parm而不是强类型parm?什么时候被称为?每次更改propertyBag值?

更新时间:2017年5月11日上午11:55 CT

我尝试了几件事,其中两件很难在这里列出。 我终于得到了一个错误,但在VS编译错误中不是一个非常有用的错误,请参见下面的屏幕截图。这肯定不是我回来的错误。也许这在VS2015上存在问题。

enter image description here

我遇到了修复数据的问题,但仍然出现错误。由于Pipeline Componenet是GAC,我每次关闭并重新打开Visual Studio以确保它获得新副本。

我在想,也许返回null以外的任何东西都是问题所在。 总之,如果它在BTS-ADMIN中不起作用,我发现这实际上没用。所以我只会做运行时错误。也许这就是为什么有这么少的文档和关于这个主题的文章/博客很少。

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; 
    }
}

2 个答案:

答案 0 :(得分:2)

此验证方法仅在管道设计模式下调用。它不会在BTS Admin中调用。如果您在“代码”中设置了一些无效值。这个方法也没有被调用。

答案 1 :(得分:0)

来自MSDN

的相同答案

[从记忆中,但我确信这是它的工作原理......]

Visual Studio在构建时调用Validate,也许在每次Property赋值后调用。

如果返回非0集合并且设计图面上的组件将具有红色轮廓,则不会构建项目。

IIRC,您只需直接验证属性值即可。已经调用了IPropertyBag.Write,你应该设置属性。

基本上,if(MyComponent.MySpecialValue!=“B”){ErrorStringArray.Add(“哦不!”); }