這篇文章是以SSIS-如何接收web services的資料當做資料來源做轉檔這篇文章為基礎來說,所以本篇看不懂的,可以先看一下該篇文章 web services設定的部份,本篇文章就不再重覆說明
至於為什麼要做本篇文章呢!因為SSIS-如何接收web services的資料當做資料來源做轉檔這篇文章是直接在”指令碼元件”中設定,算是比較進階的部份,且不好除錯,因此先用”指令碼工作”做驗証資料抓下來對不對,有沒有問題!
先確認單純執行該web services的元件是成功的!
如下圖
接著從工具列拉出一個”指令碼工作”的元件
在”指令碼工作”中接滑鼠右鍵選編輯,圖中紅框的部份,請輸入接收你web services的object變數(我這裡自己定義的變數名稱為rs)
接下來,點”編輯指令碼”,在main()中輸入如下程式碼
'宣告一個xml物件
Dim xmldoc As New Xml.XmlDataDocument
'宣告一個MemoryStream接收web servies的資料變數,我是定義為rs
Dim strm As New System.IO.MemoryStream(Text.UnicodeEncoding.Unicode.GetBytes(Dts.Variables("rs").Value.ToString()))
'讀取stream的資料到dtaset
xmldoc.DataSet.ReadXml(strm)
'執行中秀出msgbox顯示資料表的第1列的第1欄資料--正式時執行後,要mark掉,不然的一個彈msgbox
MsgBox(xmldoc.DataSet.Tables(0).Rows(0)(0).ToString)
'執行中秀出總共抓出共筆--正式時執行後,要mark掉,不然的一個彈msgbox
MsgBox(xmldoc.DataSet.Tables(0).Rows.Count)
接下來關閉這個編輯視窗,回到控制流程,執行看看,以下為執行結果,可以看到的我目前指令碼工作還在執行中,並且秀出一個msgbox出來
第二個msgbox秀出你的web serices共回傳幾筆給你
這樣你就可以知道你抓web services的資料是否是正確的
如果到這邊都沒有問題才能繼續進行SSIS-如何接收web services的資料當做資料來源做轉檔這篇文章的部份
這樣,客倌您看的懂嗎?
若有問題可以給我迴響,大家來討論看看囉!

