2014-01-08 2 views
0

저는 회사의 전자 메일 마케팅 프로그램의 새 버전을 구현하기 시작합니다. 이전 버전의 프로그램 프로그램은 마이크로에 크게 의존했고 전자 메일 캠페인을 실행할 데이터를 준비하기 위해 약 2,000 줄이 있습니다. 그러나 나는 매크로가 그러한 과중한 작업을 수행하는 최선의 해결책이 아니며 우리가 간단한 것들을 위해 더 잘 유지하는 것이 더 좋은 read somewhere을 가지고 있습니다.데이터 개체에 액세스하기위한 매크로의 대체물

저는 QV에 상당히 익숙합니다. 저는 프로젝트를 시작하기 전에 큰 참고서를 작성하지 않고 배우면서 배우기를 좋아하는 사람입니다. 나는 C# 및 Java를 잘 사용하지만 QlikView 스크립트가 VBScript 또는 JScript에 있다는 것을 깨달았습니다. 나는 그 (것)들과 가진 아무 경험도 전혀 없지만 그들은 언뜻보기에 나에게 매우 복잡해 보이지 않는다.

QlikView에서 데이터를 처리하는 더 좋은 방법이 있는지 궁금한 점은 무엇입니까? 즉, 다른 프로그래밍 언어를 사용하거나 QV에서 제공하는 스크립트 언어를 계속 사용하도록 제안 할 수 있습니까? 내가 본 한 가지 큰 문제는 매크로가 커질수록 디버깅하기가 매우 어렵다는 것입니다.

데이터 준비 중 오류가 발생하는 즉시 회사를 떠난 동료 중 한 명이 개발 한 프로그램의 이전 버전에서는 오류가 발생한 위치에 대한 단서가없는 매크로 창이있었습니다. 일어났다. 이 프로젝트를 점진적으로 조금씩 구현하고 싶기 때문에 문제의 원인을 이해하기 위해 2000 줄짜리 스크립트를 사용하는 대신 문제 해결을위한 좋은 메커니즘을 갖고 싶습니다.

이 프로젝트를 안전한 해안으로 가져 오는 방법에 대한 제안은 매우 환영합니다. 따라서 데이터를 모니터링하고 구현을 용이하게하는 모든 훌륭한 플러그인 또는 타사 앱이 도움이 될 수 있습니다.

+0

자세한 정보를 제공 할 수 있습니까? 어쩌면 당신은 다른 부분으로로드를 분리하고 inbetween QVD 파일을 만들 수 있습니다. – smartmeta

+0

@smartmeta 예. 목록 상자에있는 현재 데이터에 매크로 대신 매크로를 사용하여 프로그램에 액세스하고 싶습니다. – Disasterkid

+0

나는 그것을 얻지 않는다. 몇 가지 샘플 데이터와로드 스크립트 부분을 추가하십시오. – smartmeta

답변

1

우리는 이상한 위치에 있습니다. 우리는 OCX를 사용하여 winforms에 연결합니다.

우리는 모든 디버깅 할 수있는 표준 C# 코드를 가지고 있으며, 끝없이 많은 양의 디버깅 자바 스크립트를 사용한 후에 모든 사람들을 매우 행복하게 만듭니다.

사용자는 QV를 사용하여 항목을 선택한 다음 OCX에서 선택한 이벤트를 사용하고 후 처리를 위해 QV에서 선택한 데이터를 가져오고 동적 SQL 업데이트로 QV 데이터를 태그 지정합니다.

이 방법을 추천하지는 않지만, QV를 사용하여 선택한 데이터를 데이터 마이닝하고 처리 할 때 개발 출력이 크게 증가했습니다.

다음 프로젝트에서는 OCX를 사용하지 않을 예정입니다. 하지만 모든 사업 논리와 후 처리는 우리가 vbscript 매크로를 통해 액세스 할 수있는 COM 표시 C# dll '에 있습니다.

EDIT.자세한 내용

이 QV

에서 문자열을 얻을 수 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(); 

통신 현재 설정입니다

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

좀 더 자세히 설명해주십시오. 그 뜻은 당신은 QlikView에서 당신이 필요로하는 함수를 호출 할 수있는 dll을 가지고 있습니다. 표 개체를 텍스트로 변환하고 텍스트 파일을 어딘가에 저장해야한다고 가정 해 보겠습니다. DLL 파일에서 특정 함수를 호출하도록 QV에 어떻게 알리십니까? 스크린 샷이나 두 가지를 통해 나를 보여줄 수 있다면 좋을 것입니다. 또는 귀하의 기능 중 하나의 작은 예를 가져 오십시오. 내 프로그램이 VBScript에 의존하기를 원하지 않습니다. 그렇게 좋은 솔루션을 가지고있는 것이 좋습니다. 좀 더 말해 줄 수 있어요? – Disasterkid

+1

몇 가지 세부 정보 추가. 이 코드는 winforms에서 axQlikMainApp – Archlight

+0

이라는 ocx와 함께 사용되므로 QV 파일 이외의 다른 곳에있는 DLL 파일이며 DV 파일에서 이벤트가 트리거되면이 파일이 통지되고 필요한 작업을 수행합니까? – Disasterkid

관련 문제