我即将开始为我的公司实施新版电子邮件营销计划。该程序程序的旧版本在很大程度上取决于微软,并且有大约2000行来准备要运行的电子邮件活动的数据。但我read somewhere认为宏不是运行如此繁重任务的最佳解决方案,而且我们最好将它们保存在简单的事情中。
我对QV很陌生,在我开始一个项目之前,我就是那种喜欢学习的人,并没有完成一本大的参考书。我擅长C#和Java,但我意识到QlikView脚本是VBScript或JScript。我没有任何经验,但乍一看他们看起来并不复杂。
我想知道在QlikView中是否有更好的处理数据的方法?这意味着我可以使用其他编程语言,还是建议我坚持使用QV提供的脚本语言?因为我看到的一个大问题是随着宏变大,它们变得非常难以调试。
在我的一位同事已经离开公司开发的旧版程序中,一旦准备数据出错,我们得到的只是宏窗口,不知道错误的位置发生在。由于我想逐步逐步实现这个项目,我希望有一个很好的解决问题的机制,而不是通过一个2000行的脚本来了解问题的来源。
您对如何将此项目带到安全的海岸的建议非常受欢迎。因此,任何好的插件或第三方应用程序来监控数据并促进我的实施都可以提供帮助。
答案 0 :(得分:1)
我们在那里是一个异常值。我们正在使用OCX并以winforms连接到它。
我们有标准的c#代码,所有的东西都可调试,并且在使用无数的时间调试javascripts之后,它让每个人都非常开心。
用户使用QV选择内容,然后我们在OCX中使用所选事件并从QV中提取所选数据进行后处理,并使用动态sql update标记QV数据。
我不会毫无疑问地推荐这种方法,但是当使用QV进行数据挖掘然后处理所选数据时,它大大增加了我们的开发输出。
下一个项目我们不打算使用OCX。但是所有的商业逻辑和后期处理都在我们通过vbscript宏访问的com #cc + dll'中。
EDIT。更多细节
这是当前通过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 +@"},%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!',''))" +
""
);