Получение списка отображаемых столбцов в DW
Как вы получаете список столбцов, которые можно увидеть в dw? Когда я перебираю столбцы, используя dwobject.object.datawindow.column.count
Я получаю все столбцы в sql. Есть хотя бы способ выяснить, какой из них не отображается?
4 ответа
Мне удалось выяснить это самостоятельно:
Integer li_col_idx, &
li_pos
String ls_objects, &
ls_contorl, &
ls_columns[], &
ls_type, &
ls_visible
li_col_idx = 1
ls_objects = dw_tab.object.datawindow.objects // Forgot to add this row
DO while ls_objects <> ""
li_pos = Pos(ls_objects, "~t")
IF li_pos > 0 THEN
ls_control = left(ls_objects, li_pos - 1)
ls_objects = mid(ls_objects, li_pos + 1)
ELSE
ls_control = ls_objects
ls_objects = ""
END IF
ls_type = dw_tab.describe(ls_control + ".type")
ls_visible = dw_tab.describe(ls_control + ".visible")
IF ls_type = "column" AND ls_visible = "1" THEN
ls_columns[li_col_idx] = ls_control
li_col_idx++
END IF
LOOP
Long li_Loop
String ls_ColName, lsa_ColNames[]
FOR li_Loop = 1 TO dwobject.object.datawindow.column.count
ls_ColName = dwobject.Describe("#" + String( ll_Loop ) + ".Name")
IF Long( dwobject.Describe( ls_ColName + ".Visible") ) > 0 THEN
lsa_ColNames[ UpperBound(lsa_ColNames[]) + 1] = ls_ColName
END IF
next
// Массив lsa_ColNames[] содержит имена всех видимых столбцов.
Я написал следующую функцию для правильной оценки атрибута объекта (столбца, вычисления, текста и т. Д.) В объекте данных.
Пример: следующий код вернет "1", если столбец location_id в данный момент видим, или "0", если он не виден в данный момент. Не имеет значения, содержит ли видимое выражение сложное выражение или нет.
gfs_evaluate_dw_attribute ( dw_mydatawindow, 1, 'location_id', 'visible' )
global function string gfs_evaluate_dw_attribute (datawindow adw_data, long al_row, string as_columname, string as_attribute);
/*
FUNCTION: gfs_evaluate_dw_attribute
ARGUMENT: datawindow adw_data
long al_row - row number, 0 or greater
string as_columname - dw column or object with attribute to evaluate. This can also be an object on the DW, ie. "DataWindow", "DataWindow.Print", "DataWindow.Trailer.<group #>"
string as_attribute - column or object attrbiute to evaluate
RETURN: string
DESCRIPTION: returns the attribute setting whether or not there is an expression
HISTORY: Chis Daugherty 01/14/2014 INITIAL VERSION
*/
//////////////////////////////////////////////////////////////////////////////
string ls_expression, ls_result, ls_evaluate , ls_type
long ll_tab_pos, ll_Pos_quote
ls_expression = adw_data.Describe ( as_columname + "." + as_attribute )
if ls_expression = '!' or isnull(ls_expression) then return ''
IF Left( ls_expression, 1 ) = "~"" AND Right(ls_expression, 1 ) = "~"" THEN
// PB quirk will SOMETIMES return an expression in quotes!
ls_expression= Mid ( ls_expression, 2 , Len ( ls_expression ) - 2 )
END IF
ll_tab_pos = Pos( ls_expression, "~t" )
ls_type = adw_data.Describe( as_columname + ".Type" )
IF ls_type = 'compute' THEN
IF ll_tab_pos > 0 AND lower(as_attribute) <> 'expression' THEN
choose case lower(trim(Mid( ls_expression, 1, ll_tab_pos ),true))
case '1','0'
ls_expression = Mid( ls_expression, ll_tab_pos + 1 )
case else
end choose
END IF
ll_Pos_quote = Pos ( upper(ls_expression) , "'" )
do while ll_Pos_quote > 0
ls_expression = Replace( ls_expression, ll_Pos_quote , 0, "~~" ) //insert tilda!
ll_Pos_quote += 2 //move past quote and tilda
ll_Pos_quote = Pos ( upper(ls_expression) , "'", ll_Pos_quote )
loop
ELSEIF ll_tab_pos > 0 THEN // conditional value
ls_expression = Mid( ls_expression, ll_tab_pos + 1 )
//check for single quote that gets in way of quote below
ll_Pos_quote = Pos ( upper(ls_expression) , "'" )
do while ll_Pos_quote > 0
ls_expression = Replace( ls_expression, ll_Pos_quote , 0, "~~" ) //insert tilda!
ll_Pos_quote += 2 //move past quote and tilda
ll_Pos_quote = Pos ( upper(ls_expression) , "'", ll_Pos_quote )
loop
else
//NO expression just the value was set
ls_result = ls_expression
return ls_result
END IF
if isnull(al_row) or al_row < 0 then al_row = 0
ls_evaluate = "Evaluate('" + ls_expression + "', " + string(al_row) +") "
ls_result = adw_data.describe(ls_evaluate)
return ls_result
//end of function
Я использую это в течение многих лет в той или иной форме. Наслаждайтесь! Крис Догерти
В недавнем коде я улучшил (надеюсь) вышеприведенное, посмотрев на Edit Style. Мне нужно было найти не только активные / отображаемые столбцы, но и сортировку можно установить со скрытым столбцом (без визуального контроля (VC)), и на него нельзя указывать (см. Темы о "индикаторах сортировки столбцов").
ls_control = idw.describe(ls_next_column + ".type")
if f_IsEmpty(ls_control) then continue
choose case ls_control
case 'column'
// EDIT STYLE; dddw, ddlb, edit, mask...
ls_control = idw.Describe(ls_next_column + ".Edit.Style")
if f_IsEmpty(ls_control) then continue
choose case ls_control
case '?', '!'
continue
case else
. . .
Таким образом, стиль редактирования - пустой,? или же! когда столбец не имеет ВК. Как только вы узнаете, что это VC, ТОГДА проверьте, является ли он видимым или что-то еще нужно. Для моего кода я держу список только VC, затем проверяю, все ли в порядке / не указывать...