dwで表示される列の一覧を取得するにはどうすればよいですか? dwobject.object.datawindow.column.count
を使用して列をループすると、SQLのすべての列が取得されます。それらのうちのどれが表示されていないか把握する方法はありますか?私は自分でそれを見つけることができたDWで表示される列のリストを取得する
答えて
:
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は、[]は、すべての可視列名が含まれています。
Visible式に式がある場合(Long()関数には有効なパラメーターがない)、**クラッシュ**します。また、特定の列のUIコンポーネントがないとクラッシュすることがあります( "DataWindow.Column"はデータセットに逆らっていますが、特定の列のUI要素が削除されたり作成されなかった場合、Visibleは?または!、もう一度、Long()のための悪いparm)。ガイの解答に対する他のコメントが適用されます。 – Terry
最近のコードでは、私は(上手に)上の編集スタイルを見て改善しました。アクティブ/表示列だけでなく、ソートが非表示の列(ビジュアルコントロール(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
. . .
THUS編集スタイルは空ですか?または! 列にVCがない場合。それがVCであることがわかったら、それが可視かどうかを確認します。私のコードでは、私はVCの唯一のリストを保持し、それがOKかどうかをチェックしてください...
私はオブジェクト(列、計算、テキストなどの属性を正しく評価するために次の関数を書いた)をデータオブジェクトに格納します。
例:次のコードは、location_id列が現在表示されている場合は '1'を返し、現在表示されていない場合は '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
私は1つの形式で何年も使ってきました。楽しい! Chris Daugherty
- 1. LINQでリストに1回表示される要素の数を取得する
- 2. DW CS5.5ライブビューでは表示されますが、ブラウザプレビューでは表示されません。
- 3. 表示される前にキーボードの高さを取得する
- 4. タスクリストに表示される順序でタスクを取得する
- 5. AlertDialogリストのカスタムオブジェクト。表示文字列を取得する方法と実際の値を取得する方法?
- 6. リストに表示されていないアイテムを取得する方法
- 7. ループを使用してリストに表示されている番号を取得する(feat配列)
- 8. F#コンパイラサービス:スコープ内に表示される名前のリストを取得
- 9. JListに表示される列と行の数を取得する方法は?
- 10. クリップされた表示列の幅を取得
- 11. PLCameraView 3.0で表示されているものを取得
- 12. ネストされたリスト - 親リストのリスト項目を取得する
- 13. 配列に格納されたリストを取得する
- 14. PHPで整数で表示される総数を取得
- 15. 遅延オブジェクトが取得されるまで表示さ
- 16. IGListKit:現在表示されているセルインデックスを取得する
- 17. ui-gridで項目リストの上部に表示される要素のインデックスを取得する
- 18. bashスクリプトでは、文字列の表示幅を取得する
- 19. Instagram APIでデータを取得中にエラーが表示される
- 20. DWで構築されたサイトはDWなしで作業できますか?
- 21. Edgeに表示されるログインのリスト
- 22. XMLが取得された後にProgressDialogが表示される
- 23. 角度uiグリッドで行を選択するときに表示される列のみを取得する
- 24. openFileOutputはデータを取得しますが、リストは表示されません
- 25. Linux:表示されているすべてのウィンドウのリストを取得する方法
- 26. toast.maketextに表示されたファイル名を取得する方法
- 27. Solrによって強調表示された用語のリストを取得
- 28. XMLファイルから取り出され、xHTMLで表示されるネストされたリストを作成する質問
- 29. eclipseの出力で表示されるテキストファイルを取得するには?
- 30. 言語と入力の設定の下に表示される言語のリストを取得する方法
良いコードですが、いくつかの潜在的な短所があります。 Visible属性の式の可能性を考慮していません。一部の開発者は、UI列を削除する恐れがあります(必要はなく、データセットの列で取得/設定することができます)。これがアプリで実行されている場合、「可視性」の基準はより複雑になる必要があります。要件に応じて、計算を考慮する必要があるかもしれません。リストに使用したDescribe()は含まれていませんが、正しいトラックがあると思われます。 Out of space – Terry
他のオブジェクトの背後にコントロールが隠されているデータウィンドウも見てきました。そのことも考慮に入れる必要があります。 Terryと私が言及したケースを扱う最も簡単な方法は、タグに属性を追加することです。隠し=はい; –
良い点、ご意見ありがとうございます。 – Guy