先謝謝您不厭其煩的回答我的問題 所以說你現在是卡在"找不到資料表0" 這個地方嗎? ---是的。但我照了您這篇文章的方法去試,還是出現了"找不到資料表0"這個問題。 不然就是請你給我看一下你目前是怎麼做的畫面擷圖 ---我已寄信到您指定的信箱了,麻煩您了。 你們公司只有你在用ssis嗎? ---是的。 謝謝
ok,我有空再看一下
我測出來為什麼會出現找不到資料表0的錯誤訊息了,因為web services所回傳的資料是string型態。所以得到的xml就變成以下的樣子:
所以就使得xml變成非關聯式資料庫記錄的格式,以致於無法去使用DataSet類別的ReadXml方法進行讀取,因此才找不到資料表。
但我目前還在找解決辦法。
謝謝
回傳是字串?那你可以將web services另copy成傳回為dataset的嗎?這樣你會比較方便做吧,至少你在資料處理上後續會比較快 還可以可以讓我看一下你們web servies那裡的code是怎麼寫的呢? 讓我可以模擬一下..,如果方便的話,煩請寄mail給我,謝謝嘍
*****
給"嘉" 恭禧您成功做出來了 努力還是有結果的... 看你成功,我也很高興
嗨板主大 感謝您的訊息 我也是最近在試SSIS弄得頭暈腦脹的= = 我這邊的需求是將資料庫的檔案組成階層式的xml 傳出給對方後 對方利用webservice回傳是否成功的訊息 想請問您不知道有沒有試過這樣的一整個流程? create .xml的部分我這邊是ok的 但就卡在不知如何在create一個xml檔案後 去call對方的webservice並把此檔案傳過去?
小毛,你好 嗯..我不太懂你的意思耶? 你是說你要建立一個xml檔,然後要用呼叫web serices的方式,把檔案傳過去? 還是是別的意思? 你如果是要傳檔案的方式,你可以在ssis中呼叫mail來夾檔,或在ssis中用ftp的方式都可以傳過去,這樣你不是比較方便嗎?
您好 是的 我已經用資料流程+程式碼元件 組好了一個.xml 要把這個檔案的內容透過Call對方的WebService的方式來傳送 並接收它的FeedBack值 流程類似Biztalk 因為對方要求的process 所以沒辦法用mail的方式來做哩 :( 好不容易把階層的xml組好了 這兩天一直試就是不知道該怎麼利用這個檔案內容 去call對方的web service呢.. p.s 參考您的方法設定Web服務元件 連線是成功的
小毛你好 請問一下,你組好的xml是已經產生一個實體檔案放在本機的磁碟下 然後是要呼叫對方的web services的傳送? 另外你說到,利用這個檔案的內容,呼叫web serices,這樣看實在是不了解你的意思? 可否看一下你是怎麼設計你的ssis的,我是指目前,有畫面可以看一下嗎? 如果方便的話,請寄到yangxinde@gmail.com
您好 是產生實體檔案沒錯 目前是在我的本機 我是要做B2B的EDI所以利用到這個process 簡單來說就是 撈DB資料->組成xml格式->存成.xml (已完成) Call對方的Web Service->傳送.xml的內容-> 對方的WebService Feedback->success or fail -> 將回傳的訊息存回DB 大概就是這樣 只是實在不知道怎麼把.xml的內容透過WebService傳送並接收FeedBack..Orz
那再問一下 因為你說call對方的web serices 那input什麼呢?string嗎? 那你有用過Biztalk嗎?有些事ssis可能沒辦法做到哦 用b2b還是用Biztalk做會比較適合 兩者所應用的地方各有不同 所以也無法取代對方 ssis主要是做資料的轉換,整理,快速大量的複製資料 但b2b的功能上,它並沒有Biztalk那麼強的功能 所以你如果硬要用ssis來做,應該是很難做 建議換個方向,Biztalk試看看
您好 沒錯的 是input一長串的string 也就是.xml裡的所有文字組成一個string丟過去 他們會自己去判斷內容是否被接受 之前A客戶有用過Biztalk 但B客戶因為business process的關係 他們不打算用Biztalk 所以才要使用這樣的方式 唉~ 不然用biztalk方便很多說 Orz
小毛你好 那請問一下 你要呼叫對方的web services,但是input的參數是一段組好的xml字串?是這個意思嗎? 那你目前是在資料流程中的指令碼元件中組好了這段文字,放在ssis中的一個變數了嗎? 如果是這樣的話,那倒是還可以用ssis做 只是不解的是? 你是每次執行只會呼叫一次web serices嗎? 還是多次?
板大您好~ 是的~是您說的那樣沒錯~ 不過我目前是在思考要用變數字串 還是用Xml來源元件 去傳送我的資料較好 呼叫時是call by loop 一次撈出n筆 一筆資料就call一次並接收一次feedback
小毛你好 請問一下 目前你一開始是怎麼組xml,你的資料來源是db嗎?是多筆嗎? 然後使用指令碼元件,去組xml字串後我建議是放在資料目的地為-"資料錄集目的地" 這樣就可以在"控制流程中使用loop的方式? 你覺得如何?
板大您好 是的 資料來源是db 且利用階層觀念 ex: Table A與B為header/line的關係 xml內容為 1筆A+多筆B = 一個字串 感謝您的建議 但如何使用loop的方式我這邊還沒有實際去try 因為卡在不知如何呼叫WebService 想要先測一筆能不能work都沒有辦法.Q_Q
小毛你好 確定是這樣的話,我就可以做一個範例,不過我是假設傳一段文字進去 等我一下
板主大您好 太感謝了 這幾天想的都快炸了呢..(暈)
小毛 請問一下 對方werb servies回覆的結果會是字串 還是dataset?
板主大您好 對方回應一樣是一串xml格式的string~ 謝謝您
哈囉!可否請你提供一下他回應的xml格式的string? 你有嗎?
嗨板主大 大致的內容如下: -
XX
XX
XX
XX
XX
20090217T090400.315Z
-
2009021310240749
XX
V010101
XX
XX
NEW
20090217T090400.315Z
20090217T090400.315Z
-
Transaction_ID
20090217T090400.315Z
要接收的重點是RefKey與Status兩個 feedback欄位..
嗯..因為我是自己用.net webservices寫一個範例 只回傳一個值 沒有你上面的回傳那麼多 不過應該是小改一下就可以了 等一下我把範例寫到blog你再看看吧 我目前大致上已模擬出你想要的方式了
嗨板主大 太感謝了..第一次用SSIS總覺得用得霧煞煞呀 Orz
好囉! 請參考這篇文章 http://yangxinde.pixnet.net/blog/post/26193794