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

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

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

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

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

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

1 ответ

Решение

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

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

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

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

В следующем проекте мы не собираемся использовать OCX. Но вся логика бизнеса и постобработка находятся в видимом комманде 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!',''))" +
""
);
Другие вопросы по тегам