2014-01-08 52 views
0

我即將開始爲我的公司實施新版本的電子郵件營銷計劃。程序程序的舊版本很大程度上依賴於微軟,並且有大約2000行爲準備運行的電子郵件活動準備數據。但我有read somewhere宏不是運行如此繁重任務的最佳解決方案,最好是讓它們保持簡單。用於訪問數據對象的宏的替代方案

我對QV很新,我是那種喜歡學習的人,因爲我在去開始一個項目之前沒有完成一本大的參考書。我擅長C#和Java,但我意識到QlikView腳本是VBScript或JScript。我對他們毫無經驗,但乍一看對我來說並不複雜。

我在想什麼是否有更好的方式來處理QlikView中的數據?那意味着我可以使用其他編程語言,還是建議我堅持使用QV提供的腳本語言?因爲我看到的一個大問題是,隨着宏變大,它們變得很難調試。

在我現在離開公司的一位同事開發的舊版本程序中,只要數據準備出錯,我們所得到的只是宏窗口,不知道哪裏出錯已經發生。由於我想逐漸逐步實施這個項目,我希望有一個很好的解決問題的機制,而不是用2000行的腳本來理解問題的來源。

您對於如何將這個項目帶到安全的海岸的建議非常受歡迎。因此,任何優秀的插件或第三方應用程序來監控數據並促進我的實施可以提供幫助。

+0

您能否提供更多信息?也許你可以將加載分割成不同的部分並在QVD文件之間創建。 – smartmeta

+0

@smartmeta E.g.我想將列表框中的當前數據存入我的程序,而不是讓宏爲我做這件事。 – Disasterkid

+0

我不明白。請添加一些示例數據和部分加載腳本 – smartmeta

回答

1

我們是一個離羣值。我們使用OCX並以winforms連接到它。

然後,我們有標準的C#代碼與一切debuggable,它使每個人都在這裏非常愉快indead後,使用無盡的時間調試javascripts。

用戶使用QV選擇東西,然後我們在OCX中使用選定的事件,並從QV中提取選定的數據進行後處理,並使用動態SQL更新標記QV數據。

我並不非常推薦這種方法,但它在使用QV進行數據挖掘並處理所選數據時大大增加了我們的開發產出。

下一個項目我們不打算使用OCX。但所有的buisness邏輯和後處理都是通過vbscript宏訪問的COM可見的c#dll。

編輯。更多細節

這是當前設置通過OCX與文檔通信

更改選擇

axQlikMainApp.ActiveDocument.Fields("%UnitID").Clear(); 
var selSuccess = axQlikMainApp.ActiveDocument.Fields(cls.QlikView.QvEvalStr.Fields.UnitId).Select("(%UnitID)"); 

重置表對象

axQlikMainApp.ActiveDocument.ClearCache(); 
axQlikMainApp.ActiveDocument.GetSheetObject("Document\\MySheetObjectName").Restore(); 

從QV

得到一個字符串
string res axQlikMainApp.ActiveDocument.Evaluate("=concat(Distinct myField1 &'|' & MyField2,'*')"); 

並且可能會變得非常複雜

string res axQlikMainApp.ActiveDocument.Evaluate("=MaxString({1 <%UnitID= {" + sUnitIds + @"}>}'<b>' & UnitName & '</b> \r\n bla bla bla:' & UnitNotesPlanning) & " + 
"'\n title1: ' & Count({1 <%UnitID= {" + sUnitIds [email protected]"},%ISODate={'" + qlickViewIsoDate + "'},Need = {'Ja'}" + MinusCalc + ">}Distinct %CivicRegNo) & " + 
"'\n Title2: ' & Count({1 <%UnitID= {" + sUnitIds + @"},%ISODate={'" + qlickViewIsoDate + "'} " + recallMinusCalc + ">}DISTINCT RevGUID) & " + 
"'\n Title3: ' & Count({1 <%UnitID= {" + sUnitIds + @"},%ISODate={'" + qlickViewIsoDate + "'},Need2 = {'Ja'}>}Distinct %CivicRegNo) & '" + 
"\n Title4:'  & MinString({1 <%UnitID= {" + sUnitIds + @"},FutureBooking = {1}>} Date(BookingStart) & ' Beh: ' & If(IsNull(ResourceDisplayedName),'_',ResourceDisplayedName)) &'" + 
"\n Title5:' & MaxString({1 <%UnitID= {" + sUnitIds + @"},FutureBooking = {0}>} Date(BookingStart) & ' Beh: ' & If(IsNull(ResourceDisplayedName),'_',ResourceDisplayedName)) &''" + 
" & MaxString({1 <%UnitID= {" + sUnitIds + @"}>}if(UnitGeo_isRelocatedOnSameGeo=1,'\nOBS! Multiple geo addresses. Zoom!',''))" + 
"" 
); 
+0

請您詳細說明一下。這是否意味着你有一個dll可以從你調用QlikView所需的函數。假設您需要將表格對象轉換爲文本並將該文本文件保存在某處。你如何告訴QV從DLL文件中調用特定的函數?如果你能通過一個屏幕截圖或兩個屏幕截圖來顯示我是如何完成的,那就太好了。或者帶上你的一個功能的小例子。我不希望我的程序依賴於VBScript。所以你有這樣的工作解決方案是很好的。你能告訴我更多一點嗎? – Disasterkid

+1

添加了一些細節。代碼是winform中的c#,它帶有一個名爲axQlikMainApp的ocx – Archlight

+0

因此,您擁有的是DLL文件,它位於QV文件以外的某個位置,並且在DV文件上觸發任何事件時,此文件會通知並執行所需的操作? – Disasterkid

相關問題