【问题标题】:Validating PropertyBag values in BizTalk Pipeline Component验证 BizTalk 管道组件中的 PropertyBag 值
【发布时间】:2017-05-10 16:05:15
【问题描述】:

Microsoft 在 BizTalk Pipeline 界面中提供如下所示的验证组件。

这是我尝试过的,但似乎根本不起作用:

    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 接收一个泛型对象作为参数而不是强类型参数?什么时候调用验证?每次更改 propertyBag 值时?

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

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

我还遇到了一个问题,我修复了我的数据,但仍然出现错误。由于 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; 
    }
}

【问题讨论】:

标签: biztalk biztalk-pipelines


【解决方案1】:

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

【讨论】:

  • 谢谢,那么有没有在 BTSAdmin 中进行验证?其他方法,还是不可能?
  • 当我放置
  • 不确定您的代码是如何实现的,但这是验证方法如何工作的示例:在您的项目中,如果您创建了一个发送管道,请将一个 XML 组装器拖到其组装阶段。然后假设在其“添加 PI 文本”属性字段中,您输入了一些无效文本,例如“”。当您尝试编译时,您将收到如下错误:error BTP0007: Component 'XML assembler' 属性验证失败。处理指令文本属性必须符合 XML 标准。
  • 这没有发生,我的代码在上面;这就是为什么我在这里发布这个问题。但如果它在 BTS-Admin 中不起作用,那么我认为不值得花更多时间在上面。我会很遗憾地出现运行时错误。
【解决方案2】:

来自MSDN的相同答案

[凭记忆,但我有 93% 的把握这就是它的工作原理……]

验证由 Visual Studio 在构建时调用,可能在每次属性分配之后调用。

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

IIRC,您只需根据需要直接验证属性值。 IPropertyBag.Write 已经被调用,你的代码应该已经设置了属性。

基本上, if(MyComponent.MySpecialValue != "B") { ErrorStringArray.Add("Oh no!"); }

【讨论】:

  • 正如我在 MSDN 上报告的那样,它不起作用。以上是我尝试过的实际代码,所以这个响应确实有帮助。
  • @NealWalters 我不明白投反对票的原因。我刚刚测试过,我的答案是 100% 正确的,ArrayList 的内容算作构建错误。所以,我不会再打扰你了。道歉。
  • 也许如果您发布整个验证例程;就像我说的,它对我不起作用。我最初使用我测试的确切代码发布了完整的例程。然而,最重要的是,如果这个验证在 BTS-ADMIN 中不起作用,Zee 在下面报道,我认为它不值得追求。我真的不在乎它是否适用于 Visual Studio,但不适用于 BTS-Admin。
  • @NealWalters 对不起,我试图帮助你。我保证以后不会干涉。
  • Johns-305 - 请不要那么敏感。我们将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2017-08-15
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多