2017-05-10 73 views
1

Microsoft在BizTalk管道界面中提供瞭如下所示的驗證組件。驗證BizTalk管道組件中的PropertyBag值

這裏是我試過了,似乎並沒有在所有的工作:

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

我已經在MSDN上回答了這個問題:https://social.msdn.microsoft.com/Forums/en-US/05cdf0ec-6e66-41c1-9faf-8f4ef6bb67f6/how-to-validate-value-in- the-propertybagbag-from-a-pipeline-component?forum = biztalkgeneral –

回答

2

該驗證方法僅稱爲管道的設計模式。它不會在BTS Admin中調用。如果你在你的「代碼」中設置了一些無效的值。這個方法也沒有調用。

+0

謝謝,那麼無論如何都要在BTSAdmin中進行驗證?其他一些方法,或只是不可能? – NealWalters

+0

爲什麼當我把一個columnEnd放在 NealWalters

+0

不確定您的代碼是如何實現的,但這是Validate方法工作原理的示例: 在您的項目中,如果您創建sendpipeline,請將XML彙編程序拖到其彙編階段。 然後讓我們在其「添加PI文本」屬性字段中輸入一些無效文本,如「<>」。 當你嘗試編譯時,你會得到這樣的錯誤: 錯誤BTP0007:組件'XML assembler'屬性驗證失敗。處理指令文本屬性必須符合XML標準。 – Zee

0
MSDN

相同的答案[從記憶,但我93%肯定這是它是如何工作...]

驗證是由Visual Studio在構建時,也許每個屬性之後調用分配。

如果返回非0集合並且設計圖面上的組件將具有紅色輪廓,則該項目不會生成。

IIRC,您只需直接驗證屬性值即可。 IPropertyBag.Write已經被調用,你在那裏的代碼應該已經設置了屬性。基本上,如果(MyComponent.MySpecialValue!=「B」){ErrorStringArray.Add(「哦不!」); }

+0

正如我在MSDN上報道的那樣,它沒有奏效。上面是我嘗試的實際代碼,所以這個響應確實有幫助。 – NealWalters

+0

@NealWalters我不明白downvote的原因。我剛剛測試過,並且我的答案100%正確,ArrayList的內容計爲Build Errors。所以,我不會再打擾你了。道歉。 –

+0

也許如果你發佈你的整個驗證程序;就像我說的那樣,它對我來說不起作用。我原來用我測試的確切代碼發佈了完整的例程。 然而,底線,如果這種驗證不適用於BTS-ADMIN,Zee在下面報道,我認爲這是不值得追求的。我真的不在乎它是否在Visual Studio中工作,但不是BTS-Admin。 – NealWalters