Альтернативы макросам для доступа к объектам данных

Я собираюсь начать внедрение новой версии программы электронного маркетинга для моей компании. Старая версия программы сильно зависела от микропроцессоров и имела около 2000 строк для подготовки данных для запуска кампании по электронной почте. Но я где-то читал, что макросы не лучшее решение для выполнения таких тяжелых задач, и лучше оставить их для простых вещей.

Я новичок в QV, и я из тех людей, которые любят учиться по ходу дела, а не заполнять большой справочник, прежде чем начать проект. Я хорошо разбираюсь в C# и Java, но я понял, что сценарии QlikView написаны либо на VBScript, либо на JScript. У меня нет опыта работы с ними, но на первый взгляд они не кажутся мне очень сложными.

Мне было интересно, есть ли лучший способ обработки данных в QlikView? Это означает, что я могу использовать другой язык программирования или вы предлагаете мне придерживаться языков сценариев, предоставляемых QV? Потому что одна большая проблема, которую я видел, заключается в том, что по мере того, как макросы становятся больше, их становится очень трудно отлаживать.

В старой версии нашей программы, разработанной одним из моих коллег, который сейчас уволился из компании, как только возникала ошибка в подготовке данных, все, что мы получали, было окном макросов без понятия, где произошла ошибка. Поскольку я хотел бы реализовать этот проект постепенно и понемногу, я хотел бы иметь хороший механизм для устранения неполадок, а не копаться в сценарии из 2000 строк, чтобы понять, откуда возникла проблема.

Ваши предложения о том, как довести этот проект до безопасного берега, очень приветствуются. Таким образом, могут помочь любые хорошие плагины или сторонние приложения для мониторинга данных и облегчения моей реализации.


person disasterkid    schedule 08.01.2014    source источник
comment
Можете ли вы дать больше информации? Возможно, вы можете разделить загрузку на разные части и создать между ними файлы QVD.   -  person smartmeta    schedule 08.01.2014
comment
@smartmeta Я хотел бы получить доступ к текущим данным в списке в моей программе, а не позволять макросу делать это за меня.   -  person disasterkid    schedule 08.01.2014
comment
Я не понимаю. Пожалуйста, добавьте некоторые образцы данных и части вашего скрипта загрузки   -  person smartmeta    schedule 08.01.2014


Ответы (1)


Мы там аутсайдеры. Мы используем OCX и подключаемся к нему в winforms.

Затем у нас есть стандартный код C # со всем, что можно отлаживать, и это делает всех здесь очень счастливыми после бесконечного количества времени, потраченного на отладку javascripts.

Пользователи используют QV для выбора материала, а затем мы используем выбранное событие в OCX и извлекаем выбранные данные из QV для постобработки и помечаем данные QV динамическим обновлением sql.

Я не обязательно рекомендую этот метод, но он значительно увеличил производительность разработки для нас при использовании QV для интеллектуального анализа данных и последующей обработки выбранных данных.

В следующем проекте мы не будем использовать OCX. Но вся бизнес-логика и постобработка находятся в com-видимой C# dll', к которой мы обращаемся через макрос vbscript.

РЕДАКТИРОВАТЬ. Подробнее

Это текущая настройка связи с документом через 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!',''))" +
""
);
person Archlight    schedule 13.01.2014
comment
не могли бы вы рассказать об этом немного подробнее. Значит ли это, что у вас где-то есть dll, из которой вы вызываете нужные вам функции из QlikView. Допустим, вам нужно преобразовать табличный объект в текст и где-нибудь сохранить этот текстовый файл. Как указать QV вызывать определенную функцию из DLL-файла. Было бы здорово, если бы вы могли показать мне на одном или двух снимках экрана, как это делается. Или приведите небольшой пример одной из ваших функций. Я не хочу, чтобы моя программа полагалась на VBScript. Так что хорошо, что у вас есть такое рабочее решение. Можете ли вы рассказать мне немного больше об этом? - person disasterkid; 13.01.2014
comment
Добавил несколько деталей. Код С# в winforms с ocx под названием axQlikMainApp - person Archlight; 13.01.2014
comment
так что у вас есть файл DLL, который находится где-то помимо файла QV, и когда какое-либо событие вызывается в файле DV, этот файл уведомляет и выполняет необходимые действия? - person disasterkid; 14.01.2014
comment
именно так мы собираемся сделать следующий проект, но примеры, которые я вам показал, относятся к winforms/OCX. - person Archlight; 15.01.2014