RobWunderlich / Qlikview-Components

A library for common Qlikview Scripting tasks
197 stars 99 forks source link

Error in Qvc_Incremental_Reload if 2nd parameter contains "." (dot) #59

Closed pljluca closed 7 years ago

pljluca commented 7 years ago

Hi, in Qvc_Incremental_Reload.qvs I found an issue if I call Qvc.IncrementalSetup with 2nd parameter T_FEEDBACK_ELEMENT.FEEDBACK_ELEMENT_ID.

SET vs_ForceFullReload = 0;
SET Qvc.Loader.v.StoreMaxModFieldValue = -1;
SET Qvc.Loader.v.Database = ORACLE;
SET Qvc.Loader.v.ModField.Type = 'Revision';

CALL Qvc.IncrementalSetup ('Feedback_Element', 'T_FEEDBACK_ELEMENT.FEEDBACK_ELEMENT_ID', 'T_FEEDBACK_ELEMENT.FEEDBACK_ELEMENT_ID', $(vs_ForceFullReload));

[$(Qvc.Loader.v.Tablename)]:
LOAD
    FEEDBACK_ELEMENT_ID as T_FEEDBACK_ELEMENT.FEEDBACK_ELEMENT_ID
    ,FEEDBACK_ID as [Feedback ID]
    ,FEEDBACK_FILENAME as [Feedback Filename]
    ,FEEDBACK_ELEMENT_ID as [Feedback Element Id]
;
SQL $(App.Script.Query.ToExecute)
and $(Qvc.Loader.v.IncrementalExpression)
;

CALL Qvc.IncrementalStore;

I receive this error

Field not found - <FEEDBACK_ELEMENT_ID>
JOIN ([Feedback_Element]) 
    LOAD max([FEEDBACK_ELEMENT_ID]) as Qvc.MaxModFieldValue 
    RESIDENT [Feedback_Element]

I looked in sub and I found at row 96

95: // The SQL modfield may be a qualified name like "T.LastUpdate". Remove the qualifier to get the QVD fieldname.
96: LET _vQvdModField = subfield('$(_vSqlModField)', '.', -1);  
97: SET _Qvc.Loader.v.TableModificationField = '$(_vQvdModField)';  // Save as private global var

I think the solution could be to replace row 97 with this 97: SET _Qvc.Loader.v.TableModificationField = '$(_vSqlModField)'; // Save as private global var

Thanks a lot.

Best regards Luca Jonathan Panetta

PS: Happy new year

RobWunderlich commented 7 years ago

The code assumes if there is a "." in the name, it an SQL qualifier that will not be part of the QVD fieldname. This is not true in your case. However, your proposed solution of using the _vSqlModfield as is will break existing code.

How about if I provide a config variable that indicates to use _vSqlModfield unchanged?

pljluca commented 7 years ago

Hi Rob, for me it's ok to set a new variable to indicates to use _vSqlModfield unchanged.

Thanks a lot. Luca

RobWunderlich commented 7 years ago

Added config variable "Qvc.Loader.v.QualifiedModfield".